begin tran A

update Versao
set PatchVersao = 2
where versao = 3
  and subversao = 2
GO


Alter FUNCTION [dbo].[Calcular_ICM]                                              
(@Empresa numeric(2),                                                                                                                                                                                      
 @CodProduto numeric(7),                                                                                                                                                                                      
 @CodTributacao  char(5),                                                                                                                                                                                      
 @CodEntidade char(7),                                                                                                                                                                                      
 @CodOperacao numeric(5),                                                                                                                                                                                      
 @ValorTotal  decimal(11,2),                                                                                                                                                                                      
 @AcrescimoBaseICM decimal(11,2),                                                                                                                                                                                      
 @AcrescimoBaseSubTrib decimal(11,2),                                                                                                                                                                                  
 @RedBaseSubTrib decimal(5,2),                        
 @AliqIPI decimal(4,2),                                                                                                                                                                                      
 @CodClassFiscal varchar(15),                                                                                                                                                                                      
 @FlagEntrada numeric(1),                                                                                                                                                                                          
 @AcrescimoRedVenda decimal(11,2),                                                                                                                                                                                      
 @CodListaPreco numeric(7),                                                                                                                                                                                      
 @AliqICMFixo decimal(4,2),                                                                                                                                                                
 @CodSubTributaria integer,                                                                             
 -- Renato - 278440                                                                                                                       
 --@PerAcrescimoRedCusto decimal(15,8)                                                                          
 @PerRedDespesa decimal(15,8),                                               
 --Gabriella - 333391                                              
 @AcrescimoBaseIPI decimal(11,2)                                              
)                                                                                                                                                                                        
Returns @Campos Table       
      (AliqICM decimal(4,2),            
       ValorBaseICM decimal (11,2),                             
       ValorICM decimal (11,2),                            
       ValorIsentoICM decimal(11,2),                           
       ValorOutrasICM decimal(11,2),                                 
       ValorBaseSubTrib decimal(11,2),                                                              
       PerReducaoICM decimal(5,2),                                                                
       PerRedBaseSubTrib decimal(5,2),                        
       ValorSubTrib decimal (11,2),                                                                                                      
       ValorBaseSubTribCarga decimal(11,2),                                                                                                                
       ValorSubTribCarga decimal(11,2),                                                                                                                             
       FatorRedCusto decimal (15,8),                                                                                                                    
       FatorRedVenda decimal (7,4),                                                                                                                                        
       NumCFOP char(10),                                                                                                                                        
       AliqPISCOFINS decimal (4,2),                                                                          
       -- Renato - Chamado 272165                                                                          
       ValorBasePisCofins decimal (11,2),                                                                          
       AliqPis decimal (4,2),                                                                  
       AliqCofins decimal (4,2),                                                                  
       NumCstICM varchar(3),                                                                  
       NumCstIPI varchar(2),                                                                  
       NumCstPisCofins varchar(2),                                                                  
       NumCsosn varchar(3),                                                            
       -- Renato - 297792                                                            
       NatReceitaPisCofins int,                                              
       -- Renato - 332318                                              
       NatBaseCalcCredito smallint,                                              
       --Ronaldo 343696                                  
       IndNaturezaFrete smallint,                                  
                                       
       --Gabriella - 333391                                                     
       ValorBaseIPI decimal (11,2),                                                                                                                                                                                                                           
  
       ValorIsentoIPI decimal(11,2),                                                                                                                                                                                      
       ValorOutrasIPI decimal(11,2),                              
         --Renato - 360358                              
       AliqICMSST decimal(5,2),                              
       PercMvaICMSST decimal(5,2),                              
         --Renato - 361650                            
       AliqComplICM Decimal(5,2),                            
       AliqComplPIS Decimal(5,2),                            
       AliqComplCOFINS Decimal(5,2))                                                              
as                                          
                                                                                                   
begin                                                                                                                       
/*********************                                                                                             
   VERSÃO 3.03      
*********************/                                                                                                             
                                                                                    
declare @CodEstadoLeitura char(2)                                               
declare @AliqICM decimal(4,2)                       
declare @ValorBaseICM decimal (11,2)                                       
declare @ValorICM decimal (11,2)                                                                                                                                    
declare @ValorIsentoICM decimal(11,2)                                                           
declare @ValorOutrasICM decimal(11,2)                                                                    
declare @PerReducaoICM decimal(5,2)                                              
declare @ValorBaseSubTrib decimal(11,2)                                                                    
declare @ValorSubTrib decimal (11,2)                                                                                                                                                   
declare @ValorBaseSubTribCarga decimal(11,2)                                                                                                                                                           
declare @ValorSubTribCarga decimal(11,2)                                                                                                                                                       
declare @FatorRedCusto decimal (15,8)                                                                                                                                                      
declare @FatorRedVenda decimal (7,4)                                                                                                                                                  
declare @NumCFOP char(10)                                                                                                           
declare @AliqPISCOFINS decimal(4,2)                                                                
declare @NumCstICM varchar(3)                                                                  
declare @NumCstIPI varchar(2)                                                                  
declare @NumCstPisCofins varchar(2)                                                                  
declare @NumCsosn varchar(3)                                                             
--Renato - 297792                                                            
declare @NatReceitaPisCofins Int                                                
--Renato - 332318                                                               
declare @NatBaseCalcCredito SmallInt                                   
--Ronaldo 343696                                  
Declare @OprIndNaturezaFrete SmallInt                                              
                                                                                                                                                                           
declare @AEmpMestre char(7)                                                                                                                                                               
declare @VAuxValorIPI decimal(11,2)                                                                                                                                                                                      
declare @AuxCodTributacaoSubTrib Char(5)             
declare @AuxFlagSubTributaria numeric(1)                                                                                                                                                     
declare @AuxEntidade char(7)                                                                                                                                                                
declare @ValorBaseSubTribDestino decimal(11,2)                                                                                                                             
                                             
declare @CalcBaseSubTrib decimal(11,2)                             
declare @CalcValorSubTrib decimal (11,2)                                           
declare @CalcBaseSubTribDestino decimal(11,2)                                                                           
                                                                                        
declare @ParTipoReducaoICM numeric(1)                                                                                   
declare @ParAliqCPMF decimal(4,2)                                                                                                                                
declare @ParTipoRegimeTributario smallint                                                                  
declare @ParAliqICMSimples decimal(4,2)                                                                  
                                                                  
declare @EntTipoPessoa char(1)                                                                                                                                                                
declare @CidCodEstado char(2)                                                                                                           
declare @EstAliqContrib decimal(4,2)                                                             
declare @EstFlagConvSub numeric(1)                                                                                                                                            
declare @EstAliqInterna decimal(4,2)                                                                                                                                    
                                                                                
declare @CidEmpCodEstado char(2)                                                                                                                                                                              
declare @TriAliqICM decimal(4,2)                                                                                 
declare @TriFlagIsentoProdutor numeric(1)                                                                                                                                                                            
declare @TriFlagSubTributaria numeric(1)                                                                                                                                                                                      
declare @TriMargemLucroSubst decimal(5,2)                                                                                                                                        
--Gabriella - 302581                                              
--declare @TriPerReducaoICM decimal(4,2)                                              
declare @TriPerReducaoICM decimal(6,4)                                              
declare @TriPerRedMargem decimal(4,2)                                                                                                                       
declare @TriTipoCFOP numeric(2)                                                                                                                                                            
declare @TriCodTributacaoSubTrib char(5)                                                                                  
declare @TriTipoValorNaoTributado numeric(1)                                                                                                                                            
declare @TriPerReducaoSubTrib numeric(6,2)                                                                          
--Rafael chamado 272635                                                                          
declare @TriAliqInternaSubTrib numeric(5,2)            
declare @TriNumCST_ICM smallint                                           
declare @TriNumCST_IPI smallint                                                                  
declare @TriNumCSOSN smallint                                 
                                                                  
declare @ClaFlagSubTributaria numeric(1)                                                                
declare @ClaAliqPISCOFINS decimal(4, 2)                                                                              
declare @GruFlagSubTributaria numeric(1)                           
                                                                                                
declare @LisPercAcrescimoAdm1 decimal(4,2)                                                         
declare @LisPercAcrescimoAdm2 decimal(4,2)                                                                                     
declare @LisPercAcrescimoAdm3 decimal(4,2)                                                                                                                             
                                                                                                                                                        
declare @SubAliquotaInterna decimal(5, 2)                                                                              
declare @SubMargemLucro decimal(5, 2)                                                                                    
declare @SubPercReducao decimal(5, 2)                                                                                                                                                                
declare @SubIndiceReducao decimal(9, 6)                                                                                                                                              
declare @SubFlagAbaterICM smallint                                                                                  
declare @SubFlagSomaIPI smallint                                                                                                                                                          
                                                 
declare @OprTipoICM numeric(1)                                                                                                                           
declare @OprTipoIPI numeric(1)                                                                                  
declare @OprAliqICMFixo decimal(4,2)                                                                                                 
declare @OprPerRedICM decimal(4,2)                                                                                                                                         
declare @OprPerRedMargem decimal(4,2)                                                                                           
declare @OprCFOP1_Normal char(10)                                                                                                                                 
declare @OprCFOP1_Normal_NCFora char(10)                                                                                                          
declare @OprCFOP2_Industrializado char(10)                                                                                                                                                                                      
declare @OprCFOP2_Industrializado_NCFora char(10)                              
declare @OprCFOP3_SubRevenda char(10)                                                                                                                                
declare @OprCFOP3_SubRevenda_NC char(10)                                                                                                                                        
declare @OprCFOP4_SubRevendaML char(10)                                                                                                                                     
declare @OprCFOP4_SubRevendaML_NC char(10)                                                                                  
declare @OprCFOP5_SubFabricacao char(10)                                                                                                                                           
declare @OprCFOP5_SubFabricacao_NC char(10)                                                                                
declare @OprCFOP6_SubFabricacaoML char(10)                                                                                                                  
declare @OprCFOP6_SubFabricacaoML_NC char(10)                                                                 
declare @OprCFOP7_Importado char(10)                           
declare @OprCFOP_Servico    char(10)                                                    
declare @OprCFOP_Servico_NCFora char(10)                                                                                                   declare @OprCFOP9_Petroleo varchar(10)                                                                             
  
    
                       
declare @OprCFOP9_Petroleo_NC varchar(10)                                                                                                                                                               
declare @OprFlagCalcPIS_COFINS numeric(1)                                                                                                                                                                                      
declare @OprFlagDefaultLancamentoOutras numeric(1)                                                                            
declare @OprFlagSubTribIPI numeric(5)                                                                                                                   
declare @OprTipoMovimento smallint                                                                                                                                                                          
declare @OprTipoSubTributaria smallint                                                              
--Eder - Chamado 262460                                                                                  
declare @OprTipoSubTributariaCarga smallint                                                                                       
--Eder - 303720                                                              
declare @OprFlagIPISobrePisCofins smallint                                               
--Gabriella - 256424                                              
declare @OprFlagIPISobreBaseICM smallint                                                               
declare @ProOrigem smallint                                                                  
--MARCELO - CHAMADO 192283                                          
declare @RegiaoDestino varchar(10)                                                                                                                                                                                      
declare @RegiaoDestinoLeitura varchar(10)                                                                                                                                                                                  
--Eder - Chamado 243637                                                                                                 
declare @RegiaoOrigem varchar(10)                                                                                   
--Eder - Chamado 243557                                                                       
declare @EmpId varchar(15)                                                   
                                                                                              
--JALDO - CHAMADO 248899                            
--JALDO - CHAMADO 243556                                                                                                  
--declare @TipoConsideraIPICalculoICM int                                                                               
                                                         
--Eder - 303720                                                                          
declare @AcrDespesasPisCOFINS numeric(11,2)                                                           
-- Renato - Chamado 272165                                                                            
declare @ValorBasePisCofins numeric(11,2)                                                                          
declare @AliqPis numeric(4,2)                                                                       
declare @AliqCofins numeric(4,2)                                                                         
-- Renato - 278440                                                              
declare @FlagDeduzirDespNaoInclNaMargem SmallInt                                                                          
-- Renato - 290579                                                                        
declare @PercSubTribCusto decimal(5,2)                              
declare @PercICMCusto decimal(5,2)                                                          
--Ronaldo Chamado 313933                            
declare @RegTribPercIvaSimplicado decimal(5,2)                                                                                    
--Ronaldo Chamado 317536                                              
declare @TriFlagPrevalecerAliqIcm SmallInt                                              
--Gabriella - 333391                                                   
declare @ValorBaseIPI decimal (11,2)                                                  
declare @ValorIsentoIPI decimal(11,2)                                                                                                                                                         
declare @ValorOutrasIPI decimal(11,2)                                              
declare @TriTipoValorNaoTributadoIPI numeric(1)                                               
-- Renato - 341779                                                           
declare @OprFlagICMSSobreServicos SmallInt                                
                            
--Renato - 361650                            
declare @TriAliqComplICM Decimal(5,2)                            
declare @AliqComplPIS Decimal(5,2)                            
declare @AliqComplCOFINS Decimal(5,2)                        
--Ronaldo chamado 372149                      
Declare @FlagConsiderarSomentePercRedST int                      
                                       
--389093    
declare @ClaMVABaseEntrada decimal (5,2)    
declare @MVA decimal(18,8)    
  
--408846  
declare @TipoMargemLucro smallint  
declare @LisPercDesconto1 decimal(4,2)  
declare @LisPercDesconto2 decimal(4,2)  
declare @LisPercDesconto3 decimal(4,2)  
declare @LisPercDesconto4 decimal(4,2)  
declare @LisPercDesconto5 decimal(4,2)  
declare @LisPercAcrescimo1 decimal(4,2)  
declare @LisPercAcrescimo2 decimal(4,2)  
declare @LisPercAcrescimo3 decimal(4,2)  
declare @LisValorCustoBruto decimal (13,4)  
declare @LisValorCustoLiquido decimal (13,4)  
declare @ValorCustoCalc decimal (13,4)  
declare @ValorICMCustoCalc decimal (13,2) 
declare @TipoMargemLiquida smallint 
  
    
                                                                                               
set @VAuxValorIPI = 0                                                       
set @AliqICM = 0                                                                                                                                      
set @ValorBaseICM = 0                                                                                   
set @ValorICM = 0                                                                                                                                      
set @ValorIsentoICM = 0                                                                                                   
set @ValorOutrasICM = 0                     
set @ValorBaseSubTrib = 0                                                                                                 
set @ValorSubTrib = 0                                           
set @ValorBaseSubTribCarga = 0                                                              
set @ValorSubTribCarga = 0                                                                 
set @FatorRedCusto = 0                                                               
set @FatorRedVenda = 0                                                                                                           
set @NumCFOP = ''                                                                                                           
Set @AliqPISCOFINS = 0                                                                            
                                                                     
--Renato - Chamado 272165                                                                                           
set @ValorBasePisCofins = 0                                                                          
set @AliqPis = 0                                                                          
set @AliqCofins = 0                                                                               
                                                     
set @AEmpMestre = 'M' + Replicate('0',(6 - Len(@Empresa))) + Cast(@Empresa as varchar)                                              
                                              
--Gabriella - 333391                                                
set @ValorBaseIPI = 0                                                                                                           
set @ValorIsentoIPI = 0                                              
set @ValorOutrasIPI = 0                                              
                                          
--JALDO - CHAMADO 353913                                    
set @CalcValorSubTrib = 0                                    
set @CalcBaseSubTrib = 0                                                                 
                                
--Eder - Chamado 243557                                                                                              
Select @EmpId = Id From Empresas                                                                                       
Where Codigo = @Empresa                                                                                              
                                      
select  
  @ParTipoReducaoICM=TipoReducaoICM,  
  @ParAliqCPMF=AliqCPMF,  
  --Eder - Chamado 295853  
  @ParTipoRegimeTributario=TipoRegimeTributario,  
  @ParAliqICMSimples=AliqICMSimples,  
  --408846  
  @TipoMargemLucro = TipoMargemLucro  
From ParamControle  
where Empresa=@Empresa  
                                                                                                        
If (@ParTipoReducaoICM is null)                                                                                                                                                                                      
   Set @ParTipoReducaoICM = 0                                                  
If (@ParAliqCPMF is null)                                                                                        
   Set @ParAliqCPMF = 0                                    
If (@ParTipoRegimeTributario is null)                                                                  
   Set @ParTipoRegimeTributario = 0                                                                   
If (@ParAliqICMSImples = 0)                                                                  
   Set @ParAliqICMSImples = 0  
if (@TipoMargemLucro is null)     
  Set @TipoMargemLucro = 0  
  
--Renato - 278440                                                                         
Select 
  @FlagDeduzirDespNaoInclNaMargem = FlagDeduzirDespNaoInclNaMargem,
  --408846
  @TipoMargemLiquida = TipoMargemLiquida
From ConfiguracaoSistema                                                                                                                                                       
                                                    
                                                                                                                     
select @CidEmpCodEstado=Cidades.CodEstado,                                                                                          
       --Eder - Chamado 243637                                                                                          
  @RegiaoOrigem=Est.RegiaoDestino                                                                         
  from Entidades                                                                     
  Left Join Cidades on Cidades.Codigo = Entidades.CodCidade                                                                                        
  Left Join Estados Est on Est.CodOrigem = Cidades.CodEstado                   
                    and Est.CodDestino = Cidades.CodEstado                                                                                          
 where Entidades.Codigo = @AEmpMestre                                                  
                                                                                                                                           
                                                                                  
select @EntTipoPessoa=TipoPessoa,                                                                                                        
       @CidCodEstado=Cidades.CodEstado,                                                                                 
       @CodEstadoLeitura=Cidades.CodEstado                                                                  
       --JALDO - CHAMADO 243556                                                                
       --JALDO - CHAMADO 243556                                                                                              
       --@TipoConsideraIPICalculoICM=TipoConsideraIPICalculoICM                                                                                                  
       from Entidades                                                                                  
       Left Join Cidades on Cidades.Codigo = Entidades.CodCidade                                                    
       where Entidades.Codigo = @CodEntidade                                                                                                                         
                                                                                   
If isnull((Select FlagICMOrigem From Operacoes Where Codigo = @CodOperacao),0) = 1                                       
   Set @CodEstadoLeitura=@CidEmpCodEstado                                                                                                                                                           
                                                                                                      
                                                                                                                           
--MARCELO - CHAMADO 192283            
select                                                                                                                     
  @RegiaoDestino = RegiaoDestino                                                                                               
from Estados                                                                                                            
where CodOrigem = @CidEmpCodEstado                                                                                                                    
  and CodDestino = @CidCodEstado                                                            
                                                                                           
if (@CodEstadoLeitura <> @CidEmpCodEstado)                                                                                                        
begin                                                                                                                    
  select                           
    @RegiaoDestinoLeitura = RegiaoDestino                                                                                                                    
  from Estados                                                                                                                    
  where CodOrigem = @CodEstadoLeitura                                                                                          
    and CodDestino = @CidCodEstado                                                                                                                    
  -- Eder - Chamado 269443                                                                                
  If @RegiaoDestinoLeitura is null                                                                                
     set @RegiaoDestinoLeitura = @RegiaoDestino                           
end                                                                                  
else                                                                                                                    
begin                                                                                                                    
  set @RegiaoDestinoLeitura = @RegiaoDestino                                                   
end                                                                                                                    
                                             
                                                                                                                                                                       
select                                                                                                       
    --MARCELO - CHAMADO 116008                                                                                                               
--    @EstAliqContrib=EstSai.AliqContrib,                                                                                                                                                                       
    @EstAliqContrib = Case When @FlagEntrada = 1 and EstSai.AliqContribCompra > 0 and Oper.TipoMovimento <> 1                                                      
                           then EstSai.AliqContribCompra --ENTRADA POR COMPRA                                                                                                                                                                
                           When @FlagEntrada = 0 and EstSai.AliqContribCompra > 0 and Oper.TipoMovimento = 1                                                                                                         
                           then EstSai.AliqContribCompra --SAIDA POR DEVOLUCAO                                                                   
              Else EstSai.AliqContrib End,                                              
    @EstFlagConvSub=EstSai.FlagConvSub,                                                                                                                
-- Isaac - Chamado 191748                            
--  @EstAliqInterna= Case When @FlagEntrada = 0 then EstSai.AliqInterna Else EstEnt.AliqInterna End                                                                 
-- Eder - Chamado 219012                                                                                                    
--  @EstAliqInterna=   Case When @FlagEntrada = 0 then EstSai.AliqInterna                                                                                                                        
--  When @FlagEntrada = 1 and Oper.tipomovimento = 1 then EstSai.AliqInterna                                                                                      
--                     Else EstEnt.AliqInterna End                                                                                                                        
    @EstAliqInterna=  Case When @FlagEntrada = 0 and Oper.TipoMovimento <> 1 then EstSai.AliqInterna                                                                                                                        
                            When @FlagEntrada = 1 and Oper.tipomovimento = 1 then EstSai.AliqInterna                                                         
                       Else EstEnt.AliqInterna End                                                                    
from Entidades                                                                   
  Left Join Cidades on Cidades.Codigo = Entidades.CodCidade                                                                                              
  Left Join Estados EstSai on EstSai.CodOrigem = @CidEmpCodEstado                                                                                
                   and EstSai.CodDestino = @CodEstadoLeitura                              
  Left Join Estados EstEnt on EstEnt.CodOrigem = @CidEmpCodEstado                                                                                          
                          and EstEnt.CodDestino = @CidEmpCodEstado                                                                                                                                                                                       
  --MARCELO - CHAMADO 116008                                                                                                                           
  Left Join Operacoes Oper on Oper.Codigo = @CodOperacao                                                                                                                                                         
where Entidades.Codigo = @CodEntidade                                                                                                            
                                                                                                          
If (@EstAliqContrib is null)                                                 
   Set @EstAliqContrib = 0                                                                    
If (@EstFlagConvSub is null)                                                                                       
   Set @EstFlagConvSub = 0                                           
If (@EstAliqInterna is null)                                                         
   Set @EstAliqInterna = 0                                                                                                                                                                                      
                                        
                                                                                                 
set @ClaFlagSubTributaria = 1                                                              
Set @ClaAliqPISCOFINS = 0                                                                                   
                                                         
If ltrim(@CodClassFiscal) <> ''                                                                                                                                         
begin                                                       
  Select @ClaFlagSubTributaria = FlagSubTributaria,                                                                                                                         
         @ClaAliqPISCOFINS = AliqPISCOFINS,    
--389093    
         @ClaMVABaseEntrada = MVABaseEntrada    
    From ClassFiscais                                                  
    Where Codigo=@CodClassFiscal                                                                  
end    
    
If (@ClaFlagSubTributaria is null)                                                                                                                                                  
  Set @ClaFlagSubTributaria = 1                                                                                                                     
If (@ClaAliqPISCOFINS is null)                                                                                  
  Set @ClaAliqPISCOFINS = 0                                                                                           
if @ClaMVABaseEntrada is null    
  Set @ClaMVABaseEntrada = 0    
                                     
                                               
select @OprTipoICM                      = TipoICM,                                                                                                                                                                                      
       @OprTipoIPI                      = TipoIPI,                                                                                                            
       @OprAliqICMFixo                  = AliqICMFixo,                                                                                                      
       @OprPerRedICM                    = PerRedICM,                                                                                                                                                                                      
       @OprPerRedMargem                 = PerRedMargem,                                        
       @OprCFOP1_Normal                 = CFOP1_Normal,                                                                                          
       @OprCFOP1_Normal_NCFora          = CFOP1_Normal_NCFora,                                                                                                                                                                                      
       @OprCFOP2_Industrializado        = CFOP2_Industrializado,                                 
       @OprCFOP2_Industrializado_NCFora = CFOP2_Industrializado_NCFora,                                                               
       @OprCFOP3_SubRevenda             = CFOP3_SubRevenda,                                                                                                                                                                                      
       @OprCFOP3_SubRevenda_NC          = CFOP3_SubRevenda_NC,                                                    
       @OprCFOP4_SubRevendaML           = CFOP4_SubRevendaML,                                                                                                                                    
       @OprCFOP4_SubRevendaML_NC        = CFOP4_SubRevendaML_NC,                              
       @OprCFOP5_SubFabricacao          = CFOP5_SubFabricacao,                                                                                                                         
       @OprCFOP5_SubFabricacao_NC       = CFOP5_SubFabricacao_NC,                                                                   
       @OprCFOP6_SubFabricacaoML        = CFOP6_SubFabricacaoML,                               
       @OprCFOP6_SubFabricacaoML_NC     = CFOP6_SubFabricacaoML_NC,                                                                                                   
       @OprCFOP7_Importado              = CFOP7_Importado,                                                                                                                                  
       @OprCFOP_Servico                 = CFOP_Servico,                                                                                            
       @OprCFOP_Servico_NCFora          = CFOP_Servico_NCFora,                                                                                                                                                                  
       @OprFlagCalcPIS_COFINS           = FlagCalcPIS_COFINS,                                                                                                    
       @OprFlagDefaultLancamentoOutras  = FlagDefaultLancamentoOutras,                               
       @OprCFOP9_Petroleo               = CFOP9_Petroleo,                                                                
       @OprCFOP9_Petroleo_NC            = CFOP9_Petroleo_NC,                                                                                                                                                  
       @OprFlagSubTribIPI               = FlagSubTribIPI,                                                                    
       @OprTipoMovimento                = TipoMovimento,                                                                                                                                                          
       @OprTipoSubTributaria            = TipoSubTributaria,                                                                                  
       --Eder - Chamado 262460                                                  
       @OprTipoSubTributariaCarga       = TipoSubTributariaCarga,                                                              
       --Eder 303720                                
       @OprFlagIPISobrePisCofins        = FlagIPISobrePisCofins,                                                
       --Gabriella - 256424                                              
       @OprFlagIPISobreBaseICM          = FlagIPISobreBaseICM,                                                 
       -- Renato - 341779                                                           
       @OprFlagICMSSobreServicos        = FlagICMSSobreServicos,                                    
       --Ronaldo 343696                                  
       @OprIndNaturezaFrete             = IndNaturezaFrete                                  
  From Operacoes                                                                                                                                              
 where Codigo = @CodOperacao                                                                                                                           
                          
                                                                                                                           
If (@OprTipoICM is null)                                                                                                                        
 Set @OprTipoICM = 0                                                                                                                                                           
If (@OprTipoIPI is null)                                                                                                      
   Set @OprTipoIPI = 0                        
If (@OprAliqICMFixo is null)                                                                   
   Set @OprAliqICMFixo = 0                                                                                                                                                                      
If (@OprPerRedICM is null)                                                                                                                           
   Set @OprPerRedICM = 0                                                                                  
If (@OprPerRedMargem is null)                                           
   Set @OprPerRedMargem = 0                                                                                                                                                         
If (@OprFlagCalcPIS_COFINS is null)                                                                                                                                                            
Set @OprFlagCalcPIS_COFINS = 0                                                              
If @OprFlagCalcPIS_COFINS = 1                                                                                                                                                                                      
   Set @AliqPISCOFINS = @ClaAliqPISCOFINS                                                                     
If (@OprFlagDefaultLancamentoOutras is null)                                                                                                           
   Set @OprFlagDefaultLancamentoOutras = 0                                                                                                                                                           
If (@OprFlagSubTribIPI is null)                                                                                                                                                
   Set @OprFlagSubTribIPI = 0                                                                                        
If (@OprTipoSubTributaria is null)                                                                                               
   Set @OprTipoSubTributaria = 0                                                                                      
If (@OprTipoMovimento is null)                                                                                                                          
   Set @OprTipoMovimento = 0                                                
--Eder - Chamado 262460                                                                                  
If (@OprTipoSubTributariaCarga is null)                                                                  
   Set @OprTipoSubTributariaCarga = 0                                                               
if (@OprFlagIPISobrePisCofins is null)                                                              
   Set @OprFlagIPISobrePisCofins = 0                                               
--Gabriella - 256424                                              
if (@OprFlagIPISobreBaseICM is null)                                                              
   Set @OprFlagIPISobreBaseICM = 0                                                   
                                                                                                                                 
Set @GruFlagSubTributaria = 1                                                         
Select @GruFlagSubTributaria = Gru.FlagSubTributaria,                                                                  
     @ProOrigem = Pro.Origem                 
  From Produtos Pro                                                                   
  Left Join Grupos Gru on Gru.Codigo = Pro.CodGrupo                                                                  
 Where Pro.Codigo = @CodProduto                                                                  
                                                                  
If (@GruFlagSubTributaria is null)                                                                             
   Set @GruFlagSubTributaria = 1            
if (@ProOrigem is null)                                                                  
   Set @ProOrigem = 0                                                                  
                                                                                                               
                                                                  
             
                          
Select   
  @LisPercAcrescimoAdm1=Ilp.PercAcrescimoAdm1,  
  @LisPercAcrescimoAdm2=Ilp.PercAcrescimoAdm2,  
  @LisPercAcrescimoAdm3=Ilp.PercAcrescimoAdm3,  
  --Renato - 290579  
  @PercSubTribCusto = Ilp.PercSubTrib,  
  @PercICMCusto   = Ilp.PercICMCusto,  
  --408846  
  @LisPercDesconto1 = Ilp.PercDesconto1,  
  @LisPercDesconto2 = Ilp.PercDesconto2,  
  @LisPercDesconto3 = Ilp.PercDesconto3,  
  @LisPercDesconto4 = Ilp.PercDesconto4,  
  @LisPercDesconto5 = Ilp.PercDesconto5,  
  @LisPercAcrescimo1 = Ilp.PercAcrescimo1,  
  @LisPercAcrescimo2 = Ilp.PercAcrescimo2,  
  @LisPercAcrescimo3 = Ilp.PercAcrescimo3,  
  @LisValorCustoBruto = Ilp.ValorCustoBruto,  
  @LisValorCustoLiquido = Ilp.ValorCustoLiquido  
From ItemlistaPreco Ilp                                                                                                                                                           
  Left Join Empresas Emp on Emp.Codigo = @Empresa                                                                                                                      
Where Ilp.CodLista=@CodListaPreco                                                                                                             
  and Ilp.CodProduto=@CodProduto                                                                                                    
  and Ilp.Empresa = Emp.EmpresaListaPreco                                                                                                                
                                                                                                                                                                    
If (@LisPercAcrescimoAdm1 is null)                                                                                                                                                               
  Set @LisPercAcrescimoAdm1 = 0                                                                                                                                
If (@LisPercAcrescimoAdm2 is null)                                                              
  Set @LisPercAcrescimoAdm2 = 0                                                                                                                                                                                      
If (@LisPercAcrescimoAdm3 is null)                                                                                                                                          
  Set @LisPercAcrescimoAdm3 = 0                                                                         
                                                                             
                                                                                                                                                           
select @TriAliqICM=AliqICM,                                                                         
       @TriFlagIsentoProdutor=FlagIsentoProdutor,                                                                                               
@TriFlagSubTributaria=FlagSubTributaria,                                                                                                                                     
       @TriMargemLucroSubst=MargemLucroSubst,                                                                                                                                         
       @TriPerReducaoICM=PerReducaoICM,         
       @TriPerRedMargem=PerRedMargem,                                                                
       @TriTipoCFOP=TipoCFOP,                                                                                                                                                      
       @TriCodTributacaoSubTrib=CodTributacaoSubTrib,                                                                                                                                                                             
       @TriTipoValorNaoTributado=TipoValorNaoTributado,                                                                                    
       @TriPerReducaoSubTrib = PerReducaoSubTrib,                                                                          
       --Rafael chamado 272635                                                                          
       @TriAliqInternaSubTrib= AliqInternaSubTrib,                                                                  
       @TriNumCST_ICM = NumCST_ICM,                                                                  
       @TriNumCST_IPI = NumCST_IPI,                                                                  
       @TriNumCSOSN = NumCSOSN,                                              
       --Ronaldo Chamado 317536                                              
       @TriFlagPrevalecerAliqIcm = flagPrevalecerAliqIcm,                                              
       --Gabriella - 333391                            
       @TriTipoValorNaoTributadoIPI = TipoValorNaoTributadoIPI,                               
       --Renato - 361650                            
       @TriAliqComplICM = AliqComplICM,                              
       --Ronaldo Chamado 372149                      
       @FlagConsiderarSomentePercRedST = FlagConsiderarSomentePercRedST                                                           
  From Tributacoes                                                                                                                                                                                      
 Where Codigo=@CodTributacao                                                                                                                      
   and IdLeitura = dbo.LeituraTributacao(@CodTributacao,@CodEntidade, @CodOperacao, @AEmpMestre)                                                                        
                                                                                                             
Set @AuxEntidade = @CodEntidade                                                                                                                                                                               
                                    
                                                                                                                                                                               
If (@FlagEntrada = 1) and                                                                                                                                                                      
   ((Select FlagSubTribEntradaEstado From ParamControle Where Empresa=@Empresa) = 1)                                                                                                                                  
begin                                                                                                                                                                                      
  select @AuxFlagSubTributaria=FlagSubTributaria,                                                                                                                                                                                
         @AuxCodTributacaoSubTrib=CodTributacaoSubTrib                                                               
    From Tributacoes                                                                                     
    Where Codigo=@CodTributacao                                                                                
      and IdLeitura = dbo.LeituraTributacao(@CodTributacao, @AEmpMestre, @CodOperacao, @AEmpMestre)                                                
  If @AuxFlagSubTributaria is null                                                        
     Set @AuxFlagSubTributaria = 0                                                                                                                                                           
  If @AuxCodTributacaoSubTrib is null                                                                                                       
     Set @AuxCodTributacaoSubTrib = ''                                                   
  If (@AuxFlagSubTributaria = 1) and (@AuxCodTributacaoSubTrib <> '')                                                                                                                                                                      
  begin                                                                                                                           
    Set @TriCodTributacaoSubTrib = @AuxCodTributacaoSubTrib                                                                                                                                                
    Set @TriFlagSubTributaria =  @AuxFlagSubTributaria                                                                   
    Set @AuxEntidade = @AEmpMestre                             
  end                                                                                
end                                                                                             
                                                                                                                                                                                      
If (@TriCodTributacaoSubTrib <> '') and                                                                         
   (@TriFlagSubTributaria = 1) and                                                   
   (@ClaFlagSubTributaria = 1) and                                      
   (@GruFlagSubTributaria = 1) and                                                                                        
   ((@FlagEntrada = 0)  or                                                                                                                                                            
    (@FlagEntrada = 1 and (Select FlagSubTribEntradaEstado From ParamControle Where Empresa=@Empresa) = 1)                                                                                                                                                    
  
    
   )                                                         
begin                                                                                                                    
  select @TriAliqICM=AliqICM,                                                                                                                                 
         @TriFlagIsentoProdutor=FlagIsentoProdutor,                                                                                                                                               
         @TriFlagSubTributaria=FlagSubTributaria,                                                                                  
         @TriMargemLucroSubst=MargemLucroSubst,                                                              
         @TriPerReducaoICM=PerReducaoICM,                                                                                                                                                                                     
         @TriPerRedMargem=PerRedMargem,                                                                                                                                        
         @TriTipoCFOP=TipoCFOP,                                                                                                                     
         @TriCodTributacaoSubTrib=CodTributacaoSubTrib,                                                              
         @TriTipoValorNaoTributado=TipoValorNaoTributado,                                                                            
         @TriPerReducaoSubTrib = PerReducaoSubTrib,                                                        
         --Rafael chamado 272635                                   
         @TriAliqInternaSubTrib = AliqInternaSubTrib,                                                                  
         @TriNumCST_ICM = NumCST_ICM,                                                                  
         @TriNumCST_IPI = NumCST_IPI,                             
         @TriNumCSOSN = NumCSOSN,                                                
         --Gabriella - 333391                                              
         @TriTipoValorNaoTributadoIPI=TipoValorNaoTributadoIPI,                              
         --Renato - 361650                            
         @TriAliqComplICM = AliqComplICM                                                                          
   From Tributacoes                                                                                  
    Where Codigo=@TriCodTributacaoSubTrib                                                                                                                                               
and IdLeitura = dbo.LeituraTributacao(@TriCodTributacaoSubTrib,@AuxEntidade, @CodOperacao, @AEmpMestre)                                                                       
  Set @CodTributacao = @TriCodTributacaoSubTrib                                                              
end                                                                                     
                                                                                                                        
If (@TriAliqICM is null)                                                                                                                     
   Set @TriAliqICM = 0                                                                                
If (@TriFlagIsentoProdutor is null)                                                                                                                                    
   Set @TriFlagIsentoProdutor = 0                                                                                                                                      
If (@TriFlagSubTributaria is null)                                                          
   Set @TriFlagSubTributaria = 0                                                                                                                      
If (@TriMargemLucroSubst is null)                                                                                                                                                                                      
   Set @TriMargemLucroSubst = 0                                                                                                                                                                                      
If (@TriPerReducaoICM is null)                                                                                                                                                                                      
  Set @TriPerReducaoICM = 0                                                                                                                                        
If (@TriPerRedMargem is null)                                           
   Set @TriPerRedMargem = 0                                                                                                                                            
If (@TriTipoCFOP is null)                                                     
   Set @TriTipoCFOP = 0                                                                                        
If (@TriCodTributacaoSubTrib is null)                                                            
   Set @TriCodTributacaoSubTrib = ''                                                                                                                                                                                      
If (@TriPerReducaoSubTrib is null)                                                                            
   Set @TriPerReducaoSubTrib = 0                                                                           
--Rafael chamado 272635                                                                          
if (@TriAliqInternaSubTrib is null)                           
   Set @TriAliqInternaSubTrib = 0                                 
if @TriNumCST_ICM is null                                                                  
  Set @TriNumCST_ICM = 0                                                                  
if @TriNumCST_IPI is null                                                                  
  Set @TriNumCST_IPI = 0                                                                  
if @TriNumCSOSN is null                                                                  
  Set @TriNumCSOSN = 0                                                                   
if @TriAliqComplICM is null                          
  Set @TriAliqComplICM = 0                          
                                                                
If (@TriTipoValorNaoTributado is null)                                                                                                                
begin                                                                                                                                    
  if (@CodProduto = 8888888)                                                       
    Set @TriTipoValorNaoTributado = 1                                                                                                                                    
  else                                                
    Set @TriTipoValorNaoTributado = 0                                                                                                                                    
end                                                 
                                              
--Gabriella - 333391             
If (@TriTipoValorNaoTributadoIPI is null)                                                                                                              
begin                                                                                              
  if (@CodProduto = 8888888)                                                                                                                                
    Set @TriTipoValorNaoTributadoIPI = 1                                                                                                                                    
  else                                                
    Set @TriTipoValorNaoTributadoIPI = 0                                                                                                                                    
end                                                                           
--Gabriella - 360511                              
--Se não zerar e na tributação estiver zero o item continuará com o perc. de redução de st                              
Set @RedBaseSubTrib = 0                              
                                                                           
--Eder Chamado 271756                                
If @TriPerReducaoSubTrib <> 0                                                          
  Set @RedBaseSubTrib = @TriPerReducaoSubTrib                                           
      
--389093    
if  (@ClaMVABaseEntrada <> 0) and     
((@FlagEntrada = 1 and @OprTipoMovimento <> 1) or  (@FlagEntrada = 0 and @OprTipoMovimento = 1))    
  Set @MVA = @ClaMVABaseEntrada    
else    
  Set @MVA = @TriMargemLucroSubst    
                                           
                                          
--JALDO/RONALDO - CHAMADO 309941                                                               
--If @FlagEntrada = 0                                                                                                                                                             
If (@FlagEntrada = 0 or (@FlagEntrada = 1 and @OprTipoMovimento = 1))                                                            
   and @MVA <> 0                                                                                                                                                                                       
   and Exists(Select Codigo From Tributacoes                                                    
               Where EstadoOrigem=@CodEstadoLeitura                                                                 
        and Codigo=@CodTributacao                                                                                                               
                 --MARCELO - CHAMADO 192283                                                                                            
--                 and EstadoDestino=@CodEstadoLeitura                                                                                                                        
          and RegiaoDestino = @RegiaoDestinoLeitura                                                                                                        
                 and AliqICM > 0)                                                                                                                                                                                      
begin                                                                                                                                      
  Select Top 1 @EstAliqInterna=AliqICM,                                                                    
               --MARCELO - CHAMADO 214200                                                                               
               --@RedBaseSubTrib=PerReducaoICM                                                      
                                     
               --Ronaldo Chamado 372149                      
               --@RedBaseSubTrib = Case When @RedBaseSubTrib = 0 Then PerReducaoICM Else @RedBaseSubTrib End                                        
               @RedBaseSubTrib = Case When @RedBaseSubTrib = 0 and @FlagConsiderarSomentePercRedST = 0                      
                                        Then PerReducaoICM                       
                                        Else @RedBaseSubTrib End                                        
  From Tributacoes                                           
  Where EstadoOrigem=@CodEstadoLeitura                                                                                  
     and Codigo=@CodTributacao                                                                                                                      
     --MARCELO - CHAMADO 192283                                                                                        
--     and EstadoDestino=@CodEstadoLeitura                                                                                                                                                              
     and RegiaoDestino = @RegiaoDestinoLeitura                                       
     --Eder - 320407                                              
     and AliqICM > 0                                              
   Order By TipoPessoa                         
end                                                                                                                 
If (@RedBaseSubTrib is null)                                                                             
   Set @RedBaseSubTrib = 0                                          
                                                                                                                                                                     
--Gabriella - 381216                                                                       
--Rafael chamado 272635                                                                         
--Sobrepoe a aliquota encontrada, se for informada na tributação                                                  
/*If @TriAliqInternaSubTrib <> 0                                                                       
  Set @EstAliqInterna = @TriAliqInternaSubTrib*/                      
                                        
If @FlagEntrada = 1                                                                                                                                       
   --Eder - Chamado 184973                                                                                               
   and @OprTipoMovimento <> 1                                                        
   and @MVA <> 0                         
   --Ronaldo Chamado 372149                      
   --364660                           
   --and @RedBaseSubTrib <> 999.99                        
   and Exists(Select Codigo From Tributacoes                                                                                                                                                                                      
               Where EstadoOrigem=@CidEmpCodEstado                                                                                                                                          
                 and Codigo=@CodTributacao                                                                                                 
               --MARCELO - CHAMADO 192283                                                                                                                    
--               and EstadoDestino=@CidEmpCodEstado                                                                                           
               --Eder - Chamado 243637                                                                                          
               --and RegiaoDestino = @RegiaoDestino                                                                                          
                 and RegiaoDestino = @RegiaoOrigem                                                                                          
                 and AliqICM > 0)                                                                                                                                          
begin                                                                              
  Select Top 1 @EstAliqInterna=AliqICM,                                                                                                                                                                
               --Ronaldo Chamado 372149                      
               --@RedBaseSubTrib= Case When @RedBaseSubTrib = 0 Then PerReducaoICM Else @RedBaseSubTrib End                       
               @RedBaseSubTrib = Case When @RedBaseSubTrib = 0 and @FlagConsiderarSomentePercRedST = 0                      
                                        Then PerReducaoICM                       
                                        Else @RedBaseSubTrib End                                          
  From Tributacoes                                                                                                                                                                               
  Where EstadoOrigem=@CidEmpCodEstado                                          
     and Codigo=@CodTributacao                                                                      
     --MARCELO - CHAMADO 192283                                                                         
--   and EstadoDestino=@CidEmpCodEstado                                                                                                                                                            
     --Eder - Chamado 243637                                                                                  
--   and RegiaoDestino = @RegiaoDestino                                                                                          
     and RegiaoDestino = @RegiaoOrigem                          
     --Eder - 320407                             
     and AliqICM > 0                                              
   Order By TipoPessoa                                                                                   
end                       
                      
--Gabriella - 381216                                                                                                                     
--Sobrepoe a aliquota encontrada, se for informada na tributação                                                                          
If @TriAliqInternaSubTrib <> 0                                                                             
  Set @EstAliqInterna = @TriAliqInternaSubTrib                      
                                                                   
If @EstAliqInterna is null                                                             
   Set @EstAliqInterna = 0                                                                                    
                           
--Ronaldo Chamado 372149                      
/*--364660                        
-- quando informada 999.99, tem que zerar para não calcular                        
if @RedBaseSubTrib = 999.99                         
  Set @RedBaseSubTrib = 0*/                      
                                                                                                                                        
If @CodSubTributaria > 0                                                                                     
begin                                                                                                                                           
  Select                                                                
      @SubAliquotaInterna = AliquotaInterna,                             
      @SubMargemLucro = MargemLucro,                                                                                                                                                                
      @SubPercReducao = PercReducao,                                                                                                                                                                
      @SubIndiceReducao = IndiceReducao,                                                                                                                                                  
      @SubFlagAbaterICM = FlagAbaterICM,                         
      @SubFlagSomaIPI = FlagSomaIPI                                                                                                                                                                
  From SubstituicaoTributaria                                                                                            
  Where CodSubTributaria = @CodSubTributaria                                                                                                             
    and Empresa = @Empresa                                                                                                                                     
end                                                                                                                                     
   
  If @SubAliquotaInterna is null                                                   
     Set @SubAliquotaInterna = 0                                                                                                                        
  If @SubMargemLucro is null                                            
     Set @SubMargemLucro = 0                                                                                        
  If @SubPercReducao is null                                                                                                                                                         
     Set @SubPercReducao = 0                    
  If @SubIndiceReducao is null                                                                                       
     Set @SubIndiceReducao = 0                                                                                    
  If @SubFlagAbaterICM is null                                               
     Set @SubFlagAbaterICM = 0                                            
  If @SubFlagSomaIPI is null                                                                                                                           
     Set @SubFlagSomaIPI = 0                                                                                                                                                     
                                                
--Calculo do CST de ICMS e IPI                                                                   
Select @NumCstICM = Case when Op.NumCST_ICM in (-1) then @TriNumCST_ICM                                                                   
                         else Op.NumCST_ICM End,                                                   
       @NumCstIPI = Case when Op.NumCST_IPI not in (-1)                                              
        then Op.NumCST_IPI   --Operação fiscal prevalece sobre demais.                                                                  
                         when @AliqIPI > 0 and Op.TipoIPI = 0 --Item tributado de ipi sera sempre 00 ou 50 (entrada ou saida tributada)                                                                  
                         then Case When @FlagEntrada = 1 Then 00 Else 50 End                                                                  
                         when Cla.NumCST_IPI not in (-1,0) and (@AliqIPI = 0 or Op.TipoIPI <> 0)                       
                     then Cla.NumCST_IPI -- Class. Fiscal prevalece sobre demais.                                                                  
                         when @TriNumCST_IPI not in (-1) and (@AliqIPI = 0 or Op.TipoIPI <> 0)                                                                   
                              then @TriNumCST_IPI    -- Item sem ipi pega da tributação se informado                                                                                           
                    End,                                                                  
       @NumCsosn  = Case When @ParTipoRegimeTributario in(1,2) --Calculo de CST para Simples nacional                                                                  
                       Then Case When Op.NumCSOSN not in(-1,0) then Op.NumCSOSN                                                                  
                   Else @TriNumCSOSN                                                           
                              End                                                                  
                    End                                                                  
  From Produtos Pro                                                                  
  Left Join Operacoes Op on Op.Codigo = @CodOperacao                                                                  
  Left Join ClassFiscais Cla on Cla.Codigo = @CodClassFiscal                                                                  
Where Pro.Codigo = @CodProduto                                        
                                                                  
if @NumCstICM <> -1                                       
  Set @NumCstICM = Cast(@ProOrigem as varchar(1)) + Replicate('0', 2 - Len(@NumCstICM)) + Cast(@NumCstICM as varchar(2))                                                                  
else                     
  Set @NumCstICM = null                                                                  
                                                                    
--Gabriella - 299680                                                                
if @NumCstIPI <> -1 and @FlagEntrada = 1               
  Set @NumCstIPI = Replicate('0', 2 - Len(@NumCstIPI)) + Cast(@NumCstIPI as varchar(2))                                                                 
if @NumCstIPI <> -1 and @FlagEntrada = 0                                                                   
  Set @NumCstIPI = Replicate('5', 2 - Len(@NumCstIPI)) + Cast(@NumCstIPI as varchar(2))                                                                
 --407202    
if @NumCstIPI = 49 and @FlagEntrada = 0    
  Set @NumCstIPI = 99      
if @NumCstIPI = -1                                                                
  Set @NumCstIPI = null    
      
      
                                                 
if @NumCsosn <> -1 and @ParTipoRegimeTributario in (1,2) --CSOSN para Simples Nacional                                                                  
  Set @NumCsosn = Replicate('0', 3 - Len(@NumCsosn)) + Cast(@NumCsosn as varchar(3))                                                                  
else                                                                  
  Set @NumCsosn = null                                                                  
                                                                  
                                                                  
If @EntTipoPessoa = 'F' or                                              
   @EntTipoPessoa = 'N'                                                      
   Set @AliqIcm = @TriAliqICM                                                                                                                              
Else                                                                                                                                                     
 --Ronaldo Chamado 317536                                                
 /*IF @TriAliqICM < @EstAliqContrib                                   
      Set @AliqICM = @TriAliqICM                                                                                                                                                         
   Else                                                   
      Set @AliqICM = @EstAliqContrib*/                                              
  IF @TriFlagPrevalecerAliqIcm = 1                       
    Set @AliqICM = @TriAliqICM                                              
  else                                              
    begin                                              
      IF @TriAliqICM < @EstAliqContrib                                                                             
        Set @AliqICM = @TriAliqICM                                                                                                                                                                    
      Else                                        
        Set @AliqICM = @EstAliqContrib                                              
    end                                               
                                                                                  
If @CidEmpCodEstado = @CodEstadoLeitura and @TriFlagIsentoProdutor = 1                         
   If @EntTipoPessoa = 'P' or @EntTipoPessoa = 'J' or @EntTipoPessoa = 'C' OR                                                                                      
      @EntTipoPessoa = 'I' --JALDO - CHAMADO 248899                                                                     
      Set @AliqICM = 0                                                                            
                                                                  
                                                                                                          
If (@OprTipoICM = 1) or                                                                                              
   (@OprTipoICM = 2 and @FlagEntrada = 0) or                                                                  
   (@OprTipoICM = 2 and @FlagEntrada = 1 and @OprFlagDefaultLancamentoOutras = 0)                                                                            
   Set @AliqICM = 0                                                                                                                                                                                      
                                                                                                                    
If @OprAliqICMFixo <> 0                                                                       
   Set @AliqICM = @OprAliqICMFixo                                                                                                
                                                                              
--Eder - Chamado 295277                                                 
If @AliqICMFixo <> 0                                                                 
begin                                                                  
  --O cálculo do ICMS para Simples deve ser feito após o calculo da ST pois a ST considera aliquotas internas normais de ICMS                                                                  
  If @ParTipoRegimeTributario in (1,2) and  --- Simples Nacional ou com excesso de sublimite receita bruta                                                                  
     (@FlagEntrada = 0 or (@FlagEntrada = 1 and @OprTipoMovimento = 1))  --Saida ou entrada por devolução                                                                  
  --Não pode fixar a aliquota de icms no simples senao nao calcula a ST                                               
     Set @AliqICM = @AliqICM                                                                  
  else                                                     
     Set @AliqICM = @AliqICMFixo                                                                               
end                                 
                                              
    
--389093    
-- calcula MVA ajustado, para fazer equalização de alíquota    
if (@ClaMVABaseEntrada <> 0) and     
   ((@FlagEntrada = 1 and @OprTipoMovimento <> 1) or (@FlagEntrada = 0 and @OprTipoMovimento = 1))    
begin    
/*     
  exemplo:  @AliqICM = 4 e @EstAliqInterna = 18 e @ClaMVABaseEntrada = 52.27    
  A = (1 - 0.04) / (1 - 0.18) = 1.170    
  B = 1 + 0.5227 = 1.5227    
  C = A * B --> 1.170 * 1.5227 = 1.7815    
  D = (C - 1) * 100  --> (1.7815 - 1) * 100 = 75.15    
*/    
    
  Set @MVA = (1 - (@AliqICM/100)) / (1 - (@EstAliqInterna/100))    
  Set @MVA = @MVA * (1 + (@ClaMVABaseEntrada/100))    
  Set @MVA = (@MVA - 1) * 100    
  Set @MVA = Round (@MVA,2)    
end    
    
                                              
--Gabriella - 333391                                                                                          
Set @ValorBaseIPI = @ValorTotal + @AcrescimoBaseIPI                                                                                                                                                                                                           
  
    
                                                                                                               
If @ValorBaseIPI > 0 and @AliqIPI > 0                                                             
   Set @VAuxValorIPI = (@ValorBaseIPI * @AliqIPI) / 100                                              
               
--Somente irá prevalecer o Tipo da Tributação quando a Aliquota de IPI for igual a Zero                                               
-- e o Tipo do Ipi da Operação Fiscal for Tributado                                                 
if @AliqIPI = 0 and @OprTipoIPI = 0                                              
begin                                              
 if @TriTipoValorNaoTributadoIPI = 0                                              
   Set @ValorIsentoIPI = @ValorBaseIPI                                                
 if @TriTipoValorNaoTributadoIPI = 1                                              
   Set @ValorOutrasIPI = @ValorBaseIPI                                                   
end               
                                                 
if @OprTipoIPI = 1                                              
  Set @ValorIsentoIPI = @ValorBaseIPI                                               
                             
if @OprTipoIPI = 2                                              
  Set @ValorOutrasIPI = @ValorBaseIPI                                               
                                                
If @AliqIPI = 0                                         
   Set @ValorBaseIPI = 0                                                 
                                                
if @ValorIsentoIPI > 0 or @ValorOutrasIPI > 0                                              
  Set @ValorBaseIPI = 0                                                    
                                      
                                                                                                                     
---Chamado 114964                                                                                       
--If @OprTipoIPI = 0 or @OprTipoIPI = 3                                                                                                                                                                                      
--Begin             --Gabriella - 333391                                                                                       
--  If @ValorTotal > 0 and @AliqIPI > 0                                                   
--     Set @VAuxValorIPI = (@ValorTotal * @AliqIPI) / 100                                                                                                               
--End                                                                                                         
                                                                                                          
                                                                                                                                                        
If @TriFlagSubTributaria = 1                                                                                          
   and @ClaFlagSubTributaria = 1                                                                                                                                                                                       
and @GruFlagSubTributaria = 1                                                                                                                                                                            
   and @MVA <> 0                                               
   and @EstFlagConvSub = 1                                                        
   and @OprTipoICM = 0                                                                                                                    
   and @OprTipoSubTributaria > 0                                                                                                                             
begin                                                                                                         
  Set @ValorBaseSubTrib = @ValorTotal + @AcrescimoBaseSubTrib                      
                                  
                                     
  If @OprFlagSubTribIPI = 1                                                                                                                                                                              
     Set @ValorBaseSubTrib = @ValorBaseSubTrib + @VAuxValorIPI                                                                                                                                                                 
end                                                                           
                                                                                                                                                                               
--Eder - Chamado 262460                                        
If @OprTipoICM = 0 and @ClaFlagSubTributaria = 1 and @GruFlagSubTributaria = 1 and @MVA <> 0 and                                                                                  
   @OprTipoSubTributariaCarga = 0                                                                                   
begin                                        
  Set @ValorBaseSubTribCarga = @ValorTotal + @AcrescimoBaseSubTrib                                                                               
  If @OprFlagSubTribIPI = 1                                                                                           
     Set @ValorBaseSubTribCarga = @ValorBaseSubTribCarga + @VAuxValorIPI                                                                                                                                                             
end                                                              
                                                                                                                                                  
                                                                            
If @CodSubTributaria > 0                                                                                                                                                            
   and @TriFlagSubTributaria = 1                                  
   and @ClaFlagSubTributaria = 1                                                                            
   and @GruFlagSubTributaria = 1                                                                  
   and @SubMargemLucro <> 0                                                                                                                                                                 
   and @EstFlagConvSub = 1                                                                                                                
begin                                                                                                                 
  Set @CalcBaseSubTrib = @ValorTotal + @AcrescimoBaseSubTrib                                                                                         
  If @SubFlagSomaIPI = 1                                                                                                                                                      
     Set @CalcBaseSubTrib = @CalcBaseSubTrib + @VAuxValorIPI                                              
end                                                                                                                                                                                   
                                                                                                                                        
Set @ValorBaseICM = @ValorTotal + @AcrescimoBaseICM                                                                                                    
Set @ValorBaseSubTribDestino = @ValorTotal + @AcrescimoBaseICM                                                                                                     
Set @CalcBaseSubTribDestino = @ValorTotal + @AcrescimoBaseICM                                                                                                 
                                                                                                                         
                                                                                     
--JALDO - CHAMADO 243556                                  
--O Tipo "2" não estão sendo verificando porque nunca será usado                                                                                                  
--If @EntTipoPessoa <> 'J'                                             
--begin                                                                                                                  
-- Set @ValorBaseIcm = @ValorBaseIcm + @VAuxValorIPI                                                                                    
--  Set @ValorBaseSubTribDestino = @ValorBaseSubTribDestino + @VAuxValorIPI                                                                                            
--  Set @CalcBaseSubTribDestino = @CalcBaseSubTribDestino + @VAuxValorIPI                                                                                  
--end                                                               
                                                                                          
--JALDO - CHAMADO 248899                                                                                      
--if ((@TipoConsideraIPICalculoICM = 0) and (@EntTipoPessoa <> 'J')) or                                                                                                   
--   (@TipoConsideraIPICalculoICM = 1)                                                                                                   
--begin                                                                                                  
--Set @ValorBaseIcm = @ValorBaseIcm + @VAuxValorIPI                                                                                                                                         
--  Set @ValorBaseSubTribDestino = @ValorBaseSubTribDestino + @VAuxValorIPI                                                                                                           
--  Set @CalcBaseSubTribDestino = @CalcBaseSubTribDestino + @VAuxValorIPI                                                                               
--end                          
                                              
--Gabriella - 256424                                                                                
--if (@EntTipoPessoa not in ('J','I'))                                  
if (@EntTipoPessoa not in ('J','I')) or (@OprFlagIPISobreBaseICM = 1)                                                                 
begin                                                                                              
  Set @ValorBaseIcm = @ValorBaseIcm + @VAuxValorIPI                                                                                             
  Set @ValorBaseSubTribDestino = @ValorBaseSubTribDestino + @VAuxValorIPI                                                                                  
  Set @CalcBaseSubTribDestino = @CalcBaseSubTribDestino + @VAuxValorIPI                                                                                                                    
end                                                                                 
                                                                                                                                    
Set @ValorIsentoICM = @ValorBaseIcm                                        
                    
--Ronaldo Chamado 383605                  
if @OprPerRedICM <> 99.99                  
begin                  
  If @TriPerReducaoICM <> 0 and @ValorBaseIcm <> 0                                                           
  begin                                                                                                                      
    Set @ValorBaseIcm = @ValorBaseIcm - ((@ValorBaseIcm * @TriPerReducaoICM) / 100)                                                                                                                                                     
    Set @ValorBaseSubTribDestino = @ValorBaseSubTribDestino - ((@ValorBaseSubTribDestino * @TriPerReducaoICM) / 100)                                                                                                                                          
  
    
    Set @CalcBaseSubTribDestino = @CalcBaseSubTribDestino - ((@CalcBaseSubTribDestino * @TriPerReducaoICM) / 100)                                                                                                
  end                                                                                                                           
  If @ValorBaseIcm > 0 and @OprPerRedICM > 0                                                                                                                              
  begin                                                                
    Set @ValorBaseIcm = @ValorBaseIcm - ((@ValorBaseIcm * @OprPerRedICM) / 100)                                                                                                                                                                                
 
     
    Set @ValorBaseSubTribDestino = @ValorBaseSubTribDestino - ((@ValorBaseSubTribDestino * @OprPerRedICM) / 100)                                                                                                                                
    Set @CalcBaseSubTribDestino = @CalcBaseSubTribDestino - ((@CalcBaseSubTribDestino * @OprPerRedICM) / 100)                                                                                         
  end                                     
end                  
                              
If @ValorBaseIcm > 0 and @AliqICM > 0                                                              
   Set @ValorICM = (@ValorBaseIcm * @AliqICM) / 100                                                           
                                                        
--Ronaldo Chamado 313933                                                        
select @RegTribPercIvaSimplicado = R.PercIvaSimplificado from regimetributario R                                                        
left join entidades E on R.Codigo = E.codRegimeTributario                                            
where R.empresa = @Empresa and                                                        
      E.codigo  = @CodEntidade                                                        
                                                        
                                                                                                                                                                                     
If @TriFlagSubTributaria = 1 and @ClaFlagSubTributaria = 1 and @GruFlagSubTributaria = 1                                                                                                                        
   and @MVA <> 0 and @EstFlagConvSub = 1 and @OprTipoICM = 0 and @OprTipoSubTributaria > 0                                                                                                                                  
Begin                                                                                                              
--Eder - Chamado 243557  -- Teste específico para o Cliente pois ainda não sabemos se outros clientes aceitarão a modificação                                                                                              
--Eder - Chamado 243557                                                         
  if (@EmpId = 'ALPHA PNEUS') and @TriPerReducaoICM > 0                                                                        
     If @OprFlagSubTribIPI = 1                                                                                                         
       Set @ValorBaseSubTrib = @ValorBaseSubTrib - (((@ValorBaseSubTrib - @VAuxValorIPI) * @TriPerReducaoICM) / 100)                                                                                                                                           
  
   
     Else                                                                                        
       Set @ValorBaseSubTrib = @ValorBaseSubTrib - ((@ValorBaseSubTrib  * @TriPerReducaoICM) / 100)                                                                                                                                                            
  
    
  --Ronaldo Chamado 383605                   
  --If @RedBaseSubTrib <> 0 and @ValorBaseSubTrib <> 0                 
  If @RedBaseSubTrib <> 0 and @ValorBaseSubTrib <> 0 and @OprPerRedICM <> 99.99                                                                                          
     Set @ValorBaseSubTrib = @ValorBaseSubTrib - ((@ValorBaseSubTrib  * @RedBaseSubTrib) / 100)                                                                                      
                                                          
  --set @ValorBaseSubTrib = cast('A' + cast(@ValorBaseSubTrib as varchar(20))   as int)                   
                    
  --Ronaldo Chamado 313933                                                        
  --If @TriMargemLucroSubst <> 999.99                                                                                                           
  --   Set @ValorBaseSubTrib = @ValorBaseSubTrib +  ((@ValorBaseSubTrib * @TriMargemLucroSubst) / 100)                                                                                                                                                         
  
    
  --If @ValorBaseSubTrib > 0 and @EstAliqInterna > 0                                                                           
  --   Set @ValorSubTrib = (@ValorBaseSubTrib * @EstAliqInterna) / 100                                                                                                                                                                     
  -- Set @ValorSubTrib = @ValorSubTrib - Round((@ValorBaseSubTribDestino * @AliqICM) / 100,2)                                                           
  if @RegTribPercIvaSimplicado > 0 and @EstAliqInterna > 0                                                        
  begin                                                        
     set @ValorSubTrib     = round(@ValorbaseSubTrib * @RegTribPercIvaSimplicado / 100,2)                                                        
     set @ValorBaseSubTrib = round((@ValorIcm + @ValorSubTrib) / @EstAliqInterna * 100,2)                                                        
  end                                                        
  else                                                        
  begin                                                         
    If @MVA <> 999.99                                                                                        
      Set @ValorBaseSubTrib = @ValorBaseSubTrib +  ((@ValorBaseSubTrib * @MVA) / 100)                                                                                                                                                             
    If @ValorBaseSubTrib > 0 and @EstAliqInterna > 0                                                                                                                                                                                      
         Set @ValorSubTrib = (@ValorBaseSubTrib * @EstAliqInterna) / 100                                                                                                                               
    Set @ValorSubTrib = @ValorSubTrib - Round((@ValorBaseSubTribDestino * @AliqICM) / 100,2)                                                           
  end                                                         
End                                                                                                 
                                                              
                                                                                                                    
--Eder - Chamado 262460                                                                                  
If @OprTipoICM = 0 and @ClaFlagSubTributaria = 1 and @GruFlagSubTributaria = 1 and @MVA <> 0 and                                                                                  
   @OprTipoSubTributariaCarga = 0                            begin                                                                
--Eder - Chamado 243557 -- Teste específico para o Cliente pois ainda não sabemos se outros clientes aceitarão a modificação                                          
  if (@EmpId = 'ALPHA PNEUS') and @TriPerReducaoICM > 0                                   
     If @OprFlagSubTribIPI = 1                                                                                                  
       Set @ValorBaseSubTribCarga = @ValorBaseSubTribCarga - (((@ValorBaseSubTribCarga - @VAuxValorIPI) * @TriPerReducaoICM) / 100)                                                                                                                            
  
    
     Else                            
     Set @ValorBaseSubTribCarga = @ValorBaseSubTribCarga - ((@ValorBaseSubTribCarga  * @TriPerReducaoICM) / 100)                                                                                                                                               
  
    
  --Ronaldo Chamado 383605                    
  --If @RedBaseSubTrib <> 0 and @ValorBaseSubTribCarga  <> 0                                                                                                                                                                
  If @RedBaseSubTrib <> 0 and @ValorBaseSubTribCarga  <> 0 and @OprPerRedICM <> 99.99                   
   Set @ValorBaseSubTribCarga = @ValorBaseSubTribCarga - ((@ValorBaseSubTribCarga  * @RedBaseSubTrib) / 100)                                                                                                                                                   
  
    
  --Ronaldo Chamado 313933                                                          
  --If @TriMargemLucroSubst <> 999.99                                                                                                                                                 
  --   Set @ValorBaseSubTribCarga = @ValorBaseSubTribCarga +  ((@ValorBaseSubTribCarga * @TriMargemLucroSubst) / 100)                                                                                                                                          
  
    
  --If @ValorBaseSubTribCarga > 0 and @EstAliqInterna > 0                                                                                                                                         
  --   Set @ValorSubTribCarga = (@ValorBaseSubTribCarga * @EstAliqInterna) / 100                                          
  --Set @ValorSubTribCarga = @ValorSubTribCarga - Round((@ValorBaseSubTribDestino * @AliqICM) / 100,2)                                                        
  if @RegTribPercIvaSimplicado > 0 and @EstAliqInterna > 0                                                        
     begin                                                        
        set @ValorSubTribCarga     = round(@ValorBaseSubTribCarga * @RegTribPercIvaSimplicado / 100,2)                                                        
        set @ValorBaseSubTribCarga = round((@ValorIcm + @ValorSubTribCarga) / @EstAliqInterna * 100,2)                                                        
     end                                                        
  else                                                        
     begin                                                         
       If @MVA <> 999.99                         
          Set @ValorBaseSubTribCarga = @ValorBaseSubTribCarga +  ((@ValorBaseSubTribCarga * @MVA) / 100)                                                                                                                                   
       If @ValorBaseSubTribCarga > 0 and @EstAliqInterna > 0                                                                                                                                         
          Set @ValorSubTribCarga = (@ValorBaseSubTribCarga * @EstAliqInterna) / 100                                                                                                                                               
          Set @ValorSubTribCarga = @ValorSubTribCarga - Round((@ValorBaseSubTribDestino * @AliqICM) / 100,2)                                 
    end                                                         
end          
                                                                      
                                                                                       
                               
--Calculo da substituição tributaria pela tabela SubstituicaoTributaria                                                                       
If @CodSubTributaria > 0                                                                                                     
   and @TriFlagSubTributaria = 1 and @ClaFlagSubTributaria = 1 and @GruFlagSubTributaria = 1                                                                                                                                                                  
  
     
   and @SubMargemLucro <> 0 and @EstFlagConvSub = 1                                                                                                                                       
begin                                                     
  If @SubPercReducao <> 0                                                                                                                           
     Set @CalcBaseSubTrib  = @CalcBaseSubTrib - ((@CalcBaseSubTrib * @SubPercReducao) / 100)                                                                                               
  If @SubMargemLucro <> 999.99                                                                                                                                                              
     Set @CalcBaseSubTrib = @CalcBaseSubTrib +  ((@CalcBaseSubTrib * @SubMargemLucro) / 100)                                                                            
  If @SubIndiceReducao <> 0                                                                                                       
   Set @CalcBaseSubTrib = @CalcBaseSubTrib * @SubIndiceReducao                                                                                                                                                        
                                                    
  --Quando não tem aliquota interna na sub.trib, pega a do estado de origem                                                                                                       
  If @CalcBaseSubTrib > 0 and                                                                                                                    
     (@SubAliquotaInterna > 0 or @EstAliqInterna > 0)                                                                             
  begin                                                                                
    if @SubAliquotaInterna > 0                                                                                                                                                      
     Set @CalcValorSubTrib = (@CalcBaseSubTrib * @SubAliquotaInterna) / 100                                                                                                                                                
    Else                                                                                                   
Set @CalcValorSubTrib = (@CalcBaseSubTrib * @EstAliqInterna) / 100                                                                                                                        
  end                                   
                                                                                                                                                        
  --Opção que permite abater o icms da operação na substituição tributaria                                                                                                                                                        
  If @SubFlagAbaterICM = 1                                                                                                          
     Set @CalcValorSubTrib = @CalcValorSubTrib - Round((@CalcBaseSubTribDestino * @AliqICM) / 100,2)                                                                           
                                                              
  If @OprTipoICM = 0 and @OprTipoSubTributaria > 0                                                                                         
  begin                                                                                     
 Set @ValorBaseSubTrib = @CalcBaseSubTrib                                                                                             
    Set @ValorSubTrib = @CalcValorSubTrib                                                                                                                                                             
  end                              
                                                              
  --Eder - Chamado 262460                                                            
  If @OprTipoSubTributariaCarga = 0                                                                                  
  begin                            
    Set @ValorBaseSubTribCarga = @CalcBaseSubTrib                                                                                                                     
    Set @ValorSubTribCarga = @CalcValorSubTrib                                                                                                                             
  end                                                                                  
end                                                                                
                                                                         
--MARCELO - CHAMADO 195051                                                                                                              
if (@ValorBaseSubTrib <> 0) or (@ValorSubTrib <> 0)                                                                                                               
begin                                 
  set @ValorBaseSubTribCarga = 0                                                                                                              
  set @ValorSubTribCarga = 0                                                                                       
end                          
                                                                  
                                                                  
--Eder - Chamado 295277                                                                  
--O cálculo do ICMS para Simples deve ser feito após o calculo da ST pois a ST considera aliquotas internas normais de ICMS                                                                  
If @ParTipoRegimeTributario in (1,2) and  --- Simples Nacional ou com excesso de sublimite receita bruta                                                                  
   (@FlagEntrada = 0 or (@FlagEntrada = 1 and @OprTipoMovimento = 1))  --Saida ou entrada por devolução                                                                  
begin                                               
  If @TriAliqICM <= 0                                                                   
    Set @AliqICM = 0                                                
  else                                                                  
    Set @AliqICM = @ParAliqICMSimples                                                                  
  If (@OprTipoICM = 1) or                                                                                    
     (@OprTipoICM = 2 and @FlagEntrada = 0) or                                                                                                                                                                        
     (@OprTipoICM = 2 and @FlagEntrada = 1 and @OprFlagDefaultLancamentoOutras = 0)                                                                                                                                    
     Set @AliqICM = 0                                                                                                   
Set @ValorICM = (@ValorBaseIcm * @AliqICM) / 100            
end                                                                  
                                                                                                                           
If @AliqICM = 0                                                                                                                                                                                      
   Set @ValorBaseIcm = 0                                                                                                                           
Else                                                                                                                                 
   Set @ValorIsentoICM = @ValorIsentoICM - @ValorBaseIcm                                                                                                                        
                                                                                                                                                       
                                                           
If @OprTipoSubTributaria in(2,3) and @ClaFlagSubTributaria = 1 and @GruFlagSubTributaria = 1                                                                                          
   and @OprTipoICM = 0 and @EstFlagConvSub = 1                                                                         
   and (@TriFlagSubTributaria = 1 or @MVA <> 0 or @SubMargemLucro <> 0)                                                                                                                                   
begin                                                                        
  If @OprTipoSubTributaria = 2                                                                         
     Set @ValorIsentoICM = @ValorIsentoICM + @ValorBaseICM                                                                                                                           
  If @OprTipoSubTributaria = 3                                                                       
  begin                                                                            
     --Eder - 383214 - Quando ha redução na base, considerar apenas a parte tributada para outras (St)                
     --Set @ValorOutrasICM = @ValorOutrasICM + @ValorBaseICM + @ValorIsentoICM                                        
     if (@ValorIsentoICM <> 0 and @ValorBaseICM <> 0)                
       Set @ValorOutrasICM = @ValorBaseICM                
     else                
     begin              
       Set @ValorOutrasICM = @ValorBaseICM + @ValorIsentoICM                
       Set @ValorIsentoICM = 0           
     end                
  end                                                                                                                                      
  Set @ValorBaseIcm = 0                                                                                                                                                                        
  Set @ValorICM = 0                                                                                                                  
end                                                                                                                                                                                      
                                                                                                               
Set @FatorRedCusto = 1                                                                                                   
If (@ParTipoReducaoICM = 1) and (Ltrim(@CodEntidade) <> '')                                                                                   
   and (@FlagEntrada = 0 or (@FlagEntrada=1 and @OprTipoMovimento = 1))                                            
--Eder Chamado 170325                                                                                                                            
   and (@CodProduto <> 8888888)     
begin                                                                                                                                                  
--   If @OprTipoSubTributaria not in(2,3)   --não calcula quando a sub. tributaria é isenta/outras                                                                            
--   Isaac - Chamado 191232                                                                                                              
   If not (@OprTipoSubTributaria in(2,3) and @ClaFlagSubTributaria = 1 and @GruFlagSubTributaria = 1                                                           
      and @OprTipoICM = 0 and @EstFlagConvSub = 1                                                                                                                      
      and (@TriFlagSubTributaria = 1 or @MVA <> 0 or @SubMargemLucro <> 0))                                                                                                         
      Set @FatorRedCusto = (100 - @TriAliqICM) / (100 - @AliqICM)                                                    
                                                                                                                                                                     
   If @OprPerRedMargem <> 0                                                                                                         
     Set @FatorRedCusto = @FatorRedCusto - (@OprPerRedMargem / 100)                                                                                                                                                        
   --Eder - Chamado 270320                                                                              
   --If (@TriPerRedMargem <> 0)                                                                              
   --  Set @FatorRedCusto = @FatorRedCusto - (@TriPerRedMargem / 100)                                                                                                
end                                                                                                                                                         
--Eder - Chamado 270320                                                                              
if (@TriPerRedMargem <> 0) and (@CodProduto <> 8888888)                                                  
   Set @FatorRedCusto = @FatorRedCusto - (@TriPerRedMargem / 100)                                                          
                                                                                     
-- 298865                               
--Eder - Chamado 195755                                                                                                                
--Somente vai calcular DespesasNaoInclusas no fator quando for saída ou devolução                                                                                                                      
-- Renato - 278440                                                          
If (@FlagEntrada = 0) or                                                                                                                                                             
   (@FlagEntrada = 1 and @OprTipoMovimento = 1)                                                                                                                                                                      
begin                                                                                                    
  --Eder - Chamado 170325                                                                                                       
  --Adiciona o acrescimo de custo, que já deve vir passado como percentual                                                                                                                            
                                                                               
  If (@PerRedDespesa <> 0) and (@ParTipoReducaoICM in (0,1)) and (@FlagDeduzirDespNaoInclNaMargem = 0)                                                                                   
  begin                                                                                                                            
    Set @FatorRedCusto = @FatorRedCusto + @PerRedDespesa                                                                                
  end                                                                                  
end                                                                                                                 
                                                    
                                                                                                  
--Calcula o fator de venda para as saídas e entradas por devolução.                      
--Retira o Valor do ICM, a Aliquota de CPMF, a Aliquota de PIS/COFINS e soma o acrescimo de vend                                                                                                        
Set @FatorRedVenda = 1                                                                                                                                                       
If ((@FlagEntrada = 0) or                                                                                                                         
   (@FlagEntrada = 1 and @OprTipoMovimento = 1))                                                                        
   -- Renato - 278440                                               
   and (@ParTipoReducaoICM = 2) -- 2 - Deduzir Impostos da Venda                                                                                          
begin                                                                                                              
                                                                          
  --Eder -Chamado 292832 - Evitar arredondamento desnecessario na aliquota do ICM (Vide Chamado)                                                                    
  If (@AliqICM > 0) and (@ValorTotal > 0)                                                                               
     if @ValorBaseICM = @ValorTotal + @AcrescimoBaseICM                                                                    
       Set @FatorRedVenda = @FatorRedVenda - (@AliqICM / 100)                                                                    
     Else                                                          
       Set @FatorRedVenda = @FatorRedVenda - Round(((@ValorICM * 100) / @ValorTotal) / 100,4)                                                                    
                                                                    
  If @ParAliqCPMF > 0                                                                                                                                                                                      
     Set @FatorRedVenda = @FatorRedVenda - (@ParAliqCPMF / 100)                                                   
                                              
  If @AliqPISCOFINS > 0                                                                                                                                                                                      
   Set @FatorRedVenda = @FatorRedVenda - (@AliqPISCOFINS / 100)                                                                        
                                                                                                                           
                                                                          
  If (@LisPercAcrescimoAdm1 + @LisPercAcrescimoAdm2 + @LisPercAcrescimoAdm3) > 0                                                                                                                   
     Set @FatorRedVenda = @FatorRedVenda - ((@LisPercAcrescimoAdm1 + @LisPercAcrescimoAdm2 + @LisPercAcrescimoAdm3) / 100)                                                                 
            
  If (@AcrescimoRedVenda <> 0) and (@ValorTotal > 0)       
  begin      
 --397007        
    if (@AcrescimoRedVenda > @ValorTotal)      
      Set @FatorRedVenda = 0      
    else        
      Set @FatorRedVenda = @FatorRedVenda - Round(((@AcrescimoRedVenda * 100) / @ValorTotal) / 100,4)      
  end      
                                                                      
  --Renato - 290579                                                                        
  -- Se for uma venda fora do estado com ICMS, e os Percentuais de ICMS e SubTrib da Compra estiverem informados                                                                        
  -- na Lista de Preco vai abater o ICMS da compra no Custo.                                                                        
  If ((@CidEmpCodEstado <> @CidCodEstado) and (@ValorICM > 0) and (@PercICMCusto > 0) and (@PercSubTribCusto > 0))  
  begin  
    --408846    
    -- checagem tipomargemliquida = 0 é para evitar mudança no cálculo da margem de 
    -- clientes que utilizam este tipo de cálculo
    if (@TipoMargemLucro = 0 and @TipoMargemLiquida = 0)
    begin  
      Set @ValorCustoCalc = dbo.CalculaCustoLiquido (@Empresa, @LisValorCustoBruto,   
            @LisPercDesconto1, @LisPercDesconto2, @LisPercDesconto3, @LisPercDesconto4,   
            @LisPercDesconto5, @LisPercAcrescimo1, @LisPercAcrescimo2, @LisPercAcrescimo3,   
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)  
    
      Set @ValorICMCustoCalc = Round((@PercICMCusto / 100.00) * @ValorCustoCalc,2)  
      Set @FatorRedCusto = @FatorRedCusto - (@ValorICMCustoCalc / @LisValorCustoLiquido)  
    end    
    else  
      Set @FatorRedCusto = @FatorRedCusto - (@PercICMCusto / 100)  
  end    
                                                                    
end                                                                           
  --Renato - 278440                                                                       
If (@PerRedDespesa <> 0) and (@FlagDeduzirDespNaoInclNaMargem = 1) and (@ParTipoReducaoICM <> 2)                                                                                                                           
begin                                                                                                                            
  Set @FatorRedVenda = @FatorRedVenda - @PerRedDespesa                                                                                      
end                                                                                                              
                                                                  
                                                                  
--Eder - 303720                                                                          
Set @AcrDespesasPisCOFINS = @AcrescimoBaseICM                                                              
if (@OprFlagIPISobrePisCofins = 1)  --Calcula IPI sobre Pis e COFINS                           
  Set @AcrDespesasPisCOFINS = @AcrDespesasPisCOFINS + @VAuxValorIPI                               
               
-- Renato - Chamado 272165        
Select @ValorBasePisCofins = ValorBasePisCofins,                                                                           
       @AliqPis = AliqPis,                                                                  
       @AliqCofins = AliqCofins,                                                                  
       @NumCstPisCofins = NumCstPisCofins,                                                             
       -- Renato - 297792                                                            
       @NatReceitaPisCofins = NatReceitaPisCofins,                                                
       -- Renato - 332318                                              
       @NatBaseCalcCredito = NatBaseCalcCredito,                              
    -- Renato - 361650                            
       @AliqComplPis = AliqComplPis,                                                         
       @AliqComplCofins = AliqComplCofins                            
                                                                        
From dbo.Calcular_PisCofins(@Empresa, @CodProduto, @CodEntidade, @CodTributacao, @CodOperacao,                                                                         
                            @CodClassFiscal, @ValorTotal, @AcrDespesasPisCOFINS,                
                            -- Renato - 297792                                                                
            @FlagEntrada)                                                                                                                                                                                      
                                                                      
if @CodProduto = 8888888                                                                                      
begin                                                                                                                                                                                      
  If @EntTipoPessoa in('F','N') and @CidCodEstado <> @CidEmpCodEstado and @CidCodEstado <> 'EX'                                                                                                                                                               
  
    
      
        
     and Ltrim(@OprCFOP_Servico_NCFora) <> ''                                                                                                                    
     Set @NumCFOP = @OprCFOP_Servico_NCFora                                                                                            
  Else                                                                                                                                             
     Set @NumCFOP = @OprCFOP_Servico                                                                                                                
end                                                                                 
else                                                                                                                                                                  
Begin                                                                                                                                
  If @TriTipoCFOP = 1 or @TriTipoCFOP = 0                                
  begin                                                                                                                               
    If @EntTipoPessoa in('F','N') and @CidCodEstado <> @CidEmpCodEstado and @CidCodEstado <> 'EX'                                                                                                                                                              
 
       and Ltrim(@OprCFOP1_Normal_NCFora) <> ''                                                                                                               
      Set @NumCFOP = @OprCFOP1_Normal_NCFora                                                                   
    Else                                                                                               
      Set @NumCFOP = @OprCFOP1_Normal                                                                                 
  end                                                                                                              
          
  If @TriTipoCFOP = 2                                                                                                                                                                                      
  begin                                                                                                                                                       
    If @EntTipoPessoa in('F','N') and @CidCodEstado <> @CidEmpCodEstado and @CidCodEstado <> 'EX'                                                                                                              
         and Ltrim(@OprCFOP2_Industrializado_NCFora) <> ''                       
      Set @NumCFOP = @OprCFOP2_Industrializado_NCFora                                                                          
    Else                                                                                                                       
      Set @NumCFOP = @OprCFOP2_Industrializado                                                                    
  end                                                                                             
          
  If @TriTipoCFOP = 3                                                                                          
  begin                                                                    
    -- JALDO - CHAMADO 184880                                                                                                                        
    -- If @EntTipoPessoa in('F','N')                                                                                                                                   
    If @EntTipoPessoa in('F','N') and @CidCodEstado <> @CidEmpCodEstado and @CidCodEstado <> 'EX'                                                                                                                          
      Set @NumCFOP = @OprCFOP3_SubRevenda_NC                                                                                                          
    Else                                 
      Set @NumCFOP = @OprCFOP3_SubRevenda                            
  end                                                                                 
        
  If @TriTipoCFOP = 4                                                                                                                                                                                      
  begin                                                             
    -- JALDO - CHAMADO 184880                                                                             
    --If @EntTipoPessoa in('F','N')                                                                                                                         
    If @EntTipoPessoa in('F','N') and @CidCodEstado <> @CidEmpCodEstado and @CidCodEstado <> 'EX'                                                                                                                   
      Set @NumCFOP = @OprCFOP4_SubRevendaML_NC                                                                                                                                                                                      
    Else                                                                                                    
      Set @NumCFOP = @OprCFOP4_SubRevendaML                                                                                    
  end                                                                                                                              
          
  If @TriTipoCFOP = 5                                                 
  begin         
    If @EntTipoPessoa in('F','N')                                                            
      Set @NumCFOP = @OprCFOP5_SubFabricacao_NC                                                                                              
    Else                                                                                                                                                                                      
      Set @NumCFOP = @OprCFOP5_SubFabricacao                                                                      
  end                                                                                                                                          
          
  If @TriTipoCFOP = 6                                                                                                                           
  begin                                                                                              
    If @EntTipoPessoa in('F','N')                                                                                            
      Set @NumCFOP = @OprCFOP6_SubFabricacaoML_NC                                                                                                                       
    Else                                                                 
      Set @NumCFOP = @OprCFOP6_SubFabricacaoML                                      
  end                                                                                                 
          
  If @TriTipoCFOP = 7                                
  begin                                                                                                                                                                        
    Set @NumCFOP = @OprCFOP7_Importado                                                                                                                                                             
  end                                                                                                                                                        
          
  If @TriTipoCFOP = 9                                                       
  begin              
    -- danilo If @EntTipoPessoa in('F','N','C','P')        
    If @EntTipoPessoa in('F','N')        
      Set @NumCFOP = @OprCFOP9_Petroleo_NC                                                                         
    Else                                                                                                                                                                                      
      Set @NumCFOP = @OprCFOP9_Petroleo                                                                                                                                           
  end         
end                                                                                                       
                                                                                                                                   
If Substring(@NumCFOP,1,1) in ('1','2','3') and @CidCodEstado <> @CidEmpCodEstado                                                                                                                                                  
   If @CidCodEstado <> @CidEmpCodEstado and @CidCodEstado = 'EX'                                                          
      Set @NumCFOP=Stuff(@NumCFOP,1,1,'3')                                                                                                                                  
 Else                                                                                                        
      Set @NumCFOP=Stuff(@NumCFOP,1,1,'2')                                                                                                                                                                                         
If Substring(@NumCFOP,1,1) in ('5','6','7') and @CidCodEstado <> @CidEmpCodEstado                                                                                                                                             
    
 If @CidCodEstado <> @CidEmpCodEstado and @CidCodEstado = 'EX'                                                                                                                                                     
      Set @NumCFOP=Stuff(@NumCFOP,1,1,'7')                                                                                               
   Else                                                                                                                
      Set @NumCFOP=Stuff(@NumCFOP,1,1,'6')                                                                      
                                                                                                            
--MARCELO - CHAMADO 209798                                                                                       
/*                                                                                                            
CFOP 5.405 não existe o seu correlado 6.405 para vendas fora do estado,                                                                                                             
devendo ser utilizado em seu lugar o CFOP 6.404, conforme reunião defina                                                            
com Eder                                                                                  
*/                                                                                                          
--Rafael chamado 224824                                                                   
  --6.405  -> 6.404                                                                                                      
  --6405  --> 6404                                                                                                      
                                                                                                      
--if (Replace(@NumCFOP,'.','') = '6405')                                                                    
  --set @NumCFOP = '6404'                                                                                                       
                                                                                                  
if (@NumCFOP  = '6.405')                        
  set @NumCFOP = '6.404'                                                                                                            
                                                                                           
if (@NumCFOP  = '6405')                                                                                                       
  set @NumCFOP = '6404'                                                                                                    
                                                                                                                              
If @NumCFOP is null                                                                                                                                                                        
   Set @NumCFOP = ''                                             
                                                                                                                                                                                       
If @AliqICM is null                                                                                              
   Set @AliqICM=0                                             
                                                                                                                                                        
if @CodProduto = 8888888                                        
Begin                                                          
  -- Renato - 341779                                             
  if (@OprFlagICMSSobreServicos = 0) or (@OprTipoIcm in (1,2))                                
  begin                           
    set @AliqICM = 0                                                                                                                                                                        
    set @ValorBaseIcm = 0                                                                                     
    set @ValorICM = 0                                                                                      
    set @ValorIsentoICM = 0                                                                                                                            
    set @ValorOutrasICM = 0                                                       
                                 
    if (@OprFlagICMSSobreServicos = 0)                                            
    begin                                              
 -- Mantendo compatibilidade com versões antigas, ou seja, se o usuario não marcar o FlagICMSSobreServicos                                             
   -- o sistema não muda a forma de gerar os impostos dos serviços.                                                                               
      if (@TriTipoValorNaoTributado = 0)                                                                                
        set @ValorIsentoICM = @ValorTotal + @AcrescimoBaseICM                                                                                                                                
      else                                                                                                                      
        set @ValorOutrasICM = @ValorTotal + @AcrescimoBaseICM                                              
    end                                            
    else                                            
    begin                                            
      if (@OprTipoIcm = 1)                                                                                
        set @ValorIsentoICM = @ValorTotal + @AcrescimoBaseICM                                                                   
      else                                                                                                                      
        set @ValorOutrasICM = @ValorTotal + @AcrescimoBaseICM                                              
    end                                            
                      
  end                                    
  else if ((@OprFlagICMSSobreServicos = 1) and (@OprTipoIcm = 0) and ((@AliqICM = 0) or (@ValorBaseIcm = 0)) )                                            
  begin                                            
    if (@TriTipoValorNaoTributado = 0)                                             
      set @ValorIsentoICM = @ValorTotal + @AcrescimoBaseICM                                                                                                                                
    else                             
      set @ValorOutrasICM = @ValorTotal + @AcrescimoBaseICM                                             
  end                                            
                                                
  set @ValorBaseSubTrib = 0                                                                                                                                                                       
  set @ValorSubTrib = 0                                                                                                                                     
  set @ValorBaseSubTribCarga = 0                                                                                                                                             
  set @ValorSubTribCarga = 0                                                                                                                                                                        
  set @RedBaseSubTrib = 0                           
--Eder - Chamado  170325                                                                                      
--  set @FatorRedCusto = 1                                                                                                              
  set @FatorRedVenda = 1                                                                                                                                                                        
  set @AliqPISCOFINS = 0                                              
                                                                                                          
end                                                                          
                                                                  
                               
--Eder - 297029                                                                   
--383214 If (@ValorBaseICM > 0 and @ValorIsentoICM > 0)                              
If ((@ValorBaseICM > 0 or @ValorOutrasICM > 0) and @ValorIsentoICM > 0)                              
begin                                
  --Renato - 361064                               
  if (@TriPerReducaoICM = 0) and (@OprPerRedICM <> 0)                                
    Set @PerReducaoICM = @OprPerRedICM                              
  else if (@TriPerReducaoICM <> 0) and (@OprPerRedICM = 0)                                
    Set @PerReducaoICM = @TriPerReducaoICM                               
  else                              
    Set @PerReducaoICM = Round(@ValorIsentoICM / (@ValorBaseICM + @ValorIsentoICM) * 100,2)                                                                                       
end                             
else                                             
  Set @PerReducaoICM = 0                                  
                              
                                   
                                                                                                         
--Define o valor de isento ou o valor de outras para o que não foi tributado                                                                                                                                                                  
if @CodProduto <> 8888888 and @ValorIsentoICM > 0                                                       
begin                                                                                         
  --Chamado 156315 - calculando errado valor de isentas com tributação com coluna de outras                                                 
 If @OprTipoICM = 2 or                                                                                           
    (@TriTipoValorNaoTributado = 1 and @OprTipoICM = 0)                                               
  begin                                                                                                                                                                
    If  not (@OprTipoSubTributaria in(2,3) and @ClaFlagSubTributaria = 1 and @GruFlagSubTributaria = 1                                                                                                                                                      
           and @EstFlagConvSub = 1                                                                                                                                                                   
            and (@TriFlagSubTributaria = 1 or @MVA <> 0))                          
       or @OprTipoICM = 2                                                                                              
    begin                                                                                                                                                                      
      Set @ValorOutrasICM = @ValorIsentoICM                                                                          
      Set @ValorIsentoICM = 0                                                                                       
    end                                                                                            
  end                                        
end                                
                              
if (@ValorBaseSubTrib = 0  and @ValorSubTrib = 0 and @ValorBaseSubTribCarga = 0 and @ValorSubTribCarga = 0)                              
begin                              
  set @EstAliqInterna = 0                              
  set @MVA = 0                               
end                                                                            
                                                                                                          
Insert Into @Campos (AliqICM, ValorBaseICM, ValorICM, ValorIsentoICM, ValorOutrasICM, PerReducaoICM,                                                
               ValorBaseSubTrib, ValorSubTrib, FatorRedCusto, FatorRedVenda, NumCFOP,                                                                    
               ValorBaseSubTribCarga, ValorSubTribCarga, PerRedBaseSubTrib, AliqPISCOFINS,                                                                          
    -- Renato - Chamado 272165                                                                            
               ValorBasePisCofins, AliqPis, AliqCofins,                                                                  
               NumCstICM, NumCstIPI, NumCstPisCofins, NumCsosn,                                                             
               -- Renato - 297792                                                            
               NatReceitaPisCofins,                                               
               -- Renato - 332318                                              
           NatBaseCalcCredito,                                 --Ronaldo 343696                                  
   IndNaturezaFrete,                                                    
               --Gabriella - 333391                                   
               ValorBaseIPI,                                              
               ValorIsentoIPI,                                                 
               ValorOutrasIPI,                              
               AliqICMSST,                              
               PercMvaICMSST,                            
               --Renato - 361650                            
               AliqComplICM,                            
               AliqComplPis,                            
               AliqComplCofins)                                                            
                                                                                                                                                             
       Values (@AliqICM, @ValorBaseICM, @ValorICM, @ValorIsentoICM, @ValorOutrasICM, @PerReducaoICM,                                                     
               @ValorBaseSubTrib, @ValorSubTrib, @FatorRedCusto, @FatorRedVenda, @NumCFOP,                                                                                                                             
               @ValorBaseSubTribCarga, @ValorSubTribCarga, @RedBaseSubTrib, @AliqPISCOFINS,                                                               
               -- Renato - Chamado 272165                                                                             
               @ValorBasePisCofins, @AliqPis, @AliqCofins,                                                                  
               @NumCstICM, @NumCstIPI, @NumCstPisCofins, @NumCsosn,                                                             
               -- Renato - 297792                                                            
               @NatReceitaPisCofins,                                               
               -- Renato - 332318                                              
               @NatBaseCalcCredito,                                   
               --Ronaldo 343696                                  
               @OprIndNaturezaFrete,                                             
               --Gabriella - 333391                                                     
               @ValorBaseIPI,                                              
               @ValorIsentoIPI,                                                                                                                                
               @ValorOutrasIPI,                              
               --Renato - 360358                              
               @EstAliqInterna,                              
               @MVA,                            
               --Renato - 361650                            
               @TriAliqComplICM,                            
               @AliqComplPis,                            
               @AliqComplCofins)                                                               
Return                                                                  
                                                                  
end 

GO


Alter procedure [dbo].[Stored_PRFT110Processar]                                      
--PASSAR OS PARAMETROS NUMERIC COMO "INT" POIS CASO CONTRARIO A STORED PROCEDRE DO DBEXPRESS RECONHECE                                                                                                                                                         
  
--O PARAMETRO COMO FLOAT E ENVIA UM VALOR ERRADO.                                                                                                                                                                        
--QDO. ALTERAR PARAMETROS DA PROC. NÃO ESQUECER DO PRG. PRCE100NOTA                                                                                                                                                                         
@Empresa int,                                                                                                                                                                        
@FlagCupom int,   --0 Nota, 1-Cupom, 2-Nota e Cupom                                                                                                                                                                        
@Ped_Sequencia int,                                                                                                                                                                        
@Venc_Sequencia int,                                                                                                                                                                        
@CodCondPagto char(5),                                                                                                                                                                        
@CodOperacao int,                                                                                              
@CodUsuario int,                                               
@CodBanco int,                                                                                                                                                                        
@CodOperacaoDup char(5),                                                                                                                                                                        
@CodVendInterno int,                                                                                                                                                                        
@CodVendExterno int,                                                                                                                                                                        
@FlagCustoMedio int,                                                                                                                                                                        
@SerieControle char(3),                                                                                                                                                                        
@FlagPrce100 int,                                                                                                                                                                      
@TipoDuplicataPedido int,                                                                                                                                                                    
@CodDepartamento varchar(9),                                                                                                                                                                    
@ObsCupom varchar(400),                                                                                                                                                          
@NumEquipamentoCF int,                                                    
@CodStatusPed int,              
--158510                         
@FlagSepararServico tinyint,                                      
@SerieControleServico char(3),                                                                      
@CodOperacaoServico int,                                
--Rafael chamado 202157                                
@FlagUnirObservacao tinyint,                                                   
                                                       
@MensagemERRO varchar(400) Output                                              
as                                                         
/********************                                                         
-- VERSÃO 1.99                                                                           
********************/                                                                                  
---declaração de variaveis auxiliares para o processamento                                                                                                                                                                                  
declare @CodPedido numeric(9)                                                                                                                                  
declare @TipoPedido numeric(1)                                                                                                      
declare @CodOs numeric(9)                                                                                                                                                                                                                                     
   
    
     
         
         
declare @TipoControle numeric(1)                                                                                        
declare @CodControle numeric(9)                                                                                                                             
declare @TipoDuplicata numeric(1)                                                                                                                                                                 
declare @EmpresaEstoque numeric(2)                                                                                                                                                                        
Declare @CodTipoEstoque numeric(3)                                                                                                                
Declare @CodTipoEstoqueContra numeric(3)                                                                                                                                            
--MARCELO - CHAMADO 158510/199271                                                    
--Declare @PedCodControle numeric(9)                                                                                                                    
declare @AuxEmpresa numeric(2)                                                                                                                              
declare @AuxNumLancamento int                                                                                                                                                  
declare @AuxCodProduto numeric(7)          
--341745                                                                                                                                                        
--declare @AuxCodEntidade char(7)                                                                                                                                                               
declare @AuxValorTotal decimal(11,2)                                                                                                                                                                       
declare @AuxPmvAcumulo decimal(11,2)                                                                                
declare @AuxPmvValores decimal(11,2)                                
declare @AuxQuantAtendida decimal(10,3)                             
declare @Existe int                                                                                                
declare @NumDocumento numeric(6)                                                                                           
declare @SalvaNumDocumento numeric(6)                                                                   
--158510                                             
declare @SalvaNumDocumentoServico numeric(6)                                                            
declare @Especie char(3)                                                                                                                                                             
declare @FlagAtualizaDuplicata numeric(1)                                                                                          
declare @PrazoMedio numeric(3)                                                                      
Declare @DataMovimento DateTime                                                   
Declare @ClasseABC char(1)                                                                    
Declare @NumSerieECF varchar(20)                                                                        
--MARCELO - CHAMADO 158510/199271                                                                             
/*declare @SomaBaseICMItem decimal(11,2)                                                                                                                                
declare @SomaIsentoICMItem decimal(11,2)                                                                                                                                     
declare @SomaOutrasICMItem decimal(11,2)                                                                                                                           
declare @SomaContabilNota decimal(11,2)*/                                                    
--158510 declare @QuantNota int                                                                                            
--158510                                                                                            
declare @QuantNotaItem int                                                                                          
declare @QuantNotaServico int                                                                                            
declare @QuantNotaTOTAL int                                                                                            
declare @SerieControleCursor char(3)                                                                                          
declare @FlagServico int                                                                                          
declare @CodOperacaoCursor int                                                                                        
Declare @Resto float                                            
Declare @quantquebranota int                                                                                                                                                    
declare @ContadorItem int                                                                                                            
declare @ContadorNota int                                                                                                                                                                        
declare @EmpresaAntOS numeric(2)                                                                                                                                                       
declare @FlagMovEstoque numeric(1)                                                                                                                 
declare @FlagDevolucao numeric(1)                            
declare @FlagGerarDuplicata numeric(1)                                                                                                                                  
--MARCELO - CHAMADO 158510/199271                   
--declare @FlagObrigaLancFiscais smallint                                                                                 
--183245                                                                 
declare @ValorCustoForTotal decimal(18,4)                                                                                    
declare @ValorCustoUltTotal decimal(18,4)                                                                                    
declare @ValorCustoUltRealTotal decimal(18,4)                                        
declare @ValorCustoMedTotal decimal(18,4)                                                                                   
declare @ValorCustoSerTotal decimal(18,4)                                                                                    
--196249                                                        
declare @AuxCodPedido int                                          
--MARCELO - CHAMADO 215809                                        
declare @ValorSTPedido decimal(18,4)                                                    
declare @ValorSTNota decimal(18,4)                                        
declare @DiaVencimentoST smallint                                        
declare @DataVencimentoDupST datetime                         
-- Renato  - Chamado 271880                    
Declare @TipoAtualizaDataMovEstoque smallint                     
--EDER RAMOS - Chamado 302201                
Declare @FlagNaoGerenciarNumDocumento smallint                   
--Gabriella - 301399              
Declare @EmpID varchar(15)                         
--341745                                                                                                                                                           
Declare @EntidadeNotaFiscal char(7)         
--Ronaldo chamado 346431        
Declare @CodTransp char(7)                      
          
Set @MensagemErro = ''                     
                    
-- Renato  - Chamado 271880                    
Select @TipoAtualizaDataMovEstoque = TipoAtualizaDataMovEstoque                    
From ConfiguracaoSistema               
              
--Gabriella - 301399              
Select @EmpId = Id From Empresas                                                              
Where Codigo = @Empresa                                                                                                                      
                                                                                                                          
Select                     
     @FlagGerarDuplicata = Par.FlagGerarDuplicata,                        
        --Rafael chamado 254456                        
       --@SalvaNumDocumento = isnull(ParSerie.UltimaNota,0)                        
       @SalvaNumDocumento = isnull(ParSeq.UltimaNota,0),                        
       @QuantQuebraNota =  Case When @FlagCupom = 1 then 99999  --Cupom Fiscal não precisa quebrar os itens                            
                                When ParSerie.QuantItemNota > 0 then Cast(ParSerie.QuantItemNota as Int)                             
                                Else 99999 end                                                       
From ParamControle Par                        
Left Join ParamControleSerie ParSerie on ParSerie.Empresa = @Empresa and ParSerie.Serie=@SerieControle                        
Left Join ParamControleSequencia ParSeq on ParSeq.Empresa = @Empresa and ParSeq.Serie=@SerieControle                        
                         
                                                                                      
where Par.Empresa=@Empresa                                                             
                                                   
--158510                                                                                          
if (@FlagSepararServico = 1)                                    
begin                            
  --Rafael chamado 254456                                            
  --Select @SalvaNumDocumentoServico = isnull(ParSerie.UltimaNota,0)                            
   Select @SalvaNumDocumentoServico = isnull(ParSeq.UltimaNota,0)                
 --   @FlagNaoGerenciarNumDocumento = ParSerie.FlagNaoGerenciarNumDocumento                                                                                                   
  From ParamControle Par                            
   --EDER RAMOS 304095                                                                               
    --Left Join ParamControleSerie ParSerie on ParSerie.Empresa = @Empresa                
 --         and ParSerie.Serie = @SerieControleServico                           
     Left Join ParamControleSequencia ParSeq on ParSeq.Empresa = @Empresa                                                                            
      and ParSeq.Serie = @SerieControleServico                                                                                          
  where Par.Empresa = @Empresa                                                         
end                                                                                         
                                                                                          
                                                                                                        
if @FlagGerarDuplicata Is Null                                                                                 
begin                                                                                                                                                                
  Set @MensagemErro = 'Não Existe Parâmetro de Controle Cadastrado!'                                                                                                                                                               
  Return                                                                                                                                                                        
end                                                                                                           
                                                                                          
If (@FlagPrce100 = 0) and                                                                                        
   (Exists(select TItem.CodPedido                          
             from TempPrft110Pedido TPed                          
             Left Join TempPrce100Itens TItem on TItem.Empresa = TPed.Empresa                          
                                             and TItem.CodPedido = TPed.CodPedido                          
            where TPed.Empresa=@Empresa                          
              and TPed.NumSequencia = @Ped_Sequencia                          
              and TItem.CodPedido is not null))                                                                                                                             
begin                                                                                                                                                      
  Set @MensagemErro = 'Existem Pedidos em uso e não podem ser processados!'                                                                                                                                                    
  Return                                                                                           
end                                                                          
                                                                                                                                                    
If Exists(Select T.Empresa                     
            From TempPrft110Pedido T, Pedidos P                                                                                                                                                    
Where T.Empresa=@Empresa                                                               
             and T.NumSequencia = @Ped_Sequencia                                                                                                 
             and P.Empresa = T.Empresa                                                                                   
          and P.CodPedido = T.CodPedido                                                                 
          --MARCELO - CHAMADO 204207                                        
          and P.FlagProcessar = 2                                                  
        and P.StatusNota <> 0)                      
begin                                                                                                                              
  Set @MensagemErro = 'Existem Pedidos faturados e não podem ser processados novamente!'                                                    
  Return                                                                                                                                        
end                                                                                                                                    
                                                                                                  
                                                                            
/* Não permitir que seja informada operaçõe para serviços com parâmetros diferentes                                                                                          
   da operação fiscal principal de produtos*/                                                                                          
--158510                                                    
if (@FlagSepararServico = 1) and                                                                                           
    Exists(Select                                                                          
        OpItem.Codigo                                                                                          
From Operacoes OpItem                                                                                          
        Left Join Operacoes OpServ on OpServ.Codigo = @CodOperacaoServico                                                                                          
      Where                                                                                
        OpItem.Codigo = @CodOperacao                                                                                          
     and                                                                                           
          (OpItem.TipoBaixaEstoquePedido <> OpServ.TipoBaixaEstoquePedido                                                                             
        or OpItem.TipoMovimento <> OpServ.TipoMovimento                                                                            
           or OpItem.CodTipoEstoque <> OpServ.CodTipoEstoque                                                                                          
           or OpItem.CodTipoEstoqueContra <> OpServ.CodTipoEstoqueContra                                                                                          
           or OpItem.TipoDuplicataPedido <> OpServ.TipoDuplicataPedido))                                                                                        
begin                                                                                          
  Set @MensagemErro = 'As configurações da operação fiscal para a Nota Fiscal de Produtos'+Char(13)+                                                                                          
                      'estão diferentes da operação fiscal para a Nota Fiscal de Serviços.'+Char(13)+                                                                                          
                      'Verifique os seguintes campos: Tipo de Movimento, Controle de Baixa de Estoque,'+Char(13)+                                                                                          
                      'Geração de Duplicatas e Detalhamento do Estoque.'                                                                                            
  Return                                                                                               
end                                                                          
                                                                                          
                                                                                                                                                                     
--Limpa os dados da tabela temporaria de nota                                                                                                                     
Delete From TempPrft110Nota Where NumSequencia = @Ped_Sequencia                                        
                                                                                                                                                                        
Set @EmpresaEstoque = (Select EmpresaEstoque From Empresas Where Codigo=@Empresa)                                                                                                            
                                                                                                  
                                                                                                                                                
---Pega os Dados do Primeiro Pedido mais antigo que vai processar                                   
Select Top 1 @CodPedido = TempPrft110Pedido.CodPedido,                                                                                         
             @TipoPedido = Pedidos.TipoPedido,                                                                                                                             
             @CodOS = Pedidos.CodOs,                                                               
             @EmpresaAntOS = Pedidos.EmpresaOS,          
             --341745                                                                                                               
             @EntidadeNotaFiscal = Case when isnull(OrdemServico.CodEntidadeNF,'') ='' then Pedidos.CodEntidade           
                                   else OrdemServico.CodEntidadeNF end            
        from TempPrft110Pedido                                                                                                                                                        
        left Join Pedidos On Pedidos.Empresa = TempPrft110Pedido.Empresa and Pedidos.CodPedido = TempPrft110Pedido.CodPedido           
        --341745           
        Left Join OrdemServico On OrdemServico.Codigo = Pedidos.CodOS and OrdemServico.Empresa = Pedidos.EmpresaOS                                                                                                                      
                  
        where NumSequencia = @Ped_Sequencia                                                                                                                                                                     
        order By Pedidos.CodOS Desc, TempPrft110Pedido.DataMovimento Desc, TempPrft110Pedido.CodPedido Desc                                                                                                                                                   
  
    
      
        
          
            
--Ronaldo Chamado 346431        
Declare CursorTranspPedido Cursor Local Fast_Forward for          
  Select Pedidos.codtransp from TempPrft110Pedido        
  left Join Pedidos On Pedidos.Empresa = TempPrft110Pedido.Empresa and Pedidos.CodPedido = TempPrft110Pedido.CodPedido         
  Left Join OrdemServico On OrdemServico.Codigo = Pedidos.CodOS and OrdemServico.Empresa = Pedidos.EmpresaOS                                                                                                                    
  where NumSequencia = @Ped_Sequencia                                                                                                                                                                   
  order By Pedidos.CodOS Desc, TempPrft110Pedido.DataMovimento Desc, TempPrft110Pedido.CodPedido Desc        
Open CursorTranspPedido                                         
Fetch Next From CursorTranspPedido Into @CodTransp                                                
While @@Fetch_Status = 0                                                                                                                 
begin         
 if @CodTransp <> ''        
   break        
        
 Fetch Next From CursorTranspPedido Into @CodTransp                                            
end                                                                         
Close CursorTranspPedido                                                                                                            
Deallocate CursorTranspPedido               
                                                         
                                                                 
--verifica se existem pedidos de empresa diferente para regravar as empresas                                                                        
Set @Existe = null                        
select Top 1 @Existe = CodPedido                        
  From TempPrft110Pedido                                                                          
 Where NumSequencia = @Ped_Sequencia                                                                                                         
   and Empresa <> @Empresa                                                                                                                                                                        
                                                                                                                     
If (@Existe is not null)                        
begin                                          
  Declare CursorEmp Cursor Local Fast_Forward for                                                                                                                              
    Select Empresa, CodPedido                                                                                                                                                         
      From TempPrft110Pedido                                                                                                                                                                        
     Where NumSequencia = @Ped_Sequencia                                                                                                                                                                          
       and Empresa <> @Empresa                                                                                                                                                                        
  Open CursorEmp                                            
  Fetch Next From CursorEmp Into @AuxEmpresa, @AuxCodPedido                                                        
  While @@Fetch_Status = 0                                                                                                                   
  begin                                      
    --Atualiza a Empresa dos itens dos Pedidos                                                                                                                                                        
    Update MovEstoque                                       
       Set Empresa=@Empresa,                                
           StatusTransacao=1                                                                                                                        
     where Empresa = @AuxEmpresa                                                                                                                                                                        
       and CodPedido = @AuxCodPedido                                                        
       and Empresa<>@Empresa                                               
                                                                                                                                                     
    --Atualiza a Empresa dos Pedidos                   
    Update Pedidos                                                                                                                                               
       Set Empresa=@Empresa,                                                                                                                                         
           StatusTransacao=1                                                                                                                               
     where Empresa = @AuxEmpresa                                                      
       and CodPedido = @AuxCodPedido                                                        
   and Empresa<>@Empresa                                                                                  
                                                                
    --Atualiza a Empresa dos Vencimentos do Pedido                                                                                                                                
    Update VencPedido                                                                                                           
       Set Empresa=@Empresa,                                                                                                                                            
           StatusTransacao=1                                                                                                                                                    
     where Empresa = @AuxEmpresa                                                                                                                                                                        
       and CodPedido = @AuxCodPedido                                                        
       and Empresa<>@Empresa                                                                                                                                    
                                                                      
    --Atualiza a Empresa das Embalagens do Pedido                                                                                                                                                              
    Update EmbalagemPedido                                                                                                                                                                        
    Set Empresa=@Empresa,                                                                                              
           StatusTransacao=1                                                                                                               
     where Empresa = @AuxEmpresa                                       
       and CodPedido = @AuxCodPedido                                                        
       and Empresa<>@Empresa                                                 
                                                                                                         
    --Atualiza a Empresa das Observações do Pedido                                         
    Update ObsPedidos                        
       Set Empresa=@Empresa,                                                                                             
           StatusTransacao=1                                                                                                       
     where Empresa = @AuxEmpresa                                                                                                                                           
       and CodPedido = @AuxCodPedido                                                        
       and Empresa<>@Empresa                                                                                                                                                                        
                                                      
    --Atualiza as Retencoes do Pedido                                                                                                                                                                        
    Update PedidosRetencao                                                                                                                                                       
       Set Empresa=@Empresa,                                                                   
    StatusTransacao=1                                                                                                        
     where Empresa = @AuxEmpresa                                                                                                                                                                    
       and CodPedido = @AuxCodPedido                                                        
       and Empresa<>@Empresa                                  
                              
    --Atualiza as Anotacoes do Pedido                                                                                        
    Update Anotacoes                                                                                                                                                
       Set EmpresaAnotacao = @Empresa,                                                                                                                                              
           StatusTransacao = 1                                                                                           
     Where EmpresaAnotacao = @AuxEmpresa                                                                                                                                
       and TipoAnotacao = 4                                                                                                           
       and ChaveTipo = cast(@AuxCodPedido as varchar(15))                                                                                                                        
                                                           
    --MARCELO - CHAMADO 191865                                                                          
    --Atualiza a Empresa dos Contatos dos Pedidos                                                                          
    Update PedidoContatos                                                                           
       Set Empresa = @Empresa,                                                                           
           StatusTransacao = 1              
     Where Empresa = @AuxEmpresa                                                               
       and CodPedido = @AuxCodPedido                                                        
       and Empresa <> @Empresa                                                                                 
                                                
--208221                      
                                     
    Update ItemEntregas Set                         
      --Renato - Chamado 277570                                
      --EmpresaPedido = @Empresa,                    
      Chave1 = @Empresa,                                                  
      StatusTransacao = 1                                                  
    Where             
      --Renato - Chamado 277570                                           
      --EmpresaPedido = @AuxEmpresa                                                
    --and CodPedido = @AuxCodPedido                       
      --and EmpresaPedido <> @Empresa                                               
      TipoRelacao = 0                      
      and Chave1 = @AuxEmpresa                      
      and Chave2 = @AuxCodPedido                      
      and Chave2 <> @AuxEmpresa                      
                                                       
                                                          
    Fetch Next From CursorEmp Into @AuxEmpresa, @AuxCodPedido                                                        
  end                                                                           
  Close CursorEmp                                                                                                            
  Deallocate CursorEmp                                                                                                                                                                        
                                                                                                                                                                
  --Atualiza a Empresa dos Pedidos da Tabela Temporaria                                                                                                                                                                        
  Update Tempprft110Pedido                                                                                                                                                                        
    Set Empresa=@Empresa                                                                                                  
   where NumSequencia = @Ped_Sequencia --Sequencia da tabela temporaria                                                                                               
     and Empresa<>@Empresa                                                                                                                                                                   
end                                                                                                                                                
                                                                                              
--Controle de baixa de estoque do pedido                                                                                                                                        
--Não baixa estoque se for "baixa na separação" ou "não baixa estoque"                             
Select                                                                                                        
  @FlagMovEstoque = Case When TipoBaixaEstoquePedido = 2 Then 0      --não baixa pois será baixado na seperaçao                                                                                           
                         When TipoBaixaEstoquePedido = 3 then -1     --nunca baixa estoque                                                                                                                                    
          Else 1 End,                  --Baixa estoque                                                       
  @FlagDevolucao = Case TipoMovimento When 1 then 1 Else 0 End--,                                                                                                            
  --MARCELO - CHAMADO 158510/199271                                                    
  --@FlagObrigaLancFiscais = FlagObrigaLancFiscais                                                                                                            
From                                    
  Operacoes                                                                                       
Where                      
  Codigo=@CodOperacao                                                                                                    
                                                                                                                                
If @TipoPedido = 0 or @TipoPedido = 1     ---Pedido/Requisicao                                                                       
Begin                                    
  set @TipoControle = 2   --Saída                                                                                                   
  set @TipoDuplicata = Case @FlagDevolucao when 1 then 1 else 2 end -- Duplicata A receber                                                                             
End                                                                                                                                                                        
Else                                                  
if @TipoPedido = 4 -- entrada                                                                                                                                  
Begin                                       
  set @TipoControle = 1                                                                                                                                                                        
  set @TipoDuplicata = Case @FlagDevolucao when 1 then 2 else 1 end --Duplicata a Pagar                                                                                                      
End                                                                                          
                                                                                          
/*158510 - movido para dentro do cursor das notas                                                                                          
Set @FlagAtualizaDuplicata = 0                                                                                          
                                                                                          
If Exists(Select NumSequencia From TempPrft110Venc where NumSequencia = @Venc_Sequencia)  ---Tem Duplicatas                                                                                          
      or (not Exists(Select NumSequencia From TempPrft110Venc where NumSequencia = @Venc_Sequencia) --Nao tem Duplicatas                                                                                          
                and (Select abs(UltimaDuplicata - UltimaNota) From ParamControleSerie                                                                                          
                     Where Empresa = @Empresa and Serie=@SerieControle) = 0)  --Numero de Nota igual ao de Duplicata                                                                
  Set @FlagAtualizaDuplicata = 1*/                                                                                          
                                                                                          
                                        
Set @Existe = 1                                                       
While @Existe = 1                                                                                                                        
Begin                                                                                                       
                                                                                     
   If @TipoControle = 1                                                                                                                             
      --MARCELO - CHAMADO 163320                                                                            
--      Execute ProximaSequencia 'NotasFiscaisEntrada', @Empresa, 1, @CodControle OUTPUT                                                          
      Execute @CodControle = ProximaSequencia 'NotasFiscaisEntrada', @Empresa, 1                                                                            
   Else                                                                              
      --MARCELO - CHAMADO 163320                 
--      Execute ProximaSequencia 'NotasFiscaisSaida', @Empresa, 1, @CodControle OUTPUT                                                                                                                          
      Execute @CodControle = ProximaSequencia 'NotasFiscaisSaida', @Empresa, 1                                                                            
                       
   --Verifica se existe um controle para a sequencia cadastrada                                                                                                           
   If not Exists(Select CodControle                                                                   
          From NotasFiscais                                                                                                                      
                  where Empresa=@Empresa                   
                    and TipoControle=@TipoControle                                                                             
                    and CodControle = @CodControle)                                                                                                                            
      Set @Existe = 0                                                          
End                                                                                                                                               
                                                                   
                            
--Move o Codigo do controle da Primeira Nota para as embalagens dos pedidos                                                                                                                      
Update EmbalagemPedido                                                                                                                                                                        
   Set TipoControle=@TipoControle,                                                                                                                                                                        
       CodControle=@CodControle,                                                                                                             
       StatusTransacao=1                                                                                                               
 Where Empresa in (Select Empresa From Tempprft110Pedido Where NumSequencia = @Ped_Sequencia)                                                                                                                                                   
   and CodPedido in (Select CodPedido From Tempprft110Pedido Where NumSequencia = @Ped_Sequencia)                                                                                                                                              
                                                                           
                                                                                       
--158510 - movido para dentro do cursor da nota                                                                
-- Select @DataMovimento = DataMovimento                                                                                                                                    
--   from ParamControleSerie                                                                                                                                                             
--  Where Empresa=@Empresa                                                                                                                                                                         
--   and Serie=@SerieControle                                                                                                               
                                                                                         
--MARCELO - CHAMADO 129410                                                                                                                           
Select @NumSerieECF = IsNull(Max(NumSerieECF),'')                               
--From AcumuloECF                                                                                                            
From EquipamentoECF                                                                                              
Where Empresa=@Empresa                                                   
  and NumEquipamento = @NumEquipamentoCF                                                                                                                                                        
                                                                                           
                                                                                                                                                              
--CHAMADO 198678 - MOVIDO PARA O CURSO DA NOTA FISCAL                                             
--Calculo do Prazo Medio                                                             
--Set @PrazoMedio = 0                                                                                        
--Set @AuxPmvAcumulo = (Select Sum(Cast(Vencimento - @DataMovimento as int) * Valor)                                                                                                                                                                        
--                  From TempPrft110Venc Where NumSequencia = @Venc_Sequencia and Vencimento > @DataMovimento)                                                                                                          
                      
                        
--121007                                                                                                         
--Set @AuxPmvValores = (Select Sum(Valor+ValorComplementar) From TempPrft110Venc Where NumSequencia = @Venc_Sequencia)                                                                                     
--If @AuxPmvValores > 0                                                                                                                                         
--   Set @PrazoMedio = isnull(Round(@AuxPmvAcumulo / @AuxPmvValores,0),0)                                                         
                                                                                                                                                                            
  --158510                                                                    
  Set @QuantNotaItem = 0                                                                                          
  Set @QuantNotaServico = 0                                                            
  Set @QuantNotaTOTAL = 0                                                                                          
                                                                                         
                            
  -- Eder Chamado - 252446                            
  select Top 1 @QuantNotaItem = (count(*) / @QuantQuebraNota),                                                                                                  
       @Resto = (count(*) % @QuantQuebraNota)                                                                                                                               
  from TempPrft110Pedido, MovEstoque                                                                                                                 
  where TempPrft110Pedido.NumSequencia = @Ped_Sequencia                                                                                                                                      
   and MovEstoque.Empresa = TempPrft110Pedido.Empresa                                                     
    and MovEstoque.CodPedido = TempPrft110Pedido.CodPedido                                                                         
  and MovEstoque.CodProduto <> 8888888 ----Nao pode considerar servicos como Item                                                                                          
    and MovEstoque.QuantAtendida > 0 --Itens sem quantidade não podem ser considerados                                                                                                                                                                        
                                          
/*158510                                                                                          
If (@Resto <> 0) or                                                                                          
(@QuantNota <= 0)                                                                                       
  Set @QuantNota = @QuantNota + 1*/                     
                                                                                          
  if (@Resto <> 0)                                                                   
    Set @QuantNotaItem = @QuantNotaItem + 1                                                                                  
                             
--158510                                                                                            
-- para processameto que separa NFs de serviços das NFs de produtos, soma ao contador                                                                                             
-- as notas que irão conter os serviços                                            
  if (@FlagSepararServico = 1)                                                                                          
  begin                                                                                             
    select Top 1                                                                                          
      @QuantNotaServico = 1                                                                                          
    from TempPrft110Pedido, MovEstoque                                                                                          
    where TempPrft110Pedido.NumSequencia = @Ped_Sequencia                                                                    
      and MovEstoque.Empresa = TempPrft110Pedido.Empresa                                                                                          
      and MovEstoque.CodPedido = TempPrft110Pedido.CodPedido                                                                                          
      and MovEstoque.CodProduto = 8888888 ----Nao pode considerar servicos como Item                                                                                          
      and MovEstoque.QuantAtendida > 0 --Itens sem quantidade não podem ser considerados                                                                                          
                                             
    if @QuantNotaServico is null                                                                                          
      Set @QuantNotaServico = 0                                                                                          
  end                                                        
                                                                 
--158510                              
Set @QuantNotaTOTAL = @QuantNotaItem + @QuantNotaServico                                                                                          
                                                                                          
                                                                                                                                 
Set @ContadorNota = 0                                                                 
                                                                              
--MARCELO - CHAMADO 189324                                                                              
if @QuantNotaTOTAL = 0                                                                              
begin                                                                              
  set @QuantNotaTOTAL = 1      
  set @QuantNotaItem = 1                                                                              
end                                                                              
                                                                                                                                                                        
--158510 While @ContadorNota < @QuantNota                                                                                          
While @ContadorNota < @QuantNotaTOTAL                                                                                          
Begin                                                                    
Set @ContadorNota = @ContadorNota + 1                                                                                                                                                                        
                                                                                                             
  If @ContadorNota <> 1                                                              
  Begin                                                  
    If @TipoControle = 1                                                                                          
      Execute @CodControle = ProximaSequencia 'NotasFiscaisEntrada', @Empresa, 1                                                                            
    Else                                                                              
      Execute @CodControle = ProximaSequencia 'NotasFiscaisSaida', @Empresa, 1                            
  End                                                                                                               
                                                                                                          
  --MARCELO - CHAMADO 136025                                                                                                          
  --verifica se existem lançamentos de movestoque associados ao controle que está sendo gerado                                                                                                          
  If Exists(Select Top 1 CodControle From MovEstoque                      
            Where Empresa = @Empresa                                                           
              and TipoControle = @TipoControle                                                                                                 
              and CodControle = @CodControle)                                                     
 begin                                                                                                          
    Set @MensagemErro = 'O controle ' + cast(@CodControle as varchar(10)) + ' que está sendo gerado, já possui Itens associados ! (Avise a Ribeirão System)'                                                    
    Return                                                                                                          
  end                                                            
  --MARCELO - CHAMADO 136025                                                                                                          
  --verifica se existem duplicatas associadas ao controle que está sendo gerado                          
  If Exists(Select Top 1 CodControle From Duplicatas                                                                                                          
       Where Empresa = @Empresa                                                              
              and TipoControle = @TipoControle                                                                                                          
              and CodControle = @CodControle)                                                                    
  begin                                                                                                          
    Set @MensagemErro = 'O Controle ' + cast(@CodControle as varchar(10)) + ' que está sendo gerado, já possui Duplicatas associadas ! (Avise a Ribeirão System)'                        
             
    Return                                                                                                 
  end                                                                                                          
  --MARCELO - CHAMADO 136025                                                                                                          
  If Exists(Select Top 1 CodControle From LancamentosFiscais                                                                                          
            Where Empresa = @Empresa                                                                
              and TipoControle = @TipoControle                                                                                        
              and CodControle = @CodControle)                                                                                           
  begin                                                            
    Set @MensagemErro = 'O controle ' + cast(@CodControle as varchar(10)) + ' que está sendo gerado, já possui Lançamentos Fiscais associados ! (Avise a Ribeirão System)'                                                                                    
  
    
      
        
          
            
              
                
                  
                    
                      
    Return                                                                                                          
  end                                                                                  
                                                                                                
  --158510                                                                                          
  -- quando está na primeira nota ou quando vai começar as notas de serviço                                                                     
  -- atualiza os dados lidos da série do parametro de controle                                                                  
  if ((@ContadorNota = 1) or (@ContadorNota = (@QuantNotaItem+1)))                                                                                           
  begin                                                                                          
    Set @FlagAtualizaDuplicata = 0                                                                                          
                                                                                          
    if (@ContadorNota <= (@QuantNotaItem))                                                                                          
    begin                                     
      Set @SerieControleCursor = @SerieControle                                                                                          
      Set @CodOperacaoCursor = @CodOperacao                                                                                          
    end                                                                                          
    else                                                                  
    begin                                                                                          
      Set @SerieControleCursor = @SerieControleServico                                                                                          
      Set @CodOperacaoCursor = @CodOperacaoServico                                         
    end                                                      
                                                          
    if Exists(Select NumSequencia From TempPrft110Venc where NumSequencia = @Venc_Sequencia)  ---Tem Duplicatas                                                                                          
          or (not Exists(Select NumSequencia From TempPrft110Venc where NumSequencia = @Venc_Sequencia) --Nao tem Duplicatas                            
                   --Rafael chamado 254456                               
                   -- and (Select abs(UltimaDuplicata - UltimaNota) From ParamControleSerie                            
                      and (Select abs(UltimaDuplicata - UltimaNota) From ParamControleSequencia                                                                                                                                  
    Where Empresa = @Empresa                                                                                           
                     and Serie = @SerieControleCursor) = 0)  --Numero de Nota igual ao de Duplicata                                                                                          
      Set @FlagAtualizaDuplicata = 1                                                                    
                                                      
    Select @DataMovimento = DataMovimento,                
    --Eder Ramos Chamado 302201                 
    @FlagNaoGerenciarNumDocumento = FlagNaoGerenciarNumDocumento                                                                                                                                                    
    from ParamControleSerie                     
    Where Empresa = @Empresa                                                                           
      and Serie = @SerieControleCursor                                                            
                         
    --MARCELO - CHAMADO 198678                                                      
    Set @PrazoMedio = 0                                                
    Set @AuxPmvAcumulo = (Select Sum(Cast(Vencimento - @DataMovimento as int) * Valor)                                                                                                                                                                        
                          From TempPrft110Venc                                                       
                          Where NumSequencia = @Venc_Sequencia                                                       
                            and Vencimento > @DataMovimento)                                                             
    Set @AuxPmvValores = (Select Sum(Valor+ValorComplementar)                                                       
        From TempPrft110Venc                                                       
                          Where NumSequencia = @Venc_Sequencia)                                                                                                                                       
    If @AuxPmvValores > 0                                                                                                                                                                     
      Set @PrazoMedio = isnull(Round(@AuxPmvAcumulo / @AuxPmvValores,0),0)                                                                                       
  end                                                                                      
                                                                
                                                                               
  Insert into TempPrft110Nota (NumSequencia, PosicaoNota, Empresa, TipoControle, CodControle)                                                                                          
                       values (@Ped_Sequencia, @ContadorNota, @Empresa, @TipoControle, @CodControle)                                                                                          
           
                  
  --Eder Ramos Chamado 302201                
  If @FlagNaoGerenciarNumDocumento = 0 -- gerar numero documento                
   begin                
                                                                                                    
   If @FlagCupom = 0 or @FlagCupom = 2     --Processamento de Nota, ou nota e cupom pega o numero da nota                                                                                                                                                      
 
     
           
           
           
               
                
                   
   begin                                                                              
  Set @Especie = 'NF'                                                                                               
                                
  Select @NumDocumento = UltimaNota + 1                            
  --Rafael chamado 254456                              
  --From ParamControleSerie                            
    From ParamControleSequencia                                                                                                        
 --158510 where Empresa=@Empresa and Serie=@SerieControle                                                                             
  where Empresa=@Empresa and Serie=@SerieControleCursor                                                                                          
                                            
  --Verifica Se Ja existe nota fiscal com o numero de documento que achou                    
  If Exists(Select Top 1 CodControle From NotasFiscais                                                                                         
       where Empresa=@Empresa                                               
      and TipoControle=2                                                                                                      
      and NumDocumento = @NumDocumento                                                                       
      --MARCELO 08/05/2006 - CHAMADO 112343                                                                                                                              
      and Especie = @Especie                                                                                                                              
 --158510                 and Serie=@SerieControle)                                                                                          
   and Serie = @SerieControleCursor)                                                                                          
                                                                                           
  begin                                                                                                                                                                        
    Set @MensagemErro = 'Já Existe Nota Fiscal Cadastrada com o Número de Documento: '                                                                                                                     
      + Cast(@NumDocumento as varchar)                                                                                                                  
         + ' e série '                                                                                                                                                                         
 --158510                          + Cast(@SerieControle as varchar)                                                                                          
         + Cast(@SerieControleCursor as varchar)                                                       
         + '.'                                                                        
    Return                             
  end                                                                                                           
  --Rafael chamado 254456                                                            
  --Update ParamControleSerie                            
    Update ParamControleSequencia                                                                                                                                                  
     Set UltimaNota = @NumDocumento,                                                            
      StatusTransacao=1                                                                                 
   where Empresa=@Empresa                                                    
 --158510    and Serie=@SerieControle                                                                                   
 and Serie=@SerieControleCursor                                                                                          
   end                                                                                                                                   
   else                                                                                                                 
   begin  --Processamento de cupom, não pega o ultimo documento                                                                                                                                                                        
  Set @Especie = 'CF'                                                                                                                
  Set @NumDocumento = 0                                
   end                
  end                
  -- Eder Ramos Chamado - 302201                
  else                                                                                                                                                               
   begin  -- FlagNaoGerenciar Num Documento nao pega o ultimo documento                                                                                                                                           
  Set @Especie = 'NF'                                                                                                              
  Set @NumDocumento = 0                       
  end                                                                                                                                                                    
                                                                   
  Insert into NotasFiscais (                                                                                          
    Empresa, TipoControle, CodControle,                                                                                          
    DataMovimento, DataDocumento, Especie, NumDocumento, Serie,                                                                                          
    CodEntidade, EmpresaOS, CodOS, CodOperacao, CodVendInterno,                                                                                          
    CodVendExterno, CodVendParceiro, CodCondPagto, CodTransp,CodTranspRedespacho,TipoFrete,                                                                                          
    CodPedido, CodUsuarioInc, CodUsuarioFat,                                                                                          
    StatusImpNota,                                                                                          
    StatusImpCupom,                                                                                          
    FlagCancelada, FlagDuplicataGerada, FlagAtualizaPreco, PrazoMedio,                                                             
    AliqISS,                                                                                          
    CodDepartamento, CodBanco, StatusTransacao, NumEquipamentoCF,                            
--253322                            
    StatusNFe,      --356099      
    FlagEmissaoPropria,CodcidadeServicoRealizado)           
  Select @Empresa, @TipoControle, @CodControle,                                                          
--158510    @DataMovimento, @DataMovimento, @Especie, @NumDocumento, @SerieControle,                                                                                          
   @DataMovimento, @DataMovimento, @Especie, @NumDocumento, @SerieControleCursor,                                                                                          
--158510    P.CodEntidade, @EmpresaAntOS, @CodOS, @CodOperacao, @CodVendInterno,                                                                                          
    --341745          
    --P.CodEntidade, @EmpresaAntOS, @CodOS, @CodOperacaoCursor, @CodVendInterno,                                                                                          
    @EntidadeNotaFiscal,@EmpresaAntOS, @CodOS, @CodOperacaoCursor, @CodVendInterno,          
    --Ronaldo Chamado 346431        
    --@CodVendExterno, P.CodVendParceiro, @CodCondPagto, P.CodTransp, P.CodTranspRedespacho,P.TipoFrete,                                                                                          
    @CodVendExterno, P.CodVendParceiro, @CodCondPagto, @CodTransp, P.CodTranspRedespacho,P.TipoFrete,                                                                                          
    @CodPedido, @CodUsuario, @CodUsuario,                                                                                          
    
    --Ronaldo Chamado 408945
    --Case When @FlagCupom = 0 then 0      
    Case When @FlagCupom = 0 and @FlagNaoGerenciarNumDocumento = 0 then 0  --Somente Nota (imprimir nota)
         When @FlagCupom = 0 and @FlagNaoGerenciarNumDocumento = 1 then -2
         When @FlagCupom = 1 then -2      --Somente Cupom (nao imprimir Nota)                                          
         When @FlagCupom = 2 then 0 End, --Nota e Cupom (imprimir nota)                                                                                          
    
    Case When @FlagCupom = 0 then 1      --Somente Nota (nao imprimir cupom)                                                        
         When @FlagCupom = 1 then 0      --Somente Cupom (Imprimir cupom)                                     
         When @FlagCupom = 2 then 0 End, --Nota e Cupom (Imprimir Cupom)                                                                                       
    0, 0, 1, @PrazoMedio,                                                        
    Case When O.FlagCalcularISS <> 1 then 0                                                                                          
--158510         Else(Select Dbo.Calcular_ISS(@Empresa, P.CodEntidade, @CodOperacao)) End,      
--367126         Else(Select Dbo.Calcular_ISS(@Empresa, P.CodEntidade, @CodOperacaoCursor)) End,      
                 Else(Select Dbo.Calcular_ISS(@Empresa, P.CodEntidade, @CodOperacaoCursor,P.CodCidadeServicoRealizado)) End,      
    @CodDepartamento, @CodBanco, 1, @NumSerieECF,                            
--253322                            
    Case When @FlagCupom = 1 then -1 else 0 end,      
    --356099      
    1,      
    --Ronaldo Chamado 367126      
    P.CodCidadeServicoRealizado      
  from Pedidos P                                                                                          
--158510    Left Join Operacoes O on O.Codigo = @CodOperacao                                                                                          
    Left Join Operacoes O on O.Codigo = @CodOperacaoCursor                                                                                          
  Where P.Empresa=@Empresa                                                                                       
    and P.CodPedido=@CodPedido   --Primeiro Pedido da Lista                                                                                          
End --Fim do loop                                             
                                                      
--Regrava os Itens dos Pedidos da Tabela Temporaria para as respectivas Notas Fiscais                                                                                                       
                                                                                     
Declare CursorItem cursor local FAST_FORWARD for                                                                                                                                                                         
  select                                                                                
    --158510 garantir que os serviços virão por último quando for                                                                                           
   -- separar nota de produtos das notas de serviços                     
    Case When (@FlagSepararServico = 0) then 0                                                                                          
         When (@FlagSepararServico = 1) and (Mov.CodProduto <> 8888888) then 0                                                                                          
         When (@FlagSepararServico = 1) and (Mov.CodProduto = 8888888) then 1                                                                                          
    end,                                                                                          
    Mov.Empresa, Mov.NumLancamento, Mov.CodProduto,                                                          
    --341745           
    --Mov.QuantAtendida, Ped.CodEntidade, isnull(ES.ClasseABC,'')          
    Mov.QuantAtendida,isnull(ES.ClasseABC,'')                                        
  from TempPrft110Pedido T                                                                           
    Left Join Pedidos Ped on Ped.Empresa = T.Empresa and Ped.CodPedido = T.CodPedido                                                                                                                                                                     
    Left Join MovEstoque Mov on Mov.Empresa = T.Empresa and Mov.CodPedido = T.CodPedido                                                                                                                                                                     
    Left Join EstoqueProduto ES on ES.CodProduto = Mov.CodProduto                                                                                                                                                 
                                  and ES.Empresa = @EmpresaEstoque                                                                                                                                                                        
  where T.NumSequencia = @Ped_Sequencia                            
--158510  order By Mov.Empresa, Mov.CodPedido, Mov.NumLancamento                                                               
  Order By 1, Mov.Empresa, Mov.CodPedido, Mov.NumLancamento                                                                                           
                                                                                                                                                                  
-- Regrava os itens para as suas respectivas notas fiscais                                                                                                                                                                        
Open CursorItem                                                                                                                                                                        
Fetch Next From CursorItem into @FlagServico, @AuxEmpresa, @AuxNumLancamento, @AuxCodProduto,            
            --341745    
             --@AuxQuantAtendida, @AuxCodEntidade, @ClasseABC          
             @AuxQuantAtendida,@ClasseABC                                                                                                                                                                        
Set @ContadorItem = 0                                                                                                   
Set @ContadorNota = 0                                                                                                                                                     
while @@Fetch_Status = 0                                                                  
Begin                                                                                                             
---Contador Item deve comecar do zero, para que a conta dê certo                                                                                     
  -- Eder Chamado - 252446                            
  Set @ContadorNota = (@ContadorItem /  @QuantQuebraNota) + 1                    
                                                                                          
  --158510 quando separa o servico, os movestoques de serviço virão sempre depois                          
  --       dos produtos, então se chegou no 8888888, tem que jogar para a última nota                                                                                          
  --       que conterá todos os serviço                                                                   
                                                                              
--MARCELO - CHAMADO 194083                                                                  
  if (@FlagServico = 1) and (@ContadorNota <= @QuantNotaItem)                                                                
    Set @ContadorNota = @contadorNota + 1                                                                                          
                                                
  Select @TipoControle = T.TipoControle,                                                                                                                                                                     
         @CodControle  = T.CodControle,                            
         @CodTipoEstoque = Oper.CodTipoEstoque,                                                               
         @CodTipoEstoqueContra = Oper.CodTipoEstoqueContra                                                                                          
    From TempPrft110Nota T                                                                                                                                                               
    Left Join Operacoes Oper on Oper.Codigo = @CodOperacao                                                                                                         
    Where T.NumSequencia = @Ped_Sequencia                                                                                       
   and T.PosicaoNota = @ContadorNota                                                                                                                                                       
                                                                                          
                                                                                                                                                           
  Update MovEstoque                                                                         
     Set TipoControle  = @TipoControle,                                                                                                                                                  
         CodControle     = @CodControle,                                                                                                                                                    
--158510         CodOperacao     = @CodOperacao,                                                       
         CodOperacao     = Case @FlagServico When 0 Then @CodOperacao Else @CodOperacaoServico End ,                                                                    
         -- Renato - 271880                      
         --DataMovimento   = @DataMovimento,                    
         DataMovimento   = Case isNull(@TipoAtualizaDataMovEstoque,0) When 0 Then @DataMovimento Else DataMovimento End,                                                                      
         DataFaturamento = @DataMovimento,           
         --341745                                                                                                                                                                                     
         --CodEntidade     = @AuxCodEntidade,                                                      
         CodEntidade = @EntidadeNotaFiscal,           
         ClasseABC       = @ClasseABC,                                                                                                  
         --Ronaldo Chamado 398662  
         --FlagMovEstoque  = @FlagMovEstoque,  
         FlagMovEstoque = Case When @FlagMovEstoque = 0 and FlagMovEstoque = 1   
                                    Then FlagMovEstoque  
                                    else @FlagMovEstoque end,  
                                                                                   
         CodDepartamento = @CodDepartamento,                                                                                                                                                                  
         FlagNaoGeradoNFE = isnull((select top 1               
                                    case when o.FlagDesconsiderarNaoGeradoNFE = 1               
                                         Then 0               
                                    else Prod.FlagNaoGeradoNFE              
                                    end               
                             From Produtos Prod              
                             left join operacoes o on o.codigo = MovEstoque.CodOperacao              
                             where Prod.Codigo = MovEstoque.CodProduto),0),              
   StatusTransacao = 1          
   Where Empresa = @AuxEmpresa                                                         
     and NumLancamento = @AuxNumLancamento                                                                                                                                                                        
                                                                                                                                               
                                                                                
  Update MovEstoqueAux                                                                  
     Set CodTipoEstoque = @CodTipoEstoque,                                                                                                     
         CodTipoEstoqueContra = @CodTipoEstoqueContra                                                                                                                                                             
   Where Empresa = @AuxEmpresa                                                                                                      
  and NumLancamento = @AuxNumLancamento                                                                                                                              
                                                                                                                                                              
  If (@CodTipoEstoque <> 0 or @CodTipoEstoqueContra <> 0)                                                  
     and Not exists(Select MAux.Empresa                                                                                                                                                             
            From MovEstoqueAux MAux                                                                                                                         
                     Where MAux.Empresa = @AuxEmpresa                                            
                       and MAux.NumLancamento = @AuxNumLancamento)                                                                                                                                                          
  begin                                                                     
    Insert Into MovEstoqueAux(NumLancamento, Sequencia, Empresa,                                     
      CodProduto, TipoMovimento, FlagMovEstoque, EmpresaEstoque,                                                                                                                                                               
      QuantAtendida, QuantMovimentada, CodTipoEstoque, CodTipoEstoqueContra, StatusTransacao)                    
    Select @AuxNumLancamento, 1, @AuxEmpresa,                                                                            
      Mov.CodProduto, Mov.TipoMovimento, Mov.FlagMovEstoque, Mov.EmpresaEstoque,                                                                                       
      Mov.QuantAtendida, Mov.QuantMovimentada, @CodTipoEstoque, @CodTipoEstoqueContra, 1                                                                                                           
    From MovEstoque Mov                                                                                                         
    Where Mov.Empresa = @AuxEmpresa                                                                                                                                                             
       and Mov.NumLancamento = @AuxNumLancamento                                                                                                                                                                        
  end                                                                                                                                                              
                                                                                                        
  If @AuxCodProduto <> 8888888 and ---Nao pode considerar servicos como sendo Item                              
     @AuxQuantAtendida > 0 --Não pode considerar itens sem quantidade                                                                                                                                                                        
    Set @ContadorItem = @ContadorItem + 1                                                                                                                                                                        
                
  Fetch Next From CursorItem into @FlagServico, @AuxEmpresa, @AuxNumLancamento, @AuxCodProduto,                                                                                                                        
                  --341745          
                  --@AuxQuantAtendida, @AuxCodEntidade, @ClasseABC          
                  @AuxQuantAtendida,@ClasseABC                                                                                                                                                                                                                
  
    
      
        
                                                                                                                      
End                                                                                                                                                                        
Close CursorItem                                                         
deallocate CursorItem                                                                                     
                                                                            
                                                                                                                                             
--Atualizacação do ICM e totais de cada nota processada                                                                                      
Set @ContadorNota = 0                                                                                   
--158510 While @ContadorNota < @QuantNota                                                                                          
While @ContadorNota < @QuantNotaTOTAL                                                                                          
BEGIN                                                                                                                                                                
    Set @ContadorNota = @ContadorNota + 1                                                                           
                                                                                            
    Set @SerieControleCursor = (Case When @ContadorNota <= @QuantNotaItem                                                                 
                                 then @SerieControle                                                                                        
                                     else @SerieControleServico end)                                          
                                                            
                                       
    --Le o controle da posição atual da nota (Tabela temporaria)                                                             
    Select @TipoControle = TipoControle,                                                                                                                                                                      
           @CodControle  = CodControle                                                                                                                                                    
      From TempPrft110Nota                                                                                                                       
      Where NumSequencia = @Ped_Sequencia                                                                                                                             
       and PosicaoNota = @ContadorNota                                                                                                                                              
                                   
    if (@TipoControle = 2) --and                                                                                                       
--        ((Select FlagDecomporProdutos From ParamControle Where Empresa = @Empresa) = 1))                                                                                                               
      exec Stored_PRFT110DecomporProdutos @Empresa, @TipoControle, @CodControle                                                                                                        
                                  
   --Procedure que Gera os dados da nota                                                                                                       
     exec Stored_Prft110GeraNota @Ped_Sequencia, @Empresa, @TipoControle, @CodControle, @ContadorNota                                                                                               
                                                                 
    --MARCELO - CHAMADO 208567                                                                                                                           
    If @FlagCustoMedio = 1                                                
    begin                          
      Exec CalcularCustoMedio 1, @EmpresaEstoque, @Empresa, @TipoControle, @CodControle,     
               null, null, null, null, null, null, @DataMovimento, @DataMovimento, 0                                                               
    end                                              
    else                                              
    begin                                              
      if (Exists(Select * From MovEstoque Mov                                              
              Left Join Produtos Pro on Pro.Codigo = Mov.CodProduto                                                                  
                Where Mov.Empresa = @Empresa                                              
                  and Mov.TipoControle = @TipoControle                                                
                  and Mov.CodControle = @CodControle                                              
                  and Pro.TipoLote = 1                                                                  
                  and Pro.FlagLoteUnitario = 1))                                              
      begin                                              
        Declare @SQLTimeStamp datetime                                              
        set @SQLTimeStamp = GetDate()                               
 Exec CalcularCustoMedioLote @SQLTimeStamp, 1, @EmpresaEstoque, @Empresa,                                               
                                    @TipoControle, @CodControle, null, null,                                               
                                    null, null, null                                              
      end                                              
    end                                              
                                                                                                               
    --183245                                                                  
    -- Acumula os valores de custo nos campos da nota fiscal                                                                                    
    Select                                                                          
      @ValorCustoForTotal = Sum(Case When Mov.CodProduto <> 8888888                                                                                    
          then (Mov.ValorCustoFor * Mov.FatorRedCusto) * Mov.QuantAtendida                                                                                    
          else 0 End),                                                                                    
      @ValorCustoUltTotal = Sum(Case When Mov.CodProduto <> 8888888                                            
          then (Mov.ValorCustoUlt * Mov.FatorRedCusto) * Mov.QuantAtendida                                                                                  
          else 0 End),                                                                                    
      @ValorCustoUltRealTotal = Sum(Case When Mov.CodProduto <> 8888888                                                                                    
          then (Mov.ValorCustoUltReal * Mov.FatorRedCusto) * Mov.QuantAtendida                                                                                    
   Else 0 End),                            
      @ValorCustoMedTotal = Sum(Case When Mov.CodProduto <> 8888888                                                                                    
          then Mov.ValorCustoMed * Mov.QuantAtendida                             
          Else 0 End),                                                 
      @ValorCustoSerTotal = Sum(Case When Mov.CodProduto = 8888888                                                                                    
          then Mov.ValorCustoFor * Mov.QuantAtendida                                                                                    
Else 0 End)                                                                                    
    From MovEstoque Mov                                        
    Where                                                                                     
      Empresa = @Empresa                                                                 
      And TipoControle = @TipoControle                                                                                    
   And CodControle = @CodControle                                                                                    
                                                                                    
    --183245                                                                                    
    Update NotasFiscais Set                                                                                    
      ValorCustoForTotal = Coalesce(@ValorCustoForTotal,0),                                                                                    
      ValorCustoUltTotal = Coalesce(@ValorCustoUltTotal,0),                                                                                    
      ValorCustoUltRealTotal = Coalesce(@ValorCustoUltRealTotal,0),                                                 
      ValorCustoMedTotal = Coalesce(@ValorCustoMedTotal,0),                                                                                    
      ValorCustoSerTotal = Coalesce(@ValorCustoSerTotal,0)                                                                              
    Where                                                                                     
      Empresa = @Empresa                                                                                    
      And TipoControle = @TipoControle                                                                                    
      And CodControle = @CodControle                                                                                    
                                                                                    
                                                      
     ---Calculo de Comissao da Nota                                                                                                                                        
     Exec Stored_Prft110Comissao @Empresa, @TipoControle, @CodControle                                                           
                       
      -- EDER RAMOS 310096                    
     Select               
  @FlagNaoGerenciarNumDocumento = FlagNaoGerenciarNumDocumento                                                                                                                                                                          
  from ParamControleSerie                                                                                               
     Where Empresa = @Empresa                                                                           
      and Serie = @SerieControleCursor                
                                                                                           
     --Atualiza o Número da Ultima duplicata no parametro de controle Quando:                                              
     --1 Tem Duplicatas                                                                                                                            
     --2 Nao tem duplicatas mas segue a mesma numeracao de nota e duplicata                                                                                                                                                           
     -- Eder Ramos Chamado 302201                
     if @FlagNaoGerenciarNumDocumento = 0                   
     begin                                                                                                                           
   If (Select FlagGerarDuplicata from ParamControle Where Empresa = @Empresa) = 1 --Controle de Gerar Duplicata                                                             
   and @FlagCupom in(0,2) and @FlagAtualizaDuplicata = 1                                                                                                                             
   --Rafael chamado 254456                            
    --Update ParamControleSerie                            
      Update ParamControleSequencia                    
      Set UltimaDuplicata = UltimaDuplicata + 1,                                                                                                                               
       StatusTransacao=1                                                                               
      Where Empresa=@Empresa                                                                                        
 --158510             and Serie=@SerieControle                                                                                          
    and Serie = @SerieControleCursor                 
      end                                                  
                              
                        
      -- Renato - Chamado 260385 -> Movida para ser executada antes da Stored_Prft110Duplicata                                                                                                                                                                
  
   
      --Grava as observacoes da Nota Fiscal                                
      --Rafael chamado 202157         
      --Gabriella - 382313                
      --exec Stored_Prft110Observacao @Empresa, @TipoControle, @CodControle, @ObsCupom, @FlagUnirObservacao                         
      exec Stored_Prft110Observacao @Empresa, @TipoControle, @CodControle, @ObsCupom, @FlagUnirObservacao, @Venc_Sequencia                         
                                                                  
      If @Venc_Sequencia <> 0  --Vencimentos escohidos                                                                                                                                                               
         and (Select FlagGerarDuplicata from ParamControle Where Empresa = @Empresa) = 1 --Controle de Gerar Duplicata                                                                                                                                         
  
   
      
        
          
            
                         
         and @TipoDuplicataPedido = 0  --gera duplicatas no processamento                                          
      Begin                                           
        --MARCELO - CHAMADO 215809                                        
        --Recuperar o valor de ST dos Pedidos               
        --Gabriella - 301399              
        if (@EmpId = 'DINAMAR')                 
        begin                                     
   select @ValorSTPedido = IsNull(Sum(Ped.ValorSubTrib + Ped.ValorFrete + Ped.ValorDespesas), 0)                                        
   from TempPRFT110Pedido T                                        
     left join Pedidos Ped on Ped.Empresa = T.Empresa                                        
           and Ped.CodPedido = T.CodPedido                                        
   where T.NumSequencia = @Ped_Sequencia                        
  end              
  else              
  begin              
   select @ValorSTPedido = IsNull(Sum(Ped.ValorSubTrib), 0)                                        
   from TempPRFT110Pedido T                                        
     left join Pedidos Ped on Ped.Empresa = T.Empresa                                        
           and Ped.CodPedido = T.CodPedido                                        
   where T.NumSequencia = @Ped_Sequencia                  
  end              
                        
       --Rafael chamado 271610                        
       if @ValorSTPedido is null                         
         set @ValorSTPedido=0                         
          
        --Recuperar o valor de ST das Notas Fiscais                 
        --Gabriella - 301399              
        if (@EmpId = 'DINAMAR')                         begin                                               
   select @ValorSTNota = IsNull(Sum(NF.ValorSubTrib + NF.ValorFrete + NF.ValorDespesas), 0)                                        
   from TempPRFT110Nota T                                        
     left join NotasFiscais NF on NF.Empresa = T.Empresa                                        
            and NF.TipoControle = T.TipoControle                                        
            and NF.CodControle = T.CodControle                                        
   where T.NumSequencia = @Ped_Sequencia              
        end              
        else              
        begin              
   select @ValorSTNota = IsNull(Sum(NF.ValorSubTrib), 0)                                        
   from TempPRFT110Nota T                                        
     left join NotasFiscais NF on NF.Empresa = T.Empresa                                        
            and NF.TipoControle = T.TipoControle                                        
            and NF.CodControle = T.CodControle                                        
   where T.NumSequencia = @Ped_Sequencia                      
        end                                        
                        
                             
        --Rafael chamado 271610                        
       if @ValorSTNota is null                         
         set @ValorSTNota=0                         
                         
                                        
        --Recuperar o dias de vencimento da duplicata de ST                                        
        select @DiaVencimentoST = DiasVencimentoDupST                                        
        from ParamControle                                        
        where Empresa = @Empresa                                        
          and ValorMinimoST > 0                                         
          and DiasVencimentoDupST > 0                                        
        if @DiaVencimentoST is null                                        
          set @DiaVencimentoST = 0                                        
                                      
--MARCELO - CHAMADO 233642                                        
/*        if (@DiaVencimentoST > 0) and (@ValorSTPedido <> @ValorSTNota)                                        
        begin                                        
          set @DataVencimentoDupST = DateAdd(day, @DiaVencimentoST, @DataMovimento)                                        
                                                 
          update TempPRFT110Venc set                                         
             Valor = (Valor - @ValorSTPedido) + @ValorSTNota                                        
          where NumSequencia = @Venc_Sequencia                                        
            and Vencimento = @DataVencimentoDupST                                        
        end    */                       
                               
        if (@DiaVencimentoST > 0)                                       
        begin                                        
          set @DataVencimentoDupST = DateAdd(day, @DiaVencimentoST, @DataMovimento)                       
            --Gabriella - 301399              
            if (@EmpId = 'DINAMAR')                        
            begin              
    update TempPRFT110Venc set                                         
      Valor = case when (@ValorSTPedido <> @ValorSTNota)                                  
     then (Valor - @ValorSTPedido) + @ValorSTNota                                  
     else Valor end,                       
      FlagDuplicataST = case when (@ValorSTPedido = 0)                                      
      then 0                        
      else 1 end                                              
    where NumSequencia = @Venc_Sequencia                                        
      and Vencimento = @DataVencimentoDupST              
      --Gabriella - 349341        
      --and Valor = @ValorSTNota;        
      and @DiaVencimentoST < (select min(CPV.DiaVencimento)        
                from CondPagtoVenc CPV        
            where CPV.CodCondPagto = @CodCondPagto        
              and CPV.MesVencimento = 0);                   
            end              
            else              
            begin              
    update TempPRFT110Venc set                                         
      Valor = case when (@ValorSTPedido <> @ValorSTNota)                                  
     then (Valor - @ValorSTPedido) + @ValorSTNota                                  
     else Valor end,                     
                                      
      --Rafael chamado 271610                         
      --FlagDuplicataST = 1                     
      FlagDuplicataST = case when (@ValorSTPedido = 0)                                      
            then 0                        
            else 1 end                                              
    where NumSequencia = @Venc_Sequencia                                        
      and Vencimento = @DataVencimentoDupST                           
            end                             
        end                                    
                                                                                  
        Select @AuxValorTotal=Sum(Valor)                                                                                           
        From TempPrft110Venc                                                                                     
        where NumSequencia = @Venc_Sequencia                           
                        
                                
     --MARCELO - CHAMADO 233642                                      
        if not Exists(select Top 1 Empresa from MovEstoque                                      
                      where Empresa = @Empresa                    
                        and TipoControle = @TipoControle                                      
                        and CodControle = @CodControle                                      
                        and CodProduto <> 8888888)                                      
        begin                                      
          set @AuxValorTotal = @AuxValorTotal - IsNull((select Valor from TempPRFT110Venc                                       
                                                        where NumSequencia = @Venc_Sequencia                                      
                                                          and FlagDuplicataST = 1), 0)                                        
        end                                    
                                      
                                       
        exec Stored_Prft110Duplicata @Empresa, @TipoControle, @CodControle, @CodBanco,                                          
                                     @CodOperacaoDup, @Venc_Sequencia, @AuxValorTotal,                                                                                                                
                                     @FlagCupom, @SerieControleCursor                                          
      End                          
                                                                                                                                                                                      
      If @Venc_Sequencia <> 0 -- vencimentos informados                                                                                                
         and @TipoDuplicataPedido = 1 --duplicatas no pedido                                                                                                   
      begin                                                                                      
                                                                                                                                                                  
        Update Duplicatas                                                                                                    
           Set TipoControle=@TipoDuplicata,                                                                    
               CodControle=@CodControle,                                                                                                                                                                    
               StatusTransacao=1                                                                                                                                                                 
        Where Duplicatas.Empresa = @Empresa                                                                             
         and Duplicatas.TipoDuplicata = @TipoDuplicata                                                                                                                                                                        
         and Duplicatas.CodDuplicata in (Select CodDuplicata From TempPrft110Venc Where NumSequencia = @Venc_Sequencia)                                                                                                                                       
   
   
      
         
          
            
             
                
                   
                    
                             
      end                                                                                                                                                  
                                  
                          
     Exec Stored_Prft110Fiscal @Ped_Sequencia, @Empresa, @TipoControle, @CodControle            
                                                                              
/*183245                                                                                
      If @FlagCustoMedio = 1                                                      
         Exec CalcularCustoMedio 1, @EmpresaEstoque, @Empresa, @TipoControle, @CodControle,                                                                                                                                               
               null, null, null, null, null, null, @DataMovimento, @DataMovimento, 0*/                                                                                      
                              
  -- Renato - Chamado 260385 -> Movida para ser executada antes da Stored_Prft110Duplicata                                                          
      --Grava as observacoes da Nota Fiscal                                
      --Rafael chamado 202157                                                                                                           
      --exec Stored_Prft110Observacao @Empresa, @TipoControle, @CodControle, @ObsCupom,@FlagUnirObservacao                                                                                                                                                     
 
     
      
        
    --Gabriella - 358073      
 --Insere na tabela de Relação da Retenção todos os registros da Temporária      
 Insert Into NotasFiscaisRelacaoRetencao      
    (Empresa, TipoDuplicata,       
     CodDuplicata, TipoControle,       
     CodControle, TipoRetencao,       
     ValorBase, Aliquota,      
     ValorRetencao, FlagRetencaoGerada,       
     TipoControleRetencao, CodControleRetencao,      
     StatusTransacao, TransacaoEmpresas)      
 Select @Empresa, TempRel.TipoDuplicata,      
        TempRel.CodDuplicata, TempRel.TipoControle,       
     TempRel.CodControle, TempRel.TipoRetencao,      
     TempRel.ValorBase, TempRel.Aliquota,      
     TempRel.ValorRetencao, 1,       
     @TipoControle, @CodControle,      
     1, ''      
   From TempPrft110RelacaoRetencao TempRel      
   --Gabriella - 367244      
   Left Join NotasFiscais NF on NF.Empresa = @Empresa                                        
                               and NF.TipoControle = @TipoControle                                       
                   and NF.CodControle = @CodControle         
  where TempRel.NumSequencia = @Venc_Sequencia       
    and TempRel.CodDuplicata <> ''       
    --Gabriella - 367244      
    and TempRel.TipoRetencao in (1,2,3)        
    and NF.ValorServicos > 0         
                                   
                                          
END                                                   
--Fim do Loop                                                                                                                                         
                                                                                                                      
                                                                                                                                               
--Atualiza os dados dos Pedidos/OS                                                                                                                   
exec Stored_Prft110Totalizar @Empresa, @TipoControle, @CodControle, @EmpresaAntOS, @Ped_Sequencia, @CodStatusPed                               
                                    
--MARCELO - CHAMADO 158510/199271                                                                
exec Stored_PRFT110Validar @Empresa, @CodOperacao, @FlagCupom, @Ped_Sequencia,                                                    
                           @Venc_Sequencia, @CodCondPagto, @TipoDuplicata,                                                    
                           @TipoDuplicataPedido, @FlagSepararServico,                                                    
                          @SerieControle, @SalvaNumDocumento,                                                     
 @SerieControleServico, @SalvaNumDocumentoServico,                                                 
       @QuantNotaItem, @QuantNotaServico, @MensagemErro output                                                    
                                                    
if (LTRim(RTrim(@MensagemErro)) <> '')                                                     
begin                                                    
  return                                                    
end 

Go

ALTER Trigger  [dbo].[Altera_MovDuplicata] ON [dbo].[MovDuplicata]  
FOR UPDATE  
AS  
  declare @SvRowCount integer
  Set @SvRowCount = @@ROWCOUNT
/*********************
VERSÃO 3.01
*********************/

  --Gabriella - 353832
  If Exists(SELECT * from ConfiguracaoSistema where FlagTransacaoSnapShot = 1)
    SET TRANSACTION ISOLATION LEVEL READ COMMITTED    
  


  --JALDO - CHAMADO 296750
  declare @FlagFinanceiroSemTrigger smallint 

  select 
    @FlagFinanceiroSemTrigger = FlagFinanceiroSemTrigger
  from ConfiguracaoSistema
        
  if @FlagFinanceiroSemTrigger is null
    set @FlagFinanceiroSemTrigger = 0  

  If @SvRowCount = 1  
  begin  
    Update Duplicatas  
       Set ValorRecebido = Duplicatas.ValorRecebido - Case When Deleted.TipoMovimento = 3   
                                                           Then Deleted.ValorRecebido Else 0 End,  
           ValorJuros     = Duplicatas.ValorJuros     - Deleted.ValorJuros,  
           ValorDesconto  = Duplicatas.ValorDesconto  - Deleted.ValorDesconto,  
           ValorDespesa   = Duplicatas.ValorDespesa   - Deleted.ValorDespesa,  
           ValorAdicional = Duplicatas.ValorAdicional - Deleted.ValorAdicional  
      From Duplicatas, Deleted  
      Where Duplicatas.Empresa         = Deleted.EmpresaDuplicata  
            and Duplicatas.TipoDuplicata   = Deleted.TipoDuplicata  
            and Duplicatas.CodDuplicata    = Deleted.CodDuplicata  
  
    Update Duplicatas  
       Set ValorRecebido = Duplicatas.ValorRecebido + Case When Inserted.TipoMovimento = 3   
                                                           Then Inserted.ValorRecebido Else 0 End,  
           ValorJuros     = Duplicatas.ValorJuros     + Inserted.ValorJuros,  
           ValorDesconto  = Duplicatas.ValorDesconto  + Inserted.ValorDesconto,  
           ValorDespesa   = Duplicatas.ValorDespesa   + Inserted.ValorDespesa,  
           ValorAdicional = Duplicatas.ValorAdicional + Inserted.ValorAdicional  
      From Duplicatas, Inserted  
      Where Duplicatas.Empresa         = Inserted.EmpresaDuplicata  
            and Duplicatas.TipoDuplicata   = Inserted.TipoDuplicata  
            and Duplicatas.CodDuplicata    = Inserted.CodDuplicata  
  end  
  Else  
  begin  
    Update Duplicatas  
       Set ValorRecebido  = Duplicatas.ValorRecebido  - isnull(DelAux.ValorRecebido,0),  
           ValorJuros     = Duplicatas.ValorJuros     - isnull(DelAux.ValorJuros,0),  
           ValorDesconto  = Duplicatas.ValorDesconto  - isnull(DelAux.ValorDesconto,0),  
           ValorDespesa   = Duplicatas.ValorDespesa   - isnull(DelAux.ValorDespesa,0),  
           ValorAdicional = Duplicatas.ValorAdicional - isnull(DelAux.ValorAdicional,0)  
      From Duplicatas,  
           (Select D.EmpresaDuplicata, D.TipoDuplicata, D.CodDuplicata,   
               Sum(Case When D.TipoMovimento = 3 Then D.ValorRecebido Else 0 End) as ValorRecebido,  
               Sum(D.ValorJuros) as ValorJuros, Sum(D.ValorDesconto) as ValorDesconto,   
               Sum(D.ValorDespesa) as ValorDespesa,  
               Sum(D.ValorAdicional) as ValorAdicional  
              From Deleted D  
             Group By D.EmpresaDuplicata, D.TipoDuplicata, D.CodDuplicata) DelAux  
      Where Duplicatas.Empresa       = DelAux.EmpresaDuplicata  
            and Duplicatas.TipoDuplicata = DelAux.TipoDuplicata  
            and Duplicatas.CodDuplicata  = DelAux.CodDuplicata  
  
    Update Duplicatas  
       Set ValorRecebido  = Duplicatas.ValorRecebido  + isnull(InsAux.ValorRecebido,0),  
           ValorJuros     = Duplicatas.ValorJuros     + isnull(InsAux.ValorJuros,0),  
           ValorDesconto  = Duplicatas.ValorDesconto  + isnull(InsAux.ValorDesconto,0),  
           ValorDespesa   = Duplicatas.ValorDespesa   + isnull(InsAux.ValorDespesa,0),  
           ValorAdicional = Duplicatas.ValorAdicional + isnull(InsAux.ValorAdicional,0)  
      From Duplicatas,  
           (Select I.EmpresaDuplicata, I.TipoDuplicata, I.CodDuplicata,   
               Sum(Case When I.TipoMovimento = 3 Then I.ValorRecebido Else 0 End) as ValorRecebido,  
               Sum(I.ValorJuros) as ValorJuros, Sum(I.ValorDesconto) as ValorDesconto,   
               Sum(I.ValorDespesa) as ValorDespesa,  
               Sum(I.ValorAdicional) as ValorAdicional  
              From Inserted I  
             Group By I.EmpresaDuplicata, I.TipoDuplicata, I.CodDuplicata) InsAux  
      Where Duplicatas.Empresa       = InsAux.EmpresaDuplicata  
            and Duplicatas.TipoDuplicata = InsAux.TipoDuplicata  
            and Duplicatas.CodDuplicata  = InsAux.CodDuplicata  
   end  
  

--JALDO - CHAMADO 296750
if @FlagFinanceiroSemTrigger = 0 
begin    
  
     update movdespesa  
            set valor = Abs(I.ValorRecebido - I.ValorJuros + I.ValorDesconto)  
                , DataMovimento     = I.DataMovimento  
                , CodConta          = isnull(I.CodConta,0)  
                --258642   
                --, CodDepartamento   = isnull(Duplicatas.CodDepartamento,'')  
                --292366 , CodDepartamento   = isnull(Duplicatas.CodDepartamento,I.CodDepartamento)  
                , CodDepartamento   = isnull(I.CodDepartamento, Duplicatas.CodDepartamento)                   
                , Statustransacao   = 1  
                , CodDetalhe        = IsNull(I.CodDetalhe,0)   
                --Ronaldo Chamado 409235
                ,observacao =  Left('Dup nr.: '+I.CodDuplicata+' - '+isnull(E.RazaoSocial,'')+isnull(' - Obs.: '+I.Observacao,''),200)
            from inserted I  
                 left join Duplicatas on Duplicatas.empresa = I.EmpresaDuplicata and  
                           Duplicatas.TipoDuplicata = I.TipoDuplicata   and  
                           Duplicatas.CodDuplicata  = I.CodDuplicata    
                 --Ronaldo Chamado 409235
                 left join Entidades E on E.Codigo = IsNull(Duplicatas.CodEntidade, I.CodEntidade)       
     where movdespesa.empresa = I.empresa and   
           I.TipoMovimento = movdespesa.TipoMovimento and movdespesa.TipoRelacionamento = 2 and  
           I.NumSequencia = MovDespesa.NumSequencia and MovDespesa.NumOcorrencia = I.NumOcorrencia   
           
        --Gabriella - 342382
        --declare @Contador         int  
        declare @empresa1         numeric (2)  
        declare @NumMovimento1    int  
        declare @DataMovimento1   datetime        
        declare @CodConta1        numeric (6)   
        declare @Valor1           float        
        declare @Observacao1      varchar(200)    
        declare @TipoMovimento1   numeric(2)   
        declare @NumSequencia1    int            
        declare @TipoLancamento1  numeric(1)  
        declare @NumOcorrencia1   numeric(5)     
        declare @CodDepartamento1 varchar(9)  
        declare @CodDetalhe1 Int   
        --Gabriella - 342382
        --set @Contador = 0   
        set @NumMovimento1 = 0   
        
        declare curso cursor for    
            --Gabriella - 342382
            --Select T.Empresa, (select isnull(max(NumMovimento),0) + 1 from movDespesa where empresa = T.empresa),  
            Select T.Empresa,  
                   T.DataMovimento, T.CodConta, T.ValorRecebido - T.ValorJuros + T.ValorDesconto,   
                   Left('Dup nr.: '+T.CodDuplicata+' - '+isnull(E.RazaoSocial,'')+isnull(' - Obs.: '+T.Observacao,''),200),  
                   T.TipoMovimento,   
                   T.NumSequencia, case when T.TipoDuplicata = 1 Then 0 else 1 end, T.NumOcorrencia, T.CodDepartamento  
     , T.CodDetalhe   
             From  Inserted T  
             left join Duplicatas on Duplicatas.empresa       = T.EmpresaDuplicata and  
                                     Duplicatas.TipoDuplicata = T.TipoDuplicata and  
                                     Duplicatas.CodDuplicata  = T.CodDuplicata    
             left join Entidades E on E.Codigo = Duplicatas.CodEntidade  
             left join OperacoesDup OD on OD.Codigo = T.CodOperacaoDup  
                     where  T.TipoMovimento = 3 and T.CodConta <> 0 and T.ValorRecebido <> 0   
                                 and OD.FlagLancamentos = 1 and not(Duplicatas.codconta is null)  
             open curso  
             --Gabriella - 342382
             --fetch next from curso into @Empresa1, @NumMovimento1,   
             fetch next from curso into @Empresa1,   
                                        @DataMovimento1, @CodConta1, @Valor1,   
                                        @Observacao1, @TipoMovimento1,   
                                        @NumSequencia1, @TipoLancamento1, @NumOcorrencia1  
                                        , @CodDepartamento1  
     , @CodDetalhe1   
                   while @@FETCH_STATUS = 0  
                   begin  
                      If not Exists(Select MovDespesa.NumMovimento From MovDespesa where movdespesa.empresa = @empresa1 and  
                                    @NumSequencia1 = MovDespesa.NumSequencia and MovDespesa.NumOcorrencia = @NumOcorrencia1 and   
                                    @TipoMovimento1 = movdespesa.TipoMovimento and movdespesa.TipoRelacionamento = 2)  
                       Begin  
                          --Gabriella - 342382
                          --Começou a utilizar a ProximaSequencia
                          exec @NumMovimento1 = ProximaSequencia 'MOVDESPESA', @Empresa1, 1                       
                       
                          insert into MovDespesa (Empresa, NumMovimento,   
                                              TipoDuplicata, CodDuplicata, TipoControle, CodControle,   
                                              DataMovimento, CodConta, Valor,   
                                              Observacao, TipoRelacionamento, TipoMovimento,   
                                              NumSequencia, TipoLancamento, NumOcorrencia  
                                              , CodDepartamento, StatusTransacao  
           , CodDetalhe)  
                                      --Gabriella - 342382
                                      --values (@Empresa1, @NumMovimento1 + @Contador,   
                                      values (@Empresa1, @NumMovimento1,   
                                              0, '', 0, 0,                            
                                              @DataMovimento1, @CodConta1, Abs(@Valor1),   
                                              @Observacao1, 2, @TipoMovimento1,   
                                              @NumSequencia1,   
                                              Case @valor1   
                                                when Abs(@valor1) then @TipoLancamento1   
                                                else (case @TipoLancamento1 When 1 Then 0 Else 1 End)   
                                              end,   
                                              @NumOcorrencia1  
                                              , @CodDepartamento1, 1  
           , @CodDetalhe1)   
                        --Gabriella - 342382
                        --set @Contador = @Contador + 1   
                      end  
                      --Gabriella - 342382
                      --fetch next from curso into @Empresa1, @NumMovimento1,   
                      fetch next from curso into @Empresa1,   
                                                 @DataMovimento1, @CodConta1, @Valor1,   
                                                 @Observacao1, @TipoMovimento1,   
                                                 @NumSequencia1, @TipoLancamento1, @NumOcorrencia1  
                                                 , @CodDepartamento1  
       , @CodDetalhe1   
                   end  
                   close curso  
                   deallocate curso  
  
  
  
update movdespesa  
            set valor = I.ValorJuros,  
                DataMovimento = I.DataMovimento,  
                 CodConta = isnull((case when I.TipoDuplicata = 1   
                                           Then (case when I.CodContajuros = 0   
                                                   Then OD.CodContaJurosPagar    
                                                 else   
                                                   I.CodContajuros               
                                                 end)  
                                      else (case when I.CodContajuros = 0        
                                              Then OD.CodContaJurosReceber       
                                            else      
                                              I.CodContaJuros                    
                                            end)  
                                      end),0)   
                , CodDepartamento = isnull(I.CodDepartamento, '')  
                , StatusTransacao = 1  
  , CodDetalhe = I.CodDetalhe   
            from inserted I  
                 left join OperacoesDup OD on OD.codigo  = I.CodOperacaoDup  
     where movdespesa.empresa = I.empresa and   
           I.TipoMovimento = movdespesa.TipoMovimento and movdespesa.TipoRelacionamento = 3 and  
           I.NumSequencia = MovDespesa.NumSequencia and MovDespesa.NumOcorrencia = I.NumOcorrencia   
          and OD.FlagLancamentos = 1  
  
     If not Exists(Select MovDespesa.NumMovimento From MovDespesa, inserted I where movdespesa.empresa = I.empresa and  
                   I.NumSequencia = MovDespesa.NumSequencia and MovDespesa.NumOcorrencia = I.NumOcorrencia and   
                   I.TipoMovimento = movdespesa.TipoMovimento and movdespesa.TipoRelacionamento = 3)  
        Begin  
  
        --Gabriella - 342382
        --set @Contador = 0   
        declare curso cursor for    
            --Gabriella - 342382
            --Select I.Empresa, (select isnull(max(NumMovimento),0) + 1 from movDespesa where empresa = I.empresa),  
            Select I.Empresa,  
                   I.DataMovimento,   
                   (case when I.TipoDuplicata = 1   
                         Then (case when I.CodContaJuros = 0     
                                    Then OD.CodContaJurosPagar   
                               else   
                                    I.CodContajuros              
                               end)  
                    else (case when I.CodContajuros = 0          
                             Then OD.CodContaJurosReceber        
                          else      
                             I.CodContajuros                     
                          end)  
                    end)   
                   , I.ValorJuros   
                   , case when I.TipoDuplicata = 1 then 'Juros pagos Dup. nr. ' + I.CodDuplicata else 'Juros Recebidos Dup. nr. ' + I.CodDuplicata  end, I.TipoMovimento   
                   , I.NumSequencia, case when I.TipoDuplicata = 1 Then 0 else 1 end, I.NumOcorrencia  
                   , I.CodDepartamento  
     , I.CodDetalhe   
             From  Inserted I  
                     left join OperacoesDup OD on OD.Codigo  = I.CodOperacaoDup  
             where (I.TipoMovimento = 3 or I.TipoMovimento = 2)   
               and ((I.CodContaJuros <> 0) or (I.TipoDuplicata = 1 and OD.CodContaJurosPagar <> 0) or   
                     (OD.CodContaJurosReceber <> 0 and I.TipoDuplicata = 2))  
               and I.ValorJuros > 0  and OD.FlagLancamentos = 1  
  
             open curso  
             --Gabriella - 342382
             --fetch next from curso into @Empresa1, @NumMovimento1,   
             fetch next from curso into @Empresa1,   
                                        @DataMovimento1, @CodConta1, @Valor1,   
                                        @Observacao1, @TipoMovimento1,   
                                        @NumSequencia1, @TipoLancamento1, @NumOcorrencia1  
                                        , @CodDepartamento1  
            , @CodDetalhe1   
                   while @@FETCH_STATUS = 0  
                   begin  
                      --Gabriella - 342382
                      --Começou a utilizar a ProximaSequencia
                      exec @NumMovimento1 = ProximaSequencia 'MOVDESPESA', @Empresa1, 1                   
                   
                      insert into MovDespesa (Empresa, NumMovimento,   
                                              TipoDuplicata, CodDuplicata, TipoControle, CodControle,   
                                              DataMovimento, CodConta, Valor,   
                                              Observacao, TipoRelacionamento, TipoMovimento,   
                                              NumSequencia, TipoLancamento, NumOcorrencia  
                                              , CodDepartamento, StatusTransacao  
           , CodDetalhe)   
                                      --Gabriella - 342382                     
                                      --values (@Empresa1, @NumMovimento1 + @Contador,   
                                      values (@Empresa1, @NumMovimento1,   
                                              0, '', 0, 0,                            
                                              @DataMovimento1, @CodConta1, @Valor1,   
                                              @Observacao1, 3, @TipoMovimento1,   
                                              @NumSequencia1, @TipoLancamento1, @NumOcorrencia1  
                                              , @CodDepartamento1, 1  
           , @CodDetalhe1)   
                      --Gabriella - 342382       
                      --set @Contador = @Contador + 1   
                      --fetch next from curso into @Empresa1, @NumMovimento1,   
                      fetch next from curso into @Empresa1,   
                                                 @DataMovimento1, @CodConta1, @Valor1,   
                                                 @Observacao1, @TipoMovimento1,   
                                                 @NumSequencia1, @TipoLancamento1, @NumOcorrencia1  
                                                 , @CodDepartamento1    
       , @CodDetalhe1   
                   end  
                   close curso  
                   deallocate curso  
        end  
  
  
update movdespesa  
            set valor = I.ValorDesconto,  
                DataMovimento = I.DataMovimento,  
                 CodConta = isnull((case when I.TipoDuplicata = 1   
                                          Then (case when I.CodContaDesconto = 0   
                                                  Then OD.CodContaDescontoPagar  
                                                else   
       I.CodContaDesconto  
                                                end)  
                                     else (case when I.CodContaDesconto = 0    
                                             Then OD.CodContaDescontoReceber  
                                           else      
                                             I.CodContaDesconto  
                                           end)  
                                     end),0)   
                , CodDepartamento = isnull(I.CodDepartamento, '')    
  , CodDetalhe      = isnull(I.CodDetalhe,0)   
                , StatusTransacao = 1  
            from inserted I  
                 left join OperacoesDup OD on OD.Codigo = I.CodOperacaoDup  
     where movdespesa.empresa = I.empresa and   
           I.TipoMovimento = movdespesa.TipoMovimento and movdespesa.TipoRelacionamento = 4 and  
           I.NumSequencia = MovDespesa.NumSequencia and MovDespesa.NumOcorrencia = I.NumOcorrencia   
           and OD.FlagLancamentos = 1  
  
     If (Select count(MovDespesa.NumMovimento) From MovDespesa, inserted I where movdespesa.empresa = I.empresa and  
                   I.NumSequencia = MovDespesa.NumSequencia and MovDespesa.NumOcorrencia = I.NumOcorrencia    
                   and I.TipoMovimento = movdespesa.TipoMovimento and movdespesa.TipoRelacionamento = 4) = 0  
        Begin  
  
        --Gabriella - 342382
        --set @Contador = 0   
        declare curso cursor for    
            --Gabriella - 342382
            --Select I.Empresa, (select isnull(max(NumMovimento),0) + 1 from movDespesa where empresa = I.empresa),  
            Select I.Empresa,  
                   I.DataMovimento,   
                   (case when I.TipoDuplicata = 1   
                         Then (case when I.CodContaDesconto = 0   
                                    Then OD.CodContadescontopagar  
                               else   
                                    I.CodContaDesconto  
                               end)  
                    else (case when I.CodContaDesconto = 0    
                             Then OD.CodContadescontoreceber  
                          else      
                             I.CodContaDesconto  
                          end)  
                    end)   
                   , I.ValorDesconto   
                   , 'Desconto Dup. nr. ' + I.CodDuplicata, I.TipoMovimento   
                   , I.NumSequencia, case when I.TipoDuplicata = 1 Then 1 else 0 end, I.NumOcorrencia  
                   , I.CodDepartamento  
     , I.CodDetalhe   
             From  Inserted I  
                     left join OperacoesDup OD on OD.Codigo  = I.CodOperacaoDup    
             where  (I.TipoMovimento = 3 or I.TipoMovimento = 2)   
                and ((I.CodContaDesconto <> 0) or (I.TipoDuplicata = 1 and OD.CodContadescontoPagar <> 0) or  
                      (I.TipoDuplicata = 2 and OD.CodContaDescontoReceber <> 0))  
                and I.ValorDesconto > 0  and OD.FlagLancamentos = 1   
             open curso  
             --Gabriella - 342382
             --fetch next from curso into @Empresa1, @NumMovimento1,   
             fetch next from curso into @Empresa1,   
                                        @DataMovimento1, @CodConta1, @Valor1,   
                                        @Observacao1, @TipoMovimento1,   
                                        @NumSequencia1, @TipoLancamento1, @NumOcorrencia1  
                                        , @CodDepartamento1   
     , @CodDetalhe1   
                   while @@FETCH_STATUS = 0  
                   begin 
                      --Gabriella - 342382
                      --Começou a utilizar a ProximaSequencia
                      exec @NumMovimento1 = ProximaSequencia 'MOVDESPESA', @Empresa1, 1                   
                    
                      insert into MovDespesa (Empresa, NumMovimento,   
                                              TipoDuplicata, CodDuplicata, TipoControle, CodControle,   
                                              DataMovimento, CodConta, Valor,   
                                              Observacao, TipoRelacionamento, TipoMovimento,   
                                              NumSequencia, TipoLancamento, NumOcorrencia  
                                              , CodDepartamento, StatusTransacao  
           , CodDetalhe)   
                                      --Gabriella - 342382
                                      --values (@Empresa1, @NumMovimento1 + @Contador,   
                                      values (@Empresa1, @NumMovimento1,   
                                              0, '', 0, 0,                            
                                              @DataMovimento1, @CodConta1, @Valor1,   
                                              @Observacao1, 4, @TipoMovimento1,   
                                              @NumSequencia1, @TipoLancamento1, @NumOcorrencia1  
                                              , @CodDepartamento1, 1  
           , @CodDetalhe1)   
                      --Gabriella - 342382
                      --set @Contador = @Contador + 1   
                      --fetch next from curso into @Empresa1, @NumMovimento1,   
                      fetch next from curso into @Empresa1,   
                                                 @DataMovimento1, @CodConta1, @Valor1,   
                                                 @Observacao1, @TipoMovimento1,   
                                                 @NumSequencia1, @TipoLancamento1, @NumOcorrencia1  
                                                 , @CodDepartamento1  
              , @CodDetalhe1   
                   end  
                   close curso  
                   deallocate curso  
        end  
  
  
  
  update movdespesa set   
    valor = I.ValorAdicional,  
    DataMovimento = I.DataMovimento,  
    CodConta = isnull((case I.TipoDuplicata when 1   
                         Then OD.CodContaAdicionalPagar  
                         else OD.CodContaAdicionalReceber  
                       end),0),  
    CodDepartamento = isnull(I.CodDepartamento, ''),    
    CodDetalhe  = isnull(I.CodDetalhe,0),   
    StatusTransacao = 1  
  from inserted I  
    left join OperacoesDup OD on OD.Codigo = I.CodOperacaoDup  
  where movdespesa.empresa = I.empresa   
    and I.TipoMovimento = movdespesa.TipoMovimento and movdespesa.TipoRelacionamento = 5   
    and I.NumSequencia = MovDespesa.NumSequencia and MovDespesa.NumOcorrencia = I.NumOcorrencia   
    and OD.FlagLancamentos = 1  
  
  If (Select count(MovDespesa.NumMovimento) From MovDespesa, inserted I   
      where movdespesa.empresa = I.empresa and I.NumSequencia = MovDespesa.NumSequencia   
        and MovDespesa.NumOcorrencia = I.NumOcorrencia    
        and I.TipoMovimento = movdespesa.TipoMovimento and movdespesa.TipoRelacionamento = 5) = 0  
  Begin  
    
    --Gabriella - 342382
    --set @Contador = 0   
    declare curso cursor for    
      --Gabriella - 342382
      --Select I.Empresa, (select isnull(max(NumMovimento),0) + 1 from movDespesa where empresa = I.empresa),  
      Select I.Empresa,
             I.DataMovimento,   
             (case I.TipoDuplicata when 1   
                Then OD.CodContaAdicionalpagar  
                else OD.CodContaAdicionalReceber  
              end)   
                   , I.ValorAdicional   
                   , 'Vl. Adicional Dup. nr. ' + I.CodDuplicata, I.TipoMovimento   
  
                   , I.NumSequencia, case when I.TipoDuplicata = 1 Then 0 else 1 end, I.NumOcorrencia  
                   , I.CodDepartamento  
     , I.CodDetalhe   
      From Inserted I  
        left join OperacoesDup OD on OD.Codigo  = I.CodOperacaoDup    
      where I.TipoMovimento = 2   
        and ((I.TipoDuplicata = 1 and OD.CodContaAdicionalPagar <> 0) or  
             (I.TipoDuplicata = 2 and OD.CodContaAdicionalReceber <> 0))  
        and I.ValorAdicional > 0 and OD.FlagLancamentos = 1   
    open curso  
    --Gabriella - 342382
    --fetch next from curso into @Empresa1, @NumMovimento1,   
    fetch next from curso into @Empresa1,   
                               @DataMovimento1, @CodConta1, @Valor1,   
                               @Observacao1, @TipoMovimento1,   
                               @NumSequencia1, @TipoLancamento1, @NumOcorrencia1,   
                               @CodDepartamento1,   
          @CodDetalhe1   
      while @@FETCH_STATUS = 0  
      begin
        --Gabriella - 342382
        --Começou a utilizar a ProximaSequencia
        exec @NumMovimento1 = ProximaSequencia 'MOVDESPESA', @Empresa1, 1      
        
        insert into MovDespesa (Empresa, NumMovimento,   
                                TipoDuplicata, CodDuplicata, TipoControle, CodControle,   
                                              DataMovimento, CodConta, Valor,   
                                              Observacao, TipoRelacionamento, TipoMovimento,   
                                              NumSequencia, TipoLancamento, NumOcorrencia  
                                        , CodDepartamento, StatusTransacao  
           , CodDetalhe)   
                                      --Gabriella - 342382
                                      --values (@Empresa1, @NumMovimento1 + @Contador,  
                                      values (@Empresa1, @NumMovimento1,   
                                              0, '', 0, 0,                            
                                              @DataMovimento1, @CodConta1, @Valor1,   
                                              @Observacao1, 5, @TipoMovimento1,   
                                              @NumSequencia1, @TipoLancamento1, @NumOcorrencia1  
                                              , @CodDepartamento1, 1  
           , @CodDetalhe1)   
                      --Gabriella - 342382
                      --set @Contador = @Contador + 1   
                      --fetch next from curso into @Empresa1, @NumMovimento1,   
                      fetch next from curso into @Empresa1,   
                                                 @DataMovimento1, @CodConta1, @Valor1,   
                                                 @Observacao1, @TipoMovimento1,   
                                                 @NumSequencia1, @TipoLancamento1, @NumOcorrencia1  
                                                 , @CodDepartamento1  
       , @CodDetalhe1   
                   end  
                   close curso  
                   deallocate curso  
        end  
 end

Go

ALTER Trigger  [dbo].[Altera_MovDespesa] ON [dbo].[MovDespesa]    
FOR UPDATE    
AS    
/*********************
VERSÃO 3.01
*********************/ 

--Gabriella - 353832
If Exists(SELECT * from ConfiguracaoSistema where FlagTransacaoSnapShot = 1)
  SET TRANSACTION ISOLATION LEVEL READ COMMITTED  

Declare @LogId Varchar(20)
Declare @DataEncerramento DateTime
Declare @Seq int
Declare @FlagInseriuLogUsuario int
Declare @DelEmpresa Numeric(2,0)
Declare @DelDataMovimento Datetime

Set @FlagInseriuLogUsuario = 0

select @LogId = max(Id), @DelEmpresa = max(D.Empresa), @DelDataMovimento = min(D.datamovimento) from Empresas E
left join Deleted D on E.codigo = D.Empresa
where E.Codigo = D.Empresa


if @LogId = 'BORGATO'
begin
  Select @DataEncerramento = min(DataEncerramentoContabil)
  from ParamControle
  Where empresa = @DelEmpresa

  
  if (@DataEncerramento is null) 
    set @DataEncerramento = getdate()

  if (@DelDataMovimento < @DataEncerramento)
  begin
    exec @Seq = ProximaSequencia 'LOGUSUARIO', 0, 1
 
      Insert Into LogUsuario   
        (NumSequencia, SequenciaAux, FlagPrincipal, Tabela,  
         Empresa, TipoLog, DataMovimento, Programa,  
         Observacao, StatusTransacao, Campos)  
      SELECT
        @Seq, NumMovimento, 1, 'LancamentosContabeis',
        EMPRESA, 9, getDate(), 'AlterarMovDespesa',
        'LCTO PERIODO ENCERRADO', 1,
        'Empresa='           + Cast(Empresa as varchar(5)) +
        '#NumMovimento='     + Cast(NumMovimento as varchar(10)) +
        '#TipoMovimento='    + cast(TipoMovimento as varchar(10)) +
        '#NumSequencia='     + cast(NumSequencia as varchar(10)) +
        '#Periodo='          + Periodo +
        '#NumLote='          + cast(NumLote as varchar(3)) +
        '#NumLancamento='    + Cast(NumLancamento  as varchar(10)) +
        '#NumSequenciaCont=' + cast(NumSequencia_cont as varchar(10))
      From Deleted
      where DataMovimento < @DataEncerramento
    
      set @FlagInseriuLogUsuario = 1
  end
end

if @FlagInseriuLogUsuario = 0         
begin  
--MARCELO - CHAMADO 225117  
--declare @Seq integer    
  exec @Seq = ProximaSequencia 'LOGUSUARIO', 0, 1    
    
  Insert Into LogUsuario    
   --379902 
   --(NumSequencia, FlagPrincipal, Tabela, 
   (NumSequencia,SequenciaAux,FlagPrincipal, Tabela,       
    Empresa, TipoLog, DataMovimento, Programa,    
    Observacao, StatusTransacao,  
    Campos)    
  Select   
   --379902   
    --@Seq, 1, 'LancamentosContabeis', 
    --409772
    --@Seq, 1,I.NumMovimento, 'LancamentosContabeis',         
    @Seq,I.NumMovimento,1, 'LancamentosContabeis',         
    I.Empresa, 3, GetDate(),'Altera_MovDespesa',    
    'Log da Trigger', 1,    
    'Empresa=' + Cast(I.Empresa as varchar(5)) +    
    '#Periodo=' + I.Periodo +    
    '#NumLote='+ cast(I.NumLote as varchar(3)) +    
    '#NumLancamento=' + Cast(I.NumLancamento as varchar(10)) +     
    '#NumSequencia=' + cast(I.NumSequencia_cont as varchar(10)) +    
    '#TipoLancamento=' + LC.TipoLancamento +    
    '#CodConta=' + cast(LC.CodConta as varchar(15)) +    
    '#CodContrapartida=' + cast(LC.CodContraPartida as varchar(15)) +    
    '#'    
  from Inserted I    
    left join LancamentosContabeis LC on LC.Empresa = I.Empresa   
                                     and LC.Periodo = I.Periodo   
                                     and LC.NumLote = I.NumLote   
                                     and LC.NumLancamento = I.NumLancamento   
                                     and LC.NumSequencia  = I.NumSequencia_Cont   
    left join Duplicatas Dup on Dup.Empresa = I.Empresa     
                            and Dup.TipoDuplicata = I.TipoDuplicata     
                            and Dup.CodDuplicata = I.CodDuplicata      
                            and I.TipoRelacionamento = 1    
                            and Dup.CodConta <> 0   
   left join MovDuplicata MD on MD.Empresa = I.Empresa   
                             and MD.TipoMovimento = I.TipoMovimento        
                             and MD.NumSequencia = I.NumSequencia   
                             and MD.NumOcorrencia = I.NumOcorrencia    
  left join Duplicatas DupAux on DupAux.empresa = MD.EmpresaDuplicata   
                               and DupAux.TipoDuplicata = MD.TipoDuplicata       
                               and DupAux.CodDuplicata = MD.CodDuplicata         
  where I.codconta <> 0   
    and IsNull(LC.TipoGravacao,-1) = 0    
    and (LC.Empresa <> I.Empresa or  
         LC.Periodo <> I.Periodo or  
         LC.NumLote <> I.NumLote or  
     LC.NumLancamento <> I.NumLancamento or  
         LC.NumSequencia <> I.NumSequencia_Cont or  
         LC.CodConta <> Case When (I.TipoRelacionamento in (3,4,5) and I.TipoLancamento = 1 and I.TipoMovimento = 2 and (DupAux.Codconta is not null))   
                             then DupAux.Codconta     
                             when (I.TipoRelacionamento = 1 and (Dup.TipoDuplicata=1 and i.tipolancamento  = 0) or    
                                  (Dup.TipoDuplicata=2 and i.tipolancamento  = 0))    
                             then Dup.Codconta      
                             when (I.TipoRelacionamento = 1 and (Dup.TipoDuplicata=1 and i.tipolancamento  = 1) or    
                                  (Dup.TipoDuplicata=2 and i.tipolancamento  = 1))    
                             then I.CodConta     
                             Else I.CodConta    
                         End or  
         LC.CodContraPartida <> Case When Dup.CodConta Is Null   
                                     Then Case When (I.TipoRelacionamento in (3,4,5) and I.TipoLancamento = 1 and I.TipoMovimento = 2)   
                                               then I.CodConta    
                                               Else isnull(case when I.TipoMovimento = 2   
                                                                Then DupAux.CodConta   
                                                                else 0 end, 0) End    
                                     Else case when (I.TipoRelacionamento = 1 and (Dup.TipoDuplicata=1 and i.tipolancamento  = 0) or    
                                     (Dup.TipoDuplicata=2 and i.tipolancamento  = 0))     
                                               then  I.CodConta    
                                               when (I.TipoRelacionamento = 1 and (Dup.TipoDuplicata=1 and i.tipolancamento  = 1) or    
                                                    (Dup.TipoDuplicata=2 and i.tipolancamento  = 1))    
                                               then Dup.Codconta    
                                               else Dup.CodConta end End)  
  
  -- altera o lancamento contabil     
  update lancamentoscontabeis set    
  TipoLancamento   = Case TipoRelacionamento    
                       When 1 Then 'D'    
                       Else (Case    
                               When (I.TipoRelacionamento IN (3,4,5) and I.TipoLancamento = 1 and I.TipoMovimento = 2) then 'D'    
                               Else case when I.TipoLancamento = 0 Then 'D' else 'C' end    
                             End)    
                     End,    
    
  CodConta         = Case    
                       When (I.TipoRelacionamento in (3,4,5) and I.TipoLancamento = 1 and I.TipoMovimento = 2 and (DupAux.Codconta is not null)) then DupAux.Codconta     
                       when (I.TipoRelacionamento = 1 and (Dup.TipoDuplicata=1 and i.tipolancamento  = 0) or    
                              (Dup.TipoDuplicata=2 and i.tipolancamento  = 0))    
                       then Dup.Codconta      
                       when (I.TipoRelacionamento = 1 and (Dup.TipoDuplicata=1 and i.tipolancamento  = 1) or    
                              (Dup.TipoDuplicata=2 and i.tipolancamento  = 1))    
                        then I.CodConta     
                       Else I.CodConta    
                     End,    
    
  CodContraPartida = Case     
                       When Dup.CodConta Is Null Then     
                         Case    
                           When (I.TipoRelacionamento in (3,4,5) and I.TipoLancamento = 1 and I.TipoMovimento = 2) then I.CodConta    
                           Else isnull(case when I.TipoMovimento = 2 Then DupAux.CodConta else 0 end, 0)    
                         End    
                       Else     
                         case     
                           when (I.TipoRelacionamento = 1 and (Dup.TipoDuplicata=1 and i.tipolancamento  = 0) or    
                                (Dup.TipoDuplicata=2 and i.tipolancamento  = 0))     
                           then  I.CodConta    
                           when (I.TipoRelacionamento = 1 and (Dup.TipoDuplicata=1 and i.tipolancamento  = 1) or    
                                (Dup.TipoDuplicata=2 and i.tipolancamento  = 1))    
                           then Dup.Codconta    
                         else Dup.CodConta     
                         end     
                     End,    
    
  DataMovimento    = I.DataMovimento,    
-- DataPreDatado    =  I.DataMovimento,    
--340473  DataPreDatado    = (case when mc.datavencimento is null then I.DataMovimento else mc.datavencimento end),    
  DataPreDatado    = (case when mc.datavencimento is not null then mc.datavencimento
                      else IsNull(MD.DataPagamento, I.DataMovimento) end),
  Complemento      = I.Observacao,    
  ValorMovimento   = I.Valor,    
  CodDepartamento  = I.CodDepartamento,    
  CodHistorico     = IsNull(    
                     Case TipoRelacionamento    
                       When 1 Then    
                         Case    
                           When (Dup.TipoDuplicata=1 and I.TipoLancamento=0) or    
                                (Dup.TipoDuplicata=2 and I.TipoLancamento=1) Then P.CodHistorico_C    
                           Else P.CodHistorico_D    
                         End    
                       Else (Case I.TipoLancamento When 0 Then P.CodHistorico_D Else P.CodHistorico_C End)    
                     End,0),    
  NumDocumento = Case     
                   When (Dup.NumDocumento Is Null) or (I.TipoRelacionamento <> 1)     
                     Then LancamentosContabeis.NumDocumento     
                   Else Dup.NumDocumento     
                 End,    
  CodDetalhe   = I.CodDetalhe, --Karina -  135887    
  StatusTransacao = 1    
  from     
  inserted I    
  left join PlanoContas P on P.Empresa  = I.Empresa     
                                   and P.Periodo  = I.Periodo    
                                   and P.Tradutor = I.CodConta    
  left join Duplicatas Dup on Dup.Empresa = I.Empresa     
                                  and Dup.TipoDuplicata = I.TipoDuplicata     
                                  and Dup.CodDuplicata = I.CodDuplicata      
                                  and I.TipoRelacionamento = 1    
                                  and Dup.CodConta <> 0    
  left join MovDuplicata MD on MD.Empresa = I.Empresa and MD.TipoMovimento = I.TipoMovimento        
                                                           and MD.NumSequencia = I.NumSequencia and MD.NumOcorrencia = I.NumOcorrencia    
    
  left join Duplicatas DupAux on DupAux.empresa = MD.EmpresaDuplicata and DupAux.TipoDuplicata = MD.TipoDuplicata       
                                                           and DupAux.CodDuplicata = MD.CodDuplicata      
--- isaac    
  left join MovCaixa MC on MC.Empresa = I.Empresa and MC.nummovimento = i.nummovimentocaixa  
--393911
    and MC.NumSequencia = I.NumSequencia
--- isaac    
where lancamentoscontabeis.empresa       = I.empresa and     
           lancamentoscontabeis.Periodo       = I.Periodo and          
           lancamentoscontabeis.NumLote       = I.NumLote and          
           lancamentoscontabeis.NumLancamento = I.NumLancamento and          
           lancamentoscontabeis.NumSequencia  = I.NumSequencia_Cont and    
           I.codconta <> 0 and lancamentoscontabeis.TipoGravacao = 0      
    
end

go


if not exists (Select * from dbo.SysColumns Where id = object_id(N'[dbo].[MovEstoqueFicha]') and 
                                                 Name Like 'NomeMaquina' And
                                                 OBJECTPROPERTY(id, N'IsUserTable') = 1 )
begin

  Alter Table MovEstoqueFicha
    add NomeMaquina varchar(50) collate Latin1_General_CI_AS
end    
go

exec sp_bindefault 'dbo.Caracter', 'MovEstoqueFicha.NomeMaquina'
go

update MovEstoqueFicha set
  NomeMaquina = ''
where
  NomeMaquina is null  
go  


alter table MovEstoqueFicha
  alter column NomeMaquina varchar(50) collate Latin1_General_CI_AS not null 
go


if not exists (Select * from dbo.SysColumns Where id = object_id(N'[dbo].[MovEstoqueFicha]') and 
                                                 Name Like 'NomeAplicacao' And
                                                 OBJECTPROPERTY(id, N'IsUserTable') = 1 )
begin
  Alter Table MovEstoqueFicha
  add NomeAplicacao varchar(100) collate Latin1_General_CI_AS
end  
go

exec sp_bindefault 'dbo.Caracter', 'MovEstoqueFicha.NomeAplicacao'
go

update MovEstoqueFicha set
  NomeAplicacao = ''
where
  NomeAplicacao is null    
go  

alter table MovEstoqueFicha
  alter column NomeAplicacao varchar(100) collate Latin1_General_CI_AS not null 
go


ALTER Trigger  [dbo].[InsertEstoque] ON [dbo].[MovEstoque]      
FOR INSERT      
AS      
  
Declare @SvRowCount int       
Set @SvRowCount = @@RowCount      
/*********************  
VERSÃO 3.02  
*********************/  
  
--Gabriella - 353832  
If Exists(SELECT * from ConfiguracaoSistema where FlagTransacaoSnapShot = 1)  
  SET TRANSACTION ISOLATION LEVEL READ COMMITTED    
  
  
    
Declare @ExisteTransDiferente int -- Rafael chamado 263930    
set @ExisteTransDiferente = (select top 1 FlagTransDiferente from  ConfiguracaoSistema    
                             where FlagTransDiferente =1)    
    
    
if @ExisteTransDiferente IS NULL      
  Set @ExisteTransDiferente = 0    
    
    
If Exists(Select 1      
            From Inserted      
            Where Not (Inserted.CodProdutoMov in (8888888,9999999))      
              and Not Exists(Select 1 From EstoqueProduto      
                               Where EstoqueProduto.Empresa = Inserted.EmpresaEstoque      
                                 and EstoqueProduto.CodProduto = Inserted.CodProdutoMov))      
begin      
  if @SvRowCount = 1      
  begin      
    Insert Into EstoqueProduto (CodProduto, Empresa, ClasseABC)      
          Select CodProdutoMov, EmpresaEstoque, 'N'       
            From Inserted      
  end      
  Else      
  begin             
    Insert Into EstoqueProduto (CodProduto, Empresa, ClasseABC)              
     Select Aux.CodProdutoMov, Aux.EmpresaEstoque, 'N'       
       From (Select CodProdutoMov, EmpresaEstoque      
               From Inserted      
               Where not (CodProdutoMov in (8888888,9999999))      
               Group By CodProdutoMov, EmpresaEstoque) Aux      
        Where not Exists(Select Empresa From EstoqueProduto Es      
                          Where Es.CodProduto = Aux.CodProdutoMov      
                            and Es.Empresa = Aux.EmpresaEstoque)    
   end      
end      
    
    
    
-- Rafael chamado 263930    
if @ExisteTransDiferente = 1      
begin      
      
  Insert into TransacaoDados    
  (    
    Tabela,Campo1,    
    Valor1,Campo2,    
    Valor2,TipoAcao,    
    StatusTransacao,TransacaoEmpresas)    
    Select     
    'MovEstoque','Empresa',    
    I.empresa,'NumLancamento',    
    I.NumLancamento,1,    
    1,I.TransacaoEmpresas    
    From Inserted I    
    where    
    I.StatusTransacao =1    
end    
    
    
Insert Into MovEstoqueFicha (    
  Empresa, EmpresaEstoque, CodProduto,    
  NumLancamento, TipoMovimento, DataMovimento,    
  QuantMovimento, QuantEstoque, StatusTransacao, Origem, DataInclusaoFicha,  
  --Ronaldo Chamado 410824  
  NomeMaquina, NomeAplicacao  
  )    
Select     
  I.Empresa, I.EmpresaEstoque, I.CodProduto,    
  I.NumLancamento, I.TipoMovimento, I.DataMovimento,    
  --Rafael chamado 251914    
  -- I.QuantMovimentada, E.QuantEstoque, 1, GetDate()    
  I.QuantMovimentada,isnull(E.QuantEstoque,0), 1, 'I', GetDate(),   
  --Ronaldo Chamado 410824   
  Host_Name() as NomeMaquina, App_Name() as NomeAplicacao  
From Inserted I    
  Left Join EstoqueProduto E on E.CodProduto = I.CodProdutoMov    
    and E.Empresa = I.EmpresaEstoque    
Where I.CodProdutoMov not in (8888888,9999999)    
  and I.FlagMovEstoque = 1    
  and I.TipoMovimento in (1,2)    
    
If @SvRowCount = 1      
begin      
  Update EstoqueProduto       
     Set QuantEstoque = EstoqueProduto.QuantEstoque      
                          + Case When Inserted.TipoMovimento = 1 and Inserted.FlagMovEstoque = 1       
                                 then Inserted.QuantMovimentada      
                                 When Inserted.TipoMovimento = 2 and Inserted.FlagMovEstoque = 1      
                                 then Inserted.QuantMovimentada * -1       
                                 Else 0 End,      
         QuantReservada = EstoqueProduto.QuantReservada      
                          + Case When Inserted.TipoMovimento = 2 and Inserted.FlagMovEstoque = 0      
                                 then Inserted.QuantMovimentada      
 Else 0 End,    
      
         QuantReservadaEnt = EstoqueProduto.QuantReservadaEnt    
                          + Case When Inserted.TipoMovimento = 1 and Inserted.FlagMovEstoque = 0    
                                 then Inserted.QuantMovimentada    
       Else 0 End,    
    
         QuantPendente = EstoqueProduto.QuantPendente      
                          + Case When Inserted.TipoMovimento = 0 and Inserted.FlagMovEstoque = -2      
                                 Then Inserted.QuantMovimentada Else 0 End,      
--MARCELO - CHAMADO 232609    
  QuantPedidoAberto = EstoqueProduto.QuantPedidoAberto +     
                             case when (Inserted.CodPedido > 0)    
                                   and (Inserted.CodControle = 0)    
                                   and (Inserted.FlagMovEstoque = 1)    
                                  then case when Inserted.TipoMovimento = 1 then Inserted.QuantMovimentada * -1    
                                            when Inserted.TipoMovimento = 2 then Inserted.QuantMovimentada     
                                            else 0 end    
                                        else 0 end,    
 --Eder chamado 262226    
         DataPrimeiraCompra = Case When Inserted.DataMovimento is not null     
                                    and (Inserted.DataMovimento <= EstoqueProduto.DataPrimeiraCompra or    
                                         EstoqueProduto.DataPrimeiraCompra is null)     
                                   Then Inserted.DataMovimento    
                                   Else EstoqueProduto.DataPrimeiraCompra End,    
         StatusTransacao = 1 ,  
        
        --379491  
         TipoIgnoraSugestaoCompra = Case When  (Inserted.TipoMovimento in(1,2)) and  
                                               (Inserted.FlagMovEstoque = 1) and   
                                               (TipoIgnoraSugestaoCompra = 2) Then 0    
                                         else TipoIgnoraSugestaoCompra end          
    From Inserted      
   Where EstoqueProduto.Empresa = Inserted.EmpresaEstoque      
     and EstoqueProduto.CodProduto = Inserted.CodProdutoMov      
     and not (Inserted.CodProdutoMov in (8888888, 9999999))      
end      
Else      
begin      
  Update EstoqueProduto       
     Set QuantEstoque = EstoqueProduto.QuantEstoque + Aux.QuantMovimentada,      
         QuantReservada = EstoqueProduto.QuantReservada + Aux.QuantReservada,      
         QuantReservadaEnt = EstoqueProduto.QuantReservadaEnt + Aux.QuantReservadaEnt,      
         QuantPendente = EstoqueProduto.QuantPendente + Aux.QuantPendente,    
         --Eder chamado 262226    
         DataPrimeiraCompra = Case When Aux.DataPrimeiraCompra is not null     
                                    and (Aux.DataPrimeiraCompra <= EstoqueProduto.DataPrimeiraCompra or    
                                         EstoqueProduto.DataPrimeiraCompra is null)     
                                   Then Aux.DataPrimeiraCompra    
                                   Else EstoqueProduto.DataPrimeiraCompra End,    
         --MARCELO - CHAMADO 232609    
         QuantPedidoAberto = EstoqueProduto.QuantPedidoAberto + Aux.QuantPedidoAberto,    
         StatusTransacao = 1,  
         --379491  
         TipoIgnoraSugestaoCompra = Case When  (TipoMovimentacao in(1,2))and  
                                               (FlagMovEst = 1) and   
                                               (EstoqueProduto.TipoIgnoraSugestaoCompra = 2) Then 0    
                                         else EstoqueProduto.TipoIgnoraSugestaoCompra end  
                                                 
    From (Select EmpresaEstoque, CodprodutoMov,       
               Sum(Case When TipoMovimento = 1 and FlagMovEstoque = 1 then QuantMovimentada      
                        When TipoMovimento = 2 and FlagMovEstoque = 1 then QuantMovimentada * -1      
                        Else 0 End) as QuantMovimentada,      
               Sum(Case When TipoMovimento = 2 and FlagMovEstoque = 0 then QuantMovimentada      
                        Else 0 End) as QuantReservada,      
               Sum(Case When TipoMovimento = 1 and FlagMovEstoque = 0 then QuantMovimentada      
                        Else 0 End) as QuantReservadaEnt,      
               Sum(Case When TipoMovimento = 0 and FlagMovEstoque = -2 Then QuantMovimentada      
                        Else 0 End) as QuantPendente,    
               --MARCELO - CHAMADO 232609    
               Sum(case when (CodPedido > 0) and (CodControle = 0) and (FlagMovEstoque = 1)    
                        then case when TipoMovimento = 1 then QuantMovimentada * -1    
                                  when TipoMovimento = 2 then QuantMovimentada     
                                  else 0 end     
                        else 0 end) AS QuantPedidoAberto,    
               --Rafael chamado 262226    
               Min(Inserted.DataMovimento)as DataPrimeiraCompra,  
               --379491   
               Min(Inserted.TipoMovimento)as TipoMovimentacao,     
               min(Inserted.FlagMovEstoque) as FlagMovEst  
                 
               From Inserted      
               Where not (CodProdutoMov in (8888888, 9999999))      
               Group By EmpresaEstoque, CodProdutoMov) Aux      
    Where EstoqueProduto.Empresa = Aux.EmpresaEstoque      
      and EstoqueProduto.CodProduto = Aux.CodProdutoMov      
end      
      
    
If @SvRowCount = 1      
begin      
  Update ItemPedidoCompra      
     Set QuantAtendida = ItemPedidoCompra.QuantAtendida + Inserted.QuantAtendida,      
        
          StatusItem = Case When (ItemPedidoCompra.TipoGerarEntrada = 2) And (Inserted.CodControle <> 0) Then 1    
                                
                            When (ItemPedidoCompra.TipoGerarEntrada = 2) and (PC.TipoPedido = 1) then 1    
                            When (ItemPedidoCompra.TipoGerarEntrada = 2) and (Inserted.CodControle = 0) then 0    
                            When (ItemPedidoCompra.TipoGerarEntrada = 0) and (ItemPedidoCompra.QuantAtendida + Inserted.QuantAtendida) >= ItemPedidoCompra.QuantPedida then 1    
                                          
                            When (ItemPedidoCompra.TipoGerarEntrada = 0) and (ItemPedidoCompra.QuantAtendida + Inserted.QuantAtendida) < ItemPedidoCompra.QuantPedida then 0    
                           Else 0 End,    
         TipoGerarEntrada = Case When (ItemPedidoCompra.TipoGerarEntrada = 2) And (Inserted.CodControle <> 0) Then 3    
                                 Else ItemPedidoCompra.TipoGerarEntrada End,    
         StatusTransacao = 1      
   From Inserted      
         
     Left Join PedidoCompra PC on PC.EmpresaEstoque = Inserted.EmpresaEstoque    
       and PC.CodPedido = Inserted.CodPedido    
   Where ItemPedidoCompra.EmpresaEstoque = Inserted.EmpresaEstoque      
     and ItemPedidoCompra.CodPedido      = Inserted.CodPedCompra      
     and ItemPedidoCompra.NumLancamento  = Inserted.SeqItemPedCompra      
     and Inserted.TipoMovimento = 1      
     and Inserted.CodPedCompra > 0      
end      
Else      
begin      
  Update ItemPedidoCompra      
     Set QuantAtendida = ItemPedidoCompra.QuantAtendida + Aux.QuantAtendida,      
        
         StatusItem = Case When (ItemPedidoCompra.TipoGerarEntrada = 2) And (Aux.CodControle <> 0) Then 1    
                                
                           When (ItemPedidoCompra.TipoGerarEntrada = 2) and (Aux.TipoPedido = 1) then 1    
                           When (ItemPedidoCompra.TipoGerarEntrada = 2) and (Aux.CodControle = 0) then 0    
                           When (ItemPedidoCompra.TipoGerarEntrada = 0) and (ItemPedidoCompra.QuantAtendida + Aux.QuantAtendida) >= ItemPedidoCompra.QuantPedida then 1     
                           Else 0 End,    
         TipoGerarEntrada = Case When (ItemPedidoCompra.TipoGerarEntrada = 2) And (Aux.CodControle <> 0) Then 3    
                                 Else ItemPedidoCompra.TipoGerarEntrada End,    
         StatusTransacao = 1      
    From (Select Inserted.EmpresaEstoque, Inserted.CodPedCompra, Inserted.SeqItemPedCompra,       
                 Sum(Inserted.QuantAtendida) as QuantAtendida, Min(Inserted.CodControle) as CodControle,    
                     
                 Max(PC.TipoPedido) as TipoPedido    
            From Inserted      
                
              Left Join PedidoCompra PC on PC.EmpresaEstoque = Inserted.EmpresaEstoque    
                and PC.CodPedido = Inserted.CodPedido    
           Where TipoMovimento = 1      
             and CodPedCompra > 0      
           Group By Inserted.EmpresaEstoque, Inserted.CodPedCompra, Inserted.SeqItemPedCompra) Aux    
   Where ItemPedidoCompra.EmpresaEstoque = Aux.EmpresaEstoque      
     and ItemPedidoCompra.CodPedido      = Aux.CodPedCompra      
     and ItemPedidoCompra.NumLancamento  = Aux.SeqItemPedCompra      
end      
    
    
Update EstoqueProduto       
   Set ValorCustoMed = isnull((Select Top 1 Mov.ValorCustoMed From  MovEstoque Mov      
                              Left Join Operacoes Opr on Opr.Codigo = Mov.CodOperacao      
                              Where Mov.EmpresaEstoque = EstoqueProduto.Empresa      
                               And Mov.CodProduto     = EstoqueProduto.CodProduto      
                               And Mov.TipoMovimento  = 1                         
                               And Mov.FlagMovEstoque = 1                 
                     And Opr.FlagCustoMedio = 1    
                             Order By DataMovimento Desc, NumLancamento Desc),0),      
       ValorCustoUlt = isnull((Select Top 1 Mov.ValorCustoUlt From  MovEstoque Mov      
                              Left Join Operacoes Opr on Opr.Codigo = Mov.CodOperacao      
                             Where Mov.EmpresaEstoque = EstoqueProduto.Empresa      
                               And Mov.CodProduto     = EstoqueProduto.CodProduto      
                               And Mov.TipoMovimento  = 1                         
                               And Mov.FlagMovEstoque = 1                 
                               And Opr.FlagCustoMedio = 1    
                             Order By DataMovimento Desc, NumLancamento Desc),0),      
       ValorCustoUltReal = isnull((Select Top 1 Mov.ValorCustoUltReal From  MovEstoque Mov      
                              Left Join Operacoes Opr on Opr.Codigo = Mov.CodOperacao      
                             Where Mov.EmpresaEstoque = EstoqueProduto.Empresa      
                               And Mov.CodProduto     = EstoqueProduto.CodProduto      
                               And Mov.TipoMovimento  = 1                         
                               And Mov.FlagMovEstoque = 1                 
                               And Opr.FlagCustoMedio = 1    
                             Order By DataMovimento Desc, NumLancamento Desc),0),    
       StatusTransacao = 1    
    From Inserted    
    Where EstoqueProduto.Empresa = Inserted.EmpresaEstoque    
      and EstoqueProduto.CodProduto = Inserted.CodProduto    
      and Inserted.TipoMovimento = 1    
      and Inserted.FlagMovEstoque = 1    
      and (not Inserted.CodProduto in(8888888,9999999))    
      --Eder - 345018 - Nâo atualizar custo medio se empresa mantem custo medio de outra empresa (Ex: Galpao)  
      and not exists(Select * from EmpresasCustoMedio ECusto  
                      Where ECusto.EmpresaCustoMedio = EstoqueProduto.Empresa)  
go

ALTER Trigger  [dbo].[UpdateMovEstoque] ON [dbo].[MovEstoque]        
FOR UPDATE        
AS        
Declare @SvRowCount int          
Set @SvRowCount = @@RowCount     
/*********************  
VERSÃO 3.02  
*********************/  
  
--Gabriella - 353832  
If Exists(SELECT * from ConfiguracaoSistema where FlagTransacaoSnapShot = 1)  
  SET TRANSACTION ISOLATION LEVEL READ COMMITTED    
    
    
Declare @ExisteTransDiferente int -- Rafael chamado 263930    
set @ExisteTransDiferente = (select top 1 FlagTransDiferente from  ConfiguracaoSistema    
                             where FlagTransDiferente =1)    
    
    
if @ExisteTransDiferente IS NULL      
  Set @ExisteTransDiferente = 0    
    
    
    
--Rafael chamado 263930    
if @ExisteTransDiferente = 1      
begin      
    
    
  If Exists(Select 1 From Inserted     
            Where     
               Exists( Select 1 From TransacaoDados Trans      
                       Where     
                              Trans.Tabela ='MovEstoque'     
                          and Trans.Campo1='Empresa'       
                          and Trans.Valor1= Inserted.empresa     
                          and Trans.Campo2='NumLancamento'    
                          and Trans.Valor2= Inserted.Numlancamento    
                          and Trans.Statustransacao in(1,2)))    
                      
  begin      
    
    Update TransacaoDados    
    set TransacaoEmpresas =' ',    
      TipoAcao = 2,    
      StatusTransacao = 1    
    From  Inserted     
    where    
       Tabela ='MovEstoque'    
  and  Campo1='Empresa'       
  and  Valor1= Inserted.empresa     
  and  Campo2='NumLancamento'    
  and  Valor2= Inserted.Numlancamento    
    
  end    
  Else      
  begin    
    Insert into TransacaoDados    
    (    
      Tabela,Campo1,    
      Valor1,Campo2,    
      Valor2,TipoAcao,    
      StatusTransacao,TransacaoEmpresas)    
      Select     
      'MovEstoque','Empresa',    
      I.empresa,'NumLancamento',    
      I.NumLancamento,2,    
      1,I.TransacaoEmpresas    
      From Inserted I    
      where    
      I.StatusTransacao <> 2    
  end    
end    
    
Insert Into MovEstoqueFicha (    
  Empresa, EmpresaEstoque, CodProduto, NumLancamento,    
  DataMovimento, Origem, DataInclusaoFicha, QuantMovimento,   
  QuantEstoque, StatusTransacao,  TipoMovimento,   
  --Ronaldo Chamado 410824  
  NomeMaquina, NomeAplicacao  
  )    
Select    
  Deleted.Empresa, Deleted.EmpresaEstoque, Deleted.CodProduto, Deleted.NumLancamento,    
  --Rafael chamado 251914    
  --Deleted.DataMovimento, GetDate(), Deleted.QuantMovimentada, E.QuantEstoque, 1,    
  Deleted.DataMovimento, 'U', GetDate(), Deleted.QuantMovimentada,isnull(E.QuantEstoque,0), 1,    
  Case Deleted.TipoMovimento When 1 then 2 else 1 end,  
  --Ronaldo Chamado 410824   
  Host_Name() as NomeMaquina, App_Name() as NomeAplicacao  
From Inserted, Deleted    
  Left Join EstoqueProduto E on E.CodProduto = Deleted.CodProdutoMov    
    and E.Empresa = Deleted.EmpresaEstoque    
Where     
  Inserted.Empresa = Deleted.Empresa    
  And Inserted.NumLancamento = Deleted.NumLancamento    
  And Deleted.CodProdutoMov not in (8888888,9999999)    
  And Deleted.FlagMovEstoque = 1 And Deleted.TipoMovimento in (1,2)    
  And ( Inserted.DataMovimento <> Deleted.DataMovimento    
        or Inserted.TipoMovimento <> Deleted.TipoMovimento    
        or Inserted.FlagMovEstoque <> Deleted.FlagMovEstoque    
        or Inserted.QuantMovimentada <> Deleted.QuantMovimentada    
        or Inserted.CodProduto <> Deleted.CodProduto)    
    
    
Insert Into MovEstoqueFicha (    
  Empresa, EmpresaEstoque, CodProduto, NumLancamento,    
  DataMovimento, Origem, DataInclusaoFicha, QuantMovimento,   
  QuantEstoque, StatusTransacao, TipoMovimento,  
  --Ronaldo Chamado 410824  
  NomeMaquina, NomeAplicacao  
  )    
Select    
  Inserted.Empresa, Inserted.EmpresaEstoque, Inserted.CodProduto, Inserted.NumLancamento,    
  Inserted.DataMovimento, 'U', GetDate(), Inserted.QuantMovimentada,     
 --Rafael chamado 251914     
--E.QuantEstoque +    
  isnull(E.QuantEstoque,0) +     
  (Case When Deleted.FlagMovEstoque = 1     
         And Deleted.TipoMovimento in (1,2)     
         And Deleted.CodProduto = Inserted.CodProduto    
        Then    
          (Case Deleted.TipoMovimento When 1 then -1 else 1 end * Deleted.QuantMovimentada)    
        Else 0    
 End),    
  1, Inserted.TipoMovimento    
--Ronaldo Chamado 410824  
,Host_Name() as NomeMaquina, App_Name() as NomeAplicacao  
From Deleted, Inserted     
  Left Join EstoqueProduto E on E.CodProduto = Inserted.CodProdutoMov    
    and E.Empresa = Inserted.EmpresaEstoque    
Where     
  Inserted.Empresa = Deleted.Empresa    
  And Inserted.NumLancamento = Deleted.NumLancamento    
  And Inserted.CodProdutoMov not in (8888888,9999999)    
  And Inserted.FlagMovEstoque = 1 And Inserted.TipoMovimento in (1,2)    
  And ( Inserted.DataMovimento <> Deleted.DataMovimento    
        or Inserted.TipoMovimento <> Deleted.TipoMovimento    
        or Inserted.QuantMovimentada <> Deleted.QuantMovimentada    
        or Inserted.CodProduto <> Deleted.CodProduto    
        or Inserted.FlagMovEstoque <> Deleted.FlagMovEstoque)      
       
    
If @SvRowCount = 1        
begin        
  Update EstoqueProduto       
     Set QuantEstoque = EstoqueProduto.QuantEstoque      
                             + Case When Deleted.TipoMovimento = 1 and Deleted.FlagMovEstoque = 1      
                                    then Deleted.QuantMovimentada * -1      
                                     When Deleted.TipoMovimento = 2 and Deleted.FlagMovEstoque = 1      
                                    then Deleted.QuantMovimentada       
                                    Else 0 End,      
         QuantReservada = EstoqueProduto.QuantReservada      
                             + Case When Deleted.TipoMovimento = 2 and Deleted.FlagMovEstoque = 0      
                                    then Deleted.QuantMovimentada * -1       
                                    Else 0 End,      
         QuantReservadaEnt = EstoqueProduto.QuantReservadaEnt    
                             + Case When Deleted.TipoMovimento = 1 and Deleted.FlagMovEstoque = 0    
                                    then Deleted.QuantMovimentada * -1    
                                    Else 0 End,    
         QuantPendente = EstoqueProduto.QuantPendente       
                          + Case When Deleted.TipoMovimento = 0 and Deleted.FlagMovEstoque = -2      
                                 Then Deleted.QuantMovimentada * -1 Else 0 End,      
--MARCELO - CHAMADO 232609    
         QuantPedidoAberto = EstoqueProduto.QuantPedidoAberto +     
                             case when Deleted.CodPedido > 0     
                                   and Deleted.CodControle = 0    
                                   and Deleted.FlagMovEstoque = 1    
                                  then case when Deleted.TipoMovimento = 1 then Deleted.QuantMovimentada    
                                            when Deleted.TipoMovimento = 2 then Deleted.QuantMovimentada * -1    
                                            else 0 end    
                                  else 0 end,     
--Eder chamado 262226    
         DataPrimeiraCompra = Case When Deleted.DataMovimento is not null     
                                    and (Deleted.DataMovimento <= EstoqueProduto.DataPrimeiraCompra or    
                                         EstoqueProduto.DataPrimeiraCompra is null)     
                                   Then null    
                                   Else EstoqueProduto.DataPrimeiraCompra End,    
         StatusTransacao = 1      
    From Deleted      
   Where EstoqueProduto.Empresa = Deleted.EmpresaEstoque      
     and EstoqueProduto.CodProduto = Deleted.CodProdutoMov      
     and not (Deleted.CodProdutoMov in (8888888, 9999999))      
    
      
  Update EstoqueProduto       
     Set QuantEstoque = EstoqueProduto.QuantEstoque      
                          + Case When Inserted.TipoMovimento = 1 and Inserted.FlagMovEstoque = 1       
                                 then Inserted.QuantMovimentada      
                                 When Inserted.TipoMovimento = 2 and Inserted.FlagMovEstoque = 1      
                                 then Inserted.QuantMovimentada * -1       
                                 Else 0 End,      
         QuantReservada = EstoqueProduto.QuantReservada      
                          + Case When Inserted.TipoMovimento = 2 and Inserted.FlagMovEstoque = 0      
                                 then Inserted.QuantMovimentada     
                                 Else 0 End,      
         QuantReservadaEnt = EstoqueProduto.QuantReservadaEnt      
                          + Case When Inserted.TipoMovimento = 1 and Inserted.FlagMovEstoque = 0      
                                 then Inserted.QuantMovimentada      
                                 Else 0 End,      
         QuantPendente = EstoqueProduto.QuantPendente      
                          + Case When Inserted.TipoMovimento = 0 and Inserted.FlagMovEstoque = -2      
                                 Then Inserted.QuantMovimentada Else 0 End,    
--MARCELO - CHAMADO 232609    
         QuantPedidoAberto = EstoqueProduto.QuantPedidoAberto +     
                             case when Inserted.CodPedido > 0     
                                   and Inserted.CodControle = 0    
                                   and Inserted.FlagMovEstoque = 1    
                                  then case when Inserted.TipoMovimento = 1 then Inserted.QuantMovimentada * -1    
                                            when Inserted.TipoMovimento = 2 then Inserted.QuantMovimentada    
                                            else 0 end    
                                  else 0 end,                                     
--Eder chamado 262226    
         DataPrimeiraCompra = Case When Inserted.DataMovimento is not null     
                                    and (Inserted.DataMovimento <= EstoqueProduto.DataPrimeiraCompra or    
                                         EstoqueProduto.DataPrimeiraCompra is null)     
                                   Then Inserted.DataMovimento    
                                   Else EstoqueProduto.DataPrimeiraCompra End,    
         StatusTransacao = 1,  
           
         --379491  
         TipoIgnoraSugestaoCompra = Case When  (Inserted.TipoMovimento in(1,2)) and  
                                               (Inserted.FlagMovEstoque = 1) and   
                                               (TipoIgnoraSugestaoCompra = 2) Then 0    
                                         else TipoIgnoraSugestaoCompra end          
     
           
               
    From Inserted      
   Where EstoqueProduto.Empresa = Inserted.EmpresaEstoque      
     and EstoqueProduto.CodProduto = Inserted.CodProdutoMov      
     and not (Inserted.CodProdutoMov in (8888888, 9999999))      
end        
Else        
begin        
      
  Update EstoqueProduto       
     Set QuantEstoque = EstoqueProduto.QuantEstoque + Aux.QuantMovimentada,      
         QuantReservada = EstoqueProduto.QuantReservada + Aux.QuantReservada,      
         QuantReservadaEnt = EstoqueProduto.QuantReservadaEnt + Aux.QuantReservadaEnt,      
         QuantPendente = EstoqueProduto.QuantPendente + Aux.QuantPendente,      
--MARCELO - CHAMADO 232609    
         QuantPedidoAberto = EstoqueProduto.QuantPedidoAberto + Aux.QuantPedidoAberto,     
--Eder chamado 262226    
         DataPrimeiraCompra = Case When Aux.DataPrimeiraCompra is not null     
                                    and (Aux.DataPrimeiraCompra <= EstoqueProduto.DataPrimeiraCompra or    
                                         EstoqueProduto.DataPrimeiraCompra is null)     
                                   Then null    
                                   Else EstoqueProduto.DataPrimeiraCompra End,    
         StatusTransacao = 1 ,  
          --379491  
         TipoIgnoraSugestaoCompra = Case When  (TipoMovimentacao in(1,2))and  
                               (FlagMovEst = 1)and  
                                               (EstoqueProduto.TipoIgnoraSugestaoCompra = 2) Then 0    
                                    else EstoqueProduto.TipoIgnoraSugestaoCompra end                                      
                                      
    From (Select EmpresaEstoque, CodprodutoMov,       
               Sum(Case When TipoMovimento = 1 and FlagMovEstoque = 1 then QuantMovimentada * -1      
                        When TipoMovimento = 2 and FlagMovEstoque = 1 then QuantMovimentada      
                        Else 0 End) as QuantMovimentada,      
               Sum(Case When TipoMovimento = 2 and FlagMovEstoque = 0 then QuantMovimentada * -1      
                        Else 0 End) as QuantReservada,      
               Sum(Case When TipoMovimento = 1 and FlagMovEstoque = 0 then QuantMovimentada * -1      
                        Else 0 End) as QuantReservadaEnt,      
               Sum(Case When TipoMovimento = 0 and FlagMovEstoque = -2 Then QuantMovimentada * -1      
                        Else 0 End) as QuantPendente,    
--MARCELO - CHAMADO 232609    
        Sum(Case when (CodPedido > 0) and (CodControle = 0) and (FlagMovEstoque = 1)     
                        then case when TipoMovimento = 1 then QuantMovimentada    
                                  when TipoMovimento = 2 then QuantMovimentada * -1    
                                  else 0 end    
                        else 0 end) as QuantPedidoAberto,    
--Eder chamado 262226    
               min(Deleted.DataMovimento) as DataPrimeiraCompra,    
               --379491   
               Min(Deleted.TipoMovimento)as TipoMovimentacao,    
               min(Deleted.FlagMovEstoque) as FlagMovEst        
                  
               From Deleted      
               Where not (CodProdutoMov in (8888888, 9999999))      
               Group By EmpresaEstoque, CodProdutoMov) Aux      
    Where EstoqueProduto.Empresa = Aux.EmpresaEstoque      
      and EstoqueProduto.CodProduto = Aux.CodProdutoMov      
    
      
  Update EstoqueProduto       
     Set QuantEstoque = EstoqueProduto.QuantEstoque + Aux.QuantMovimentada,      
         QuantReservada = EstoqueProduto.QuantReservada + Aux.QuantReservada,      
         QuantReservadaEnt = EstoqueProduto.QuantReservadaEnt + Aux.QuantReservadaEnt,      
         QuantPendente = EstoqueProduto.QuantPendente + Aux.QuantPendente,      
--MARCELO - CHAMADO 232609    
  QuantPedidoAberto = EstoqueProduto.QuantPedidoAberto + Aux.QuantPedidoAberto,    
         StatusTransacao = 1,      
         --Eder chamado 262226    
         DataPrimeiraCompra = Case When Aux.DataPrimeiraCompra is not null     
                                    and (Aux.DataPrimeiraCompra <= EstoqueProduto.DataPrimeiraCompra or    
                                         EstoqueProduto.DataPrimeiraCompra is null)     
                                   Then Aux.DataPrimeiraCompra    
                                   Else EstoqueProduto.DataPrimeiraCompra End,    
         --379491  
         TipoIgnoraSugestaoCompra = Case When  (TipoMovimentacao in(1,2))and  
                                               (FlagMovEst = 1)and  
                                               (EstoqueProduto.TipoIgnoraSugestaoCompra = 2) Then 0    
                                         else EstoqueProduto.TipoIgnoraSugestaoCompra end                                   
                                     
    From (Select EmpresaEstoque, CodprodutoMov,       
               Sum(Case When TipoMovimento = 1 and FlagMovEstoque = 1 then QuantMovimentada      
                        When TipoMovimento = 2 and FlagMovEstoque = 1 then QuantMovimentada * -1      
                        Else 0 End) as QuantMovimentada,      
               Sum(Case When TipoMovimento = 2 and FlagMovEstoque = 0 then QuantMovimentada      
    
                        Else 0 End) as QuantReservada,      
               Sum(Case When TipoMovimento = 1 and FlagMovEstoque = 0 then QuantMovimentada      
                        Else 0 End) as QuantReservadaEnt,      
               Sum(Case When TipoMovimento = 0 and FlagMovEstoque = -2 Then QuantMovimentada      
                        Else 0 End) as QuantPendente,    
--MARCELO - CHAMADO 232609    
               Sum(Case when (CodPedido > 0) and (CodControle = 0) and (FlagMovEstoque = 1)     
                        then case when TipoMovimento = 1 then QuantMovimentada * -1    
                                  when TipoMovimento = 2 then QuantMovimentada    
                                  else 0 end    
                        else 0 end) as QuantPedidoAberto,    
--Eder chamado 262226    
               min(Inserted.DataMovimento) as DataPrimeiraCompra,  
              --379491   
               Min(Inserted.TipoMovimento)as TipoMovimentacao,    
               min(Inserted.FlagMovEstoque) as FlagMovEst        
                 
               From Inserted      
               Where not (CodProdutoMov in (8888888, 9999999))      
               Group By EmpresaEstoque, CodProdutoMov) Aux      
    Where EstoqueProduto.Empresa = Aux.EmpresaEstoque      
      and EstoqueProduto.CodProduto = Aux.CodProdutoMov      
    
    
end    
      
Update ItemPedidoCompra        
   Set QuantAtendida = ItemPedidoCompra.QuantAtendida - Del.QuantAtendida,      
       StatusTransacao = 1    
  From ItemPedidoCompra,    
       (Select EmpresaEstoque, CodPedCompra, SeqItemPedCompra,    
               Sum(QuantAtendida) as QuantAtendida        
          From Deleted        
         Where TipoMovimento = 1        
           and CodPedCompra > 0        
         Group By EmpresaEstoque, CodPedCompra, SeqItemPedCompra) Del        
 Where ItemPedidoCompra.EmpresaEstoque = Del.EmpresaEstoque        
   and ItemPedidoCompra.CodPedido      = Del.CodPedCompra        
   and ItemPedidoCompra.NumLancamento  = Del.SeqItemPedCompra      
      
    
Update ItemPedidoCompra        
   Set QuantAtendida = ItemPedidoCompra.QuantAtendida + Ins.QuantAtendida,      
       
       StatusItem = Case When (ItemPedidoCompra.TipoGerarEntrada = 2) and (Ins.CodControle <> 0) Then 1    
                             
                         When (ItemPedidoCompra.TipoGerarEntrada = 2) and (PC.TipoPedido = 1) Then 1    
                         When (ItemPedidoCompra.TipoGerarEntrada = 3) and (Ins.CodControle = 0) then 0    
                         When (ItemPedidoCompra.TipoGerarEntrada = 0) and (ItemPedidoCompra.QuantAtendida + Ins.QuantAtendida) >= ItemPedidoCompra.QuantPedida Then 1    
                             
                         When (ItemPedidoCompra.TipoGerarEntrada = 0) and (ItemPedidoCompra.QuantAtendida + Ins.QuantAtendida) < ItemPedidoCompra.QuantPedida Then 0    
                         Else ItemPedidoCompra.StatusItem End,      
       TipoGerarEntrada = Case When (ItemPedidoCompra.TipoGerarEntrada = 2) and (Ins.CodControle <> 0) Then 3    
                               When (ItemPedidoCompra.TipoGerarEntrada = 3) and (Ins.CodControle = 0) Then 2    
                               Else ItemPedidoCompra.TipoGerarEntrada    
                          End,      
       StatusTransacao = 1        
  From ItemPedidoCompra     
        
    Left Join PedidoCompra PC on PC.EmpresaEstoque = ItemPedidoCompra.EmpresaEstoque    
      and PC.CodPedido = ItemPedidoCompra.CodPedido,        
       (Select EmpresaEstoque, CodPedCompra, SeqItemPedCompra,         
               Sum(QuantAtendida) as QuantAtendida, Min(CodControle) as CodControle    
          From Inserted        
          Where TipoMovimento = 1        
            and CodPedCompra > 0        
          Group By EmpresaEstoque, CodPedCompra, SeqItemPedCompra) Ins      
  Where ItemPedidoCompra.EmpresaEstoque = Ins.EmpresaEstoque        
    and ItemPedidoCompra.CodPedido      = Ins.CodPedCompra        
    and ItemPedidoCompra.NumLancamento  = Ins.SeqItemPedCompra      
       
      
    
    
Update EstoqueProduto       
   Set ValorCustoMed = isnull((Select Top 1 Mov.ValorCustoMed From  MovEstoque Mov      
                              Left Join Operacoes Opr on Opr.Codigo = Mov.CodOperacao      
                              Where Mov.EmpresaEstoque = EstoqueProduto.Empresa      
                               And Mov.CodProduto     = EstoqueProduto.CodProduto      
                               And Mov.TipoMovimento  = 1                         
                               And Mov.FlagMovEstoque = 1                 
                               And Opr.FlagCustoMedio = 1    
                             Order By DataMovimento Desc, NumLancamento Desc),0),      
       ValorCustoUlt = isnull((Select Top 1 Mov.ValorCustoUlt From  MovEstoque Mov      
                              Left Join Operacoes Opr on Opr.Codigo = Mov.CodOperacao      
                             Where Mov.EmpresaEstoque = EstoqueProduto.Empresa      
                               And Mov.CodProduto     = EstoqueProduto.CodProduto      
                               And Mov.TipoMovimento  = 1                         
                               And Mov.FlagMovEstoque = 1                 
                               And Opr.FlagCustoMedio = 1    
                             Order By DataMovimento Desc, NumLancamento Desc),0),      
       ValorCustoUltReal = isnull((Select Top 1 Mov.ValorCustoUltReal From  MovEstoque Mov      
                              Left Join Operacoes Opr on Opr.Codigo = Mov.CodOperacao      
                             Where Mov.EmpresaEstoque = EstoqueProduto.Empresa      
                               And Mov.CodProduto     = EstoqueProduto.CodProduto      
                               And Mov.TipoMovimento  = 1                         
                               And Mov.FlagMovEstoque = 1                 
                               And Opr.FlagCustoMedio = 1    
                             Order By DataMovimento Desc, NumLancamento Desc),0),      
       StatusTransacao = 1      
     From Deleted, Inserted      
    Where EstoqueProduto.Empresa = Deleted.EmpresaEstoque      
      and EstoqueProduto.CodProduto = Deleted.CodProduto      
      and Deleted.Empresa = Inserted.Empresa      
      and Deleted.NumLancamento = Inserted.NumLancamento      
      and Deleted.TipoMovimento=1      
      and Deleted.FlagMovEstoque=1      
      and (not Deleted.CodProduto in(8888888,9999999))      
      --Eder - 345018 - Nâo atualizar custo medio se empresa mantem custo medio de outra empresa (Ex: Galpao)  
      and not exists(Select * from EmpresasCustoMedio ECusto  
                      Where ECusto.EmpresaCustoMedio = EstoqueProduto.Empresa)  
      and (Inserted.TipoMovimento <> 1 or Deleted.CodProduto <> Inserted.CodProduto)      
      
    
Update EstoqueProduto       
   Set ValorCustoMed = isnull((Select Top 1 Mov.ValorCustoMed From  MovEstoque Mov      
                              Left Join Operacoes Opr on Opr.Codigo = Mov.CodOperacao      
                              Where Mov.EmpresaEstoque = EstoqueProduto.Empresa      
                               And Mov.CodProduto     = EstoqueProduto.CodProduto      
                               And Mov.TipoMovimento  = 1                         
                               And Mov.FlagMovEstoque = 1                 
                               And Opr.FlagCustoMedio = 1    
                             Order By DataMovimento Desc, NumLancamento Desc),0),      
       ValorCustoUlt = isnull((Select Top 1 Mov.ValorCustoUlt From  MovEstoque Mov      
                              Left Join Operacoes Opr on Opr.Codigo = Mov.CodOperacao      
                             Where Mov.EmpresaEstoque = EstoqueProduto.Empresa      
                               And Mov.CodProduto     = EstoqueProduto.CodProduto      
                               And Mov.TipoMovimento  = 1                         
                               And Mov.FlagMovEstoque = 1                 
                               And Opr.FlagCustoMedio = 1    
                    Order By DataMovimento Desc, NumLancamento Desc),0),      
       ValorCustoUltReal = isnull((Select Top 1 Mov.ValorCustoUltReal From  MovEstoque Mov      
                              Left Join Operacoes Opr on Opr.Codigo = Mov.CodOperacao      
                             Where Mov.EmpresaEstoque = EstoqueProduto.Empresa      
                               And Mov.CodProduto     = EstoqueProduto.CodProduto      
                               And Mov.TipoMovimento  = 1                         
                               And Mov.FlagMovEstoque = 1                 
                               And Opr.FlagCustoMedio = 1    
                             Order By DataMovimento Desc, NumLancamento Desc),0),      
       StatusTransacao = 1,  
       --379491  
        TipoIgnoraSugestaoCompra = Case When  (Inserted.TipoMovimento in(1,2)) and  
                                              (Inserted.flagMovestoque=1) and    
                                              (TipoIgnoraSugestaoCompra = 2) Then 0    
                                         else TipoIgnoraSugestaoCompra end          
                                               
     From Inserted      
    Where EstoqueProduto.Empresa = Inserted.EmpresaEstoque      
      and EstoqueProduto.CodProduto = Inserted.CodProduto      
      and Inserted.TipoMovimento=1      
      and Inserted.FlagMovEstoque=1      
      --Eder - 345018 - Nâo atualizar custo medio se empresa mantem custo medio de outra empresa (Ex: Galpao)  
      and not exists(Select * from EmpresasCustoMedio ECusto  
                      Where ECusto.EmpresaCustoMedio = EstoqueProduto.Empresa)  
      and (not Inserted.CodProduto in(8888888,9999999))      
    
Update MovEstoqueAux    
   Set CodProduto = Inserted.CodProduto,    
       EmpresaEstoque = Inserted.EmpresaEstoque,     
       TipoMovimento = Inserted.TipoMovimento,    
       FlagMovEstoque = Inserted.FlagMovEstoque,    
       --Eder - Chamado 262226    
       DataMovimento = Inserted.DataMovimento,    
       StatusTransacao = 1    
From Inserted    
Where MovEstoqueAux.Empresa = Inserted.Empresa    
  and MovEstoqueAux.NumLancamento = Inserted.NumLancamento  
Go

ALTER Trigger  [dbo].[DeleteMovEstoque] ON [dbo].[MovEstoque]      
FOR DELETE      
AS      
/*********************  
VERSÃO 3.02  
*********************/   
    
Declare @SvRowCount int    
Set @SvRowCount = @@RowCount    
  
--Gabriella - 353832  
If Exists(SELECT * from ConfiguracaoSistema where FlagTransacaoSnapShot = 1)  
  SET TRANSACTION ISOLATION LEVEL READ COMMITTED    
  
Declare @ExisteTransDiferente int -- Rafael chamado 263930    
  set @ExisteTransDiferente = (select top 1 FlagTransDiferente from  ConfiguracaoSistema    
                             where FlagTransDiferente =1)    
    
if @ExisteTransDiferente IS NULL      
  Set @ExisteTransDiferente = 0    
    
    
--Rafael chamado 263930    
if @ExisteTransDiferente = 1      
begin      
    
  If Exists(Select 1 From Deleted     
            Where     
                 Exists( Select 1 From TransacaoDados Trans      
                          Where     
                              Trans.Tabela ='MovEstoque'     
                          and Trans.Campo1='Empresa'       
                          and Trans.Valor1= Deleted.empresa     
                          and Trans.Campo2='NumLancamento'    
                          and Trans.Valor2= Deleted.Numlancamento    
                          and Trans.TipoAcao =3))    
                      
  begin      
    
    Update TransacaoDados    
    set TransacaoEmpresas =' ',    
      TipoAcao = 3    
    From Deleted      
    where    
       Tabela ='MovEstoque'    
  and  Campo1='Empresa'       
  and  Valor1= Deleted.empresa     
  and  Campo2='NumLancamento'    
  and  Valor2= Deleted.Numlancamento    
    
  end    
  Else      
  begin    
    Insert into TransacaoDados    
    (    
      Tabela,Campo1,    
      Valor1,Campo2,    
      Valor2,TipoAcao,    
      StatusTransacao,TransacaoEmpresas)    
      Select     
      'MovEstoque','Empresa',    
      D.empresa,'NumLancamento',    
      D.NumLancamento,3,    
      1,D.TransacaoEmpresas    
      From Deleted D    
        
       
  end    
end    
    
--138137 insere a ficha para registrar a exlusão do lançamento    
Insert Into MovEstoqueFicha (    
  Empresa, EmpresaEstoque, CodProduto, NumLancamento,    
  DataMovimento, Origem, DataInclusaoFicha, QuantMovimento, QuantEstoque, StatusTransacao, TipoMovimento,  
  --Ronaldo Chamado 410824  
  NomeMaquina, NomeAplicacao  
  )    
Select    
  Deleted.Empresa, Deleted.EmpresaEstoque, Deleted.CodProduto, Deleted.NumLancamento,    
  --Rafael chamado 251914    
  --Deleted.DataMovimento, GetDate(), Deleted.QuantMovimentada, E.QuantEstoque, 1,    
  Deleted.DataMovimento, 'D', GetDate(), Deleted.QuantMovimentada, isnull(E.QuantEstoque,0), 1,    
  Case Deleted.TipoMovimento When 1 then 2 else 1 end,   
  --Ronaldo Chamado 410824   
  Host_Name() as NomeMaquina, App_Name() as NomeAplicacao  
From Deleted    
  Left Join EstoqueProduto E on E.CodProduto = Deleted.CodProdutoMov    
    and E.Empresa = Deleted.EmpresaEstoque    
Where     
  Deleted.CodProdutoMov not in (8888888,9999999)    
  And Deleted.FlagMovEstoque = 1 And Deleted.TipoMovimento in (1,2)    
    
    
If @SvRowCount = 1      
begin      
  Update EstoqueProduto       
     Set QuantEstoque = EstoqueProduto.QuantEstoque      
                             + Case When Deleted.TipoMovimento = 1 and Deleted.FlagMovEstoque = 1      
                                    then Deleted.QuantMovimentada * -1      
                                     When Deleted.TipoMovimento = 2 and Deleted.FlagMovEstoque = 1      
                                    then Deleted.QuantMovimentada       
                                    Else 0 End,      
         QuantReservada = EstoqueProduto.QuantReservada      
                             + Case When Deleted.TipoMovimento = 2 and Deleted.FlagMovEstoque = 0      
                                    then Deleted.QuantMovimentada * -1       
                                    Else 0 End,      
         QuantReservadaEnt = EstoqueProduto.QuantReservadaEnt      
                             + Case When Deleted.TipoMovimento = 1 and Deleted.FlagMovEstoque = 0      
                                    then Deleted.QuantMovimentada * -1       
                                    Else 0 End,      
         QuantPendente = EstoqueProduto.QuantPendente       
                 + Case When Deleted.TipoMovimento = 0 and Deleted.FlagMovEstoque = -2      
                                 Then Deleted.QuantMovimentada * -1 Else 0 End,      
--MARCELO - CHAMADO 232609    
         QuantPedidoAberto = EstoqueProduto.QuantPedidoAberto +     
                             case when Deleted.CodPedido > 0     
                                   and Deleted.CodControle = 0     
                                   and Deleted.FlagMovEstoque = 1     
                                  then case when Deleted.TipoMovimento = 1 then Deleted.QuantMovimentada    
                                            when Deleted.TipoMovimento = 2 then Deleted.QuantMovimentada * -1    
                                            else 0 end    
                                  else 0 end,    
     
         StatusTransacao = 1  ,  
          --379491  
        TipoIgnoraSugestaoCompra = Case When  (Deleted.TipoMovimento in(1,2)) and   
                                              (Deleted.flagMovestoque=1) and       
                                              (TipoIgnoraSugestaoCompra = 2) Then 0    
                                         else TipoIgnoraSugestaoCompra end          
          
    From Deleted      
   Where EstoqueProduto.Empresa = Deleted.EmpresaEstoque      
     and EstoqueProduto.CodProduto = Deleted.CodProdutoMov      
     and not (Deleted.CodProdutoMov in (8888888, 9999999))      
end      
Else      
begin      
  Update EstoqueProduto       
     Set QuantEstoque = EstoqueProduto.QuantEstoque + Aux.QuantMovimentada,      
         QuantReservada = EstoqueProduto.QuantReservada + Aux.QuantReservada,      
         QuantReservadaEnt = EstoqueProduto.QuantReservadaEnt + Aux.QuantReservadaEnt,      
         QuantPendente = EstoqueProduto.QuantPendente + Aux.QuantPendente,    
           
--MARCELO - CHAMADO 232609    
         QuantPedidoAberto = EstoqueProduto.QuantPedidoAberto + Aux.QuantPedidoAberto,    
         StatusTransacao = 1,  
           
          --379491  
         TipoIgnoraSugestaoCompra = Case When  (TipoMovimentacao in(1,2))and  
                                               (FlagMovEst = 1)and  
                                               (EstoqueProduto.TipoIgnoraSugestaoCompra = 2) Then 0    
                                         else EstoqueProduto.TipoIgnoraSugestaoCompra end                  
                                           
    From (Select EmpresaEstoque, CodprodutoMov,       
               Sum(Case When TipoMovimento = 1 and FlagMovEstoque = 1 then QuantMovimentada * -1      
                        When TipoMovimento = 2 and FlagMovEstoque = 1 then QuantMovimentada      
                        Else 0 End) as QuantMovimentada,      
               Sum(Case When TipoMovimento = 2 and FlagMovEstoque = 0 then QuantMovimentada * -1      
                        Else 0 End) as QuantReservada,      
               Sum(Case When TipoMovimento = 1 and FlagMovEstoque = 0 then QuantMovimentada * -1      
                        Else 0 End) as QuantReservadaEnt,      
               Sum(Case When TipoMovimento = 0 and FlagMovEstoque = -2 Then QuantMovimentada * -1      
                        Else 0 End) as QuantPendente,    
           
--MARCELO - CHAMADO 232609    
               Sum(case when CodPedido > 0 and CodControle = 0 and FlagMovEstoque = 1    
                        then case when TipoMovimento = 1 then QuantMovimentada    
                                  when TipoMovimento = 2 then QuantMovimentada * -1    
                                  else 0 end     
                        else 0 end) as QuantPedidoAberto,  
               --379491   
               Min(Deleted.TipoMovimento)as TipoMovimentacao,    
               min(Deleted.FlagMovEstoque) as FlagMovEst        
                            
               From Deleted      
               Where not (CodProdutoMov in (8888888, 9999999))      
               Group By EmpresaEstoque, CodProdutoMov) Aux      
    Where EstoqueProduto.Empresa = Aux.EmpresaEstoque      
      and EstoqueProduto.CodProduto = Aux.CodProdutoMov      
end      
      
    
/* 317427    
--Eder chamado 262226    
If Exists(Select * from Deleted, EstoqueProduto Es     
           Where Deleted.EmpresaEstoque = Es.Empresa    
             and Deleted.CodProdutoMov = Es.CodProduto    
             and Es.DataPrimeiraCompra <= Deleted.DataMovimento    
             and not (Deleted.CodProdutoMov in (8888888, 9999999)))      
begin    
  Update EstoqueProduto    
     Set DataPrimeiraCompra = (Select Top 1 Mov.DataMovimento from MovEstoque Mov    
                                Where Mov.EmpresaEstoque = EstoqueProduto.Empresa    
                                  and Mov.CodProdutoMov = EstoqueProduto.CodProduto    
                                Order By Mov.DataMovimento)    
   Where Exists(Select * From Deleted     
                 Where Deleted.EmpresaEstoque = EstoqueProduto.Empresa     
                   and Deleted.CodProdutoMov = EstoqueProduto.CodProduto    
                   and EstoqueProduto.DataPrimeiraCompra <= Deleted.DataMovimento    
                   and not (Deleted.CodProdutoMov in (8888888, 9999999)))    
end    
*/    
    
If @SvRowCount = 1      
begin      
  Update ItemPedidoCompra      
   Set TipoGerarEntrada = Case ItemPedidoCompra.TipoGerarEntrada When 3 Then 2 Else 0 End,    
   --marcelo 04/05/2006    
    StatusItem = 0,     
       QuantAtendida = ItemPedidoCompra.QuantAtendida - Deleted.QuantAtendida,      
       StatusTransacao = 1      
   From Deleted      
   Where ItemPedidoCompra.EmpresaEstoque = Deleted.EmpresaEstoque      
     and ItemPedidoCompra.CodPedido = Deleted.CodPedCompra      
     and ItemPedidoCompra.NumLancamento = Deleted.SeqItemPedCompra      
     and Deleted.TipoMovimento = 1      
     and Deleted.CodPedCompra > 0      
end      
Else      
begin      
  Update ItemPedidoCompra      
     Set TipoGerarEntrada = Case ItemPedidoCompra.TipoGerarEntrada When 3 Then 2 Else 0 End,      
    --marcelo 04/05/2006    
    
     StatusItem = 0,     
         QuantAtendida = ItemPedidoCompra.QuantAtendida - Aux.QuantAtendida,      
         StatusTransacao = 1      
    From (Select EmpresaEstoque, CodPedCompra, SeqItemPedCompra,       
                 Sum(QuantAtendida) as QuantAtendida,      
     Max(CodPedido) as CodPedido,      
                 Max(CodControle) as CodControle      
            From Deleted      
           Where TipoMovimento = 1      
             and CodPedCompra > 0      
           Group By EmpresaEstoque, CodPedCompra, SeqItemPedCompra) Aux      
   Where ItemPedidoCompra.EmpresaEstoque = Aux.EmpresaEstoque      
     and ItemPedidoCompra.CodPedido      = Aux.CodPedCompra      
     and ItemPedidoCompra.NumLancamento  = Aux.SeqItemPedCompra      
end      
      
Update EstoqueProduto       
   Set ValorCustoMed = isnull((Select Top 1 Mov.ValorCustoMed From  MovEstoque Mov      
                              Left Join Operacoes Opr on Opr.Codigo = Mov.CodOperacao      
                              Where Mov.EmpresaEstoque = EstoqueProduto.Empresa      
                               And Mov.CodProduto     = EstoqueProduto.CodProduto      
                               And Mov.TipoMovimento  = 1                         
                               And Mov.FlagMovEstoque = 1                 
                               And Opr.FlagCustoMedio = 1    
                             Order By DataMovimento Desc, NumLancamento Desc),0),      
       ValorCustoUlt = isnull((Select Top 1 Mov.ValorCustoUlt From  MovEstoque Mov      
                              Left Join Operacoes Opr on Opr.Codigo = Mov.CodOperacao      
                             Where Mov.EmpresaEstoque = EstoqueProduto.Empresa      
   And Mov.CodProduto     = EstoqueProduto.CodProduto      
                               And Mov.TipoMovimento  = 1                         
                               And Mov.FlagMovEstoque = 1                 
                               And Opr.FlagCustoMedio = 1    
                             Order By DataMovimento Desc, NumLancamento Desc),0),      
       ValorCustoUltReal = isnull((Select Top 1 Mov.ValorCustoUltReal From  MovEstoque Mov      
                              Left Join Operacoes Opr on Opr.Codigo = Mov.CodOperacao      
                             Where Mov.EmpresaEstoque = EstoqueProduto.Empresa      
                               And Mov.CodProduto     = EstoqueProduto.CodProduto      
                               And Mov.TipoMovimento  = 1                         
                               And Mov.FlagMovEstoque = 1                 
                               And Opr.FlagCustoMedio = 1    
                             Order By DataMovimento Desc, NumLancamento Desc),0),      
       StatusTransacao = 1 ,  
         
       --379491  
         TipoIgnoraSugestaoCompra = Case When  (Deleted.TipoMovimento in(1,2)) and  
                                               (Deleted.FlagMovEstoque = 1) and   
                                               (TipoIgnoraSugestaoCompra = 2) Then 0    
                                         else TipoIgnoraSugestaoCompra end          
     
            
    From Deleted      
    Where EstoqueProduto.Empresa = Deleted.EmpresaEstoque      
      and EstoqueProduto.CodProduto = Deleted.CodProduto      
      and Deleted.TipoMovimento = 1      
      and Deleted.FlagMovEstoque = 1      
      and (not Deleted.CodProduto in(8888888,9999999))      
      --Eder - 345018 - Nâo atualizar custo medio se empresa mantem custo medio de outra empresa (Ex: Galpao)  
      and not exists(Select * from EmpresasCustoMedio ECusto  
                      Where ECusto.EmpresaCustoMedio = EstoqueProduto.Empresa)  
    
--102759    
Delete MovEstoqueReferencia    
From Deleted    
Where    
  (Deleted.Empresa = MovEstoqueReferencia.Empresa    
   And Deleted.NumLancamento = MovEstoqueReferencia.NumLancamento)    
  OR    
  (Deleted.Empresa = MovEstoqueReferencia.EmpresaReferencia    
   And Deleted.NumLancamento = MovEstoqueReferencia.NumLancamentoReferencia)    
    
--141727    
Delete MovComponente    
From Deleted    
Where    
  Deleted.Empresa = MovComponente.Empresa    
  And Deleted.NumLancamento = MovComponente.NumLancamento    
    
--215682    
Delete MovEstoqueImposto    
From Deleted    
Where    
  Deleted.Empresa = MovEstoqueImposto.Empresa    
  And Deleted.NumLancamento = MovEstoqueImposto.NumLancamento    
    
--256285    
Delete MovDecomposicao    
From Deleted    
Where    
  Deleted.Empresa = MovDecomposicao.Empresa    
  And Deleted.NumLancamento = MovDecomposicao.NumLancamento  
    
--397421    
Delete itemoporigem    
From Deleted    
Where    
  Deleted.Empresa = itemoporigem.Empresa    
  And Deleted.NumLancamento = itemoporigem.NumLancamento
GO  

ALTER procedure [dbo].[Stored_Prft110Duplicata]                                                                                        
@Empresa numeric(2),                                                                                          
@TipoControle numeric(1),                                                                                          
@CodControle numeric(9),                                                                                          
--@CodBanco numeric(5),                                                                                          
@CodBanco int,                                                                                        
@CodOperacaoDup char(5),                                                                                          
@Venc_Sequencia int,    --Numero de Sequencia da tabela temporaria de Vencimentos do Processar NF                                                                                          
@ValorTotalProcessado decimal(11,2),                                                                                          
@FlagCupom numeric(1), --0 Nota, 1-Cupom 2-Nota e Cupom,                                                                                      
@SerieControle char(3)                                                                                      
as                                                                                          
                                                                       
/********************                                                      
-- VERSÃO 3.02                                                     
********************/                                                      
                                                                         
--ATENÇÃO: Esta procedure só pode ser chamada de dentro da Stored_Prft110Processar, senão dá erro.                                                                                          
                                                                                          
--Variaveis auxiliares                                                                                          
Declare @TipoDuplicata numeric(1)                                                                                          
Declare @CodDuplicata varchar(15)                                                                                          
Declare @NumDocumento numeric(6)                                                                                          
Declare @FlagGravacao numeric(1)                                                                                          
Declare @ContParcela numeric(2)                                                                                          
Declare @Parcela numeric(3)                                                                                          
Declare @Vencimento datetime                                                                                          
Declare @ValorParcela decimal(11,2)                                                                                          
Declare @SalvaDup varchar(15)                                                                                          
Declare @QtdTotal numeric(6)                                                                                          
Declare @NumSequenciaBaixa numeric(9)                                                                                          
Declare @NumSequenciaOcorrencia numeric(9)                                                                                          
Declare @NumOcorrenciaMovBaixa numeric(6)                                                                                          
Declare @NumOcorrenciaMovOcorr numeric(6)                                                                                          
-- ALTERADO NA VERSAO 1.51                                                            
--Declare @CodDespesa numeric(5)                                       
Declare @CodConta numeric(6)                                                                               
Declare @FlagDevolucao numeric(1)                                                
                                                           
--Declare @CodBancoCheque numeric(3)                    
Declare @CodBancoCheque int                                     
Declare @NumContaCheque numeric(9)                                                             
Declare @NumAgenciaCheque numeric(4)                                                                                      
Declare @NumCNPJ bigint                                                                                         
Declare @TipoPessoa numeric(1)                                                                                          
Declare @DigitoContaCheque char(1)                                                                                          
Declare @Emitente varchar(40)                                                                                          
Declare @NumCheque varchar(15)                                                                                          
Declare @ValorPrecision1 float                                                                                          
Declare @ValorPrecision2 float                                                                               
Declare @Fator float                                                     
                                                                                          
Declare @CodFormaPagamento numeric(5)                                                                                          
Declare @CodCondPagto char(5)                                                               
Declare @FlagBaixar numeric(1)                                                                                          
--Declare @CodBancoBaixa numeric(5)                                                                                          
Declare @CodBancoBaixa int                                                                         
Declare @CodContaAdicional numeric(6)                                                                                          
Declare @ValorAdicional decimal(11,2)                                                                                          
Declare @StrDupBaixadas varchar(100)                                                                             
Declare @Contador Int                                                                                        
Declare @CodContaTotalNota Int                                                                             
Declare @CodBancoDupl Int                                                                                     
--121007                                                                            
Declare @ValorComplementar decimal(11,2)                                                                       
--Karina - 125968                                                                      
Declare @PrimeiraDuplicata Varchar(15)                                                                     
Declare @RelacaoVendedores Numeric(1)                                                                  
Declare @ValorTotalNotaInicial  decimal(11,2)                                                                   
Declare @ValorTotalNotaTratada  decimal(11,2) /*Será utilizada somente no calculo da comissao*/                                                                      
Declare @ValorTituloDuplInicial decimal(11,2)                                                                  
Declare @ValorTituloDuplTratado decimal(11,2) /*Será utilizada somente no calculo da comissao*/       
Declare @ValorIPI     decimal(11,2)                                                                     
Declare @ValorFrete    decimal(11,2)                                                                    
Declare @ValorICM          decimal(11,2)                                                                     
Declare @ValorSubTrib    decimal(11,2)                                       
Declare @ValorDespesas    decimal(11,2)                                                                   
Declare @FlagSomaIPI      Numeric(1)                                                                   
Declare @FlagSomaFrete     Numeric(1)                                                                
Declare @FlagSomaICM       Numeric(1)                                      
Declare @FlagSomaSubTrib   Numeric(1)                                                                  
Declare @FlagSomaDespesas  Numeric(1)                                                          
Declare @ValoresAdicionais decimal(11,2)                                                         
--JALDO/RAFAEL - CHAMADO 201195                                              
Declare @NumSequenciaMovCaixa numeric(9)                                              
--MARCELO - CHAMADO 233642                                          
Declare @DesconsiderarVencimentos smallint --1 - Ignora vencimentos de duplicatas de ST; 2 - Não ignora nenhum vencimento                                        
Declare @FlagDuplicataST smallint                                             
Declare @ExisteDuplicataST smallint                                        
Declare @TempValorTotalProcessado decimal(11,2)                                        
Declare @TempValorTotalNotaInicial  decimal(11,2)                                                                   
Declare @ValorDuplicataST decimal(11,2)                                 
-- Renato - Chamado 260385                            
Declare @ComplementoDupl varchar(200)                            
Declare @Valordiferenca decimal(11,2)            
            
Declare @FlagNaoGerenciarNumDocumento smallint -- Eder Ramos Chamado 302201       
--Gabriella - 301399    
Declare @EmpID varchar(15)          
      
-- Declare @FlagSomarDespesasDupST smallint -- JALDO - CHAMADO 301399      
          
                                              
Set @NumSequenciaMovCaixa = 0                                                                                     
Set @NumOcorrenciaMovBaixa = 0                                                                                        
Set @NumOcorrenciaMovOcorr = 0                                                                                        
--MARCELO - CHAMADO 127544                                                                
Set @NumSequenciaBaixa = 0                                        
Set @StrDupBaixadas = ''                                                                                     
/*                                                                                          
-Pega a CodContaTotalNota e CodDespesa da Operação Informada na Nota                                                                                           
-Seta o Tipo da Duplicata... se for Operacao de Devolucao, o Tipo da Duplicata                                           
 é o inverso do Tipo de Controle, se não, é igual ao Tipo de Controle                                                                                          
*/       
    
--Gabriella - 301399    
Select @EmpId = Id From Empresas                                                    
Where Codigo = @Empresa               
            
--Eder Ramos Chamado 302201            
Select             
  @FlagNaoGerenciarNumDocumento = FlagNaoGerenciarNumDocumento          
From ParamControleSerie                    
where Empresa = @Empresa and Serie= @SerieControle            
                                                                                       
begin                                                                                      
                                                                                      
Select Top 1 @CodContaTotalNota = Dop.CodContaTotalNota                                         
  From NotasFiscais NF                                                                                      
  Left Join DetalhesOperacoes Dop on  Dop.CodOperacao = NF.CodOperacao                                                                                      
                and Dop.Empresa in(0, Nf.Empresa)                                                 
Where NF.Empresa = @Empresa                                                                                          
   And NF.TipoControle  = @TipoControle     
   And NF.CodControle   = @CodControle                                                                                      
Order By Dop.Empresa Desc                                                
                                                                  
Select @RelacaoVendedores = FlagTipoRelacaoVendedores      
      -- @FlagSomarDespesasDupST = FlagSomarDespesasDupST --JALDO- CHAMADO 301399      
  From ParamControle                                                                          
   Where Empresa=@Empresa                                               
                                                                                      
                                                                                          
Select                                                                                           
-- ALTERADO NA VERSAO 1.51                                                                                    
-- @CodDespesa = isnull(Op.CodDespesa,0),                                                                                          
  @CodCondPagto = NF.CodCondPagto,                                
  @CodConta   = Case when (isnull(Op.FlagIgnorarContaEntidade,0) = 1) or (isnull(E.CodConta,0) = 0)                              
         then isnull(@CodContaTotalNota,0)                                                                                        
                     else isnull(E.CodConta,0) end,                                                          
  @FlagDevolucao = Case isnull(Op.TipoMovimento,0) When 1 then 1 Else 0 End,                                                                                          
  @CodBancoBaixa = Case IsNull(U.CodBanco,0) When 0 Then @CodBanco Else U.CodBanco End,                                                                                          
  @CodContaAdicional = Case isnull(Op.TipoMovimento,0) When 1 then 0 Else      -- nao pode ser devolucao                                                                              
                       -- tem que ser despesa na Nota/Pedido, e ter valor de despesa informado                                                            
                       --Ronaldo Chamado 362382  
                       --(Case When (IsNull(B.TipoDespesa,0) <> 2) and (B.ValorDespesa <>0) Then 0 Else                                                                                             
                         (Case When (IsNull(B.TipoDespesa,0) = 2) and (B.ValorDespesa <> 0) Then                                                                                        
                            --nota de entrada, tem que ter a conta adicional pagar informada no cad. de op. de dup.                                               
                            Case When @TipoControle = 1 and IsNull(OpDup.CodContaAdicionalPagar,0) <> 0                                                                                           
                                   Then OpDup.CodContaAdicionalPagar                                                                                          
                            --nota de saida, tem que ter a conta adicional receber informada no cad. de op. de dup.                                                                                          
                                 When @TipoControle = 2 and IsNull(OpDup.CodContaAdicionalReceber,0) <> 0                                                               
                                   Then OpDup.CodContaAdicionalReceber                                                                                          
                                 Else 0 End  
                          Else 0 End)                                                                                          
                       End,                                 
  @ValorAdicional         = IsNull(B.ValorDespesa,0),                                                                  
  @ValorTotalNotaInicial  = IsNull(NF.ValorTotalNota,0),                                                                  
  @ValorIPI = IsNull(NF.ValorIPI,0),                                                                  
  @ValorFrete    = IsNull(NF.ValorFrete,0),                                   
  @ValorICM        = IsNull(NF.ValorICM,0),                                                                  
  @ValorSubTrib    = IsNull(NF.ValorSubTrib,0),                                                                    
  @ValorDespesas   = IsNull(NF.ValorDespesas,0)                                             
                                                                                        
From                                                        
  NotasFiscais NF                                                                                      
  Left Join Operacoes Op On Op.Codigo = NF.CodOperacao                                                                                          
  Left Join Usuarios U On U.Codigo = NF.CodUsuarioInc                                                                                          
  Left Join Bancos B on B.Codigo = @CodBanco                                                                  
  Left Join OperacoesDup OpDup on OpDup.Codigo = @CodOperacaoDup                                                     
  Left Join Entidades E on E.Codigo = NF.CodEntidade                                                                                          
Where NF.Empresa = @Empresa                                                                                          
  And NF.TipoControle = @TipoControle                                         
  And NF.CodControle = @CodControle                                                                                          
                                                                                          
if @FlagDevolucao = 1                                                                      
begin                                                                                          
  if @TipoControle = 1                                                                                          
    Set @TipoDuplicata = 2                                
  else                                                                                          
   Set @TipoDuplicata = 1                                                                                          
end                                                                                          
else                                                          
  Set @TipoDuplicata = @TipoControle                                                                                            
                                                                                          
                                                                  
Set @ValorTotalNotaTratada = @ValorTotalNotaInicial                                                                  
                                                  
--Karina - 125968               
if (@RelacaoVendedores = 0)                                                                  
begin                                                                  
  Set @ValoresAdicionais = 0                                                                  
                                   
  Select @FlagSomaIPI = FlagSomaIPI, @FlagSomaFrete = FlagSomaFrete,                                                                  
  @FlagSomaICM = FlagSomaICM, @FlagSomaSubTrib = FlagSomaSubTrib,                                                                  
  @FlagSomaDespesas = FlagSomaDespesas                                                                  
  From CondPagto                                                                  
  where Codigo = @CodCondPagto               
                                                     
  if @FlagSomaIPI = 1                                                                   
    Set @ValoresAdicionais = @ValoresAdicionais + @ValorIPI                                                                  
  if @FlagSomaFrete = 1                                                                   
    Set @ValoresAdicionais = @ValoresAdicionais + @ValorFrete                                   
  if @FlagSomaICM = 1                                        
    Set @ValoresAdicionais = @ValoresAdicionais + @ValorICM                                                                   
  if @FlagSomaSubTrib = 1                          
    Set @ValoresAdicionais = @ValoresAdicionais + @ValorSubTrib                                                                      
  if @FlagSomaDespesas = 1                                               
    Set @ValoresAdicionais = @ValoresAdicionais + @ValorDespesas                                                                         
                                    
  Set @ValorTotalNotaTratada = @ValorTotalNotaTratada - @ValoresAdicionais                                                                  
end                                                                   
                                                                  
                                              
                                                                  
--@FlagCupom: 0 Nota, 1-Cupom 2-Nota e Cupom                                                                                          
                                                                      
--Karina - 125968                                                                      
Set @PrimeiraDuplicata = ''                                                 
                                          
--MARCELO - CHAMADO 233642                                          
set @DesconsiderarVencimentos = 2                                          
if not Exists(select Top 1 Empresa from MovEstoque                                          
              where Empresa = @Empresa                                          
                and TipoControle = @TipoControle                                          
                and CodControle = @CodControle                                          
                and CodProduto <> 8888888)                                                
  set @DesconsiderarVencimentos = 1                                        
                                        
                                        
--MARCELO - CHAMADO 233642                                          
set @ExisteDuplicataST = 0                                        
if Exists(select * from TempPRFT110Venc                                        
          where NumSequencia = @Venc_Sequencia                                        
            and FlagDuplicataST = 1)                                        
 set @ExisteDuplicataST = 1                                        
                                        
--MARCELO - CHAMADO 233642                                          
set @ValorDuplicataST = 0          
      
--JALDO - CHAMADO 301399                                        
if @ExisteDuplicataST = 1     
begin      
 --Gabriella - 301399    
 if (@EmpId <> 'DINAMAR')     
 begin                                     
   set @ValorDuplicataST = IsNull((select Sum(ME.ValorSubTrib) from MovEstoque ME                                         
                                   where ME.Empresa = @Empresa                                        
                                     and ME.TipoControle = @TipoControle                                        
                                     and ME.CodControle = @CodControle), 0)                                        
 end    
 else    
 begin    
   set @ValorDuplicataST = IsNull((select (NF.ValorSubTrib + NF.ValorFrete + NF.ValorDespesas) from NotasFiscais NF                                        
                                   where NF.Empresa = @Empresa                                        
                                     and NF.TipoControle = @TipoControle                                        
                                     and NF.CodControle = @CodControle), 0)       
 end                                                       
end    
      
--JALDO - CHAMADO 301399    
/*      
if @ExisteDuplicataST = 1       
begin            
  set @ValorDuplicataST = Case When @FlagSomarDespesasDupST = 0 Then       
                               IsNull((select Sum(ME.ValorSubTrib) from MovEstoque ME                                         
                                      where ME.Empresa = @Empresa                                        
                                      and ME.TipoControle = @TipoControle                                        
                                      and ME.CodControle = @CodControle), 0)      
                          Else            
                            IsNull((select T.Valor from TempPRFT110Venc T      
                                    where T.NumSequencia = @Venc_Sequencia      
                                     and T.FlagDuplicataST = 1),0)      
                          End        
end      
*/    
                                      
--MARCELO - CHAMADO 233642                                    
set @TempValorTotalProcessado = @ValorTotalProcessado                                      
set @TempValorTotalNotaInicial = @ValorTotalNotaInicial                                 
                            
                            
-- Renato - Chamado 260385                            
-- Copiando a primeira observação do tipo duplicata da nota fiscal para armazenar no campo Complemento das Duplicatas.                            
Set @ComplementoDupl = IsNull((Select Top 1 Substring(Observacao,1,200)                             
         From ObsNotasFiscais                             
         Where Empresa = @Empresa                             
           and TipoControle = @TipoControle                             
              and CodControle = @CodControle                             
           and TipoObs = 6                             
         Order By Sequencia),'')                            
                            
                            
                                 
                                                              
Declare CursorDup Cursor  Local Fast_Forward for                                                                                          
       Select                                                                                                   
          T.NumParcela, T.Vencimento, T.Valor,                                               
         (Select Count(*) From TempPrft110Venc                                                                                          
--MARCELO - CHAMADO 233642                                          
--          Where NumSequencia = @Venc_Sequencia) as QtdTotal,                                                            
          Where NumSequencia = @Venc_Sequencia                                     
     and FlagDuplicataST <> @DesconsiderarVencimentos) as QtdTotal,                                                            
         T.NumCheque, T.EmitenteCheque, T.CodBancoCheque, T.NumContaCheque,                                                   
         T.NumAgenciaCheque, T.NumCNPJ, T.TipoPessoa, T.DigitoContaCheque,                                                                                          
         T.CodFormaPagamento, T.FlagBaixa, T.CodBanco, T.ValorComplementar,                                        
--MARCELO - CHAMADO 233642                                        
         T.FlagDuplicataST                                        
    From TempPrft110Venc T                                                          
       Where T.NumSequencia = @Venc_Sequencia                                          
--MARCELO - CHAMADO 233642                                          
         and T.FlagDuplicataST <> @DesconsiderarVencimentos                                          
                 
Open CursorDup                                                                                          
Fetch Next from CursorDup into @Parcela, @Vencimento, @ValorParcela, @QtdTotal,                           
                               @NumCheque, @Emitente, @CodBancoCheque, @NumContaCheque,                                        
                               @NumAgenciaCheque, @NumCNPJ, @TipoPessoa, @DigitoContaCheque,                                                                                          
                               @CodFormaPagamento, @FlagBaixar, @CodBancoDupl, @ValorComplementar,                                        
                --MARCELO - CHAMADO 233642                                        
                               @FlagDuplicataST                                                        
                                        
While @@Fetch_Status = 0                                                                 
Begin                                                                       
             
  --Eder Ramos Chamado 302201                                                                 
  If (@FlagNaoGerenciarNumDocumento = 0) and ((@FlagCupom = 0) or (@FlagCupom = 2)) --Somente Nota ou Nota e Cupom                                                                                          
  begin                              
    --Rafael chamado 254456                                                                                       
     -- Set @NumDocumento = (select UltimaDuplicata From ParamControleSerie where Empresa=@Empresa and Serie=@SerieControle) -- É o Numero da Proxima Duplicata porque foi atualizada antes de entrar no While                              
    Set @NumDocumento = (select UltimaDuplicata From ParamControleSequencia where Empresa=@Empresa and Serie=@SerieControle) -- É o Numero da Proxima Duplicata porque foi atualizada antes de entrar no While                                                  
                                                                                           
    Set @CodDuplicata = Replicate('0',(6 - Len(@NumDocumento))) + Cast(@NumDocumento as varchar) +                                                                  
    '/' + Cast(@Parcela as varchar)                                                                                          
  end                                                                                          
  Else  --somente cupom  ou quando a flagNaoGerenciarNumDocumento estiver selecionada                                                                                         
  begin                       
    Set @NumDocumento = @CodControle                                                                                          
    Set @CodDuplicata = 'CTR' +                                                                                         
     Replicate('0',(6 - Len(@NumDocumento))) + Cast(@NumDocumento as varchar) +                                                                                           
     '/' + Cast(@Parcela as varchar)                                                                                       
  end                                                                       
                                                                      
                                                                      
  Set @FlagGravacao = 0                                                   
  Set @ContParcela = 0                                                                      
  Set @SalvaDup = @CodDuplicata                                                                                          
  While @FlagGravacao = 0 and @ContParcela < 99                                                                                          
  Begin                                                                                          
    If Exists(Select Empresa from Duplicatas                                                                   
      Where Empresa=@Empresa                                                                                           
                 and TipoDuplicata=@TipoDuplicata                                                                                           
                 and CodDuplicata=@CodDuplicata) or                                                                                          
       Exists(Select Empresa from MovDuplicata                 
               where Empresa=@Empresa                                                                                           
                 and TipoMovimento=0                                                                                          
                 and TipoDuplicata=@TipoDuplicata                                                                                          
                 and CodDuplicata=@CodDuplicata)                                                        
    Begin                                                                                          
      Set @ContParcela = @ContParcela + 1                                                                                          
      Set @CodDuplicata = @SalvaDup + Replicate('0',2-len(@ContParcela)) +  Cast(@ContParcela as varchar) --Sequencia Auxiliar Ex: 000001/101                                                                                          
    End                                                                         
    Else                                                                      
      Set @FlagGravacao = 1                                                           
  End                                       
                                        
  --MARCELO - CHAMADO 233642                                        
  --  set @TempValorTotalProcessado = @ValorTotalProcessado                                      
  --  set @TempValorTotalNotaInicial = @ValorTotalNotaInicial                                      
                                    
                            
  if @ExisteDuplicataST = 1                                        
  begin                                        
    set @ExisteDuplicataST = 0                                        
    set @TempValorTotalProcessado = @TempValorTotalProcessado - @ValorDuplicataST                                        
    set @TempValorTotalNotaInicial = @TempValorTotalNotaInicial - @ValorDuplicataST                                             
  end                                        
     
  if @FlagDuplicataST = 1                                         
  begin                                     
    set @ValorParcela = @ValorDuplicataST                                            
    set @ValorTituloDuplInicial = @ValorParcela                                        
    Set @ValorTituloDuplTratado = @ValorParcela                                       
                                
    Set @Fator = 0                                                                                
    Set @ValorPrecision1 = @ValorParcela                                                                                         
    Set @ValorPrecision2 = @ValorTotalProcessado                              
    If @ValorPrecision2 > 0                                                                                          
      Set @Fator = @ValorPrecision1 / @ValorPrecision2                                                
    If @Fator = 0                                                                                
      Set @Fator = 1                                                                           
  end                                                                                 
  else                                         
  begin                                                
    --Move para uma variável float só para ficar igual ao firebird                                                                                          
    Set @Fator = 0                                                                                
    Set @ValorPrecision1 = @ValorParcela                                                                                          
    --MARCELO - CHAMADO 233642                                          
    --Set @ValorPrecision2 = @ValorTotalProcessado                                        
    Set @ValorPrecision2 = @TempValorTotalProcessado                           
    If @ValorPrecision2 > 0                                    
      Set @Fator = @ValorPrecision1 / @ValorPrecision2                                                                                          
    If @Fator = 0                  
      Set @Fator = 1                                                                           
                                        
    --MARCELO - CHAMADO 233642                                                                  
    --Set @ValorTituloDuplInicial = case when @ValorTotalProcessado = 0 then 0                                                            
    --Else (Round(@ValorTotalNotaInicial * @Fator,2) * Case @FlagDevolucao When 1 then -1 Else 1 End)                                                                   
    Set @ValorTituloDuplInicial = case when @TempValorTotalProcessado = 0 then 0                                                            
        Else (Round(@TempValorTotalNotaInicial * @Fator,2) * Case @FlagDevolucao When 1 then -1 Else 1 End) End                   
    Set @ValorTituloDuplTratado = @ValorTituloDuplInicial                                  
                                
    --MARCELO - CHAMADO 233642                                
    if @TempValorTotalProcessado <> @ValorTotalProcessado                                
    begin                                
      Set @Fator = 0                            
      Set @ValorPrecision1 = @ValorParcela                                                                                          
      Set @ValorPrecision2 = @ValorTotalProcessado                                        
      If @ValorPrecision2 > 0                                                                                          
        Set @Fator = @ValorPrecision1 / @ValorPrecision2                                                                                          
      If @Fator = 0                                                                                
        Set @Fator = 1                              
    end                                                                
  end                                        
                                                                  
  --Karina - 125968                                                                      
  if (@PrimeiraDuplicata = '')                                                                      
  begin                                                                  
    if (@RelacaoVendedores = 0)                                                                  
      Set @ValorTituloDuplTratado = @ValorTituloDuplTratado - (@ValoresAdicionais * Case @FlagDevolucao When 1 then -1 Else 1 End)                                                           
                                                          
    Set @PrimeiraDuplicata = @CodDuplicata                                                                     
  end                              

  --Ronaldo Chamado 411291
  if @ValorTituloDuplInicial = 0
	  Return
                                                                                 
  Insert into Duplicatas (Empresa, TipoDuplicata, CodDuplicata, CodEntidade,                   
               NumDocumento,                                                                                           
               DataEmissao, DataDocumento, DataVencimento,                                                                                     
               DataPagamento,                                                                                          
               ValorFatura,                                                                                           
               ValorTitulo,                                                                                           
               CodBanco, CodOperacaoDup, CodOperacao,                                                                                          
               CodVendInterno, CodVendExterno, CodVendParceiro, CodCondPagto,                                                                                           
               CodConta, TipoControle, CodControle, StatusTransacao, FlagDevolucao,                                                                           
               CodBancoCheque, NumContaCheque, NumAgenciaCheque, NumCheque,                                                                               
               EmitenteCheque, NumCNPJ, TipoPessoa, DigitoContaCheque, CodDepartamento,                                                                                          
               ValorComissaoInterno,                                                                                          
               ValorComissaoExterno,                                                                                          
               ValorComissaoParceiro,                                                        
               ValorComplementar,                                                             
               --133864                                        
               ValorBaseComissao,                            
               -- Renato - Chamado 260385                            
               Complemento)                                                                                          
         Select @Empresa, @TipoDuplicata, @CodDuplicata, N.CodEntidade,                                                                      
                 'NF' + Replicate('0',6 - Len(N.NumDocumento)) + Cast(N.NumDocumento as varchar(6)),                                           
                 N.DataDocumento, N.DataDocumento, @Vencimento,                                                                                          
                 case when @FlagBaixar = 1 then N.DataMovimento Else null End,                                                                                     
                 N.ValorTotalNota,      
                 @ValorTituloDuplInicial,                 
             Case @FlagBaixar When 1                 
                  Then Case when isnull(@CodBancoDupl,0) = 0 then @CodBancoBaixa else @CodBancoDupl End                                                                             
                  Else Case when isnull(@CodBancoDupl,0) = 0 then @CodBanco else @CodBancoDupl End                                                    
                 End,                                                                             
               @CodOperacaoDUp, N.CodOperacao,                                                                                           
               N.CodVendInterno, N.CodVendExterno, N.CodVendParceiro, N.CodCondPagto,                                                                                          
               @CodConta, N.TipoControle, N.CodControle, 1, @FlagDevolucao,        
               @CodBancoCheque, @NumContaCheque, @NumAgenciaCheque, @NumCheque,                                                                                          
               @Emitente, @NumCNPJ, @TipoPessoa, @DigitoContaCheque, N.CodDepartamento,                                                                  
  --MARCELO - CHAMADO 200837                                                              
               case @ValorTotalNotaTratada                                                 
                    when 0 then 0                                                 
                    else isnull(((Abs(@ValorTituloDuplTratado) / @ValorTotalNotaTratada) *                                                 
                                 ((N.ValorComissaoInterno * (VenInt.AliqComissaoDup)) / 100)),0) *                                                 
                         Case @FlagDevolucao When 1 Then -1 Else 1 End end,                                         
               --MARCELO - CHAMADO 200837                                                              
               case @ValorTotalNotaTratada                                                 
                    when 0 then 0                                                 
                    else isnull(((Abs(@ValorTituloDuplTratado) / @ValorTotalNotaTratada) *                                                 
              ((N.ValorComissaoExterno * (VenExt.AliqComissaoDup)) / 100)),0) *                                                 
                         Case @FlagDevolucao When 1 Then -1 Else 1 End end,                                                        
               --MARCELO - CHAMADO 200837                                                              
               case @ValorTotalNotaTratada                                                 
                    when 0 then 0                                                 
                    else isnull(((Abs(@ValorTituloDuplTratado) /@ValorTotalNotaTratada) *                                                 
                                ((N.ValorComissaoParceiro * (VenPar.AliqComissaoDup)) / 100)),0) *                                                
                         Case @FlagDevolucao When 1 Then -1 Else 1 End end,                                                        
               @ValorComplementar,                                                            
               --133864                                                            
               case @ValorTotalNotaTratada when 0 then 0 else                                                        
               Abs((@ValorTituloDuplTratado / @ValorTotalNotaTratada) * N.ValorBaseComissao) end,                            
               -- Renato - Chamado 260385                            
               @ComplementoDupl                                                        
           From NotasFiscais N                                                                                           
Left Join Vendedores VenInt on VenInt.Codigo = N.CodVendInterno                                                                                          
             Left Join Vendedores VenExt on VenExt.Codigo = N.CodVendExterno                                                                                      
             Left Join Vendedores VenPar on VenPar.Codigo = N.CodVendParceiro                                                                                          
           Where N.Empresa=@Empresa                                                                                           
             and N.TipoControle=@TipoControle                                                                              
             and N.CodControle=@CodControle    
                                                                                                  
                                                                                          
--Inclui Mov. de Ocorrência para lançar o valor adicional, dependendo do banco que deve                                                                                          
--estar com despesa do Tipo de despesa = 2, com valor de despesa informado, e ter a                                                        --conta informada na operação da dup                                                
    
   
  if @CodContaAdicional <> 0                                                                                          
  begin                                                                                          
    --Adianta a Ultima Sequencia                                                                         
    if (@NumOcorrenciaMovOcorr = 0)                                                                                          
    begin                                                                              
       --MARCELO - CHAMADO 163320                                                       
--       exec ProximaSequencia 'MOVDUPLICATAOCORR', @Empresa, 1, @NumSequenciaOcorrencia OUTPUT                                                                              
--MARCELO - CHAMADO 225117                                            
--       exec @NumSequenciaOcorrencia = ProximaSequencia 'MOVDUPLICATAOCORR', @Empresa, 1                                                      
       exec @NumSequenciaOcorrencia = ProximaSequencia 'MOVFINANCEIRO', @Empresa, 1                         
    end                                                                              
                                 
    Set @NumOcorrenciaMovOcorr = @NumOcorrenciaMovOcorr + 1                                                                                          
    Insert Into MovDuplicata                                                                           
         (                                                                   
           Empresa,               TipoMovimento,   NumSequencia,                                                                                          
           NumOcorrencia,         TipoDuplicata,   CodDuplicata,                                                                                           
           DataMovimento,         DataVencimento,                                                                                            
           ValorRecebido,                                                                                             
           CodBanco,              CodOperacaoDup,                                                                                                 
           CodUsuario,                                                             
           CodEntidade,           NumDocumento,                                                                      
           DataEmissao,                             
           DataDocumento,         StatusTransacao,                                   
           CodConta,              EmpresaDuplicata, ValorAdicional,                                                                                        
       CodDepartamento                                                                        
         )                     
         Select                                                                                          
           @Empresa,               2,               @NumSequenciaOcorrencia,                                                                                          
           @NumOcorrenciaMovOcorr, @TipoDuplicata,  @CodDuplicata,                                                                                          
           N.DataMovimento,        @Vencimento,                                                                                                       
--MARCELO - CHAMADO 233642                                        
--           case @ValorTotalProcessado when 0 then 0 Else Round((N.ValorTotalNota+N.ValorComplementar) * @Fator,2) end,                                                    
           case @TempValorTotalProcessado when 0 then 0 Else Round((N.ValorTotalNota+N.ValorComplementar) * @Fator,2) end,                                                                                          
         Case @FlagBaixar When 1 Then                                                                             
      Case when isnull(@CodBancoDupl,0) = 0 then @CodBancoBaixa else @CodBancoDupl End                                                                              
           Else                                                                             
             Case when isnull(@CodBancoDupl,0) = 0 then @CodBanco else @CodBancoDupl End                                                                              
           End, @CodoperacaoDup,                                                                                                  
          (Case N.CodUsuarioAlt when 0 then N.CodUsuarioInc else N.CodUsuarioAlt End),                                                                
           N.CodEntidade,          N.NumDocumento,  N.DataDocumento,                                                                                                   
           N.DataDocumento,        1,      @CodConta,                                                                                                 
           @Empresa,               @ValorAdicional,                    
           N.CodDepartamento                                                                        
         From                                                                                           
           NotasFiscais N                                                                                          
         Where                                                                                           
          N.Empresa          = @Empresa                                                                          
           and N.TipoControle = @TipoControle                                                                                           
           and N.CodControle  = @CodControle                                                                                           
  end                                                                                          
                                                                                        
  --MARCELO - CHAMADO 127544                                                                    
  if @FlagBaixar = 1                                                                                           
  begin                                                         
    --MARCELO - CHAMADO 127544                                                                
    Set @StrDupBaixadas = @StrDupBaixadas + ' ' + @CodDuplicata                                         
                                                                                   
                                                                 
  --MARCELO - CHAMADO 127544                                                                
   --VERIFICA SE EXISTE ALGUMA BAIXA JÁ GERADA PARA OS CONTROLES PROCESSADOS                                                                
  select @NumSequenciaBaixa = IsNull(MD.NumSequencia, 0)                                                           
    From MovDuplicata MD                                                                
    Where MD.Empresa = @Empresa                                              
      And MD.EmpresaDuplicata = @Empresa                                                                
      And MD.TipoMovimento = 3                                                                
  And Exists(Select * From TempPRFT110Nota TNota                                                                
                 Where TNota.Empresa = MD.Empresa                                                                  
                   And TNota.TipoControle = MD.TipoControle                                                            
               And TNota.CodControle = MD.CodControle                                                
                   And TNota.CodControle <> 0                                                                 
                   And TNota.TipoControle <> 0                                                                
                   And TNota.NumSequencia = (Select NumSequencia From TempPRFT110Nota                                                                                           Where Empresa = @Empresa                                                      
  
    
      
        
          
                                               And TipoControle = @TipoControle                                                                
                                               And CodControle = @CodControle))                               
                                                                
                                                                
    --Adianta a Ultima Sequencia                                                                                        
    --MARCELO - CHAMADO 127544                                                                
    if (@NumOcorrenciaMovBaixa = 0)                                                                 
    begin                                                                
       if (@NumSequenciaBaixa = 0)         
--MARCELO - CHAMADO 163320                                                      
--          exec ProximaSequencia 'MOVFINANCEIRO', @Empresa, 1, @NumSequenciaBaixa OUTPUT                                                                              
          exec @NumSequenciaBaixa = ProximaSequencia 'MOVFINANCEIRO', @Empresa, 1                                                      
       else                                                                 
       begin                                                                
         select @NumOcorrenciaMovBaixa = Max(NumOcorrencia)                                                                 
         from MovDuplicata                                               
         where NumSequencia = @NumSequenciaBaixa              
           and Empresa = @Empresa                                                                
           and TipoMovimento = 3                                                                
       end                                                                
    end                                                                
                                                                                       
    Set @NumOcorrenciaMovBaixa = @NumOcorrenciaMovBaixa + 1                                                                                          
    Insert Into MovDuplicata                                                                                          
         (                                                                                        
           Empresa,               TipoMovimento,   NumSequencia,                                
           NumOcorrencia,         TipoDuplicata,   CodDuplicata,                                                                                           
           DataMovimento,         DataVencimento,                                                                                            
           DataPagamento,                                                                                          
           ValorRecebido,                                                                                             
           CodBanco,             CodOperacaoDup,                                                     
           CodUsuario,                                                              
           CodEntidade,           NumDocumento,    CodVendInterno,                                      
           CodVendExterno,        CodVendParceiro, ValorFatura,          
           ValorComissaoInterno,                                                                                           
           ValorComissaoExterno,                                                                                    
           ValorComissaoParceiro,                                                                                           
           TipoControle,          CodControle,     DataEmissao,                                                                                                     
           DataDocumento,         StatusTransacao,                                                                                                
           ValorBaseComissao,                                                                                               
           CodConta,              EmpresaDuplicata, CodDepartamento                                                        
         )                                                          
         Select                                                                                          
           @Empresa,               3,             @NumSequenciaBaixa,                                                                                          
           @NumOcorrenciaMovBaixa, @TipoDuplicata,    @CodDuplicata,                                                                                          
           N.DataMovimento,        @Vencimento,                                      
           N.DataMovimento,                                                                                  
           --Eder - Chamado 274473                
           --Dupl.ValorTitulo * case @FlagDevolucao when 1 then -1 else 1 end,                           
           --JALDO - CHAMADO 300734      
           --Dupl.ValorTitulo,         --Já está tratado de acordo com o flagdevolucao                
           (Dupl.ValorTitulo + Dupl.ValorComplementar),      
           Case when isnull(@CodBancoDupl,0) = 0 then @CodBancoBaixa else @CodBancoDupl End,                                                                             
           @CodoperacaoDup,                                                                                                  
          (Case N.CodUsuarioAlt when 0 then N.CodUsuarioInc else N.CodUsuarioAlt End),                                                                                           
           N.CodEntidade,          N.NumDocumento,    N.CodVendInterno,                                            
           N.CodVendExterno,       N.CodVendParceiro, N.ValorTotalNota,                                        
           Dupl.ValorComissaoInterno,                                                                                          
           Dupl.ValorComissaoExterno,                                                                            
           Dupl.ValorComissaoParceiro,                                                                                         
           @TipoControle,          @CodControle,      N.DataDocumento,                                                                                         
           N.DataDocumento,        1,                                                                         
--MARCELO - CHAMADO 233642                                        
--           case @ValorTotalProcessado when 0 then 0 Else Round((N.ValorTotalNota+N.ValorComplementar) * @Fator,2) * Case @FlagDevolucao When 1 then -1 Else 1 End End,              
           --JALDO - CHAMADO 268529                          
           --case @TempValorTotalProcessado when 0 then 0 Else Round((N.ValorTotalNota+N.ValorComplementar) * @Fator,2) * Case @FlagDevolucao When 1 then -1 Else 1 End End,                                                                                   
 
    
      
         
         
            
           --Eder - Chamado 274473                
           --Dupl.ValorTitulo * case @FlagDevolucao when 1 then -1 else 1 end,                                     
      Dupl.ValorTitulo,                           
           @CodConta,              @Empresa,          N.CodDepartamento                                                                                        
         From                                                                             
           NotasFiscais N                                                                   
             Left Join Duplicatas Dupl on Dupl.Empresa       = @Empresa       and                                                                      
       Dupl.TipoDuplicata = @TipoDuplicata and                                                                      
       Dupl.CodDuplicata  = @CodDuplicata                                                                
Where N.Empresa       = @Empresa                                                                                             
  and N.TipoControle  = @TipoControle                                                                                           
  and N.CodControle   = @CodControle                                                                                           
  end          
      
  --Gabriella - 358073    
  update TempPrft110RelacaoRetencao    
     set TipoDuplicata = @TipoDuplicata,    
         CodDuplicata = @CodDuplicata    
  where NumSequencia = @Venc_Sequencia    
    and NumParcela = @Parcela                                                                                     
                                                          
  Fetch Next from CursorDup into @Parcela, @Vencimento, @ValorParcela, @QtdTotal,                                                    
                                 @NumCheque, @Emitente, @CodBancoCheque, @NumContaCheque,                                                     
                                 @NumAgenciaCheque, @NumCNPJ, @TipoPessoa, @DigitoContaCheque,                                                                                          
                                 @CodFormaPagamento, @FlagBaixar, @CodBancoDupl, @ValorComplementar,                                        
                                 --MARCELO - CHAMADO 233642                                        
                                 @FlagDuplicataST                                        
End                                                                                          
Close CursorDup                                                                   
Deallocate CursorDup                                                                                          
                                                                                  
      
--Inclui Movimento de Baixa, caso existam duplicatas a serem baixadas                                                                                        
--MARCELO - CHAMADO 127544                                                                
if  (@NumSequenciaBaixa <> 0) and                            
    (not Exists(select MC.NumMovimento from MovCaixa MC                                                                 
                where MC.Empresa = @Empresa                                                                
                  and MC.TipoMovimento = 3                                           
                  and MC.NumSequencia = @NumSequenciaBaixa))                                                                
begin                                                                
  Declare CursorCaixa Cursor Local Fast_Forward For                                                                                        
    Select Contador                                                 
      From Tempprft110Caixa                                                                                        
   Where NumSequencia = @Venc_Sequencia                                                                         
        and Exists(Select TAux.FlagBaixa                                          
  From TempPrft110Venc TAux                                                                                        
                   Where TAux.NumSequencia = @Venc_Sequencia                                                                                          
                     and TAux.FlagBaixa > 0)                                                                                       
     Order By Contador                                                                                        
  Open CursorCaixa                                                              
  Fetch Next From CursorCaixa into @Contador                                                   
  While @@Fetch_Status = 0                                                                                        
  begin                                                                                            
    --JALDO/RAFAEL - CHAMADO 201195                                              
    exec @NumSequenciaMovCaixa = ProximaSequencia 'MOVCAIXA', @Empresa, 1                                              
    Insert Into MovCaixa                                                                    
           (                                                                                                  
             Empresa,           NumMovimento,                                                                                                
             TipoLancamento,                                    
             CodFormaPagamento, NomeBanco,         NomeAgencia,                                                                                          
             NumCheque,         Emitente,                                                             
             Observacao,                                                                                          
             ValorRecebido,                                                                                               
             TipoMovimento,     NumSequencia,                                                                                          
             DataVencimento,    CodBanco,          CodEntidade,                                                                                          
             DataMovimento, Periodo,           NumLote,                                                                                          
             NumLancamento,     NumSequencia_Cont, StatusTransacao,                                                                                          
             CodDepartamento,   CodBancoCheque,    NumContaCheque,                                                                 
             NumAgenciaCheque,  NumCNPJ,           TipoPessoa, DigitoContaCheque,  
             --Ronaldo chamado 375333  
             DataInclusao                                                                                          
           )                                                     
        Select                                               
             --JALDO/RAFAEL - CHAMADO 201195                                              
             --@Empresa,              (Select IsNull(Max(NumMovimento),0) From MovCaixa Where Empresa = @Empresa) + 1,                                                                                    
             @Empresa, @NumSequenciaMovCaixa,                                              
             T.TipoLancamento,                                                                                         
             T.CodFormaPagamento,   '',                 '',                                                                                          
             T.NumCheque,           T.EmitenteCheque,                                                 
             'Ref. Duplicatas: ' + @StrDupBaixadas +                                                                             
       + Case When T.Observacao <> '' Then ' - Obs: ' + T.Observacao                                                                                        
                                        Else '' End,                                                                                        
             T.ValorRecebido,                                           
  3,                     @NumSequenciaBaixa,                                                          
--235854       T.DataMovimento,       @CodBanco,          N.CodEntidade,                                                                                           
             T.DataMovimento,       @CodBancoBaixa,          N.CodEntidade,                              
             N.DataMovimento,       '',       0,                                                                                          
             0,                     0,            1,                                                                                          
             N.CodDepartamento,     T.CodBancoCheque,   T.NumContaCheque,                                                                                          
             T.NumAgenciaCheque,    T.NumCNPJ,          T.TipoPessoa, T.DigitoContaCheque,                                                                                          
             --Ronaldo Chamado 375333  
             Getdate()       
        From TempPrft110Caixa T                                                                                        
          Left Join NotasFiscais N On N.Empresa       = @Empresa                                                                                             
                                  and N.TipoControle  = @TipoControle                       
                     and N.CodControle   = @CodControle                                                                                           
        Where T.NumSequencia = @Venc_Sequencia                           
          and T.Contador = @Contador                                                                                     
    Fetch Next From CursorCaixa into @Contador                                                                        
  end                                                                      
  Close CursorCaixa                                                                                        
  Deallocate CursorCaixa                                                                     
end                                                                
              
             
            
Select @ValorParcela=Sum(ValorTitulo)                                                                         
  From Duplicatas                                                                                           
 where Empresa = @Empresa                                                                                          
   and TipoDuplicata = @TipoDuplicata                                                                        
   and TipoControle = @TipoControle                                                             
   and CodControle = @CodControle                                                                                          
              
--Vai corrigir as diferenças na duplicata de maior valor, dando preferencia para a duplicata que esta "Em Aberto"              
Select Top 1 @CodDuplicata = CodDuplicata,              
   @ValorDiferenca = (ValorFatura * Case @FlagDevolucao When 1 Then -1 Else 1 End) - @ValorParcela              
  From Duplicatas              
 Where Empresa=@Empresa                                                                                           
   and TipoControle=@TipoControle              
   and CodControle = @CodControle              
Order By ValorRecebido, ValorTitulo Desc              
              
                                                                                          
--Corrige a diferença na duplicata escolhida              
Update Duplicatas                                                          
   Set ValorTitulo = ValorTitulo + @ValorDiferenca              
 Where Empresa=@Empresa                                                                                           
   and TipoDuplicata=@TipoDuplicata                                                                                           
   and CodDuplicata=@CodDuplicata                                                                               
                                                    
if (@NumSequenciaBaixa <> 0)                                                    
begin                                
  --Corrige a diferença no movimento de baixa da duplicata escolhida, caso ela seja baixada              
  update MovDuplicata set                                     
         ValorRecebido = ValorRecebido + @ValorDiferenca,              
         ValorBaseComissao = ValorBaseComissao + @ValorDiferenca              
   where Empresa = @Empresa                                                    
     and TipoMovimento = 3                                       
     and NumSequencia = @NumSequenciaBaixa                                                    
     and CodDuplicata = @CodDuplicata               
     and EmpresaDuplicata = @Empresa            
end                                             
              
              
                                                    
Update Duplicatas Set                                                             
  ValorComissaoInterno = D.ValorComissaoInterno + Isnull(((N.ValorComissaoInterno * Case @FlagDevolucao When 1 Then -1 Else 1 End) -                                                                       
                (Select Sum(Dupl.ValorComissaoInterno)                                                                       
                 From Duplicatas Dupl where Dupl.Empresa=@Empresa and Dupl.TipoDuplicata=@TipoDuplicata and                                                                       
         Dupl.TipoControle = @TipoControle and Dupl.CodControle=@CodControle )),0),                                                                                
                                                                      
  ValorComissaoExterno = D.ValorComissaoExterno + Isnull(((N.ValorComissaoExterno * Case @FlagDevolucao When 1 Then -1 Else 1 End)-                                    
                   (Select Sum(Dupl.ValorComissaoExterno)                            
                    From Duplicatas Dupl where Dupl.Empresa=@Empresa and Dupl.TipoDuplicata=@TipoDuplicata and                                                   
   Dupl.TipoControle = @TipoControle and Dupl.CodControle=@CodControle )),0),                                                                                 
                                                                                 
  ValorComissaoParceiro = D.ValorComissaoParceiro + Isnull(((N.ValorComissaoParceiro * Case @FlagDevolucao When 1 Then -1 Else 1 End) -                                                                       
                   (Select Sum(Dupl.ValorComissaoParceiro)                                                                       
                    From Duplicatas Dupl where Dupl.Empresa=@Empresa and Dupl.TipoDuplicata=@TipoDuplicata and                                                                       
                      Dupl.TipoControle = @TipoControle and Dupl.CodControle=@CodControle )),0),                                                            
                                 
  --133864                                                 
  ValorBaseComissao = D.ValorBaseComissao + Abs(Isnull(((N.ValorBaseComissao) -                                                                       
                   (Select Sum(Dupl.ValorBaseComissao)                                                                       
                    From Duplicatas Dupl where Dupl.Empresa=@Empresa and Dupl.TipoDuplicata=@TipoDuplicata and                                                                       
                      Dupl.TipoControle = @TipoControle and Dupl.CodControle=@CodControle )),0))                           
From Duplicatas D                                                                     
   Left Join NotasFiscais N on N.Empresa = @Empresa and N.TipoControle = @TipoControle and N.CodControle=@CodControle                                        
   Where D.Empresa = @Empresa and D.TipoDuplicata = @TipoDuplicata and D.CodDuplicata = @PrimeiraDuplicata and                                                                      
  (D.ValorComissaoInterno <> 0 and D.ValorComissaoExterno <> 0 and D.ValorComissaoParceiro <> 0)                                                            
                                                                      
Update MovDuplicata                                                                      
  Set ValorComissaoInterno  = D.ValorComissaoInterno,                                                                      
      ValorComissaoExterno  = D.ValorComissaoExterno,                                                                                         
      ValorComissaoParceiro = D.ValorComissaoParceiro                                                                      
   From MovDuplicata MovD                                                                              
   Left Join Duplicatas D on D.Empresa = @Empresa and D.TipoDuplicata = @TipoDuplicata and D.CodDuplicata = @PrimeiraDuplicata                                                                               
   Where MovD.Empresa = @Empresa and MovD.TipoDuplicata = @TipoDuplicata and MovD.CodDuplicata = @PrimeiraDuplicata and                                                                      
  MovD.TipoMovimento = 3                                                                       
  and MovD.EmpresaDuplicata = @Empresa            
                                                                   
                                                                                          
--Subtrai a comissao da duplicata da comissao da nota                                                          
Update NotasFiscais                                                                                          
   Set ValorComissaoInterno = ValorComissaoInterno -                                                                                           
                             ((ValorComissaoInterno * isnull((Select AliqComissaoDup From Vendedores Where Codigo=CodVendInterno),0)) / 100),                                                               
       ValorComissaoExterno = ValorComissaoExterno -                                                                                           
                             ((ValorComissaoExterno * isnull((Select AliqComissaoDup From Vendedores Where Codigo=CodVendExterno),0)) / 100),                                   
       ValorComissaoParceiro = ValorComissaoParceiro -                                               
                      ((ValorComissaoParceiro * isnull((Select AliqComissaoDup From Vendedores Where Codigo=CodVendParceiro),0)) / 100),                                                                                          
       StatusTransacao = 1                                                                                          
   Where Empresa=@Empresa                                                                                          
     and TipoControle=@TipoControle                                                                                          
     and CodControle=@CodControle                                                                     
     and ((Select AliqComissaoDup From Vendedores Where Codigo=CodVendInterno) not in(0,100) or                                                                                          
          (Select AliqComissaoDup From Vendedores Where Codigo=CodVendExterno) not in(0,100) or                         
          (Select AliqComissaoDup From Vendedores Where Codigo=CodVendParceiro) not in(0,100))                                     
              
end 

GO


--Gabriella - 406448
if not exists(select * from sysobjects where name like 'StatusOrdemServicoLog')
begin
	Create Table StatusOrdemServicoLog (
	  CodOS                   numeric(9,0) not null,	
	  Empresa                 smallint not null,
	  NumSequencia            smallint not null,	  
	  CodStatus               smallint not null,		
	  DataHoraInicio          datetime,	  
	  DataHoraTermino         datetime,	  	  	    
	  CodColaborador          numeric(9,0) not null,	 
	  CodUsuario              numeric(9,0) not null,	     
	  StatusTransacao         smallint not null,
	  TransacaoEmpresas       varchar(50) Collate Latin1_General_CI_AS not null 
		
	  CONSTRAINT PK_StatusOrdemServicoLog PRIMARY KEY CLUSTERED 
	  (
	    CodOS ASC,
		Empresa ASC,
		NumSequencia
	  ) ON [PRIMARY]
	)	
	exec sp_bindefault 'dbo.Numero',   'StatusOrdemServicoLog.CodOS'
        exec sp_bindefault 'dbo.Numero',   'StatusOrdemServicoLog.Empresa'		
        exec sp_bindefault 'dbo.Numero',   'StatusOrdemServicoLog.NumSequencia'	
        exec sp_bindefault 'dbo.Numero',   'StatusOrdemServicoLog.CodStatus'
        exec sp_bindefault 'dbo.Numero',   'StatusOrdemServicoLog.CodColaborador'	
        exec sp_bindefault 'dbo.Numero',   'StatusOrdemServicoLog.CodUsuario'    	    			
	exec sp_bindefault 'dbo.Numero',   'StatusOrdemServicoLog.StatusTransacao'
	exec sp_bindefault 'dbo.Caracter', 'StatusOrdemServicoLog.TransacaoEmpresas'
end									
GO

if exists (Select * from sys.triggers Where object_id = OBJECT_ID(N'[dbo].[UpdateOrdemServico]'))
DROP TRIGGER [dbo].[UpdateOrdemServico]
GO

CREATE Trigger [dbo].[UpdateOrdemServico] ON [dbo].[OrdemServico]    
FOR UPDATE    
AS    
/*********************
VERSÃO 3.03
*********************/

If Exists(SELECT * from ConfiguracaoSistema where FlagTransacaoSnapShot = 1)
  SET TRANSACTION ISOLATION LEVEL READ COMMITTED


UPDATE StatusOrdemServicoLog
set
  DataHoraTermino = Getdate()
from Inserted
where
    StatusOrdemServicoLog.Empresa   =  Inserted.Empresa
and StatusOrdemServicoLog.CodOS =  Inserted.Codigo
and StatusOrdemServicoLog.CodStatus <> Inserted.CodStatus
and Inserted.CodStatus <> 0
and StatusOrdemServicoLog.NumSequencia = ( Select top 1 NumSequencia from StatusOrdemServicoLog
                                        Where Empresa   = Inserted.Empresa
                                          and CodOS = Inserted.Codigo
                                        order by NumSequencia Desc) 
 


Insert Into StatusOrdemServicoLog (
  CodOS, Empresa, NumSequencia, CodStatus, 
  DataHoraInicio, DataHoraTermino,
  StatusTransacao, CodUsuario) 
Select
  Deleted.Codigo,
  Deleted.Empresa,
  (select ISNULL (max(STOS.NumSequencia),0)+1 from StatusOrdemServicoLog STOS
   Where STOS.Empresa = Deleted.Empresa
     and STOS.CodOS=Deleted.Codigo),
  inserted.CodStatus,GetDate(),Null,
  1 , 
  inserted.CodUsuario
From Inserted,Deleted
Where 
  Inserted.Empresa = Deleted.Empresa
  and Inserted.Codigo = Deleted.Codigo
  and inserted.CodStatus<>0
  and Inserted.CodStatus <> Deleted.CodStatus
  
GO



--Eder - Chamado 412516
alter table produtos
Alter Column RefComercial Varchar(8000) not null
GO
alter table produtos
Alter Column RefTecnica Varchar(8000) not null
GO


--Ronaldo Chamado 408757
if not exists(select * from sysobjects where name like 'ProdutosFCI')
begin
  CREATE TABLE ProdutosFCI(    
    CodProduto             NUMERIC(7,0) NOT NULL,    
    EmpresaEstoque         NUMERIC(2,0) NOT NULL,    
    Sequencia              INT NOT NULL,   
    NumFCI                 VARCHAR(40) Collate Latin1_General_CI_AS NOT NULL,     
    FlagAtivo              smallint not null,
    PercConteudoImportacao NUMERIC(4,2) NOT NULL,    
    DataRegistroFCI        DATETIME,     
    StatusTransacao        INT NOT NULL,
    TransacaoEmpresas      VARCHAR(50) Collate Latin1_General_CI_AS NOT NULL
  
 	  CONSTRAINT PK_ProdutosFCI PRIMARY KEY CLUSTERED 
	  (
	    CodProduto ASC,
		EmpresaEstoque ASC,
		Sequencia ASC
	  ) ON [PRIMARY]
	)

  exec sp_bindefault 'dbo.Numero',   'ProdutosFCI.CodProduto'
  exec sp_bindefault 'dbo.Numero',   'ProdutosFCI.EmpresaEstoque'
  exec sp_bindefault 'dbo.Numero',   'ProdutosFCI.Sequencia'
  exec sp_bindefault 'dbo.Caracter', 'ProdutosFCI.NumFCI'
  exec sp_bindefault 'dbo.Numero',   'ProdutosFCI.FlagAtivo'
  exec sp_bindefault 'dbo.Numero',   'ProdutosFCI.PercConteudoImportacao'
  exec sp_bindefault 'dbo.Numero',   'ProdutosFCI.StatusTransacao'
  exec sp_bindefault 'dbo.Caracter', 'ProdutosFCI.TransacaoEmpresas'
end
GO

--Gabriella - 409465
Alter table ItemListaPreco disable trigger all
GO

if not exists (Select * from dbo.SysColumns Where id = object_id(N'[dbo].[ItemListaPreco]') and 
                                                 Name Like 'ValorCotacaoMoeda' And
                                                 OBJECTPROPERTY(id, N'IsUserTable') = 1 )
begin
  Alter Table ItemListaPreco add ValorCotacaoMoeda decimal(18,8)
  Alter Table Moedas add TipoCalculoPreco smallint  
end
go

sp_bindefault 'dbo.Numero', 'ItemListaPreco.ValorCotacaoMoeda' 
go
sp_bindefault 'dbo.Numero', 'Moedas.TipoCalculoPreco' 
go
   
update ItemListaPreco set ValorCotacaoMoeda = 0
where ValorCotacaoMoeda is null
go

update Moedas set TipoCalculoPreco = 0
where TipoCalculoPreco is null
go

Alter Table ItemListaPreco alter column ValorCotacaoMoeda decimal(18,8) not null
go

Alter Table Moedas alter column TipoCalculoPreco smallint not null
go

Alter table ItemListaPreco enable trigger all
GO


ALTER View [dbo].[ViewItemListaPreco]                
as                 
Select                
 Item.CodProduto as Codigo,                
 Item.CodLista,                
 Item.FlagPrincipal,                
 Item.FlagPromocao,                
 Item.QuantPromocao,                
 Item.QuantVendida,                
 Item.DataValidade,  
--Gabriella - 358087                
--Rafael chamado 272917       
--JALDO - CHAMADO 267580            
 --Round(Item.ValorCustoLiquido * isnull(Moe.ValorCotacao,1),Par.QtdCasasCusto) as ValorCustoLiquido,                
 --Round(Item.ValorCustoBruto * isnull(Moe.ValorCotacao,1),Par.QtdCasasCusto) as ValorCustoBruto,                
           
 --Round(cast(Item.ValorCustoLiquido as decimal (13,2)) * cast(isnull(Moe.ValorCotacao,1) as decimal (13,2)),Par.QtdCasasCusto) as ValorCustoLiquido,                
 --Round(cast(Item.ValorCustoBruto as decimal (13,2)) * cast(isnull(Moe.ValorCotacao,1) as decimal (13,2)),Par.QtdCasasCusto) as ValorCustoBruto,    
 --Rafael chamado 279702      
 --  Round(Item.ValorCustoLiquido * isnull(Moe.ValorCotacao,1),Par.QtdCasasCusto) as ValorCustoLiquido,                
 --  Round(Item.ValorCustoBruto * isnull(Moe.ValorCotacao,1),Par.QtdCasasCusto) as ValorCustoBruto,    
 -- Round(Item.ValorCustoLiquido * isnull(Mo.UltimaCotacao,1),Par.QtdCasasCusto) as ValorCustoLiquido,                
 --Round(Item.ValorCustoLiquido * isnull(Mo.UltimaCotacao,1) * ISNULL(1 + (Ma.PerAcrescimoCusto/100), 1) ,Par.QtdCasasCusto) as ValorCustoLiquido,  
 --Gabriella - 409465
 Case When Mo.TipoCalculoPreco = 1 Then Round(Item.ValorCustoLiquido * ISNULL(1 + (Ma.PerAcrescimoCusto/100), 1) ,Par.QtdCasasCusto)
      else Round(Item.ValorCustoLiquido * isnull(Mo.UltimaCotacao,1) * ISNULL(1 + (Ma.PerAcrescimoCusto/100), 1) ,Par.QtdCasasCusto) end as ValorCustoLiquido,
 
 --Gabriella - 358087                
 --Round(Item.ValorCustoBruto   * isnull(Mo.UltimaCotacao,1),Par.QtdCasasCusto) as ValorCustoBruto,                                     
 --Round(Item.ValorCustoBruto * isnull(Mo.UltimaCotacao,1) * ISNULL(1 + (Ma.PerAcrescimoCusto/100), 1) ,Par.QtdCasasCusto) as ValorCustoBruto,   
 --Gabriella - 409465                                   
 Case When Mo.TipoCalculoPreco = 1 Then Round(Item.ValorCustoBruto * ISNULL(1 + (Ma.PerAcrescimoCusto/100), 1) ,Par.QtdCasasCusto)
      else Round(Item.ValorCustoBruto * isnull(Mo.UltimaCotacao,1) * ISNULL(1 + (Ma.PerAcrescimoCusto/100), 1) ,Par.QtdCasasCusto) end as ValorCustoBruto,                                     
 Item.PercDesconto1,                
 Item.PercDesconto2,                
 Item.PercDesconto3,                
 Item.PercDesconto4,                
 Item.PercDesconto5,                
 Item.FlagIPIVenda,               
 Item.AliqIPI,                
 Item.Empresa,               
/*Round(                
   Case       
      --Rafael chamado 267580                   
      --When Item.MargemLucro1  > 0 And Par.TipoPreco = 0 then Item.ValorCustoLiquido /cast(Item.MargemLucro1 as decimal (13,2))            
      --When Item.MargemLucro1  > 0 And Par.TipoPreco = 1 then Item.ValorCustoLiquido * cast(Item.MargemLucro1 as decimal (13,2))      
      When Item.MargemLucro1  > 0 And Par.TipoPreco = 0 then Item.ValorCustoLiquido /Item.MargemLucro1      
      When Item.MargemLucro1  > 0 And Par.TipoPreco = 1 then Item.ValorCustoLiquido * Item.MargemLucro1              
     Else 0  
   --Gabriella - 358087      
   --Rafael chamado 267580                                 
   --End * cast(isnull(Moe.ValorCotacao,1) as decimal (13,2))     
   --Rafael chamdo 279702     
   -- End * isnull(Moe.ValorCotacao,1)      
   -- End * isnull(Mo.UltimaCotacao,1)               
    End * isnull(Mo.UltimaCotacao,1) * ISNULL(1 + (Ma.PerAcrescimoCusto/100), 1)             
   ,Par.QtdCasasVenda) as PrecoVenda1, 
 Round(                
   Case       
     --Rafael chamado 267580           
      --When Item.MargemLucro2 > 0 And Par.TipoPreco = 0 then Item.ValorCustoLiquido / cast(Item.MargemLucro2 as decimal (13,2))            
      --When Item.MargemLucro2 > 0 And Par.TipoPreco = 1 then Item.ValorCustoLiquido * cast(Item.MargemLucro2 as decimal (13,2))       
     When Item.MargemLucro2 > 0 And Par.TipoPreco = 0 then Item.ValorCustoLiquido /Item.MargemLucro2      
     When Item.MargemLucro2 > 0 And Par.TipoPreco = 1 then Item.ValorCustoLiquido * Item.MargemLucro2        
      Else 0    
   --Gabriella - 358087                        
   --Rafael chamado 267580                      
   --End * cast(isnull(Moe.ValorCotacao,1) as decimal (13,2))      
   --Rafael chamado 279702     
   --End * isnull(Moe.ValorCotacao,1) Mo.UltimaCotacao    
   -- End * isnull(Mo.UltimaCotacao,1)                 
    End * isnull(Mo.UltimaCotacao,1) * ISNULL(1 + (Ma.PerAcrescimoCusto/100), 1)                  
   ,Par.QtdCasasVenda) as PrecoVenda2,  
 Round(                
   Case      
     --Rafael chamado 267580                      
     --When Item.MargemLucro3 > 0 And Par.TipoPreco = 0 then Item.ValorCustoLiquido / cast(Item.MargemLucro3 as decimal (13,2))            
     --When Item.MargemLucro3 > 0 And Par.TipoPreco = 1 then Item.ValorCustoLiquido * cast(Item.MargemLucro3 as decimal (13,2))            
       When Item.MargemLucro3 > 0 And Par.TipoPreco = 0 then Item.ValorCustoLiquido /Item.MargemLucro3               
       When Item.MargemLucro3 > 0 And Par.TipoPreco = 1 then Item.ValorCustoLiquido * Item.MargemLucro3             
      Else 0     
  --Gabriella - 358087                       
  --Rafael chamado 267580                       
  --End * isnull(Moe.ValorCotacao,1) as decimal (13,2))     
  --Rafael chamado 279702      
  --End * isnull(Moe.ValorCotacao,1)    
  -- End * isnull(Mo.UltimaCotacao,1)                              
    End * isnull(Mo.UltimaCotacao,1) * ISNULL(1 + (Ma.PerAcrescimoCusto/100), 1)                               
   ,Par.QtdCasasVenda) as PrecoVenda3,   
 Round(                
   Case                 
     --Rafael chamado 267580                      
      --When Item.MargemLucro4  > 0 And Par.TipoPreco = 0 then Item.ValorCustoLiquido / cast(Item.MargemLucro4 as decimal (13,2))            
      --When Item.MargemLucro4  > 0 And Par.TipoPreco = 1 then Item.ValorCustoLiquido * cast(Item.MargemLucro4 as decimal (13,2))            
       When Item.MargemLucro4  > 0 And Par.TipoPreco = 0 then Item.ValorCustoLiquido / Item.MargemLucro4       
       When Item.MargemLucro4  > 0 And Par.TipoPreco = 1 then Item.ValorCustoLiquido * Item.MargemLucro4       
      Else 0   
   --Gabriella - 358087                         
   --Rafael chamado 267580                      
   --End * cast(isnull(Moe.ValorCotacao,1) as decimal (13,2))    
   --Rafael chamado 279702      
    --End * isnull(Moe.ValorCotacao,1)    
   --End * isnull(Mo.UltimaCotacao,1)                   
    End * isnull(Mo.UltimaCotacao,1) * ISNULL(1 + (Ma.PerAcrescimoCusto/100), 1)                 
   ,Par.QtdCasasVenda) as PrecoVenda4,                
Round(                
   Case                 
      --Rafael chamado 267580                      
      --When Item.MargemLucro5 > 0 And Par.TipoPreco = 0 then Item.ValorCustoLiquido / cast(Item.MargemLucro5 as decimal (13,2))            
      --When Item.MargemLucro5 > 0 And Par.TipoPreco = 1 then Item.ValorCustoLiquido * cast(Item.MargemLucro5 as decimal (13,2))      
      When Item.MargemLucro5 > 0 And Par.TipoPreco = 0 then Item.ValorCustoLiquido /Item.MargemLucro5             
      When Item.MargemLucro5 > 0 And Par.TipoPreco = 1 then Item.ValorCustoLiquido *Item.MargemLucro5       
      Else 0    
   --Gabriella - 358087              
   --Rafael chamado 267580                                 
   --End * cast(isnull(Moe.ValorCotacao,1) as decimal (13,2))    
   --Rafael chamado 279702       
   --End * isnull(Moe.ValorCotacao,1)    
   --  End * isnull(Mo.UltimaCotacao,1)                                
    End * isnull(Mo.UltimaCotacao,1) * ISNULL(1 + (Ma.PerAcrescimoCusto/100), 1)                                     
   ,Par.QtdCasasVenda) as PrecoVenda5*/     
 --Gabriella - 409465
 Case When Mo.TipoCalculoPreco = 1 Then Round(                
		   Case         
			  When Item.MargemLucro1  > 0 And Par.TipoPreco = 0 then Item.ValorCustoLiquido /Item.MargemLucro1      
			  When Item.MargemLucro1  > 0 And Par.TipoPreco = 1 then Item.ValorCustoLiquido * Item.MargemLucro1              
			 Else 0  
			End * ISNULL(1 + (Ma.PerAcrescimoCusto/100), 1)             
		   ,Par.QtdCasasVenda)
      Else Round(                
		   Case         
			  When Item.MargemLucro1  > 0 And Par.TipoPreco = 0 then Item.ValorCustoLiquido /Item.MargemLucro1      
			  When Item.MargemLucro1  > 0 And Par.TipoPreco = 1 then Item.ValorCustoLiquido * Item.MargemLucro1              
			 Else 0  
			End * isnull(Mo.UltimaCotacao,1) * ISNULL(1 + (Ma.PerAcrescimoCusto/100), 1)             
		   ,Par.QtdCasasVenda) end as PrecoVenda1,        
		       
 Case When Mo.TipoCalculoPreco = 1 Then Round(                
		   Case            
			 When Item.MargemLucro2 > 0 And Par.TipoPreco = 0 then Item.ValorCustoLiquido /Item.MargemLucro2      
			 When Item.MargemLucro2 > 0 And Par.TipoPreco = 1 then Item.ValorCustoLiquido * Item.MargemLucro2        
			  Else 0               
			End * ISNULL(1 + (Ma.PerAcrescimoCusto/100), 1)                  
		   ,Par.QtdCasasVenda)
      else Round(                
		   Case            
			 When Item.MargemLucro2 > 0 And Par.TipoPreco = 0 then Item.ValorCustoLiquido /Item.MargemLucro2      
			 When Item.MargemLucro2 > 0 And Par.TipoPreco = 1 then Item.ValorCustoLiquido * Item.MargemLucro2        
			  Else 0               
			End * isnull(Mo.UltimaCotacao,1) * ISNULL(1 + (Ma.PerAcrescimoCusto/100), 1)                  
		   ,Par.QtdCasasVenda) end as PrecoVenda2,      	   
		   
Case When Mo.TipoCalculoPreco = 1 Then Round(                
		   Case           
			   When Item.MargemLucro3 > 0 And Par.TipoPreco = 0 then Item.ValorCustoLiquido /Item.MargemLucro3               
			   When Item.MargemLucro3 > 0 And Par.TipoPreco = 1 then Item.ValorCustoLiquido * Item.MargemLucro3             
			  Else 0       
			End * ISNULL(1 + (Ma.PerAcrescimoCusto/100), 1)                               
		   ,Par.QtdCasasVenda)  
	 else Round(                
		   Case           
			   When Item.MargemLucro3 > 0 And Par.TipoPreco = 0 then Item.ValorCustoLiquido /Item.MargemLucro3               
			   When Item.MargemLucro3 > 0 And Par.TipoPreco = 1 then Item.ValorCustoLiquido * Item.MargemLucro3             
			  Else 0       
			End * isnull(Mo.UltimaCotacao,1) * ISNULL(1 + (Ma.PerAcrescimoCusto/100), 1)                               
		   ,Par.QtdCasasVenda) end as PrecoVenda3,    
		   
Case When Mo.TipoCalculoPreco = 1 Then Round(               
		   Case                       
			   When Item.MargemLucro4  > 0 And Par.TipoPreco = 0 then Item.ValorCustoLiquido / Item.MargemLucro4       
			   When Item.MargemLucro4  > 0 And Par.TipoPreco = 1 then Item.ValorCustoLiquido * Item.MargemLucro4       
			  Else 0               
			End * ISNULL(1 + (Ma.PerAcrescimoCusto/100), 1)                 
		   ,Par.QtdCasasVenda)
	 else Round(               
		   Case                       
			   When Item.MargemLucro4  > 0 And Par.TipoPreco = 0 then Item.ValorCustoLiquido / Item.MargemLucro4       
			   When Item.MargemLucro4  > 0 And Par.TipoPreco = 1 then Item.ValorCustoLiquido * Item.MargemLucro4       
			  Else 0               
			End * isnull(Mo.UltimaCotacao,1) * ISNULL(1 + (Ma.PerAcrescimoCusto/100), 1)                 
		   ,Par.QtdCasasVenda) end as PrecoVenda4,        
		   
Case When Mo.TipoCalculoPreco = 1 Then Round(               
		   Case                      
			  When Item.MargemLucro5 > 0 And Par.TipoPreco = 0 then Item.ValorCustoLiquido /Item.MargemLucro5             
			  When Item.MargemLucro5 > 0 And Par.TipoPreco = 1 then Item.ValorCustoLiquido *Item.MargemLucro5       
			  Else 0       
			End * ISNULL(1 + (Ma.PerAcrescimoCusto/100), 1)                                     
		   ,Par.QtdCasasVenda)   
	 else Round(               
		   Case                      
			  When Item.MargemLucro5 > 0 And Par.TipoPreco = 0 then Item.ValorCustoLiquido /Item.MargemLucro5             
			  When Item.MargemLucro5 > 0 And Par.TipoPreco = 1 then Item.ValorCustoLiquido *Item.MargemLucro5       
			  Else 0       
			End * isnull(Mo.UltimaCotacao,1) * ISNULL(1 + (Ma.PerAcrescimoCusto/100), 1)                                     
		   ,Par.QtdCasasVenda) end as PrecoVenda5                  
                
 From ItemListaPreco Item      
     
-- Rafael chamado 279702    
 /*             
  Left Join CotacaoMoeda Moe on Item.CodMoeda <> ''                
               and Moe.CodMoeda = Item.CodMoeda                 
               and Moe.DataCotacao = (Select Top 1 MoeAux.DataCotacao From CotacaoMoeda MoeAux                
                                       Where MoeAux.CodMoeda = Item.CodMoeda                 
                                       Order By MoeAux.DataCotacao Desc)      
 */    
    
  Left Join Moedas Mo on Item.CodMoeda <> ''                
                       and Mo.Codigo= Item.CodMoeda                 
              
  Left join ParamControle Par on Par.Empresa = Item.Empresa    
    
  --Gabriella - 358087  
  Left Join Produtos Pro on Pro.Codigo = Item.CodProduto  
  Left Join Marcas Ma on Ma.Codigo = Pro.CodMarca  
    

GO

ALTER View [dbo].[ViewCustosProduto]  
AS  
  Select   
    Pro.Codigo,  
    Isnull(Item.CodLista,0) as CodLista,  
    IsNull(Item.FlagPrincipal,0) as FlagPrincipal,  
    Emp.EmpresaEstoque as Empresa,
    --Rafael chamado 
    /*
    Isnull(Round(isnull((Select Top 1 Item.ValorCustoLiquido * Moe.ValorCotacao From CotacaoMoeda Moe  
                    Where Moe.CodMoeda = Item.CodMoeda   
                      and Item.CodMoeda <> ''  
                    Order By Moe.DataCotacao Desc), isnull(Item.ValorCustoLiquido,0))  
                  ,Par.QtdCasasCusto),0) as ValorCustoFor, 
    */
    /*Isnull(Round(isnull(Item.ValorCustoLiquido *Mo.UltimaCotacao, isnull(Item.ValorCustoLiquido,0))  
                       ,Par.QtdCasasCusto),0) as ValorCustoFor, */
    --Gabriella - 409465                   
    Case When Mo.TipoCalculoPreco = 1 Then Isnull(Round(Item.ValorCustoLiquido,Par.QtdCasasCusto),0) 
		 else Isnull(Round(isnull(Item.ValorCustoLiquido * Mo.UltimaCotacao, isnull(Item.ValorCustoLiquido,0))  
                                                        ,Par.QtdCasasCusto),0) end as ValorCustoFor,                                                                              

    isnull(Es.ValorCustoUlt,0) as ValorUltimaCompra,  
    isnull(Es.ValorCustoMed,0) as ValorCustoMedio,  
    isnull(Es.ValorCustoUltReal,0) as ValorUltimaCompraReal  
  From   
    Produtos Pro  
    Left Join Empresas Emp on 1=1  
    Left Join ItemListaPreco Item on Item.CodProduto = Pro.Codigo   
                                 and Item.Empresa = Emp.EmpresaListaPreco  
                                 and Item.FlagPrincipal = 1  
    Left Join ParamControle Par On Par.Empresa = Emp.EmpresaEstoque  
    Left Join EstoqueProduto ES on Es.Empresa = Emp.EmpresaEstoque   
                               and Es.CodProduto = Pro.Codigo 
    -- Rafael chamado 279702
    Left Join Moedas Mo on Mo.Codigo = Item.CodMoeda     
  Where Emp.Codigo = Emp.EmpresaEstoque


GO

ALTER procedure [dbo].[CalcularCustoMedio]                                                                                            
(@TipoItens numeric(1),                                                                                        
 @EmpresaEstoque numeric(2),                                                                                        
 @Empresa numeric(2),                                                                                        
 @NFTipoControle numeric(1),                                                                                        
 @NFCodControle numeric(9),                                                                         
 @PedCodPedido numeric(9),                                                                                        
 @PedCompraCodPedido numeric(9),                                                                                        
 @LanNumLancamento int,                                                                                        
 @ProCodProdutoIni numeric(7),                                                                                        
 @ProCodProdutoFim numeric(7),                                                                                        
 @InvDataInventario datetime,                                                                              
 @DataAnterior datetime,                                                                                        
 @DataAtual datetime,                                                                                        
 @FlagExclusao numeric(1)                                                                                        
)                                                                                        
                                                                                       
as                                                                                        
-- Tipo de Itens:                                                                                        
------ 1-Nota Fiscal, 2-Pedido, 3-Lancamento, 4-Produto Inicial/Final, 5-Pedido de Compra(Componentes),                                                                              
------ 6-Registro de Inventario                     
------ 7-Apropriação de Custos                                                                                 
------ Se for exclusao tem que chamar esta procedure antes de excluir os itens. Não pode chamar                                                                                        
------ exclusão se for nota de saída                                                                                               
                                                                                        
begin                                                                                         
                                                                                        
--Variaveis do cursor de Produtos                                                                                        
Declare @AuxProCodProduto numeric(7)                                                                                        
Declare @AuxProDataMovimento datetime                                                                                        
                                                                                        
--Variaveis do Cursor do MovEstoque                                                                                        
Declare @MovEmpresa numeric(2)                                                                                        
Declare @MovEmpresaEstoque numeric(2)                                                                                        
Declare @MovNumLancamento int                                                                                        
Declare @MovSaldoQtd decimal(13,2)                                                                          
Declare @MovValorAtual decimal(13,4)                                              
Declare @MovQuantAtual decimal(13,2)           
Declare @MovValorICM decimal(11,2)                                                 
Declare @MovValorPISCOFINS decimal(11,2)                                                                                        
--Eder 307377                                    
--Declare @MovEntradaOK numeric(1)                                            
Declare @MovTipoAtualizacaoCusto smallint                         
Declare @MovTipoControle numeric(1)                                                                                        
Declare @MovTipoMovimento numeric(1)                                            
--JALDO - CHAMADO 287693                                                                                        
--Declare @MovFlagMovEstoque numeric(1)                                      
Declare @MovFlagMovEstoque smallint                                            
Declare @MovCodControle numeric(9)                                                                                        
Declare @MovCodPedido numeric(9)                                                                                        
Declare @MovCodPedCompra numeric(9)                                                                                        
Declare @MovValorCustoMed decimal(13,4)                                                                                        
Declare @MovValorCustoUlt decimal(13,4)                                                                                        
Declare @MovValorCustoUltReal Decimal(13,4)                                                                                        
Declare @MovValorUnitario decimal(13,4)                                                                              
Declare @MovValorAjusteCusto decimal(13,4)                                                                              
Declare @MovValorApropriacaoCusto decimal(13,4)                          
Declare @MovQuantAtendida decimal(13,2)                                                
Declare @MovDataMovimento Datetime                                            
                                                                                        
--Variaveis do Parametro de Controle                                                                   
Declare @QtdCasasCusto numeric(1)                                                                                        
Declare @TipoICMCustoMedio numeric(1)                                                       
Declare @TipoICMUltimaCompra numeric(1)                                                                                        
Declare @TipoCustoMedio numeric(1)                                                                                        
Declare @FlagAtualizarCustoMedioPreco smallint                       
Declare @EmpresaListaPreco int                      
                                                                                        
--Variaveis de Calculo                                                                               
Declare @AuxValorAnterior decimal(13,4)                                                                                        
Declare @AuxValorUltAnterior decimal(13,4)                                                                                        
Declare @AuxValorUltRealAnterior decimal(13,4)                                                                        
Declare @AuxDataMovimento datetime                                                                                        
                                                                                                                        
Declare @AtuValorCustoMed decimal(13,4)          
Declare @AtuValorCustoUlt decimal(13,4)                                                                                        
Declare @AtuValorCustoUltReal decimal(13,4)                                                                                        
                                                             
Declare @AuxValorCustoMed decimal(13,4)                           
Declare @AuxValorCustoUlt decimal(13,4)                                                              
Declare @AuxValorCustoUltReal decimal(13,4)                                                                
                                                                                       
Declare @CustoMedio decimal(13,4)                                                                                        
Declare @FlagLanExcluido numeric(1)                           
Declare @ValorAux decimal(13,4)                                                                                        
Declare @SalvaPrimeiroCusto decimal(13,4)                                               
Declare @Contador int                                                                                        
Declare @DataAux datetime                                                                              
Declare @SQLTimeStamp datetime                                                                                        
                
--Eder 345018                
--Variaveis de atualização de custo considerando outras empresa.                
--Estoque fechado galpao assume que seu custo médio é sempre o custo da empresa principal. Ex: Galpao GOOP                
Declare @CmeEmpCusto smallint                
Declare @CmeEmpPrincipal smallint                
Declare @CmeNumMovEstoque int                 
Declare @CmeCustoMed decimal(13,4)                
Declare @CmeCustoUlt decimal(13,4)                
Declare @CmeCustoUltReal decimal(13,4) 
--Gabriella - 409465               
Declare @ValorCotacaoMoeda decimal(18,8)     
                                                                  
--Leitura do Parametro de Controle da empresa principal                                                                                   
Select @QtdCasasCusto = QtdCasasCusto,                                                                                        
       @TipoICMCustoMedio = TipoICMCustoMedio,                                             
       @TipoICMUltimaCompra = TipoICMUltimaCompra,                                
       @TipoCustoMedio = TipoCustoMedio,                                                                                        
       @FlagAtualizarCustoMedioPreco = FlagAtualizarCustoMedioPreco,                      
       @SQLTimeStamp = GetDate()                                                                                        
From ParamControle                                                                                   
Where Empresa = @EmpresaEstoque                                                                                        
                      
--Eder - 321038                      
Select @EmpresaListaPreco = EmpresaListaPreco                      
   from Empresas                      
where Codigo = @Empresa                      
                
--Eder 345018                
Select @CmeEmpCusto = ECusto.EmpresaCustoMedio,                
       @CMeEmpPrincipal = ECusto.EmpresaPrincipal                
  From EmpresasCustoMedio ECusto                
 Where (ECusto.EmpresaPrincipal = @EmpresaEstoque     --Esta Calculando CME na empresa principal                
     or ECusto.EmpresaCustoMedio = @EmpresaEstoque)    --Esta calculando cme na empresa onde mantem o custo igual (Galpao)                
if @CmeEmpCusto is null                
  Set @CmeEmpCusto = 0                
if @CMeEmpPrincipal is null                
  Set @CMeEmpPrincipal = 0                
                  
                                              
-- Renato - 280210                                              
---- Quando processar nota fiscal de saída, com a data de processamento sendo mesma data do dia,                                               
---- pegar o custo médio da estoqueproduto e atualizar nos lançamentos da nota que está sendo                                               
---- processada.                                              
If (@TipoItens = 1) and (@NFTipoControle = 2) and (@DataAtual = Convert(datetime, (Convert(Char(10), GetDate(), 103)), 103))                                                   
begin                                              
                                              
  Declare CursorMov Cursor Local Fast_Forward For                       
                                                
  (Select Mov.Empresa, Mov.NumLancamento, Mov.CodProduto,                                                 
      Mov.QuantAtendida, Mov.ValorCustoMed, Mov.ValorCustoUlt,                                               
            Mov.ValorCustoUltReal, Mov.TipoControle, Mov.CodControle,                                               
            Mov.CodPedido                                                    From MovEstoque Mov                                              
       Left Join Produtos Pro on Pro.Codigo = Mov.CodProduto                                                                           
   Where Mov.Empresa = @Empresa                                                                                        
   and Mov.TipoControle = @NFTipoControle                                                                                        
    and Mov.CodControle = @NFCodControle                                                                         
    and Mov.CodProduto <> 9999999                                                                                       
    and Mov.CodProduto <> 8888888                                              
       and ((Pro.TipoLote <> 1) or  --Não carrega os produtos controlados por lote unitário                                                  
      (Pro.TipoLote = 1 and Pro.FlagLoteUnitario = 0)) )                                               
                                              
  Open CursorMov                                                                                                                   
  Fetch Next From CursorMov Into                                               
    @MovEmpresa, @MovNumLancamento, @AuxProCodProduto,                                               
    @MovQuantAtendida, @MovValorCustoMed, @MovValorCustoUlt,                                               
    @MovValorCustoUltReal, @MovTipoControle, @MovCodControle,                                              
    @MovCodPedido                                                                                         
                                                
  While @@Fetch_Status = 0                                                            
  begin                                              
    Set @AtuValorCustoMed = 0                                                                                      
    Set @AtuValorCustoUlt = 0                                            
    Set @AtuValorCustoUltReal = 0                                               
                                                                                      
    Select @AtuValorCustoMed = ValorCustoMed,                                                                                    
           @AtuValorCustoUlt = ValorCustoUlt,                                              
           @AtuValorCustoUltReal = ValorCustoUltReal                                              
    From EstoqueProduto                                             
    --302533                                          
    --Where Empresa = @Empresa                                          
      Where Empresa = @EmpresaEstoque                                                  
      and CodProduto = @AuxProCodProduto                                  
                                              
    If (@AtuValorCustoMed     <> @MovValorCustoMed) or                                                                                        
       (@AtuValorCustoUlt     <> @MovValorCustoUlt) or       
       (@AtuValorCustoUltReal <> @MovValorCustoUltReal)                                                                                        
  begin                                                                                        
      Update MovEstoque Set                                        
        ValorCustoMed = @AtuValorCustoMed,                                                
        ValorCustoUlt = @AtuValorCustoUlt,                                                
        ValorCustoUltReal = @AtuValorCustoUltReal                                
      Where Empresa = @MovEmpresa                                                
        and NumLancamento = @MovNumLancamento                                                
                                                  
      if @MovCodPedido <> 0                                                           
      begin                                                                           
        update Pedidos set                                          
          ValorCustoMedTotal     = ValorCustoMedTotal - Round(@MovQuantAtendida * @MovValorCustoMed, @QtdCasasCusto)                                              
                                                      + Round(@MovQuantAtendida * @AtuValorCustoMed, @QtdCasasCusto),                                                
          ValorCustoUltTotal     = ValorCustoUltTotal - Round(@MovQuantAtendida * @MovValorCustoUlt, @QtdCasasCusto)                                                
                                            + Round(@MovQuantAtendida * @AtuValorCustoUlt, @QtdCasasCusto),                                                
          ValorCustoUltRealTotal = ValorCustoUltRealTotal - Round(@MovQuantAtendida * @MovValorCustoUltReal, @QtdCasasCusto)                                                
                             + Round(@MovQuantAtendida * @AtuValorCustoUltReal, @QtdCasasCusto)                                                
        where Empresa = @MovEmpresa                                                                  
          and CodPedido = @MovCodPedido                                                                  
      end                                                                  
                                                 
      if @MovCodControle <> 0                                                                  
      begin                                                                           
        update NotasFiscais set                                                                  
          ValorCustoMedTotal     = ValorCustoMedTotal - Round(@MovQuantAtendida * @MovValorCustoMed, @QtdCasasCusto)                                              
                                                      + Round(@MovQuantAtendida * @AtuValorCustoMed, @QtdCasasCusto),                                                
          ValorCustoUltTotal     = ValorCustoUltTotal - Round(@MovQuantAtendida * @MovValorCustoUlt, @QtdCasasCusto)                                                
                                                      + Round(@MovQuantAtendida * @AtuValorCustoUlt, @QtdCasasCusto),                                                
          ValorCustoUltRealTotal = ValorCustoUltRealTotal - Round(@MovQuantAtendida * @MovValorCustoUltReal, @QtdCasasCusto)                                                
                                                          + Round(@MovQuantAtendida * @AtuValorCustoUltReal, @QtdCasasCusto)                                                
        where Empresa = @MovEmpresa                                                                  
          and TipoControle = @MovTipoControle                                                                  
          and CodControle = @MovCodControle                                                                  
      end                                                                  
    end                                                   
           
    Fetch Next From CursorMov into                                                                                          
      @MovEmpresa, @MovNumLancamento, @AuxProCodProduto,                                               
      @MovQuantAtendida, @MovValorCustoMed, @MovValorCustoUlt,                                               
   @MovValorCustoUltReal, @MovTipoControle, @MovCodControle,                                              
      @MovCodPedido                                                                                      
  end                                                                               
                                      
  Close CursorMov                                                                                      
  Deallocate CursorMov                                              
                                                   
end                                              
Else                                              
begin                                    
                                              
                                       
 --Apaga os itens da temporaria caso exista algum                                                                                         
 Delete From TempCalculoCustoMedio                                                                                         
  Where SqlTimeStamp = @SQLTimeStamp                                                                             
                                                                                         
 --Se for recalculo por produtos, tem que refazer todos os itens do movestoque                                                                                        
 If @TipoItens = 4 and @TipoCustoMedio = 1                                                                                         
   Set @TipoCustoMedio = 0                                                                                        
                                                                                         
 --Na exclusão, processa os lançamentos posteriores                                                                                        
 If @TipoCustoMedio = 1 and @FlagExclusao = 1                                          
   Set @TipoCustoMedio = 0                                                                                        
                   
 --Gabriella - 347262                
 --If (@DataAtual is null) or (@TipoItens = 4)                                                      
 If (@DataAtual is null)                                                      
  Set @AuxProDataMovimento = '1900-01-01'                                                                                        
 Else                                                                                        
  If @DataAnterior <= @DataAtual                                                                                         
   Set @AuxProDataMovimento = @DataAnterior                                                                                        
  Else                                               
   Set @AuxProDataMovimento = @DataAtual                                                                                
                                                                                         
 Set @DataAux = @AuxProDataMovimento - 1                                                
                                                                            
 If @TipoItens = 1      
 begin                                                                   
  Insert Into TempCalculoCustoMedio(SqlTimeStamp, CodProduto, NumLancamentoUltCompra)                                                                                        
    Select @SqlTimeStamp, CodProduto, Null              
     From MovEstoque                                                                            
     Where Empresa=@Empresa                                                                                        
      and TipoControle = @NFTipoControle                                                                                        
      and CodControle = @NFCodControle                                                                                        
      and CodProduto <> 9999999                                  
      and CodProduto <> 8888888                                                                        
     Group By CodProduto                                                                                        
 end                                                                                        
 Else                                             
 If @TipoItens = 2                                                                                        
 begin                                                                                        
  Insert Into TempCalculoCustoMedio(SqlTimeStamp, CodProduto, NumLancamentoUltCompra)                                                                                        
    Select @SqlTimeStamp, CodProduto, Null              
     From MovEstoque                                                                                        
     Where Empresa=@Empresa                                                                                        
      and CodPedido = @PedCodPedido                                                                                        
      and CodProduto <> 9999999                                                                                        
 and CodProduto <> 8888888                                                             
     Group By CodProduto                                                                                        
 end                                                                                        
 Else                                                               
 If @TipoItens = 3                                                                                        
 begin                                             
  Insert Into TempCalculoCustoMedio(SqlTimeStamp, CodProduto, NumLancamentoUltCompra)                                                                                      
    Select @SqlTimeStamp, CodProduto, Null              
     From MovEstoque                                                                                        
     Where Empresa=@Empresa                                                                                        
      and NumLancamento = @LanNumLancamento                                                                                        
      and CodProduto <> 9999999                                                    
      and CodProduto <> 8888888                                                                                        
     Group By CodProduto                                                                                        
 end                                                                                        
 Else                                                                                        
 If @TipoItens = 4                                                                                        
 begin                  
   Insert Into TempCalculoCustoMedio(SqlTimeStamp, CodProduto, NumLancamentoUltCompra)                                                                                        
     Select @SqlTimeStamp, Codigo,  Null              
      From Produtos                                                                                        
      Where Codigo >= @ProCodProdutoIni                                                                                       
       and Codigo <= @ProCodProdutoFim                                                                                        
       and Codigo <> 9999999               
       and Codigo <> 8888888                         
 end                                                                                        
 Else                                                                                        
 If @TipoItens = 5                                                                                        
 begin                                                                
    --Eder - 330852                  
    Insert Into TempCalculoCustoMedio(SqlTimeStamp, CodProduto, NumLancamentoUltCompra)                                                                                        
    Select @SqlTimeStamp, CodProduto, Null              
      From ItemPedidoCompra Ip                  
   Where IP.EmpresaEstoque = @EmpresaEstoque                  
       and IP.CodPedido = @PedCompraCodPedido                  
       and Ip.TipoGerarEntrada <> 0            
       and not Ip.CodProduto in (8888888,9999999)                  
     Group By CodProduto                                                                                        
 end                                                                                        
 Else                                                                              
 If @TipoItens = 6                                                                              
 begin   
 
 --Eder = 365446
 /*                                                                         
  Insert Into TempCalculoCustoMedio (SqlTimeStamp, CodProduto, NumLancamentoUltCompra, DataMovimentoUltCompra,                                                                               
   SaldoMovimento)                                                           
  select @SqlTimeStamp, RegInv.CodProduto, 0, Max(RegInv.DataInventario), --Max(RegInv.QuantEstoque)                                                                              
   (select QuantEstoque from RegistroInventario                                                                               
    where DataInventario = Max(RegInv.DataInventario) and                                                          
       CodProduto = RegInv.CodProduto and                                                         
       EmpresaEstoque = RegInv.EmpresaEstoque) --250506                                                        
  From RegistroInventario RegInv                                                                           
  where RegInv.EmpresaEstoque = @EmpresaEstoque                                                        
    --Rafael chamado 255209                                                                                            
   --and RegInv.DataInventario < @InvDataInventario                                                                              
   and exists(Select RegNov.CodProduto                                                                              
         From RegistroInventario RegNov                                                                              
         Where RegNov.EmpresaEstoque = @EmpresaEstoque                                                                              
          and RegNov.CodProduto = RegInv.CodProduto                                                                              
          and RegNov.DataInventario = @InvDataInventario)                                                                              
  Group By RegInv.CodProduto, RegInv.EmpresaEstoque      
  */
   --Eder = 365446
    Insert Into TempCalculoCustoMedio (SqlTimeStamp, CodProduto, NumLancamentoUltCompra,
              DataMovimentoUltCompra,
              SaldoMovimento)
        select @SqlTimeStamp, RegInv.CodProduto, 0,
               null,
               0
      From RegistroInventario RegInv
      where RegInv.EmpresaEstoque = @EmpresaEstoque
        and RegInv.DataInventario = @InvDataInventario;                                            
 end                
 else              
If @TipoItens = 7 --Gabriella - 344416 Apropriação de Custo              
 begin                                             
  Insert Into TempCalculoCustoMedio(SqlTimeStamp, CodProduto, NumLancamentoUltCompra)                                                                                      
    Select @SqlTimeStamp, Aprop.CodProduto, M.NumLancamento               
     From ApropCustoItem Aprop              
     Left Join MovEstoque M on M.Empresa = Aprop.Empresa              
                           and M.NumLancamento = Aprop.NumMovEstoqueGerado                                                                                       
     Where Aprop.Empresa=@Empresa                                                                                        
      and Aprop.CodApropCusto = @LanNumLancamento                                                                                         
      and Aprop.CodProduto <> 9999999                                                    
      and Aprop.CodProduto <> 8888888                                                                                                                               
 end                                          
              
              
  --Eder 330852              
  --Calcula o Lançamento de Ultima Compra.              
  if ((@TipoItens in (1,2,3,5)) or              
      ((@TipoItens = 4) and (@DataAux is not null)))               
  begin              
    Update TempCalculoCustoMedio              
       Set NumlancamentoUltCompra = (Select Top 1 Mov.NumLancamento From  MovEstoque Mov              
                                       Left Join Operacoes Opr on Opr.Codigo = Mov.CodOperacao              
                                      Where Mov.EmpresaEstoque = @EmpresaEstoque              
                                        And Mov.CodProduto     = TempCalculoCustoMedio.CodProduto              
                                        And Mov.TipoMovimento  = 1              
                                        And Mov.FlagMovEstoque = 1              
                                        And Opr.FlagCustoMedio = 1              
                                        And Mov.DataMovimento  <= @DataAux              
                                        And Mov.ValorUnitario > 0      
                                        -- 367154      
                                        And Mov.QuantAtendida > 0      
                                      Order By DataMovimento Desc, NumLancamento Asc)              
      Where SqlTimeStamp = @SqlTimeStamp              
  end              
                                                
 If @TipoItens <> 6 --Quando nao for por registro de inventario                                                                              
 begin                                                       
  --Pega a data da Ultima compra dos itens e o saldo do estoque atual                                                                                        
  --Eder - 329718 - Considera empresas adicionais no estoque para custo medio                    
  Update TempCalculoCustoMedio                                                                                      
    Set DataMovimentoUltCompra = (Select Top 1 Mov.DataMovimento From MovEstoque Mov                    
                                   Where Mov.EmpresaEstoque=@EmpresaEstoque                    
                                     and Mov.Numlancamento = TempCalculoCustoMedio.NumLancamentoUltCompra)                    
     ,SaldoMovimento = isnull((Select Sum(Es.QuantEstoque) From EstoqueProduto Es                    
                                where Es.CodProduto = TempCalculoCustoMedio.CodProduto                    
                                  and Es.Empresa in (Select Emp.EmpresaEstoque From Empresas Emp                    
                                                      Where Emp.Codigo = @EmpresaEstoque                    
                                      Union                    
                                                     Select ECusto.EmpresaCustoMedio From EmpresasCustoMedio ECusto                     
                                                      Where ECusto.EmpresaPrincipal = @EmpresaEstoque)),0)                    
   Where SqlTimeStamp = @SqlTimeStamp                                                                          
                                                                                         
  --Grava o Saldo (retroativo) desconsiderando o saldo atual, até o lançamento atual                                                                                        
  --Eder - 329718 - Considera empresas adicionais no estoque para custo medio                    
  Update TempCalculoCustoMedio                    
    Set SaldoMovimento = SaldoMovimento +                     
        isnull((Select                     
                 Sum(Case When M.TipoMovimento = 1                    
                           and ((M.DataMovimento > TAux.DataMovimentoUltCompra)                    
                                or (TAux.DataMovimentoUltCompra is null))                    
       Then (M.QuantMovimentada * -1)                    
                          When M.TipoMovimento = 1                    
                           and M.DataMovimento = TAux.DataMovimentoUltCompra                    
                           and M.NumLancamento >= TAux.NumLancamentoUltCompra                    
                          Then (M.QuantMovimentada * -1)                    
                          When M.TipoMovimento = 2                    
                           and ((M.DataMovimento > TAux.DataMovimentoUltCompra)                    
                            or (TAux.DataMovimentoUltCompra is null))                    
                          Then M.QuantMovimentada                    
     When M.TipoMovimento = 2                    
                           and M.DataMovimento = TAux.DataMovimentoUltCompra                    
                          Then M.QuantMovimentada                    
                          Else 0 End)                    
                 From TempCalculoCustoMedio TAux,  MovEstoque M                    
                 Where TAux.CodProduto = TempCalculoCustoMedio.CodProduto                    
                   and TAux.SqlTimeStamp = TempCalculoCustoMedio.SqlTimeStamp                    
                   and M.CodProdutoMov = TAux.CodProduto                    
                   and M.Empresa in                     
                       (Select Emp.Codigo From Empresas Emp                    
                         --Ronaldo Chamado 372435  
                         --Where Emp.Codigo = @EmpresaEstoque                    
                         Where Emp.EmpresaEstoque = @EmpresaEstoque                    
                        Union                    
                        Select ECusto.EmpresaCustoMedio From EmpresasCustoMedio ECusto                     
                         Where ECusto.EmpresaPrincipal = @EmpresaEstoque)                    
                   and M.TipoMovimento in(1,2)                    
                   and M.FlagMovEstoque=1                    
                   and ((M.DataMovimento >= TAux.DataMovimentoUltCompra) or                    
                        (TAux.DataMovimentoUltCompra is null))),0)                    
   Where SqlTimeStamp = @SqlTimeStamp                   
 end                                                                              
                                                          
 /*if @TipoItens = 6 --Quando for registro de inventario                                                                              
 begin                                                                              
  Update TempCalculoCustoMedio                                                                                        
 Set DataMovimentoUltCompra = (Select Inv.DataInventario From RegistroInventario Inv                                                                              
                    Where Inv.CodProduto = TempCalculoCustoMedio.CodProduto                                                                              
                     and Inv.EmpresaEstoque = @EmpresaEstoque                                                                  
                     and Inv.DataInventario = @InvDataInventario),                              
    SaldoMovimento =  (Select Inv.QuantEstoque From RegistroInventario Inv                                                                              
                    Where Inv.CodProduto = TempCalculoCustoMedio.CodProduto                                                                              
               and Inv.EmpresaEstoque = @EmpresaEstoque                                                                               
                     and Inv.DataInventario = @InvDataInventario)                                                                              
   Where SqlTimeStamp = @SqlTimeStamp                                                                             
 end*/                                                                             
                                                                                         
 --Abre o cursor dos produtos a partir dos dados da temporaria                     
 --Atenção: Não carrega os produtos que são controlados por Lote Unitário                                                                                      
  Declare CursorProduto Cursor Local Fast_Forward For                    
   Select T.CodProduto,                    
          Case When @TipoItens <> 6 Then isnull(Mov.ValorCustoMed,0) End,                    
          Case When @TipoItens <> 6 Then isnull(Mov.ValorCustoUlt,0)                     
               When @TipoItens = 6 Then 0 End,                                                                                
          Case When @TipoItens <> 6 Then isnull(Mov.ValorCustoUlt,0)                                                                            
               When @TipoItens = 6 Then 0 End,         
          Case When @TipoItens <> 6 then Mov.DataMovimento                    
               When @TipoItens = 6 then T.DataMovimentoUltCompra end,                    
          isnull(T.SaldoMovimento,0)                    
     From TempCalculoCustoMedio T                    
     Left Join Produtos Pro on Pro.Codigo = T.CodProduto                    
     Left Join MovEstoque Mov on Mov.EmpresaEstoque=@EmpresaEstoque                    
                             and Mov.Numlancamento = T.NumLancamentoUltCompra                    
                             and @TipoItens <> 6                    
     Left Join RegistroInventario Inv on Inv.CodProduto = T.CodProduto                    
                     and Inv.EmpresaEstoque = @EmpresaEstoque                    
                     and Inv.DataInventario = T.DataMovimentoUltCompra                    
                     and @TipoItens = 6                    
   Where T.SqlTimeStamp = @SqlTimeStamp                    
     and ((Pro.TipoLote <> 1) or                    
          (Pro.TipoLote = 1 and Pro.FlagLoteUnitario = 0))                    
 Open CursorProduto                    
                                                                                         
 Fetch Next From CursorProduto into @AuxProCodProduto,                                                                                         
            @AuxValorAnterior, @AuxValorUltAnterior,                                                                           
            @AuxValorUltRealAnterior, @AuxDataMovimento,                                                                
            @MovSaldoQtd               
 While @@Fetch_Status = 0                                                                                   
 begin                                                          
   Set @CustoMedio = @AuxValorAnterior                                                                                        
   Set @SalvaPrimeiroCusto = @AuxValorAnterior                                        
   Set @AtuValorCustoMed = 0                                                                                      
   Set @AtuValorCustoUlt = 0                                                                                      
   Set @AtuValorCustoUltReal = 0                                                                                                      
   Set @Contador = 0                                                                                        
                         
   --Cursor dos Itens do MovEstoque                    
   Declare CursorMov Cursor Local Fast_Forward For                    
    Select M.Empresa, M.EmpresaEstoque, M.NumLancamento,                    
        Case When M.QuantMovimentada > 0 then (M.ValorUnitario * M.QuantMovimentada)                    
             Else M.ValorUnitario End as ValorAtual,                    
                                                            
        --Gabriella - 295380                                            
        --Case When AliqICM > 0 and ValorBaseICM > 0                                              
        Case When isnull(Oper.TipoCalculoICMCustoMedio,0) = 0 and M.AliqICM > 0 and M.ValorBaseICM > 0                                                                                       
             -- Renato - 360462              
             -- Then Round((M.ValorBaseICM * M.AliqICM) / 100,2)              
             Then Round((M.ValorBaseICM * (M.AliqICM + isNull(MI.AliqComplICM,0))) / 100,2)                                     
             Else 0 End as ValorICM,                                                                                         
                                                            
                                                   
  Case When isnull(Mi.ValorbasePisCofins,0) > 0                                  
             Then               
               Round(((Case  When M.QuantAtendida > 0                       
                             Then Mi.ValorbasePisCofins                                      
                       Else 0 End)                                     
                          * M.AliqPISCOFINS) / 100,2)                                   
              
        Else               
               Round(((Case  When M.QuantAtendida > 0                                                     
                               Then Round((M.ValorBruto - Round((M.ValorBruto * M.PercDesconto / 100),2)) * M.QuantAtendida,2)                                                    
                       Else 0 End +                       
                       Case When isnull(Oper.FlagIPISobrePisCofins,0) = 1                       
          Then Round((M.ValorBruto - Round((M.ValorBruto * M.PercDesconto / 100),2)) * M.QuantAtendida * M.AliqIPI / 100,2)                      
                       Else 0 End)                                              
                          * M.AliqPISCOFINS) / 100,2)                                   
             --Else 0 End               
       end                                          
             as ValorPISCOFINS,               
                         
                                                                        
        M.QuantMovimentada,                                                                                        
                                    
        --Eder - 307257                    
        --Case When isnull(Oper.FlagCustoMedio,0) = 1 and M.TipoMovimento = 1                    
        --     Then 1 Else 0 End as EntradaOK,
        Case When M.TipoMovimento = 1 and isnull(Oper.FlagCustoMedio,0) = 1                    
             Then Case                    
                       When M.QuantAtendida = 0 And M.ValorUnitario = 0 and M.ValorTotal > 0                    
                           Then 2  --2 - Apropriação de custo no custo médio                    
                       When isnull(Oper.FlagEstoqueReservadoContabil,0) = 0    --Calcula independente de ser entrada reservada (CALCULO PADRAO)                    
                           Then 1  --1 - Calculo do Custo Médio                    
                       When isnull(Oper.FlagEstoqueReservadoContabil,0) = 1 and M.FlagMovEstoque <> 0   --Só calcula se NÃO for entrada reservada                    
                           Then 1  --1 - Calculo do Custo Médio                    
                       Else 0 End                    
             Else 0 End as TipoAtualizacaoCusto,                    
        M.TipoMovimento, M.FlagMovEstoque, M.TipoControle,                    
        M.CodControle, M.CodPedido, M.CodPedCompra,                    
        M.ValorCustoMed, M.ValorCustoUlt, M.ValorCustoUltReal,                    
        M.ValorAjusteCusto, M.ValorUnitario, M.QuantAtendida,                
        Case When M.QuantAtendida = 0 And M.ValorUnitario = 0 and M.ValorTotal > 0                    
             Then M.ValorTotal Else 0 End as ValorApropriacaoCusto,  --Valor da apropriação é armazenado totalizado                    
        M.DataMovimento                             
     From MovEstoque M                    
       Left Join Operacoes Oper on Oper.Codigo = M.CodOperacao                  
       --Renato - 360462              
       Left Join MovEstoqueImposto MI on M.Empresa = MI.Empresa              
                        and M.NumLancamento = MI.NumLancamento                
     Where M.CodProduto =  @AuxProCodProduto                    
 --Eder - 329718                    
       --and M.EmpresaEstoque = @EmpresaEstoque                     
       and M.EmpresaEstoque in (Select Emp.EmpresaEstoque From Empresas Emp                    
                                 Where Emp.Codigo = @EmpresaEstoque                    
   Union                    
                                Select ECusto.EmpresaCustoMedio From EmpresasCustoMedio ECusto                     
                                 Where ECusto.EmpresaPrincipal = @EmpresaEstoque)                    
                    
       and ((@AuxDataMovimento is Null) or                    
            (M.DataMovimento = @AuxDataMovimento and M.TipoMovimento > 0 and @TipoItens <> 6) or                    
            (M.DataMovimento > @AuxDataMovimento))   
     --Eder = 365446     
     and @TipoItens <> 6
                                   
     Order By M.DataMovimento, M.TipoMovimento, M.NumLancamento          
                    
   --Fica em Loop nos Itens do MovEstoque do produto atual                    
   Open CursorMov                    
                                                                                         
   Fetch Next From CursorMov Into @MovEmpresa, @MovEmpresaEstoque, @MovNumLancamento,                    
         @MovValorAtual, @MovValorICM, @MovValorPISCOFINS,                    
         @MovQuantAtual, @MovTipoAtualizacaoCusto,                    
         @MovTipoMovimento, @MovFlagMovEstoque,                    
         @MovTipoControle, @MovCodControle, @MovCodPedido, @MovCodPedCompra,                    
         @MovValorCustoMed, @MovValorCustoUlt, @MovValorCustoUltReal,                    
         @MovValorAjusteCusto, @MovValorUnitario, @MovQuantAtendida,                    
         @MovValorApropriacaoCusto, @MovDataMovimento                
                                                                               
  --CASO NÃO EXISTA MOVIMENTAÇÃO DO PRODUTO E SEJA ATUALIZAÇÃO DE CUSTO MÉDIO PELO REGISTRO DE INVENTARIO                  
  --PEGA O CUSTO MEDIO DO REGISTRO DE INVENTARIO ANTERIOR                    
  if (@@Fetch_Status <> 0) and (@TipoItens = 6)                    
   SET @AtuValorCustoMed = @CustoMedio                    
                                                                                         
   While @@Fetch_Status = 0                    
   Begin                    
    Set @Contador = @Contador + 1                    
                                                                                         
    --Atenção: as Variaveis @AuxValorAnterior e @AuxQuantAnterior são acumuladas                    
    Set @FlagLanExcluido  = 0                    
    --Se for exclusao não considera os itens do Pedido/Nota/Lançamento Excluido                    
    If @FlagExclusao = 1                    
    begin                    
      If (@TipoItens = 1 and @MovEmpresa = @Empresa                    
        and @MovTipoControle = 1 and @MovCodControle = @NFCodControle) or                    
       (@TipoItens = 2 and @MovEmpresa = @Empresa                    
        and @MovCodPedido = @PedCodPedido) or                    
       (@TipoItens = 3 and @MovEmpresa = @Empresa           
        and @MovNumLancamento = @LanNumLancamento) or                    
       (@TipoItens = 5 and @MovEmpresa=@Empresa and @MovCodPedido=0                    
        and @MovTipoMovimento = 1 and @MovCodPedCompra = @PedCompraCodPedido)                    
      begin                    
       Set @MovTipoAtualizacaoCusto = 0                    
       Set @FlagLanExcluido = 1                    
      end                    
    end                    
                           
                              
    --Eder - 307377                    
    --Calculo de Custo Medio - Entradas que Calculam Custo Medio                    
    if @MovTipoAtualizacaoCusto = 1                     
       and @MovEmpresaEstoque = @EmpresaEstoque --Eder - 329718                    
    begin                    
      If @TipoICMCustoMedio = 1                    
       Set @ValorAux = @MovValorAtual - @MovValorICM                    
      Else                    
   If @TipoICMCustoMedio = 2                    
         Set @ValorAux = @MovValorAtual - @MovValorICM - @MovValorPISCOFINS                    
       Else                    
         Set @ValorAux = @MovValorAtual                    
                                             
      If (@MovSaldoQtd > 0) and (@MovQuantAtual > 0)                    
       Set @CustoMedio = ((@AuxValorAnterior * @MovSaldoQtd) + @ValorAux)                    
                 / (@MovSaldoQtd + @MovQuantAtual)                    
      Else                    
       If @MovQuantAtual > 0                    
         Set @CustoMedio =  @ValorAux / @MovQuantAtual                    
                                                                                         
      If @Contador = 1 and (not (@AuxDataMovimento is null)) and @TipoItens <> 6                    
       Set @CustoMedio = Round(@SalvaPrimeiroCusto,@QtdCasasCusto)                    
      Else                    
       Set @CustoMedio = Round(@CustoMedio,@QtdCasasCusto)                                      
      Set @AuxValorAnterior = @CustoMedio                    
                                                          
      --Custo da Ultima Compra                    
      If @TipoICMUltimaCompra = 1                    
       Set @ValorAux = @MovValorAtual - @MovValorICM                    
      Else                    
       If @TipoICMUltimaCompra = 2                    
         Set @ValorAux = @MovValorAtual - @MovValorICM - @MovValorPISCOFINS                    
       Else                    
         Set @ValorAux = @MovValorAtual                    
      If @MovQuantAtual > 0                    
       Set @AuxValorUltAnterior = Round(@ValorAux / @MovQuantAtual,@QtdCasasCusto)                    
      Else                    
       Set @AuxValorUltAnterior = Round(@ValorAux,@QtdCasasCusto)                    
                    
      --Custo da Ultima Compra REAL é sempre sem impostos                    
      Set @ValorAux = @MovValorAtual - @MovValorICM - @MovValorPISCOFINS                    
      If @MovQuantAtual > 0                    
       Set @AuxValorUltRealAnterior = Round(@ValorAux / @MovQuantAtual,@QtdCasasCusto)                    
      Else                    
       Set @AuxValorUltRealAnterior = Round(@ValorAux,@QtdCasasCusto)                    
      Set @AtuValorCustoMed = @AuxValorAnterior                    
      Set @AtuValorCustoUlt = @AuxValorUltAnterior                    
      Set @AtuValorCustoUltReal = @AuxValorUltRealAnterior                    
    end                    
                                    
                                    
    --Eder - 307377                                                    
    --Apropriação do Custo médio / Lançamentos sem valor unitario e com Valor Ajuste de Custo                                    
    if @MovTipoAtualizacaoCusto = 2 and @MovSaldoQtd > 0                     
       and @MovEmpresaEstoque = @EmpresaEstoque --Eder - 329718                    
    begin                    
      Set @AtuValorCustoMed = Round(((@MovSaldoQtd * @AtuValorCustoMed) + @MovValorApropriacaoCusto) / @MovSaldoQtd, @QtdCasasCusto)                    
      Set @AuxValorAnterior = @AtuValorCustoMed                    
    end                    
                                     
                                    
    If @MovFlagMovEstoque = 1 and @FlagLanExcluido  = 0                    
    begin                    
      If @MovTipoMovimento = 1                    
        Set @MovSaldoQtd = @MovSaldoQtd + @MovQuantAtual                    
      Else If @MovTipoMovimento = 2                    
         Set @MovSaldoQtd = @MovSaldoQtd - @MovQuantAtual                    
    end                    
                                    
 -- lanc. de saida com ajuste de custo, foi gerado pelo programa de juncao na opcao                    
 -- desmembrar, usa este campo pra poder chegar ao valor original, antes da reducao                    
 -- Cálculo: soma ao valor unitario o custo, obtendo o valor original antes do desmembramento,                    
 --      acha o percentual que foi reduzido e reajusta os valores de custo.                    
    If @MovTipoMovimento = 2 and @MovValorAjusteCusto <> 0                      
       and @MovEmpresaEstoque = @EmpresaEstoque --Eder - 329718                    
    begin                    
     Set @AtuValorCustoMed     = ((@MovValorUnitario)/(@MovValorUnitario+@MovValorAjusteCusto)) * @AtuValorCustoMed                    
     Set @AtuValorCustoUlt     = ((@MovValorUnitario)/(@MovValorUnitario+@MovValorAjusteCusto)) * @AtuValorCustoUlt                    
     Set @AtuValorCustoUltReal = ((@MovValorUnitario)/(@MovValorUnitario+@MovValorAjusteCusto)) * @AtuValorCustoUltReal                    
    end                    
                                                                                          
    If (@TipoCustoMedio = 0 and @TipoItens <> 6) or                    
       (@TipoCustoMedio = 1 and                    
         (@TipoItens = 1 and @MovEmpresa=@Empresa and @MovTipoControle=@NFTipoControle                    
           and @MovCodControle = @NFCodControle) or                    
         (@TipoItens = 2 and @MovEmpresa=@Empresa and @MovCodPedido=@PedCodPedido) or                    
         (@TipoItens = 3 and @MovEmpresa=@Empresa and @MovNumLancamento=@LanNumLancamento) or                    
         (@TipoItens = 5 and @MovEmpresa=@Empresa and @MovTipoMovimento=1 and @MovCodPedido=0                    
             and @MovCodPedCompra = @PedCompraCodPedido)                    
       )                    
    begin                    
                
     --Eder - 345018                
     --Manter custo de empresa igual a empresa principal somente quando está na empresa que recebe o custo (Ex: Galpao GOOP)                
 If (@CmeEmpCusto > 0)  and (@CmeEmpCusto = @EmpresaEstoque)                
     begin                
       --Pega o custo medio da empresa principal, na data do movimento                
       select @CmeNumMovEstoque = dbo.UltimaCompraMovEstoque(@CmeEmpPrincipal,@AuxProCodProduto,                
                                  @MovDataMovimento,1,0)  --Considera se houver, a ultima entrada do dia                
                      
       Select Top 1 @AtuValorCustoMed = Mov.ValorCustoMed,                
                    @AtuValorCustoUlt = Mov.ValorCustoUlt,                
                    @AtuValorCustoUltReal = Mov.ValorCustoUltReal                
       From MovEstoque Mov                
       Where Mov.EmpresaEstoque = @CmeEmpPrincipal                
         and Mov.NumLancamento = @CmeNumMovEstoque                         
     end                
                     
     If (@MovEmpresaEstoque = @EmpresaEstoque) and --Eder - 329718                    
        (@AtuValorCustoMed     <> @MovValorCustoMed or                    
         @AtuValorCustoUlt     <> @MovValorCustoUlt or                    
         @AtuValorCustoUltReal <> @MovValorCustoUltReal)                    
     begin                    
      Update MovEstoque                    
        Set ValorCustoMed = @AtuValorCustoMed                
           ,ValorCustoUlt = @AtuValorCustoUlt                
           ,ValorCustoUltReal = @AtuValorCustoUltReal                    
       Where Empresa=@MovEmpresa                    
        and NumLancamento = @MovNumLancamento                    
                                                 
      --Eder - Chamado 261402                    
      if @MovCodPedido <> 0                    
      begin                    
       update Pedidos set                    
         ValorCustoMedTotal = ValorCustoMedTotal - Round(@MovQuantAtendida * @MovValorCustoMed, @QtdCasasCusto)                    
                               + Round(@MovQuantAtendida * @AtuValorCustoMed, @QtdCasasCusto),                    
         ValorCustoUltTotal = ValorCustoUltTotal - Round(@MovQuantAtendida * @MovValorCustoUlt, @QtdCasasCusto)                    
                               + Round(@MovQuantAtendida * @AtuValorCustoUlt, @QtdCasasCusto),                    
         ValorCustoUltRealTotal = ValorCustoUltRealTotal - Round(@MovQuantAtendida * @MovValorCustoUltReal, @QtdCasasCusto)                    
                               + Round(@MovQuantAtendida * @AtuValorCustoUltReal, @QtdCasasCusto)                    
        where Empresa = @MovEmpresa                    
         and CodPedido = @MovCodPedido                    
      end                    
                                                 
      --Eder - Chamado 261402                    
      if @MovCodControle <> 0                    
      begin                    
       update NotasFiscais set                    
         ValorCustoMedTotal     = ValorCustoMedTotal - Round(@MovQuantAtendida * @MovValorCustoMed, @QtdCasasCusto)                    
                               + Round(@MovQuantAtendida * @AtuValorCustoMed, @QtdCasasCusto),                    
         ValorCustoUltTotal     = ValorCustoUltTotal - Round(@MovQuantAtendida * @MovValorCustoUlt, @QtdCasasCusto)                    
                               + Round(@MovQuantAtendida * @AtuValorCustoUlt, @QtdCasasCusto),                    
         ValorCustoUltRealTotal = ValorCustoUltRealTotal - Round(@MovQuantAtendida * @MovValorCustoUltReal, @QtdCasasCusto)                    
                                 + Round(@MovQuantAtendida * @AtuValorCustoUltReal, @QtdCasasCusto)                    
        where Empresa = @MovEmpresa                    
         and TipoControle = @MovTipoControle                    
         and CodControle = @MovCodControle                    
      end         
     end                    
    end                    
                            
    Set @AtuValorCustoMed = @AuxValorAnterior                    
    Set @AtuValorCustoUlt = @AuxValorUltAnterior                    
    Set @AtuValorCustoUltReal = @AuxValorUltRealAnterior                    
                                                                                         
    Fetch Next From CursorMov Into @MovEmpresa, @MovEmpresaEstoque, @MovNumLancamento,                    
          @MovValorAtual, @MovValorICM, @MovValorPISCOFINS,                    
          @MovQuantAtual, @MovTipoAtualizacaoCusto,                    
          @MovTipoMovimento, @MovFlagMovEstoque,                    
          @MovTipoControle, @MovCodControle, @MovCodPedido, @MovCodPedCompra,                    
          @MovValorCustoMed, @MovValorCustoUlt, @MovValorCustoUltReal,                    
          @MovValorAjusteCusto, @MovValorUnitario, @MovQuantAtendida,                    
          @MovValorApropriacaoCusto, @MovDataMovimento                
   --Fim do Loop do MovEstoque do Produto                    
   end                    
   Close CursorMov                    
   Deallocate CursorMov                    
                                                                     
   If @TipoItens <> 6                    
   begin                    
    Set @AuxValorCustoMed = null                    
    Set @AuxValorCustoUlt = null                    
    Set @AuxValorCustoUltReal = null                    
                                   
    Select Top 1 @AuxValorCustoMed = Mov.ValorCustoMed,                    
          @AuxValorCustoUlt = Mov.ValorCustoUlt,                    
          @AuxValorCustoUltReal = Mov.ValorCustoUltReal                    
     From MovEstoque Mov                    
     Left Join Operacoes Opr on Opr.Codigo = Mov.CodOperacao                    
     Where Mov.EmpresaEstoque = @EmpresaEstoque                    
      And Mov.CodProduto     = @AuxProCodProduto                    
      And Mov.TipoMovimento  = 1                    
      And Mov.FlagMovEstoque = 1                    
      And Opr.FlagCustoMedio = 1                    
     Order By DataMovimento Desc, NumLancamento Desc                    
                                                                     
     Update EstoqueProduto                    
      Set ValorCustoMed     = isnull(@AuxValorCustoMed,0),                    
          ValorCustoUlt     = isnull(@AuxValorCustoUlt,0),                    
          ValorCustoUltReal = isnull(@AuxValorCustoUltReal,0),                    
          StatusTransacao   = 1                    
      Where CodProduto = @AuxProCodProduto                    
        and Empresa = @EmpresaEstoque                    
                  
              
                
     --Eder - 345018                
     --Verifica se existe configuração para utilizar uma outra empresa para calcular custo medio e                
     --para Manter o custo medio em outras empresas (Ex: Galpao GOOP).                 
     if @CmeEmpCusto > 0                
     begin                
       Select @CmeCustoMed = Es.ValorCustoMed,                
              @CmeCustoUlt = Es.ValorCustoUlt,                
              @CmeCustoUltReal = Es.ValorCustoUltReal                
         From EstoqueProduto Es                 
        Where Es.CodProduto = @AuxProCodProduto                
         and Es.Empresa = @CmeEmpPrincipal                
                
       Update EstoqueProduto                    
          Set ValorCustoMed     = isnull(@CmeCustoMed,0),                
              ValorCustoUlt     = isnull(@CmeCustoUlt,0),                    
              ValorCustoUltReal = isnull(@CmeCustoUltReal,0),                    
              StatusTransacao   = 1                    
       Where CodProduto = @AuxProCodProduto                    
         and Empresa = @CmeEmpCusto                
                   
                                   
     end                
    
                        
                      
     --Eder = 365446 
     --Eder = 321038                    
     --Atualiza o preço de custo com o custo médio                    
     If @FlagAtualizarCustoMedioPreco = 1 and isnull(@AuxValorCustoMed,0) > 0 and @TipoItens <> 6
     begin       
       --Gabriella - 409465      
       Select @ValorCotacaoMoeda = Case when Mo.TipoCalculoPreco = 1 and I.ValorCotacaoMoeda > 0
                                        Then I.ValorCotacaoMoeda else 0 end
       From ItemListaPreco I              
       Left Join Moedas Mo on I.CodMoeda <> ''
                    and Mo.Codigo = I.CodMoeda 
       Where I.CodProduto = @AuxProCodProduto                    
         and I.FlagPrincipal = 1                    
         and I.Empresa = @EmpresaListaPreco 
        
       if isnull(@ValorCotacaoMoeda,0) = 0
         Set @ValorCotacaoMoeda = 1      
              
       Update ItemListaPreco                    
          Set ValorCustoBruto = isnull(@AuxValorCustoMed,0),                                        
              --ValorCustoLiquido = dbo.CalculaCustoLiquido(@EmpresaEstoque, isnull(@AuxValorCustoMed,0),                      
              ValorCustoLiquido = dbo.CalculaCustoLiquido(@EmpresaEstoque, isnull(@AuxValorCustoMed,0) * @ValorCotacaoMoeda,                      
                                      PercDesconto1, PercDesconto2, PercDesconto3, PercDesconto4, PercDesconto5,                      
                                      PercAcrescimo1, PercAcrescimo2, PercAcrescimo3, PercFrete,                      
                                      FlagIPIVenda, AliqIPI, PercICMCusto, PercPISCOFINSCusto, PercDescontoAdicional,                      
                                      PercSubTrib, PercAcrescimoInc1, PercAcrescimoInc2, PercAcrescimoInc3,                      
                                      PercFreteInc, PercDescontoNaoInc)                      
         Where CodProduto = @AuxProCodProduto                    
           and FlagPrincipal = 1                    
           and Empresa = @EmpresaListaPreco           
                   
         --365358          
         Update Produtos        
         set TransacaoEmpresas =''        
         where        
         Codigo =@AuxProCodProduto           
                     
                   
               
            
     end           
                      
   end                    
   Else                    
   If @TipoItens = 6                    
   begin                                                       
             
             
--Eder = 365446     
        Set @AtuValorCustoMed = 0

        --Busca o custo  medio da ultima movimentação antes do inventario
        Select Top 1 @AtuValorCustoMed = ValorCustoMed
        From MovEstoque Mov                              
        Left Join Operacoes Opr on Opr.Codigo = Mov.CodOperacao 
        where Mov.EmpresaEstoque = @EmpresaEstoque
          And Mov.CodProduto     = @AuxProCodProduto
          And Mov.TipoMovimento = 1
          And Mov.FlagMovEstoque = 1
          And Mov.DataMovimento  <= @InvDataInventario
          And Opr.FlagCustoMedio = 1
        Order By Mov.DataMovimento Desc, Mov.NumLancamento Desc
             
    
        if (@AtuValorCustoMed is null) 
          Set @AtuValorCustoMed = 0
          
        --Realiza a médida ponderada do inventario anterior e o invntario atual
        --caso nao exista inventario anterior, considera os valores como zero

      Select
       @ValorAux = 
        Case When (coalesce(InvAnt.QuantEstoque,0) + Inv.QuantEstoque) > 0
             Then (coalesce(InvAnt.ValorTotalCustoMed,0) + (Inv.QuantEstoque * @AtuValorCustoMed))--Valor Anterior + Valor Atual
                   / (coalesce(InvAnt.QuantEstoque,0) + Inv.QuantEstoque)   --Quantidade anterior + Quantidade atual
                   * Inv.QuantEstoque                                       --Multiplica para calcular o valor total
             Else 0 End
     From RegistroInventario Inv
          Left Join RegistroInventario InvAnt on InvAnt.CodProduto     =  @AuxProCodProduto
                                             and InvAnt.EmpresaEstoque =  @EmpresaEstoque
                                             and InvAnt.DataInventario =  @DataAnterior
     where Inv.CodProduto     = @AuxProCodProduto
       and Inv.EmpresaEstoque = @EmpresaEstoque
       and Inv.DataInventario = @InvDataInventario

        Update RegistroInventario
           Set ValorTotalCustoMed =  @ValorAux
        where CodProduto     = @AuxProCodProduto
          and EmpresaEstoque = @EmpresaEstoque
          and DataInventario = @InvDataInventario;

      
/* CODIGO ANTIGO                                                      
    --Rafael chamado 255209                    
     if  @DataAux is not null                    
     begin                           
       Select                                                                                 
         @AtuValorCustoMed = case when RI.QuantEstoque > 0 then (RI.ValorTotalCustoMed / RI.QuantEstoque) else 0 end    
       from RegistroInventario RI                                                                                
       where RI.DataInventario =  @DataAnterior                                                                 
         and RI.CodProduto     =  @AuxProCodProduto                                                                 
         and RI.EmpresaEstoque =  @EmpresaEstoque                                                     
                                                   
       if (@AtuValorCustoMed < 0)                                                  
         set @AtuValorCustoMed = 0                                                  
           
     end                                                          
                                                     
     if (@AtuValorCustoMed is null) or(@AtuValorCustoMed=0)                    
     begin                    
                                                           
       Select Top 1                    
           @AtuValorCustoMed = Mov.ValorCustoMed                  
       From MovEstoque Mov                    
       Left Join Operacoes Opr on Opr.Codigo = Mov.CodOperacao                    
       where Mov.EmpresaEstoque = @EmpresaEstoque                    
         And Mov.CodProduto    = @AuxProCodProduto                    
         And Mov.TipoMovimento = 1                                                         
         And Mov.DataMovimento  < = @InvDataInventario                    
         And Opr.FlagCustoMedio = 1                    
         And Opr.TipoMovimento in(0,3)                          
       Order By Mov.DataMovimento Desc, Mov.NumLancamento Desc                    
     end        
    
                                                           
     if (@AtuValorCustoMed is null)                  
       Set @AtuValorCustoMed = 0       
         
                                                     
     Update RegistroInventario                    
       Set ValorTotalCustoMed = Round(isnull(@AtuValorCustoMed, 0) * QuantEstoque, @QtdCasasCusto)    
     Where CodProduto = @AuxProCodProduto                    
       and EmpresaEstoque = @EmpresaEstoque                    
       and DataInventario = @InvDataInventario                 
  */
   end                
             
                                                                                         
   Fetch Next From CursorProduto into @AuxProCodProduto,                    
           @AuxValorAnterior, @AuxValorUltAnterior,                    
           @AuxValorUltRealAnterior, @AuxDataMovimento,                    
           @MovSaldoQtd                    
  End                    
                                                                                         
 Close CursorProduto                    
 Deallocate CursorProduto                    
                                                                           
                                              
end                    
                                              
--Quando Houver algum produto com lote unitario, cria os lotes na tabela temporaria para                                                               
If (@TipoItens <> 6)                    
  and ( Exists(Select *                    
           From TempCalculoCustoMedio T                    
             Left Join Produtos Pro on Pro.Codigo = T.CodProduto                    
           Where T.SqlTimeStamp = @SqlTimeStamp                    
            and Pro.TipoLote = 1                    
            and Pro.FlagLoteUnitario = 1)                    
          --Renato - 280210                    
          or ( (@TipoItens = 1) and (@NFTipoControle = 2) and (@DataAtual =  Convert(datetime, (Convert(Char(10), GetDate(), 103)), 103)) )                    
       )                    
begin                    
 Exec CalcularCustoMedioLote  @SqlTimeStamp, @TipoItens, @EmpresaEstoque,                    
    @Empresa, @NFTipoControle, @NFCodControle, @PedCodPedido,                    
    @PedCompraCodPedido, @LanNumLancamento, @ProCodProdutoIni, @ProCodProdutoFim                    
end                    
                
                                                                        
--Apaga os itens quer foram usados na temporaria                    
Delete From TempCalculoCustoMedio                    
Where SqlTimeStamp = @SQLTimeStamp                    
                
end 

GO

ALTER Trigger  [dbo].[UpdateItemListaPreco] ON [dbo].[ItemListaPreco]    
FOR UPDATE    
AS    
/*********************  
VERSÃO 3.03  
*********************/  
    
--Gabriella - 353832  
If Exists(SELECT * from ConfiguracaoSistema where FlagTransacaoSnapShot = 1)  
  SET TRANSACTION ISOLATION LEVEL READ COMMITTED      
    
declare @QtdCasasVenda numeric(1)    
declare @TipoPreco numeric(1)    
Select Top 1 @QtdCasasVenda = QtdCasasVenda,    
             @TipoPreco = TipoPreco    
From ParamControle     
Order By Empresa    
If @QtdCasasVenda is null    
  Set @QtdCasasVenda = 0    
If @TipoPreco is null    
  Set @TipoPreco = 0    
    
  
Update ItemListaPreco     
   Set FlagPrincipal = 0  
  
  
  From ItemListaPreco, Inserted, Deleted  
  Where ItemListaPreco.CodProduto = Inserted.CodProduto    
    and ItemListaPreco.CodLista <> Inserted.CodLista    
    and Deleted.CodProduto = Inserted.CodProduto    
    and Deleted.CodLista = Inserted.CodLista    
    and Inserted.FlagPrincipal = 1    
    and Deleted.FlagPrincipal = 0    
    and ItemListaPreco.FlagPrincipal = 1    
    and ItemListaPreco.Empresa = Inserted.Empresa  
    
  
Update ItemListaPreco     
   Set FlagPromocao = 0  
  From ItemListaPreco, Inserted, Deleted  
 Where ItemListaPreco.CodProduto = Inserted.CodProduto  
   and ItemListaPreco.CodLista <> Inserted.CodLista  
   and Deleted.CodProduto = Inserted.CodProduto  
   and Deleted.CodLista = Inserted.CodLista  
   and Inserted.FlagPromocao = 1  
   and Deleted.FlagPromocao = 0  
   and ItemListaPreco.FlagPromocao = 1  
   and ItemListaPreco.Empresa = Inserted.Empresa  
  
--370286  
declare @FlagAtualizaOutrasListas smallint  
if not exists (select id from empresas where id ='NORPAN')   
  Set @FlagAtualizaOutrasListas = 1  
else  
  Set @FlagAtualizaOutrasListas = 0  
  
Update ItemListaPreco     
   Set FlagCustoOutrasListas = 0,    
       ValorCustoBruto = Inserted.ValorCustoBruto,    
       PercDesconto1 = Inserted.PercDesconto1,    
       PercDesconto2 = Inserted.PercDesconto2,    
       PercDesconto3 = Inserted.PercDesconto3,    
       PercDesconto4 = Inserted.PercDesconto4,    
       PercDesconto5 = Inserted.PercDesconto5,    
       PercAcrescimo1 = Inserted.PercAcrescimo1,    
       PercAcrescimo2 = Inserted.PercAcrescimo2,    
       PercAcrescimo3 = Inserted.PercAcrescimo3,    
       PercFrete = Inserted.PercFrete,    
       PercICMCusto = Inserted.PercICMCusto,    
       PercDescontoAdicional = Inserted.PercDescontoAdicional,    
       ValorCustoLiquido = Inserted.ValorCustoLiquido,    
       AliqIPI = Inserted.AliqIPI,    
       FlagIPIVenda = Inserted.FlagIPIVenda,    
       --Ronaldo Chamado 391351  
       PercSubTrib = Inserted.PercSubTrib,  
       PercDescontoNaoInc = Inserted.PercDescontoNaoInc,
       --Gabriella - 409465
       CodMoeda = Inserted.CodMoeda,
       ValorCotacaoMoeda = Inserted.ValorCotacaoMoeda,         
       StatusTransacao = 1  
   From ItemListaPreco Item, Inserted  
   Where Item.CodProduto = Inserted.CodProduto  
     and Item.CodLista <> Inserted.CodLista  
     and Inserted.FlagCustoOutrasListas = 1  
     and Item.Empresa = Inserted.Empresa  
--370286  
     and @FlagAtualizaOutrasListas = 1  
    
  
Update ItemListaPreco     
   Set FlagVendaOutrasListas = 0,    
       MargemLucro1 = Case when (@TipoPreco = 0 and Inserted.ValorCustoLiquido > 0 and Inserted.MargemLucro1 > 0    
                                 and Item.ValorCustoLiquido > 0)     
                                 and (Item.ValorCustoLiquido /     
                                      Round((Inserted.ValorCustoLiquido / Inserted.MargemLucro1),@QtdCasasVenda)) < 999    
                           then    
                              Item.ValorCustoLiquido /     
                              Round((Inserted.ValorCustoLiquido / Inserted.MargemLucro1),@QtdCasasVenda)    
                             When (@TipoPreco = 1 and Item.ValorCustoLiquido > 0 and Inserted.MargemLucro1 > 0)     
                                  and (Round((Inserted.ValorCustoLiquido * Inserted.MargemLucro1),@QtdCasasVenda)/ Item.ValorCustoLiquido) < 999     
                             then      
         Round((Inserted.ValorCustoLiquido * Inserted.MargemLucro1),@QtdCasasVenda)    
                                  / Item.ValorCustoLiquido    
                           else 0    
                        End,    
    
       MargemLucro2 = Case when (@TipoPreco = 0 and Inserted.ValorCustoLiquido > 0 and Inserted.MargemLucro2 > 0    
                                and Item.ValorCustoLiquido > 0)     
                                and (Item.ValorCustoLiquido / Round((Inserted.ValorCustoLiquido / Inserted.MargemLucro2),@QtdCasasVenda)) < 999    
                           then    
                              Item.ValorCustoLiquido /     
                              Round((Inserted.ValorCustoLiquido / Inserted.MargemLucro2),@QtdCasasVenda)    
                           When (@TipoPreco = 1 and Item.ValorCustoLiquido > 0 and Inserted.MargemLucro2 > 0)     
                                and (Round((Inserted.ValorCustoLiquido * Inserted.MargemLucro2),@QtdCasasVenda)/Item.ValorCustoLiquido) < 999         
                           then      
                              Round((Inserted.ValorCustoLiquido * Inserted.MargemLucro2),@QtdCasasVenda)    
                                / Item.ValorCustoLiquido    
                           else 0    
                        End,    
       MargemLucro3 = Case when (@TipoPreco = 0 and Inserted.ValorCustoLiquido > 0 and Inserted.MargemLucro3 > 0    
                                 and Item.ValorCustoLiquido > 0)     
                                 and (Item.ValorCustoLiquido / Round((Inserted.ValorCustoLiquido / Inserted.MargemLucro3),@QtdCasasVenda)) < 999    
                           then    
                              Item.ValorCustoLiquido /     
                              Round((Inserted.ValorCustoLiquido / Inserted.MargemLucro3),@QtdCasasVenda)              
                           When (@TipoPreco = 1 and Item.ValorCustoLiquido > 0 and Inserted.MargemLucro3 > 0)     
                                and (Round((Inserted.ValorCustoLiquido * Inserted.MargemLucro3),@QtdCasasVenda)/Item.ValorCustoLiquido) < 999    
                           then      
                              Round((Inserted.ValorCustoLiquido * Inserted.MargemLucro3),@QtdCasasVenda)    
                                / Item.ValorCustoLiquido    
                           else 0    
                        End,    
       MargemLucro4 = Case when (@TipoPreco = 0 and Inserted.ValorCustoLiquido > 0 and Inserted.MargemLucro4 > 0    
                                 and Item.ValorCustoLiquido > 0)     
                                 and (Item.ValorCustoLiquido / Round((Inserted.ValorCustoLiquido / Inserted.MargemLucro4),@QtdCasasVenda)) < 999     
                           then    
                              Item.ValorCustoLiquido /     
                              Round((Inserted.ValorCustoLiquido / Inserted.MargemLucro4),@QtdCasasVenda)    
                           When (@TipoPreco = 1 and Item.ValorCustoLiquido > 0 and Inserted.MargemLucro4 > 0)     
                                and (Round((Inserted.ValorCustoLiquido * Inserted.MargemLucro4),@QtdCasasVenda) / Item.ValorCustoLiquido) < 999    
                           then      
                              Round((Inserted.ValorCustoLiquido * Inserted.MargemLucro4),@QtdCasasVenda)    
                                / Item.ValorCustoLiquido    
                           else 0    
                        End,    
       MargemLucro5 = Case when (@TipoPreco = 0 and Inserted.ValorCustoLiquido > 0 and Inserted.MargemLucro5 > 0    
                                 and Item.ValorCustoLiquido > 0)     
                                and (Item.ValorCustoLiquido / Round((Inserted.ValorCustoLiquido / Inserted.MargemLucro5),@QtdCasasVenda)) < 999    
                           then    
                              Item.ValorCustoLiquido /     
                              Round((Inserted.ValorCustoLiquido / Inserted.MargemLucro5),@QtdCasasVenda)    
   When (@TipoPreco = 1 and Item.ValorCustoLiquido > 0 and Inserted.MargemLucro5 > 0)     
                                and (Round((Inserted.ValorCustoLiquido * Inserted.MargemLucro5),@QtdCasasVenda) / Item.ValorCustoLiquido) < 999     
                           then      
                              Round((Inserted.ValorCustoLiquido * Inserted.MargemLucro5),@QtdCasasVenda)    
                                / Item.ValorCustoLiquido    
                           else 0    
                        End,    
       StatusTransacao = 1    
   From ItemListaPreco Item, Inserted    
   Where Item.CodProduto = Inserted.CodProduto    
     and Item.CodLista <> Inserted.CodLista    
     and Item.Empresa = Inserted.Empresa  
     and Inserted.FlagVendaOutrasListas = 1    
--370286  
     and @FlagAtualizaOutrasListas = 1  
   
Declare @Codigo numeric(7)    
    
declare Cursor1 Cursor Local Fast_Forward for    
    Select Inserted.CodProduto    
      From Inserted, Deleted    
     Where Inserted.CodProduto = Deleted.CodProduto    
       and Inserted.CodLista = Deleted.CodLista    
       and Inserted.NumReferencia <> Deleted.NumReferencia    
    
Open Cursor1    
Fetch Next From Cursor1 Into @Codigo    
While @@Fetch_Status = 0    
Begin    
  Exec QuebraProdutosPesquisa @Codigo, 1    
  Fetch Next From Cursor1 Into @Codigo    
End    
Close Cursor1    
Deallocate Cursor1  

GO

ALTER Trigger  [dbo].[InsertItemListaPreco] ON [dbo].[ItemListaPreco]
FOR INSERT
AS
/*********************
VERSÃO 3.03
*********************/
  
--Gabriella - 353832
If Exists(SELECT * from ConfiguracaoSistema where FlagTransacaoSnapShot = 1)
  SET TRANSACTION ISOLATION LEVEL READ COMMITTED    

declare @QtdCasasVenda numeric(1)
declare @TipoPreco numeric(1)
Select Top 1 @QtdCasasVenda = QtdCasasVenda,
             @TipoPreco = TipoPreco
From ParamControle 
Order By Empresa
If @QtdCasasVenda is null
  Set @QtdCasasVenda = 0
If @TipoPreco is null
  Set @TipoPreco = 0


Update ItemListaPreco 
   Set FlagPrincipal = 0,
       StatusTransacao = 1
   From ItemListaPreco Item, Inserted
   Where Item.CodProduto = Inserted.CodProduto
     and Item.CodLista <> Inserted.CodLista
     and Inserted.FlagPrincipal = 1
     and Item.Empresa = Inserted.Empresa


Update ItemListaPreco 
   Set FlagPromocao = 0,
       StatusTransacao = 1
   From ItemListaPreco Item, Inserted
   Where Item.CodProduto = Inserted.CodProduto
     and Item.CodLista <> Inserted.CodLista
     and Inserted.FlagPromocao = 1
     and Item.Empresa = Inserted.Empresa

--370286
declare @FlagAtualizaOutrasListas smallint
if not exists (select id from empresas where id ='NORPAN') 
  Set @FlagAtualizaOutrasListas = 1
else
  Set @FlagAtualizaOutrasListas = 0

Update ItemListaPreco 
   Set FlagCustoOutrasListas = 0,
       ValorCustoBruto = Inserted.ValorCustoBruto,
       PercDesconto1 = Inserted.PercDesconto1,
       PercDesconto2 = Inserted.PercDesconto2,
       PercDesconto3 = Inserted.PercDesconto3,
       PercDesconto4 = Inserted.PercDesconto4,
       PercDesconto5 = Inserted.PercDesconto5,
       PercAcrescimo1 = Inserted.PercAcrescimo1,
       PercAcrescimo2 = Inserted.PercAcrescimo2,
       PercAcrescimo3 = Inserted.PercAcrescimo3,
       PercFrete = Inserted.PercFrete,
       PercICMCusto = Inserted.PercICMCusto,
       PercDescontoAdicional = Inserted.PercDescontoAdicional,
       ValorCustoLiquido = Inserted.ValorCustoLiquido,
       AliqIPI = Inserted.AliqIPI,
       FlagIPIVenda = Inserted.FlagIPIVenda,
       --Gabriella - 409465
       CodMoeda = Inserted.CodMoeda,
       ValorCotacaoMoeda = Inserted.ValorCotacaoMoeda,         
       StatusTransacao = 1
   From ItemListaPreco Item, Inserted
   Where Item.CodProduto = Inserted.CodProduto
     and Item.CodLista <> Inserted.CodLista
     and Inserted.FlagCustoOutrasListas = 1
     and Item.Empresa = Inserted.Empresa
--370286
     and @FlagAtualizaOutrasListas = 1

Update ItemListaPreco 
   Set FlagVendaOutrasListas = 0,
       MargemLucro1 = Case when (@TipoPreco = 0 and Inserted.ValorCustoLiquido > 0 and Inserted.MargemLucro1 > 0
                                 and Item.ValorCustoLiquido > 0) 
                                 and (Item.ValorCustoLiquido / 
                                      Round((Inserted.ValorCustoLiquido / Inserted.MargemLucro1),@QtdCasasVenda)) < 999
                           then  
                              Item.ValorCustoLiquido / 
                              Round((Inserted.ValorCustoLiquido / Inserted.MargemLucro1),@QtdCasasVenda)
                             When (@TipoPreco = 1 and Item.ValorCustoLiquido > 0 and Inserted.MargemLucro1 > 0) 
                                  and (Round((Inserted.ValorCustoLiquido * Inserted.MargemLucro1),@QtdCasasVenda)/ Item.ValorCustoLiquido) < 999 
                             then    
                                Round((Inserted.ValorCustoLiquido * Inserted.MargemLucro1),@QtdCasasVenda)
                                  / Item.ValorCustoLiquido
                           else 0
                        End,

       MargemLucro2 = Case when (@TipoPreco = 0 and Inserted.ValorCustoLiquido > 0 and Inserted.MargemLucro2 > 0
                                and Item.ValorCustoLiquido > 0) 
                                and (Item.ValorCustoLiquido / Round((Inserted.ValorCustoLiquido / Inserted.MargemLucro2),@QtdCasasVenda)) < 999
                           then  
                     Item.ValorCustoLiquido / 
                              Round((Inserted.ValorCustoLiquido / Inserted.MargemLucro2),@QtdCasasVenda)
                           When (@TipoPreco = 1 and Item.ValorCustoLiquido > 0 and Inserted.MargemLucro2 > 0) 
                                and (Round((Inserted.ValorCustoLiquido * Inserted.MargemLucro2),@QtdCasasVenda)/Item.ValorCustoLiquido) < 999     
                           then    
                              Round((Inserted.ValorCustoLiquido * Inserted.MargemLucro2),@QtdCasasVenda)
                                / Item.ValorCustoLiquido
                           else 0
                        End,
       MargemLucro3 = Case when (@TipoPreco = 0 and Inserted.ValorCustoLiquido > 0 and Inserted.MargemLucro3 > 0
                                 and Item.ValorCustoLiquido > 0) 
                                 and (Item.ValorCustoLiquido / Round((Inserted.ValorCustoLiquido / Inserted.MargemLucro3),@QtdCasasVenda)) < 999
                           then  
                              Item.ValorCustoLiquido / 
                              Round((Inserted.ValorCustoLiquido / Inserted.MargemLucro3),@QtdCasasVenda)          
                           When (@TipoPreco = 1 and Item.ValorCustoLiquido > 0 and Inserted.MargemLucro3 > 0) 
                                and (Round((Inserted.ValorCustoLiquido * Inserted.MargemLucro3),@QtdCasasVenda)/Item.ValorCustoLiquido) < 999
                           then    
                              Round((Inserted.ValorCustoLiquido * Inserted.MargemLucro3),@QtdCasasVenda)
                                / Item.ValorCustoLiquido
                           else 0
                        End,
       MargemLucro4 = Case when (@TipoPreco = 0 and Inserted.ValorCustoLiquido > 0 and Inserted.MargemLucro4 > 0
                                 and Item.ValorCustoLiquido > 0) 
                                 and (Item.ValorCustoLiquido / Round((Inserted.ValorCustoLiquido / Inserted.MargemLucro4),@QtdCasasVenda)) < 999 
                           then  
                              Item.ValorCustoLiquido / 
                              Round((Inserted.ValorCustoLiquido / Inserted.MargemLucro4),@QtdCasasVenda)
                           When (@TipoPreco = 1 and Item.ValorCustoLiquido > 0 and Inserted.MargemLucro4 > 0) 
                                and (Round((Inserted.ValorCustoLiquido * Inserted.MargemLucro4),@QtdCasasVenda) / Item.ValorCustoLiquido) < 999
                           then    
                              Round((Inserted.ValorCustoLiquido * Inserted.MargemLucro4),@QtdCasasVenda)
                                / Item.ValorCustoLiquido
                           else 0
                        End,
       MargemLucro5 = Case when (@TipoPreco = 0 and Inserted.ValorCustoLiquido > 0 and Inserted.MargemLucro5 > 0
                                 and Item.ValorCustoLiquido > 0) 
                                and (Item.ValorCustoLiquido / Round((Inserted.ValorCustoLiquido / Inserted.MargemLucro5),@QtdCasasVenda)) < 999
                           then  
                              Item.ValorCustoLiquido / 
                              Round((Inserted.ValorCustoLiquido / Inserted.MargemLucro5),@QtdCasasVenda)
                           When (@TipoPreco = 1 and Item.ValorCustoLiquido > 0 and Inserted.MargemLucro5 > 0) 
                                and (Round((Inserted.ValorCustoLiquido * Inserted.MargemLucro5),@QtdCasasVenda) / Item.ValorCustoLiquido) < 999 
                           then    
                              Round((Inserted.ValorCustoLiquido * Inserted.MargemLucro5),@QtdCasasVenda)
                                / Item.ValorCustoLiquido
                           else 0
                        End,

       StatusTransacao = 1
   From ItemListaPreco Item, Inserted
   Where Item.CodProduto = Inserted.CodProduto
     and Item.CodLista <> Inserted.CodLista
     and Inserted.FlagVendaOutrasListas = 1
     and Item.Empresa = Inserted.Empresa
--370286
     and @FlagAtualizaOutrasListas = 1



declare Cursor1 Cursor Local Fast_Forward for
    Select CodProduto
      From Inserted
     Where NumReferencia <> ''

Declare @Codigo numeric(7)

Open Cursor1
Fetch Next From Cursor1 Into @Codigo
While @@Fetch_Status = 0
    Begin
         Exec QuebraProdutosPesquisa @Codigo, 1
         Fetch Next From Cursor1 Into @Codigo
    End
Close Cursor1
Deallocate Cursor1

GO





ALTER FUNCTION [dbo].[Calcular_ICM]                                            
(@Empresa numeric(2),                                                                                                                                                                                    
 @CodProduto numeric(7),                                                                                                                                                                                    
 @CodTributacao  char(5),                                                                                                                                                                                    
 @CodEntidade char(7),                                                                                                                                                                                    
 @CodOperacao numeric(5),                                                                                                                                                                                    
 @ValorTotal  decimal(11,2),                                                                                                                                                                                    
 @AcrescimoBaseICM decimal(11,2),                                                                                                                                                                                    
 @AcrescimoBaseSubTrib decimal(11,2),                                                                                                                                                                                
 @RedBaseSubTrib decimal(5,2),                      
 @AliqIPI decimal(4,2),                                                                                                                                                                                    
 @CodClassFiscal varchar(15),                                                                                                                                                                                    
 @FlagEntrada numeric(1),                                                                                                                                                                                        
 @AcrescimoRedVenda decimal(11,2),                                                                                                                                                                                    
 @CodListaPreco numeric(7),                                                                                                                                                                                    
 @AliqICMFixo decimal(4,2),                                                                                                                                                              
 @CodSubTributaria integer,                                                                           
 -- Renato - 278440                                                                                                                     
 --@PerAcrescimoRedCusto decimal(15,8)                                                                        
 @PerRedDespesa decimal(15,8),                                             
 --Gabriella - 333391                                            
 @AcrescimoBaseIPI decimal(11,2)                                            
)                                                                                                                                                                                      
Returns @Campos Table                                                                                                                                                                                    
      (AliqICM decimal(4,2),          
       ValorBaseICM decimal (11,2),                           
       ValorICM decimal (11,2),                          
       ValorIsentoICM decimal(11,2),                         
       ValorOutrasICM decimal(11,2),                               
       ValorBaseSubTrib decimal(11,2),                                                            
       PerReducaoICM decimal(5,2),                                                              
       PerRedBaseSubTrib decimal(5,2),                      
       ValorSubTrib decimal (11,2),                                                                                                    
       ValorBaseSubTribCarga decimal(11,2),                                                                                                              
       ValorSubTribCarga decimal(11,2),                                                                                                                           
       FatorRedCusto decimal (15,8),                                                                                                                  
       FatorRedVenda decimal (7,4),                                                                                                                                      
       NumCFOP char(10),                                                                                                                                      
       AliqPISCOFINS decimal (4,2),                                                                        
       -- Renato - Chamado 272165                                                                        
       ValorBasePisCofins decimal (11,2),                                                                        
       AliqPis decimal (4,2),                                                                
       AliqCofins decimal (4,2),                                                                
       NumCstICM varchar(3),                                                                
       NumCstIPI varchar(2),                                                                
       NumCstPisCofins varchar(2),                                                                
       NumCsosn varchar(3),                                                          
       -- Renato - 297792                                                          
       NatReceitaPisCofins int,                                            
       -- Renato - 332318                                            
       NatBaseCalcCredito smallint,                                            
       --Ronaldo 343696                                
       IndNaturezaFrete smallint,                                
                                     
       --Gabriella - 333391                                                   
       ValorBaseIPI decimal (11,2),                                                                                                                                                                                                                           
       ValorIsentoIPI decimal(11,2),                                                                                                                                                                                    
       ValorOutrasIPI decimal(11,2),                            
         --Renato - 360358                            
       AliqICMSST decimal(5,2),                            
       PercMvaICMSST decimal(5,2),                            
         --Renato - 361650                          
       AliqComplICM Decimal(5,2),                          
       AliqComplPIS Decimal(5,2),                          
       AliqComplCOFINS Decimal(5,2))                                                            
as                                        
                                                                                                      
begin                                                                                                                     
/*********************                                                                                           
   VERSÃO 3.03    
*********************/                                                                                                           
                                                                                  
declare @CodEstadoLeitura char(2)                                             
declare @AliqICM decimal(4,2)                     
declare @ValorBaseICM decimal (11,2)                                     
declare @ValorICM decimal (11,2)                                                                                                                                  
declare @ValorIsentoICM decimal(11,2)                                                         
declare @ValorOutrasICM decimal(11,2)                                                                  
declare @PerReducaoICM decimal(5,2)                                            
declare @ValorBaseSubTrib decimal(11,2)                                                                  
declare @ValorSubTrib decimal (11,2)                                                                                                                                                 
declare @ValorBaseSubTribCarga decimal(11,2)                                                                                                                                                         
declare @ValorSubTribCarga decimal(11,2)                                                                                                                                                     
declare @FatorRedCusto decimal (15,8)                                                                                                                                                    
declare @FatorRedVenda decimal (7,4)                                                                                                                                                
declare @NumCFOP char(10)                                                                                                         
declare @AliqPISCOFINS decimal(4,2)                                                              
declare @NumCstICM varchar(3)                                                                
declare @NumCstIPI varchar(2)                                                                
declare @NumCstPisCofins varchar(2)                                                                
declare @NumCsosn varchar(3)                                                           
--Renato - 297792                                                          
declare @NatReceitaPisCofins Int                                              
--Renato - 332318                                                             
declare @NatBaseCalcCredito SmallInt                                 
--Ronaldo 343696                                
Declare @OprIndNaturezaFrete SmallInt                                            
                                                                                                                                                                         
declare @AEmpMestre char(7)                                                                                                                                                             
declare @VAuxValorIPI decimal(11,2)                                                                                                                                                                                    
declare @AuxCodTributacaoSubTrib Char(5)                                                                     
declare @AuxFlagSubTributaria numeric(1)                                                                                                                                                   
declare @AuxEntidade char(7)                                                                                                                                                              
declare @ValorBaseSubTribDestino decimal(11,2)                                                                                                                           
                                           
declare @CalcBaseSubTrib decimal(11,2)                           
declare @CalcValorSubTrib decimal (11,2)                                         
declare @CalcBaseSubTribDestino decimal(11,2)                                                                         
                                                                                      
declare @ParTipoReducaoICM numeric(1)                                                                                 
declare @ParAliqCPMF decimal(4,2)                                                                                                                              
declare @ParTipoRegimeTributario smallint                                                                
declare @ParAliqICMSimples decimal(4,2)                                                                
                                                                
declare @EntTipoPessoa char(1)                                                                                                                                                              
declare @CidCodEstado char(2)                                                                                                         
declare @EstAliqContrib decimal(4,2)                                                           
declare @EstFlagConvSub numeric(1)                                                                                                                                          
declare @EstAliqInterna decimal(4,2)                                                                                                                                  
                                                                              
declare @CidEmpCodEstado char(2)                                                                                                                                                                            
declare @TriAliqICM decimal(4,2)                                                                               
declare @TriFlagIsentoProdutor numeric(1)                                                                                                                                                                          
declare @TriFlagSubTributaria numeric(1)                                                                                                                                                                                    
declare @TriMargemLucroSubst decimal(5,2)                                                                                                                                      
--Gabriella - 302581                                            
--declare @TriPerReducaoICM decimal(4,2)                                            
declare @TriPerReducaoICM decimal(6,4)                                            
declare @TriPerRedMargem decimal(4,2)                                                                                                                     
declare @TriTipoCFOP numeric(2)                                                                                                                                                          
declare @TriCodTributacaoSubTrib char(5)                                                                                
declare @TriTipoValorNaoTributado numeric(1)                                                                                                                                          
declare @TriPerReducaoSubTrib numeric(6,2)                                                                        
--Rafael chamado 272635                                                                        
declare @TriAliqInternaSubTrib numeric(5,2)          
declare @TriNumCST_ICM smallint                                         
declare @TriNumCST_IPI smallint                                                                
declare @TriNumCSOSN smallint                               
                                                                
declare @ClaFlagSubTributaria numeric(1)                                                              
--408846 declare @ClaAliqPISCOFINS decimal(4, 2)                                                                            
declare @GruFlagSubTributaria numeric(1)                         
                                                                                              
declare @LisPercAcrescimoAdm1 decimal(4,2)                                                       
declare @LisPercAcrescimoAdm2 decimal(4,2)                                                                                   
declare @LisPercAcrescimoAdm3 decimal(4,2)                                                                                                                           
                                                                                                                                                      
declare @SubAliquotaInterna decimal(5, 2)                                                                            
declare @SubMargemLucro decimal(5, 2)                                                                                  
declare @SubPercReducao decimal(5, 2)                                                                                                                                                              
declare @SubIndiceReducao decimal(9, 6)                                                                                                                                            
declare @SubFlagAbaterICM smallint                                                                                
declare @SubFlagSomaIPI smallint                                                                                                                                                        
                                               
declare @OprTipoICM numeric(1)                                                                                                                         
declare @OprTipoIPI numeric(1)                                                                                
declare @OprAliqICMFixo decimal(4,2)                                                                                               
declare @OprPerRedICM decimal(4,2)                                                                                                                                       
declare @OprPerRedMargem decimal(4,2)                                                                                         
declare @OprCFOP1_Normal char(10)                                                                                                                               
declare @OprCFOP1_Normal_NCFora char(10)                                                                                                        
declare @OprCFOP2_Industrializado char(10)                                                                                                                                                                                    
declare @OprCFOP2_Industrializado_NCFora char(10)                                                                                                     
declare @OprCFOP3_SubRevenda char(10)                                                                                                                              
declare @OprCFOP3_SubRevenda_NC char(10)                                                                                                                                      
declare @OprCFOP4_SubRevendaML char(10)                                                                                                                                   
declare @OprCFOP4_SubRevendaML_NC char(10)                                                                                
declare @OprCFOP5_SubFabricacao char(10)                                                                                                                                         
declare @OprCFOP5_SubFabricacao_NC char(10)                                                                              
declare @OprCFOP6_SubFabricacaoML char(10)                                                                                                                
declare @OprCFOP6_SubFabricacaoML_NC char(10)                                                               
declare @OprCFOP7_Importado char(10)                         
declare @OprCFOP_Servico    char(10)                                                  
declare @OprCFOP_Servico_NCFora char(10)                                                                                                   declare @OprCFOP9_Petroleo varchar(10)                                                                             
  
                     
declare @OprCFOP9_Petroleo_NC varchar(10)                                                                                                                                                             
--408846 declare @OprFlagCalcPIS_COFINS numeric(1)                                                                                                                                                                                    
declare @OprFlagDefaultLancamentoOutras numeric(1)                                                                          
declare @OprFlagSubTribIPI numeric(5)                                                                                                                 
declare @OprTipoMovimento smallint                                                                                                                                                                        
declare @OprTipoSubTributaria smallint                                                            
--Eder - Chamado 262460                                                                                
declare @OprTipoSubTributariaCarga smallint                                                                                     
--Eder - 303720                                                            
declare @OprFlagIPISobrePisCofins smallint                                             
--Gabriella - 256424                                            
declare @OprFlagIPISobreBaseICM smallint                                                             
declare @ProOrigem smallint                                                                
--MARCELO - CHAMADO 192283                                        
declare @RegiaoDestino varchar(10)                                                                                                                                                                                    
declare @RegiaoDestinoLeitura varchar(10)                                                                                                                                                                                
--Eder - Chamado 243637                                                                                               
declare @RegiaoOrigem varchar(10)                                                                                        
--Eder - Chamado 243557                                                                     
declare @EmpId varchar(15)                                                 
                                                                                            
--JALDO - CHAMADO 248899                          
--JALDO - CHAMADO 243556                                                                                                
--declare @TipoConsideraIPICalculoICM int                                                                             
                                                       
--Eder - 303720                                                                        
declare @AcrDespesasPisCOFINS numeric(11,2)                                                         
-- Renato - Chamado 272165                                                                          
declare @ValorBasePisCofins numeric(11,2)                                                                        
declare @AliqPis numeric(4,2)                                                                     
declare @AliqCofins numeric(4,2)                                                                       
-- Renato - 278440                                                            
declare @FlagDeduzirDespNaoInclNaMargem SmallInt                                                                        
-- Renato - 290579                                                                      
declare @PercSubTribCusto decimal(5,2)                            
declare @PercICMCusto decimal(5,2)                                                        
--Ronaldo Chamado 313933                          
declare @RegTribPercIvaSimplicado decimal(5,2)                                                                                  
--Ronaldo Chamado 317536                                            
declare @TriFlagPrevalecerAliqIcm SmallInt                                            
--Gabriella - 333391                                                 
declare @ValorBaseIPI decimal (11,2)                                                
declare @ValorIsentoIPI decimal(11,2)                                                                                                                                                       
declare @ValorOutrasIPI decimal(11,2)                                            
declare @TriTipoValorNaoTributadoIPI numeric(1)                                             
-- Renato - 341779                                                         
declare @OprFlagICMSSobreServicos SmallInt                              
                          
--Renato - 361650                          
declare @TriAliqComplICM Decimal(5,2)                          
declare @AliqComplPIS Decimal(5,2)                          
declare @AliqComplCOFINS Decimal(5,2)                      
--Ronaldo chamado 372149                    
Declare @FlagConsiderarSomentePercRedST int                    
                                     
--389093  
declare @ClaMVABaseEntrada decimal (5,2)  
declare @MVA decimal(18,8)  

--408846
declare @TipoMargemLucro smallint
declare @LisPercDesconto1 decimal(4,2)
declare @LisPercDesconto2 decimal(4,2)
declare @LisPercDesconto3 decimal(4,2)
declare @LisPercDesconto4 decimal(4,2)
declare @LisPercDesconto5 decimal(4,2)
declare @LisPercAcrescimo1 decimal(4,2)
declare @LisPercAcrescimo2 decimal(4,2)
declare @LisPercAcrescimo3 decimal(4,2)
declare @LisValorCustoBruto decimal (13,4)
declare @LisValorCustoLiquido decimal (13,4)
declare @ValorCustoCalc decimal (13,4)
declare @ValorICMCustoCalc decimal (13,2)
declare @TipoMargemLiquida smallint
--408846
declare @ValorPIS decimal(11,2)
declare @ValorCOFINS decimal(11,2)
  
                                                                                             
set @VAuxValorIPI = 0                                                                                                                
set @AliqICM = 0                                                                                                                                    
set @ValorBaseICM = 0                                                                                 
set @ValorICM = 0                                                                                                                                    
set @ValorIsentoICM = 0                                                                                                 
set @ValorOutrasICM = 0                   
set @ValorBaseSubTrib = 0                                                                                               
set @ValorSubTrib = 0                                         
set @ValorBaseSubTribCarga = 0                                                            
set @ValorSubTribCarga = 0                                                               
set @FatorRedCusto = 0                                                             
set @FatorRedVenda = 0                                                                                                         
set @NumCFOP = ''                                                                                                         
Set @AliqPISCOFINS = 0                                                                          
                                                                   
--Renato - Chamado 272165                                                                                         
set @ValorBasePisCofins = 0                                                                        
set @AliqPis = 0                                                                        
set @AliqCofins = 0                                                                             
                                                   
set @AEmpMestre = 'M' + Replicate('0',(6 - Len(@Empresa))) + Cast(@Empresa as varchar)                                            
                                            
--Gabriella - 333391                                              
set @ValorBaseIPI = 0                                                                                                         
set @ValorIsentoIPI = 0                                            
set @ValorOutrasIPI = 0                                            
                                        
--JALDO - CHAMADO 353913                                  
set @CalcValorSubTrib = 0                                  
set @CalcBaseSubTrib = 0                                                               
                              
--Eder - Chamado 243557                                                                                            
Select @EmpId = Id From Empresas                                                                                     
Where Codigo = @Empresa                                                                                            
                                    
select
  @ParTipoReducaoICM=TipoReducaoICM,
  @ParAliqCPMF=AliqCPMF,
  --Eder - Chamado 295853
  @ParTipoRegimeTributario=TipoRegimeTributario,
  @ParAliqICMSimples=AliqICMSimples,
  --408846
  @TipoMargemLucro = TipoMargemLucro
From ParamControle
where Empresa=@Empresa
                                                                                                      
If (@ParTipoReducaoICM is null)                                                                                                                                                                                    
   Set @ParTipoReducaoICM = 0                                                
If (@ParAliqCPMF is null)                                                                                      
   Set @ParAliqCPMF = 0                                                                            
If (@ParTipoRegimeTributario is null)                                                                
   Set @ParTipoRegimeTributario = 0                                                                 
If (@ParAliqICMSImples = 0)                                                                
   Set @ParAliqICMSImples = 0
if (@TipoMargemLucro is null)   
  Set @TipoMargemLucro = 0

--Renato - 278440                                                                       
Select @FlagDeduzirDespNaoInclNaMargem = FlagDeduzirDespNaoInclNaMargem,
    --408846
  @TipoMargemLiquida = TipoMargemLiquida
From ConfiguracaoSistema                                                                                                                                                     
                                                  
                                                                                                                   
select @CidEmpCodEstado=Cidades.CodEstado,                                                                                        
       --Eder - Chamado 243637                                                                                        
  @RegiaoOrigem=Est.RegiaoDestino                                                                       
  from Entidades                                                                   
  Left Join Cidades on Cidades.Codigo = Entidades.CodCidade                                                                                      
  Left Join Estados Est on Est.CodOrigem = Cidades.CodEstado                 
                    and Est.CodDestino = Cidades.CodEstado                                                                                        
 where Entidades.Codigo = @AEmpMestre                                                
                                                                                                                                         
                                                                                
select @EntTipoPessoa=TipoPessoa,                                                                                                      
       @CidCodEstado=Cidades.CodEstado,                                                                               
       @CodEstadoLeitura=Cidades.CodEstado                                                                
       --JALDO - CHAMADO 243556                                                              
       --JALDO - CHAMADO 243556                                                                                            
       --@TipoConsideraIPICalculoICM=TipoConsideraIPICalculoICM                                                                                                
       from Entidades                                                                                
       Left Join Cidades on Cidades.Codigo = Entidades.CodCidade                                                  
       where Entidades.Codigo = @CodEntidade                                                                                                                       
                                                                                 
If isnull((Select FlagICMOrigem From Operacoes Where Codigo = @CodOperacao),0) = 1                                     
   Set @CodEstadoLeitura=@CidEmpCodEstado                                                                                                                                                         
                                                                                                    
                                                                                                                         
--MARCELO - CHAMADO 192283                                                                                                
select                                                                                                                   
  @RegiaoDestino = RegiaoDestino                                                                                             
from Estados                                                                                                          
where CodOrigem = @CidEmpCodEstado                                                                                                                  
  and CodDestino = @CidCodEstado                                                          
                                                                                         
if (@CodEstadoLeitura <> @CidEmpCodEstado)                                                                                                      
begin                                                                                                                  
  select                         
    @RegiaoDestinoLeitura = RegiaoDestino                                                                                                                  
  from Estados                                                                                                                  
  where CodOrigem = @CodEstadoLeitura                                                                                        
    and CodDestino = @CidCodEstado                                                                                                                  
  -- Eder - Chamado 269443                                                                              
  If @RegiaoDestinoLeitura is null                                                                              
     set @RegiaoDestinoLeitura = @RegiaoDestino                         
end                                                                                
else                                                                                                                  
begin                                                                                                                  
  set @RegiaoDestinoLeitura = @RegiaoDestino                                                 
end                                                                                                                  
                                           
                                                                                                                                                                     
select                                                                                                     
    --MARCELO - CHAMADO 116008                                                                                                             
--    @EstAliqContrib=EstSai.AliqContrib,                                                                                                                                                                     
    @EstAliqContrib = Case When @FlagEntrada = 1 and EstSai.AliqContribCompra > 0 and Oper.TipoMovimento <> 1                                                    
                           then EstSai.AliqContribCompra --ENTRADA POR COMPRA                                                                                                                                                              
                           When @FlagEntrada = 0 and EstSai.AliqContribCompra > 0 and Oper.TipoMovimento = 1                                                                                                       
                           then EstSai.AliqContribCompra --SAIDA POR DEVOLUCAO                                                                 
              Else EstSai.AliqContrib End,                                            
    @EstFlagConvSub=EstSai.FlagConvSub,                                                                                                                                            
-- Isaac - Chamado 191748                          
--  @EstAliqInterna= Case When @FlagEntrada = 0 then EstSai.AliqInterna Else EstEnt.AliqInterna End                                                               
-- Eder - Chamado 219012                                                                                                  
--  @EstAliqInterna=   Case When @FlagEntrada = 0 then EstSai.AliqInterna                                                                                                                      
--  When @FlagEntrada = 1 and Oper.tipomovimento = 1 then EstSai.AliqInterna                                                                                    
--                     Else EstEnt.AliqInterna End                                                                                                                      
    @EstAliqInterna=  Case When @FlagEntrada = 0 and Oper.TipoMovimento <> 1 then EstSai.AliqInterna                                                                                                                      
                            When @FlagEntrada = 1 and Oper.tipomovimento = 1 then EstSai.AliqInterna                                                       
                       Else EstEnt.AliqInterna End                                                                  
from Entidades                                                                 
  Left Join Cidades on Cidades.Codigo = Entidades.CodCidade                                                                                            
  Left Join Estados EstSai on EstSai.CodOrigem = @CidEmpCodEstado                                                                              
                   and EstSai.CodDestino = @CodEstadoLeitura                            
  Left Join Estados EstEnt on EstEnt.CodOrigem = @CidEmpCodEstado                                                                                        
                          and EstEnt.CodDestino = @CidEmpCodEstado                                                                                                                                                                                     
  --MARCELO - CHAMADO 116008                                                                                                                         
  Left Join Operacoes Oper on Oper.Codigo = @CodOperacao                                                                                                                                                       
where Entidades.Codigo = @CodEntidade                                                                                                          
                                                                                                        
If (@EstAliqContrib is null)                                               
   Set @EstAliqContrib = 0                                                                  
If (@EstFlagConvSub is null)                                                                                     
   Set @EstFlagConvSub = 0                                         
If (@EstAliqInterna is null)                                                       
   Set @EstAliqInterna = 0                                                                                                                                                                                    
                                      
                                                                                               
set @ClaFlagSubTributaria = 1                                                            
--408846 Set @ClaAliqPISCOFINS = 0                                                                                 
                                                       
If ltrim(@CodClassFiscal) <> ''                                                                                                                                       
begin                                                     
  Select @ClaFlagSubTributaria = FlagSubTributaria,                                                                                                                       
--408846    @ClaAliqPISCOFINS = AliqPISCOFINS,  
--389093  
         @ClaMVABaseEntrada = MVABaseEntrada  
    From ClassFiscais                                                
    Where Codigo=@CodClassFiscal                                                                
end  
  
If (@ClaFlagSubTributaria is null)                                                                                                                                                
  Set @ClaFlagSubTributaria = 1                                                                                                                   
--408846 If (@ClaAliqPISCOFINS is null)                                                                                
--408846   Set @ClaAliqPISCOFINS = 0                                                                                         
if @ClaMVABaseEntrada is null  
  Set @ClaMVABaseEntrada = 0  
                                   
                                             
select @OprTipoICM                      = TipoICM,                                                                                                                                                                                    
       @OprTipoIPI                      = TipoIPI,                                                                                                          
       @OprAliqICMFixo                  = AliqICMFixo,                                                                                                    
       @OprPerRedICM                    = PerRedICM,                                                                                                                                                                                    
       @OprPerRedMargem                 = PerRedMargem,                                      
       @OprCFOP1_Normal                 = CFOP1_Normal,                                                                                        
       @OprCFOP1_Normal_NCFora          = CFOP1_Normal_NCFora,                                                                                                                                                                                    
       @OprCFOP2_Industrializado        = CFOP2_Industrializado,                               
       @OprCFOP2_Industrializado_NCFora = CFOP2_Industrializado_NCFora,                                                             
       @OprCFOP3_SubRevenda             = CFOP3_SubRevenda,                                                                                                                                                                                    
       @OprCFOP3_SubRevenda_NC          = CFOP3_SubRevenda_NC,                                                  
       @OprCFOP4_SubRevendaML           = CFOP4_SubRevendaML,                                                                                                                                  
       @OprCFOP4_SubRevendaML_NC        = CFOP4_SubRevendaML_NC,                            
       @OprCFOP5_SubFabricacao          = CFOP5_SubFabricacao,                                                                                                                       
       @OprCFOP5_SubFabricacao_NC       = CFOP5_SubFabricacao_NC,                                                                 
       @OprCFOP6_SubFabricacaoML        = CFOP6_SubFabricacaoML,                                                                                                                         
       @OprCFOP6_SubFabricacaoML_NC     = CFOP6_SubFabricacaoML_NC,                                                                                                 
       @OprCFOP7_Importado              = CFOP7_Importado,                                                                                                                                
       @OprCFOP_Servico                 = CFOP_Servico,                                                                                          
       @OprCFOP_Servico_NCFora          = CFOP_Servico_NCFora,                                                                                                                                                                
--408846       @OprFlagCalcPIS_COFINS           = FlagCalcPIS_COFINS,                                                                                                  
       @OprFlagDefaultLancamentoOutras  = FlagDefaultLancamentoOutras,                             
       @OprCFOP9_Petroleo               = CFOP9_Petroleo,                                                              
       @OprCFOP9_Petroleo_NC            = CFOP9_Petroleo_NC,                                                                                                                                                
       @OprFlagSubTribIPI               = FlagSubTribIPI,                                                                  
       @OprTipoMovimento                = TipoMovimento,                                                                                                                                                        
       @OprTipoSubTributaria            = TipoSubTributaria,                                                                                
       --Eder - Chamado 262460                                                
       @OprTipoSubTributariaCarga       = TipoSubTributariaCarga,                                                            
       --Eder 303720                              
       @OprFlagIPISobrePisCofins        = FlagIPISobrePisCofins,                                              
       --Gabriella - 256424                                            
       @OprFlagIPISobreBaseICM          = FlagIPISobreBaseICM,                                               
       -- Renato - 341779                                                         
       @OprFlagICMSSobreServicos        = FlagICMSSobreServicos,                                  
       --Ronaldo 343696                                
       @OprIndNaturezaFrete             = IndNaturezaFrete                                
  From Operacoes                                                                                                                                            
 where Codigo = @CodOperacao                                                                                                                         
                        
                                                                                                                         
If (@OprTipoICM is null)                                                                                                                      
 Set @OprTipoICM = 0                                                                                                                                                         
If (@OprTipoIPI is null)                                                                                                    
   Set @OprTipoIPI = 0                      
If (@OprAliqICMFixo is null)                                                                 
   Set @OprAliqICMFixo = 0                                                                                                                                                                    
If (@OprPerRedICM is null)                                                                                                                                                     
   Set @OprPerRedICM = 0                                                                                
If (@OprPerRedMargem is null)                                         
   Set @OprPerRedMargem = 0                                                                                                                                                       
/*408846 
If (@OprFlagCalcPIS_COFINS is null)                                                                                                                                                          
  Set @OprFlagCalcPIS_COFINS = 0                                                            
If @OprFlagCalcPIS_COFINS = 1                                                                                                                                                                                    
  Set @AliqPISCOFINS = @ClaAliqPISCOFINS*/
If (@OprFlagDefaultLancamentoOutras is null)                                                                                                         
   Set @OprFlagDefaultLancamentoOutras = 0                                                                                                                                                         
If (@OprFlagSubTribIPI is null)                                                                                                                                              
   Set @OprFlagSubTribIPI = 0                                                                                      
If (@OprTipoSubTributaria is null)                                                                                             
   Set @OprTipoSubTributaria = 0                                                                                    
If (@OprTipoMovimento is null)                                                                                                                        
   Set @OprTipoMovimento = 0                                              
--Eder - Chamado 262460                                                                                
If (@OprTipoSubTributariaCarga is null)                                                                
   Set @OprTipoSubTributariaCarga = 0                                                             
if (@OprFlagIPISobrePisCofins is null)                                                            
   Set @OprFlagIPISobrePisCofins = 0                                             
--Gabriella - 256424                                            
if (@OprFlagIPISobreBaseICM is null)                                                            
   Set @OprFlagIPISobreBaseICM = 0                                                 
                                                                                                                               
Set @GruFlagSubTributaria = 1                                                       
Select @GruFlagSubTributaria = Gru.FlagSubTributaria,                                                                
     @ProOrigem = Pro.Origem               
  From Produtos Pro                                                                 
  Left Join Grupos Gru on Gru.Codigo = Pro.CodGrupo                                                                
 Where Pro.Codigo = @CodProduto                                                                
                                                                
If (@GruFlagSubTributaria is null)                                                                           
   Set @GruFlagSubTributaria = 1                                                                                                                                                                                    
if (@ProOrigem is null)                                                                
   Set @ProOrigem = 0                                                                
                                                                                                             
                                                                
           
                        
Select 
  @LisPercAcrescimoAdm1=Ilp.PercAcrescimoAdm1,
  @LisPercAcrescimoAdm2=Ilp.PercAcrescimoAdm2,
  @LisPercAcrescimoAdm3=Ilp.PercAcrescimoAdm3,
  --Renato - 290579
  @PercSubTribCusto = Ilp.PercSubTrib,
  @PercICMCusto   = Ilp.PercICMCusto,
  --408846
  @LisPercDesconto1 = Ilp.PercDesconto1,
  @LisPercDesconto2 = Ilp.PercDesconto2,
  @LisPercDesconto3 = Ilp.PercDesconto3,
  @LisPercDesconto4 = Ilp.PercDesconto4,
  @LisPercDesconto5 = Ilp.PercDesconto5,
  @LisPercAcrescimo1 = Ilp.PercAcrescimo1,
  @LisPercAcrescimo2 = Ilp.PercAcrescimo2,
  @LisPercAcrescimo3 = Ilp.PercAcrescimo3,
  @LisValorCustoBruto = Ilp.ValorCustoBruto,
  @LisValorCustoLiquido = Ilp.ValorCustoLiquido
From ItemlistaPreco Ilp                                                                                                                                                         
  Left Join Empresas Emp on Emp.Codigo = @Empresa                                                                                                                    
Where Ilp.CodLista=@CodListaPreco                                                                                                           
  and Ilp.CodProduto=@CodProduto                                                                                                  
  and Ilp.Empresa = Emp.EmpresaListaPreco                                                                                                              
                                                                                                                                                                  
If (@LisPercAcrescimoAdm1 is null)                                                                                                                                                             
  Set @LisPercAcrescimoAdm1 = 0                                                                                                                              
If (@LisPercAcrescimoAdm2 is null)                                                            
  Set @LisPercAcrescimoAdm2 = 0                                                                                                                                                                                    
If (@LisPercAcrescimoAdm3 is null)                                                                                                                                        
  Set @LisPercAcrescimoAdm3 = 0                                                                       
                                                                           
                                                                                                                                                         
select @TriAliqICM=AliqICM,                                                                       
       @TriFlagIsentoProdutor=FlagIsentoProdutor,                                                                                             
@TriFlagSubTributaria=FlagSubTributaria,                                                                                                                                   
       @TriMargemLucroSubst=MargemLucroSubst,                                                                                                                                       
       @TriPerReducaoICM=PerReducaoICM,                                                                                                                                                              
       @TriPerRedMargem=PerRedMargem,                                                              
       @TriTipoCFOP=TipoCFOP,                                                                                                                                                    
       @TriCodTributacaoSubTrib=CodTributacaoSubTrib,                                                                                                                                                                           
       @TriTipoValorNaoTributado=TipoValorNaoTributado,                                                                                  
       @TriPerReducaoSubTrib = PerReducaoSubTrib,                                                                        
       --Rafael chamado 272635                                                                        
       @TriAliqInternaSubTrib= AliqInternaSubTrib,                                                                
       @TriNumCST_ICM = NumCST_ICM,                                                                
       @TriNumCST_IPI = NumCST_IPI,                                                                
       @TriNumCSOSN = NumCSOSN,                                            
       --Ronaldo Chamado 317536                                            
       @TriFlagPrevalecerAliqIcm = flagPrevalecerAliqIcm,                                            
       --Gabriella - 333391                          
       @TriTipoValorNaoTributadoIPI = TipoValorNaoTributadoIPI,                             
       --Renato - 361650                          
       @TriAliqComplICM = AliqComplICM,                            
       --Ronaldo Chamado 372149                    
       @FlagConsiderarSomentePercRedST = FlagConsiderarSomentePercRedST                                                         
  From Tributacoes                                                                                                                                                                                    
 Where Codigo=@CodTributacao                                                                                                                    
   and IdLeitura = dbo.LeituraTributacao(@CodTributacao,@CodEntidade, @CodOperacao, @AEmpMestre)                                                                      
                                                                                                           
Set @AuxEntidade = @CodEntidade                                                                                                                                                                             
                                  
                                                                                                                                                                             
If (@FlagEntrada = 1) and                                                                                                                                                                    
   ((Select FlagSubTribEntradaEstado From ParamControle Where Empresa=@Empresa) = 1)                                                                                                                                
begin                                                                                                                                                                                    
  select @AuxFlagSubTributaria=FlagSubTributaria,                                                                                                                                                                              
         @AuxCodTributacaoSubTrib=CodTributacaoSubTrib                                                             
    From Tributacoes                                                                                                                                                                                    
    Where Codigo=@CodTributacao                                                                              
      and IdLeitura = dbo.LeituraTributacao(@CodTributacao, @AEmpMestre, @CodOperacao, @AEmpMestre)                                              
  If @AuxFlagSubTributaria is null                                                      
     Set @AuxFlagSubTributaria = 0                                                                                                                                                         
  If @AuxCodTributacaoSubTrib is null                                                                                                     
     Set @AuxCodTributacaoSubTrib = ''                                                 
  If (@AuxFlagSubTributaria = 1) and (@AuxCodTributacaoSubTrib <> '')                                                                                                                                                                    
  begin                                                                                                                         
    Set @TriCodTributacaoSubTrib = @AuxCodTributacaoSubTrib                                                                                                                                              
    Set @TriFlagSubTributaria =  @AuxFlagSubTributaria                                                                 
    Set @AuxEntidade = @AEmpMestre                           
  end                                                                              
end                                                                                           
                                                                                                                                                                                    
If (@TriCodTributacaoSubTrib <> '') and                                                                       
   (@TriFlagSubTributaria = 1) and                                                 
   (@ClaFlagSubTributaria = 1) and                                    
   (@GruFlagSubTributaria = 1) and                                                                                      
   ((@FlagEntrada = 0)  or                                                                                                                                                          
    (@FlagEntrada = 1 and (Select FlagSubTribEntradaEstado From ParamControle Where Empresa=@Empresa) = 1)                                                                                                                                                    
  
   )                                                       
begin                                                                                                                  
  select @TriAliqICM=AliqICM,                                                                                                                               
         @TriFlagIsentoProdutor=FlagIsentoProdutor,                                                                                                                                             
         @TriFlagSubTributaria=FlagSubTributaria,                                                                                
         @TriMargemLucroSubst=MargemLucroSubst,                                                            
         @TriPerReducaoICM=PerReducaoICM,                                                                                                                                                                                   
         @TriPerRedMargem=PerRedMargem,                                                                                                                                      
         @TriTipoCFOP=TipoCFOP,                                                                                                                   
         @TriCodTributacaoSubTrib=CodTributacaoSubTrib,                                                            
         @TriTipoValorNaoTributado=TipoValorNaoTributado,                                                                          
         @TriPerReducaoSubTrib = PerReducaoSubTrib,                                                      
         --Rafael chamado 272635                                 
         @TriAliqInternaSubTrib = AliqInternaSubTrib,                                                                
         @TriNumCST_ICM = NumCST_ICM,                                                                
         @TriNumCST_IPI = NumCST_IPI,                           
         @TriNumCSOSN = NumCSOSN,                                              
         --Gabriella - 333391                                            
         @TriTipoValorNaoTributadoIPI=TipoValorNaoTributadoIPI,                            
         --Renato - 361650                          
         @TriAliqComplICM = AliqComplICM                                                                        
   From Tributacoes                                                                                
    Where Codigo=@TriCodTributacaoSubTrib                                                                                                                                             
and IdLeitura = dbo.LeituraTributacao(@TriCodTributacaoSubTrib,@AuxEntidade, @CodOperacao, @AEmpMestre)                                                                     
  Set @CodTributacao = @TriCodTributacaoSubTrib                                                            
end                                                                                   
                                                                                                                      
If (@TriAliqICM is null)                                                                                                                   
   Set @TriAliqICM = 0                                                                              
If (@TriFlagIsentoProdutor is null)                                                                                                                                  
   Set @TriFlagIsentoProdutor = 0                                                                                                                                    
If (@TriFlagSubTributaria is null)                                                        
   Set @TriFlagSubTributaria = 0                                                                                                                    
If (@TriMargemLucroSubst is null)                                                                                                                                                                                    
   Set @TriMargemLucroSubst = 0                                                                                                                                                                                    
If (@TriPerReducaoICM is null)                                                                                                                                                                                    
  Set @TriPerReducaoICM = 0                                                                                                                                      
If (@TriPerRedMargem is null)                                         
   Set @TriPerRedMargem = 0                                                                                                                                          
If (@TriTipoCFOP is null)                                                                                                                                              
   Set @TriTipoCFOP = 0                                                                                      
If (@TriCodTributacaoSubTrib is null)                                                          
   Set @TriCodTributacaoSubTrib = ''                                                                                                                                                                                    
If (@TriPerReducaoSubTrib is null)                                                                          
   Set @TriPerReducaoSubTrib = 0                                                                         
--Rafael chamado 272635                                                                        
if (@TriAliqInternaSubTrib is null)                         
   Set @TriAliqInternaSubTrib = 0                               
if @TriNumCST_ICM is null                                                                
  Set @TriNumCST_ICM = 0                                                                
if @TriNumCST_IPI is null                                                                
  Set @TriNumCST_IPI = 0                                                                
if @TriNumCSOSN is null                                                                
  Set @TriNumCSOSN = 0                                                                 
if @TriAliqComplICM is null                        
  Set @TriAliqComplICM = 0                        
                                                              
If (@TriTipoValorNaoTributado is null)                                                                                                              
begin                                                                                                                                  
  if (@CodProduto = 8888888)                                                     
    Set @TriTipoValorNaoTributado = 1                                                                                                                                  
  else                                              
    Set @TriTipoValorNaoTributado = 0                                                                                                                                  
end                                               
                                            
--Gabriella - 333391           
If (@TriTipoValorNaoTributadoIPI is null)                                                                                                            
begin                                                                                            
  if (@CodProduto = 8888888)                                                                                                                              
    Set @TriTipoValorNaoTributadoIPI = 1                                                                                                                                  
  else                                              
    Set @TriTipoValorNaoTributadoIPI = 0                                                                                                                                  
end                                                                         
--Gabriella - 360511                            
--Se não zerar e na tributação estiver zero o item continuará com o perc. de redução de st                            
Set @RedBaseSubTrib = 0                            
                                                                         
--Eder Chamado 271756                              
If @TriPerReducaoSubTrib <> 0                                                        
  Set @RedBaseSubTrib = @TriPerReducaoSubTrib                                         
    
--389093  
if  (@ClaMVABaseEntrada <> 0) and   
((@FlagEntrada = 1 and @OprTipoMovimento <> 1) or  (@FlagEntrada = 0 and @OprTipoMovimento = 1))  
  Set @MVA = @ClaMVABaseEntrada  
else  
  Set @MVA = @TriMargemLucroSubst  
                                         
                                        
--JALDO/RONALDO - CHAMADO 309941                                                             
--If @FlagEntrada = 0                                                                                                                                                           
If (@FlagEntrada = 0 or (@FlagEntrada = 1 and @OprTipoMovimento = 1))                                                          
   and @MVA <> 0                                                                                                                                                                                     
   and Exists(Select Codigo From Tributacoes                                                  
               Where EstadoOrigem=@CodEstadoLeitura                                                               
        and Codigo=@CodTributacao                                                                                                             
                 --MARCELO - CHAMADO 192283                                                                                          
--                 and EstadoDestino=@CodEstadoLeitura                                                                                                                      
          and RegiaoDestino = @RegiaoDestinoLeitura                                                                                                      
                 and AliqICM > 0)                                                                                                                                                                                    
begin                                                                                                                                    
  Select Top 1 @EstAliqInterna=AliqICM,                                                                  
               --MARCELO - CHAMADO 214200                                                                             
               --@RedBaseSubTrib=PerReducaoICM                                                    
                                   
               --Ronaldo Chamado 372149                    
               --@RedBaseSubTrib = Case When @RedBaseSubTrib = 0 Then PerReducaoICM Else @RedBaseSubTrib End                                      
               @RedBaseSubTrib = Case When @RedBaseSubTrib = 0 and @FlagConsiderarSomentePercRedST = 0                    
                                        Then PerReducaoICM                     
                                        Else @RedBaseSubTrib End                                      
  From Tributacoes                                         
  Where EstadoOrigem=@CodEstadoLeitura                                                                                
     and Codigo=@CodTributacao                                                                                                                    
     --MARCELO - CHAMADO 192283                                                                                      
--     and EstadoDestino=@CodEstadoLeitura                                                                                                                                                            
     and RegiaoDestino = @RegiaoDestinoLeitura                                     
     --Eder - 320407                                            
     and AliqICM > 0                                            
   Order By TipoPessoa                       
end                                                                                                               
If (@RedBaseSubTrib is null)                                                                                                              
   Set @RedBaseSubTrib = 0                                        
                                                                                                                                                                   
--Gabriella - 381216                                                                     
--Rafael chamado 272635                                                                       
--Sobrepoe a aliquota encontrada, se for informada na tributação                                                
/*If @TriAliqInternaSubTrib <> 0                                                                     
  Set @EstAliqInterna = @TriAliqInternaSubTrib*/                    
                                      
If @FlagEntrada = 1                                                                                                                                     
   --Eder - Chamado 184973                                                                                             
   and @OprTipoMovimento <> 1                                                      
   and @MVA <> 0                       
   --Ronaldo Chamado 372149                    
   --364660                         
   --and @RedBaseSubTrib <> 999.99                      
   and Exists(Select Codigo From Tributacoes                                                                                                                                                                                    
               Where EstadoOrigem=@CidEmpCodEstado                                                                                                                                        
                 and Codigo=@CodTributacao                                                                                               
               --MARCELO - CHAMADO 192283                                                                                                                  
--               and EstadoDestino=@CidEmpCodEstado                                                                                         
               --Eder - Chamado 243637                                                                                        
               --and RegiaoDestino = @RegiaoDestino                                                                                        
                 and RegiaoDestino = @RegiaoOrigem                                                                                        
                 and AliqICM > 0)                                                                                                                                        
begin                                                                            
  Select Top 1 @EstAliqInterna=AliqICM,                                                                                                                                                              
               --Ronaldo Chamado 372149                    
               --@RedBaseSubTrib= Case When @RedBaseSubTrib = 0 Then PerReducaoICM Else @RedBaseSubTrib End                     
               @RedBaseSubTrib = Case When @RedBaseSubTrib = 0 and @FlagConsiderarSomentePercRedST = 0                    
                                        Then PerReducaoICM                     
                                        Else @RedBaseSubTrib End                                        
  From Tributacoes                                                                                                                                                                             
  Where EstadoOrigem=@CidEmpCodEstado                                        
     and Codigo=@CodTributacao                                                                                                                                                                                    
     --MARCELO - CHAMADO 192283                                                                       
--   and EstadoDestino=@CidEmpCodEstado                                                                                                                                                          
     --Eder - Chamado 243637                                                                                
--   and RegiaoDestino = @RegiaoDestino                                                                                        
     and RegiaoDestino = @RegiaoOrigem                        
     --Eder - 320407                           
     and AliqICM > 0                                            
   Order By TipoPessoa                                                                                 
end                     
                    
--Gabriella - 381216                                                                                                                   
--Sobrepoe a aliquota encontrada, se for informada na tributação                                                                        
If @TriAliqInternaSubTrib <> 0                                                                           
  Set @EstAliqInterna = @TriAliqInternaSubTrib                    
                                                                 
If @EstAliqInterna is null                                                           
   Set @EstAliqInterna = 0                                                                                  
                         
--Ronaldo Chamado 372149                    
/*--364660                      
-- quando informada 999.99, tem que zerar para não calcular                      
if @RedBaseSubTrib = 999.99                       
  Set @RedBaseSubTrib = 0*/                    
                                                                                                                                      
If @CodSubTributaria > 0                                                                                   
begin                                                                                                                                         
  Select                                                              
      @SubAliquotaInterna = AliquotaInterna,                           
      @SubMargemLucro = MargemLucro,                                                                                                                                                              
      @SubPercReducao = PercReducao,                                                                                                                                                              
      @SubIndiceReducao = IndiceReducao,                                                                                                                                                
      @SubFlagAbaterICM = FlagAbaterICM,                       
      @SubFlagSomaIPI = FlagSomaIPI                                                                                                                                                              
  From SubstituicaoTributaria                                                                                          
  Where CodSubTributaria = @CodSubTributaria                                                                                                           
    and Empresa = @Empresa                                                                                                                                   
end                                                                                                                                   
                                                                                                                    
  If @SubAliquotaInterna is null                                                 
     Set @SubAliquotaInterna = 0                                                                                                                      
  If @SubMargemLucro is null                                          
     Set @SubMargemLucro = 0                                                                                      
  If @SubPercReducao is null                                                                                                                                                       
     Set @SubPercReducao = 0                  
  If @SubIndiceReducao is null                                                                                     
     Set @SubIndiceReducao = 0                                                                                  
  If @SubFlagAbaterICM is null                                             
     Set @SubFlagAbaterICM = 0                                          
  If @SubFlagSomaIPI is null                                                                                                                         
     Set @SubFlagSomaIPI = 0                                                                                                                                                   
                                              
--Calculo do CST de ICMS e IPI                                                                 
Select @NumCstICM = Case when Op.NumCST_ICM in (-1) then @TriNumCST_ICM                                                                 
                         else Op.NumCST_ICM End,                                                 
       @NumCstIPI = Case when Op.NumCST_IPI not in (-1)                                            
        then Op.NumCST_IPI   --Operação fiscal prevalece sobre demais.                                                                
                         when @AliqIPI > 0 and Op.TipoIPI = 0 --Item tributado de ipi sera sempre 00 ou 50 (entrada ou saida tributada)                                                                
                         then Case When @FlagEntrada = 1 Then 00 Else 50 End                                                                
                         when Cla.NumCST_IPI not in (-1,0) and (@AliqIPI = 0 or Op.TipoIPI <> 0)                     
                     then Cla.NumCST_IPI -- Class. Fiscal prevalece sobre demais.                                                                
                         when @TriNumCST_IPI not in (-1) and (@AliqIPI = 0 or Op.TipoIPI <> 0)                                                                 
                              then @TriNumCST_IPI    -- Item sem ipi pega da tributação se informado                                                                                         
                    End,                                                                
       @NumCsosn  = Case When @ParTipoRegimeTributario in(1,2) --Calculo de CST para Simples nacional                                                                
                       Then Case When Op.NumCSOSN not in(-1,0) then Op.NumCSOSN                                                                
                   Else @TriNumCSOSN                                                         
                              End                                                                
                    End                                                                
  From Produtos Pro                                                                
  Left Join Operacoes Op on Op.Codigo = @CodOperacao                                                                
  Left Join ClassFiscais Cla on Cla.Codigo = @CodClassFiscal                                                                
Where Pro.Codigo = @CodProduto                                                
                                                                
if @NumCstICM <> -1                                     
  Set @NumCstICM = Cast(@ProOrigem as varchar(1)) + Replicate('0', 2 - Len(@NumCstICM)) + Cast(@NumCstICM as varchar(2))                                                                
else                   
  Set @NumCstICM = null                                                                
                                                                  
--Gabriella - 299680                                                              
if @NumCstIPI <> -1 and @FlagEntrada = 1             
  Set @NumCstIPI = Replicate('0', 2 - Len(@NumCstIPI)) + Cast(@NumCstIPI as varchar(2))                                                               
if @NumCstIPI <> -1 and @FlagEntrada = 0                                                                 
  Set @NumCstIPI = Replicate('5', 2 - Len(@NumCstIPI)) + Cast(@NumCstIPI as varchar(2))                                                              
 --407202  
if @NumCstIPI = 49 and @FlagEntrada = 0  
  Set @NumCstIPI = 99    
if @NumCstIPI = -1                                                              
  Set @NumCstIPI = null  
    
    
                                               
if @NumCsosn <> -1 and @ParTipoRegimeTributario in (1,2) --CSOSN para Simples Nacional                                                                
  Set @NumCsosn = Replicate('0', 3 - Len(@NumCsosn)) + Cast(@NumCsosn as varchar(3))                                                                
else                                                                
  Set @NumCsosn = null                                                                
                                                                
                                                                
If @EntTipoPessoa = 'F' or                                            
   @EntTipoPessoa = 'N'                                                    
   Set @AliqIcm = @TriAliqICM                                                                                                                            
Else                                                                                                                                                   
 --Ronaldo Chamado 317536                                              
 /*IF @TriAliqICM < @EstAliqContrib                                 
      Set @AliqICM = @TriAliqICM                                                                                                                                                       
   Else                                                 
      Set @AliqICM = @EstAliqContrib*/                                            
  IF @TriFlagPrevalecerAliqIcm = 1                     
    Set @AliqICM = @TriAliqICM                                            
  else                                            
    begin                                            
      IF @TriAliqICM < @EstAliqContrib                                                                           
        Set @AliqICM = @TriAliqICM                                                                                                                                                                  
      Else                                      
        Set @AliqICM = @EstAliqContrib                                            
    end                                             
                                                                                
If @CidEmpCodEstado = @CodEstadoLeitura and @TriFlagIsentoProdutor = 1                       
   If @EntTipoPessoa = 'P' or @EntTipoPessoa = 'J' or @EntTipoPessoa = 'C' OR                                                                                    
      @EntTipoPessoa = 'I' --JALDO - CHAMADO 248899                                                                                  
      Set @AliqICM = 0                                                                          
                                                                
                                                                                                        
If (@OprTipoICM = 1) or                                                                                            
   (@OprTipoICM = 2 and @FlagEntrada = 0) or                                                                
   (@OprTipoICM = 2 and @FlagEntrada = 1 and @OprFlagDefaultLancamentoOutras = 0)                                                                          
   Set @AliqICM = 0                                                                                                                                                                                    
                                                                                                                  
If @OprAliqICMFixo <> 0                                                                     
   Set @AliqICM = @OprAliqICMFixo                                                                                              
                                                                            
--Eder - Chamado 295277                                               
If @AliqICMFixo <> 0                                                               
begin                                                                
  --O cálculo do ICMS para Simples deve ser feito após o calculo da ST pois a ST considera aliquotas internas normais de ICMS                                                                
  If @ParTipoRegimeTributario in (1,2) and  --- Simples Nacional ou com excesso de sublimite receita bruta                                                                
     (@FlagEntrada = 0 or (@FlagEntrada = 1 and @OprTipoMovimento = 1))  --Saida ou entrada por devolução                                                                
  --Não pode fixar a aliquota de icms no simples senao nao calcula a ST                                             
     Set @AliqICM = @AliqICM                                                                
  else                                                   
     Set @AliqICM = @AliqICMFixo                                                                             
end                               
                                            
  
--389093  
-- calcula MVA ajustado, para fazer equalização de alíquota  
if (@ClaMVABaseEntrada <> 0) and   
   ((@FlagEntrada = 1 and @OprTipoMovimento <> 1) or (@FlagEntrada = 0 and @OprTipoMovimento = 1))  
begin  
/*   
  exemplo:  @AliqICM = 4 e @EstAliqInterna = 18 e @ClaMVABaseEntrada = 52.27  
  A = (1 - 0.04) / (1 - 0.18) = 1.170  
  B = 1 + 0.5227 = 1.5227  
  C = A * B --> 1.170 * 1.5227 = 1.7815  
  D = (C - 1) * 100  --> (1.7815 - 1) * 100 = 75.15  
*/  
  
  Set @MVA = (1 - (@AliqICM/100)) / (1 - (@EstAliqInterna/100))  
  Set @MVA = @MVA * (1 + (@ClaMVABaseEntrada/100))  
  Set @MVA = (@MVA - 1) * 100  
  Set @MVA = Round (@MVA,2)  
end  
  
                                            
--Gabriella - 333391                                                                                        
Set @ValorBaseIPI = @ValorTotal + @AcrescimoBaseIPI                                                                                                                                                                                                           
  
                                                                                                             
If @ValorBaseIPI > 0 and @AliqIPI > 0                                                           
   Set @VAuxValorIPI = (@ValorBaseIPI * @AliqIPI) / 100                                            
                                 
--Somente irá prevalecer o Tipo da Tributação quando a Aliquota de IPI for igual a Zero                                             
-- e o Tipo do Ipi da Operação Fiscal for Tributado                                               
if @AliqIPI = 0 and @OprTipoIPI = 0                                            
begin                                            
 if @TriTipoValorNaoTributadoIPI = 0                                            
   Set @ValorIsentoIPI = @ValorBaseIPI                                              
 if @TriTipoValorNaoTributadoIPI = 1                                            
   Set @ValorOutrasIPI = @ValorBaseIPI                                                 
end             
                                               
if @OprTipoIPI = 1                                            
  Set @ValorIsentoIPI = @ValorBaseIPI                                             
                           
if @OprTipoIPI = 2                                            
  Set @ValorOutrasIPI = @ValorBaseIPI                                             
                                              
If @AliqIPI = 0                                       
   Set @ValorBaseIPI = 0                                               
                                              
if @ValorIsentoIPI > 0 or @ValorOutrasIPI > 0                                            
  Set @ValorBaseIPI = 0                                                  
                                    
                                                                                                                   
---Chamado 114964                                                                                     
--If @OprTipoIPI = 0 or @OprTipoIPI = 3                                                                                                                                                                                    
--Begin             --Gabriella - 333391                                                                                     
--  If @ValorTotal > 0 and @AliqIPI > 0                                                 
--     Set @VAuxValorIPI = (@ValorTotal * @AliqIPI) / 100                                                                                                             
--End                                                                                                       
                                                                                                        
                                                                                                                                                      
If @TriFlagSubTributaria = 1                                                                                        
   and @ClaFlagSubTributaria = 1                                                                                                                                                                                     
and @GruFlagSubTributaria = 1                                                                                                                                                                          
   and @MVA <> 0                                             
   and @EstFlagConvSub = 1                                                      
   and @OprTipoICM = 0                                                                                                                  
   and @OprTipoSubTributaria > 0                                                                                                                           
begin                                                                                                       
  Set @ValorBaseSubTrib = @ValorTotal + @AcrescimoBaseSubTrib                                                                                                                                          
                                
                                   
  If @OprFlagSubTribIPI = 1                                                                                                                                                                            
     Set @ValorBaseSubTrib = @ValorBaseSubTrib + @VAuxValorIPI                                                                                                                                                               
end                                                                         
                                                                                                                                                                             
--Eder - Chamado 262460                                      
If @OprTipoICM = 0 and @ClaFlagSubTributaria = 1 and @GruFlagSubTributaria = 1 and @MVA <> 0 and                                                                                
   @OprTipoSubTributariaCarga = 0                                                                                 
begin                                      
  Set @ValorBaseSubTribCarga = @ValorTotal + @AcrescimoBaseSubTrib                                                                             
  If @OprFlagSubTribIPI = 1                                                                                         
     Set @ValorBaseSubTribCarga = @ValorBaseSubTribCarga + @VAuxValorIPI                                                                                                                                                           
end                                                            
                                                                                                                                                
                                                                          
If @CodSubTributaria > 0                                                                                                                                                          
   and @TriFlagSubTributaria = 1                                
   and @ClaFlagSubTributaria = 1                                                                          
   and @GruFlagSubTributaria = 1                                                                
   and @SubMargemLucro <> 0                                                                                                                                                               
   and @EstFlagConvSub = 1                                                                                                              
begin                                                                                                               
  Set @CalcBaseSubTrib = @ValorTotal + @AcrescimoBaseSubTrib                                                                                       
  If @SubFlagSomaIPI = 1                                                                                                                                                    
     Set @CalcBaseSubTrib = @CalcBaseSubTrib + @VAuxValorIPI                                            
end                                                                                                                                                                                 
                                                                                                                                      
Set @ValorBaseICM = @ValorTotal + @AcrescimoBaseICM                                                                                                  
Set @ValorBaseSubTribDestino = @ValorTotal + @AcrescimoBaseICM                                                                                                   
Set @CalcBaseSubTribDestino = @ValorTotal + @AcrescimoBaseICM                                                                                                                              
                                                                                                                       
                                                                                   
--JALDO - CHAMADO 243556                                
--O Tipo "2" não estão sendo verificando porque nunca será usado                                                                                                
--If @EntTipoPessoa <> 'J'                                           
--begin                                                                                                                
-- Set @ValorBaseIcm = @ValorBaseIcm + @VAuxValorIPI                                                                                  
--  Set @ValorBaseSubTribDestino = @ValorBaseSubTribDestino + @VAuxValorIPI                                                                                          
--  Set @CalcBaseSubTribDestino = @CalcBaseSubTribDestino + @VAuxValorIPI                                                                                
--end                                                             
                                                                                        
--JALDO - CHAMADO 248899                                                                                    
--if ((@TipoConsideraIPICalculoICM = 0) and (@EntTipoPessoa <> 'J')) or                                                                                                 
--   (@TipoConsideraIPICalculoICM = 1)                                                                                                 
--begin                                                                                                
--Set @ValorBaseIcm = @ValorBaseIcm + @VAuxValorIPI                                                                                                                                       
--  Set @ValorBaseSubTribDestino = @ValorBaseSubTribDestino + @VAuxValorIPI                                                                                                         
--  Set @CalcBaseSubTribDestino = @CalcBaseSubTribDestino + @VAuxValorIPI                                                                             
--end                        
                                            
--Gabriella - 256424                                                                              
--if (@EntTipoPessoa not in ('J','I'))                                
if (@EntTipoPessoa not in ('J','I')) or (@OprFlagIPISobreBaseICM = 1)                                                               
begin                                                                                            
  Set @ValorBaseIcm = @ValorBaseIcm + @VAuxValorIPI                                                                                           
  Set @ValorBaseSubTribDestino = @ValorBaseSubTribDestino + @VAuxValorIPI                                                                                
  Set @CalcBaseSubTribDestino = @CalcBaseSubTribDestino + @VAuxValorIPI                                                                                                                  
end                                                                               
                                                                                                                                  
Set @ValorIsentoICM = @ValorBaseIcm                                      
                  
--Ronaldo Chamado 383605                
if @OprPerRedICM <> 99.99                
begin                
  If @TriPerReducaoICM <> 0 and @ValorBaseIcm <> 0                                                         
  begin                                                                                                                    
    Set @ValorBaseIcm = @ValorBaseIcm - ((@ValorBaseIcm * @TriPerReducaoICM) / 100)                                                                                                                                                   
    Set @ValorBaseSubTribDestino = @ValorBaseSubTribDestino - ((@ValorBaseSubTribDestino * @TriPerReducaoICM) / 100)                                                                                                                                          
  
    Set @CalcBaseSubTribDestino = @CalcBaseSubTribDestino - ((@CalcBaseSubTribDestino * @TriPerReducaoICM) / 100)                                                                                              
  end                                                                                                                         
  If @ValorBaseIcm > 0 and @OprPerRedICM > 0                                                                                                                            
  begin                                                              
    Set @ValorBaseIcm = @ValorBaseIcm - ((@ValorBaseIcm * @OprPerRedICM) / 100)                                                                                                                                                                               
   
    Set @ValorBaseSubTribDestino = @ValorBaseSubTribDestino - ((@ValorBaseSubTribDestino * @OprPerRedICM) / 100)                                                                                                                              
    Set @CalcBaseSubTribDestino = @CalcBaseSubTribDestino - ((@CalcBaseSubTribDestino * @OprPerRedICM) / 100)                                                                                       
  end                                   
end                
                            
If @ValorBaseIcm > 0 and @AliqICM > 0                                                            
   Set @ValorICM = (@ValorBaseIcm * @AliqICM) / 100                                                         
                                                      
--Ronaldo Chamado 313933                                                      
select @RegTribPercIvaSimplicado = R.PercIvaSimplificado from regimetributario R                                                      
left join entidades E on R.Codigo = E.codRegimeTributario                                          
where R.empresa = @Empresa and                                                      
      E.codigo  = @CodEntidade                                                      
                                                      
                                                                                                                                                                                   
If @TriFlagSubTributaria = 1 and @ClaFlagSubTributaria = 1 and @GruFlagSubTributaria = 1                                                                                                                      
   and @MVA <> 0 and @EstFlagConvSub = 1 and @OprTipoICM = 0 and @OprTipoSubTributaria > 0                                                                                                                                
Begin                                                                                                            
--Eder - Chamado 243557  -- Teste específico para o Cliente pois ainda não sabemos se outros clientes aceitarão a modificação                                                                                            
--Eder - Chamado 243557                                                       
  if (@EmpId = 'ALPHA PNEUS') and @TriPerReducaoICM > 0                                                                      
     If @OprFlagSubTribIPI = 1                                                                                                       
       Set @ValorBaseSubTrib = @ValorBaseSubTrib - (((@ValorBaseSubTrib - @VAuxValorIPI) * @TriPerReducaoICM) / 100)                                                                                                                                           
 
     Else                                                                                      
       Set @ValorBaseSubTrib = @ValorBaseSubTrib - ((@ValorBaseSubTrib  * @TriPerReducaoICM) / 100)                                                                                                                                                            
  
  --Ronaldo Chamado 383605                 
  --If @RedBaseSubTrib <> 0 and @ValorBaseSubTrib <> 0               
  If @RedBaseSubTrib <> 0 and @ValorBaseSubTrib <> 0 and @OprPerRedICM <> 99.99                                                                                        
     Set @ValorBaseSubTrib = @ValorBaseSubTrib - ((@ValorBaseSubTrib  * @RedBaseSubTrib) / 100)                                                                                    
                                                        
  --set @ValorBaseSubTrib = cast('A' + cast(@ValorBaseSubTrib as varchar(20))   as int)                 
                  
  --Ronaldo Chamado 313933                                                      
  --If @TriMargemLucroSubst <> 999.99                                                                                                         
  --   Set @ValorBaseSubTrib = @ValorBaseSubTrib +  ((@ValorBaseSubTrib * @TriMargemLucroSubst) / 100)                                                                                                                                                         
  
  --If @ValorBaseSubTrib > 0 and @EstAliqInterna > 0                                                                         
  --   Set @ValorSubTrib = (@ValorBaseSubTrib * @EstAliqInterna) / 100                                                                                                                                                                   
  -- Set @ValorSubTrib = @ValorSubTrib - Round((@ValorBaseSubTribDestino * @AliqICM) / 100,2)                                                         
  if @RegTribPercIvaSimplicado > 0 and @EstAliqInterna > 0                                                      
  begin                                                      
     set @ValorSubTrib     = round(@ValorbaseSubTrib * @RegTribPercIvaSimplicado / 100,2)                                                      
     set @ValorBaseSubTrib = round((@ValorIcm + @ValorSubTrib) / @EstAliqInterna * 100,2)                                                      
  end                                                      
  else                                                      
  begin                                                       
    If @MVA <> 999.99                                                                                      
      Set @ValorBaseSubTrib = @ValorBaseSubTrib +  ((@ValorBaseSubTrib * @MVA) / 100)                                                                                                                                                           
    If @ValorBaseSubTrib > 0 and @EstAliqInterna > 0                                                                                                                                                                                    
         Set @ValorSubTrib = (@ValorBaseSubTrib * @EstAliqInterna) / 100                                                                                                                             
    Set @ValorSubTrib = @ValorSubTrib - Round((@ValorBaseSubTribDestino * @AliqICM) / 100,2)                                                         
  end                                                       
End                                                                                               
                                                                                        
                                                                                                                  
--Eder - Chamado 262460                                                                                
If @OprTipoICM = 0 and @ClaFlagSubTributaria = 1 and @GruFlagSubTributaria = 1 and @MVA <> 0 and                                                                                
   @OprTipoSubTributariaCarga = 0                            begin                                                              
--Eder - Chamado 243557 -- Teste específico para o Cliente pois ainda não sabemos se outros clientes aceitarão a modificação                                        
  if (@EmpId = 'ALPHA PNEUS') and @TriPerReducaoICM > 0                                 
     If @OprFlagSubTribIPI = 1                                                                                                
       Set @ValorBaseSubTribCarga = @ValorBaseSubTribCarga - (((@ValorBaseSubTribCarga - @VAuxValorIPI) * @TriPerReducaoICM) / 100)                                                                                                                            
  
     Else                          
     Set @ValorBaseSubTribCarga = @ValorBaseSubTribCarga - ((@ValorBaseSubTribCarga  * @TriPerReducaoICM) / 100)                                                                                                                                               
  
  --Ronaldo Chamado 383605                  
  --If @RedBaseSubTrib <> 0 and @ValorBaseSubTribCarga  <> 0                                                                                                                                                              
  If @RedBaseSubTrib <> 0 and @ValorBaseSubTribCarga  <> 0 and @OprPerRedICM <> 99.99                 
   Set @ValorBaseSubTribCarga = @ValorBaseSubTribCarga - ((@ValorBaseSubTribCarga  * @RedBaseSubTrib) / 100)                                                                                                                                                   
  
  --Ronaldo Chamado 313933                                                        
  --If @TriMargemLucroSubst <> 999.99                                                                                                                                               
  --   Set @ValorBaseSubTribCarga = @ValorBaseSubTribCarga +  ((@ValorBaseSubTribCarga * @TriMargemLucroSubst) / 100)                                                                                                                                          
  
  --If @ValorBaseSubTribCarga > 0 and @EstAliqInterna > 0                                                                                                                                       
  --   Set @ValorSubTribCarga = (@ValorBaseSubTribCarga * @EstAliqInterna) / 100                                        
  --Set @ValorSubTribCarga = @ValorSubTribCarga - Round((@ValorBaseSubTribDestino * @AliqICM) / 100,2)                                                      
  if @RegTribPercIvaSimplicado > 0 and @EstAliqInterna > 0                                                      
     begin                                                      
        set @ValorSubTribCarga     = round(@ValorBaseSubTribCarga * @RegTribPercIvaSimplicado / 100,2)                                                      
        set @ValorBaseSubTribCarga = round((@ValorIcm + @ValorSubTribCarga) / @EstAliqInterna * 100,2)                                                      
     end                                                      
  else                                                      
     begin                                                       
       If @MVA <> 999.99                                                                                                                                               
          Set @ValorBaseSubTribCarga = @ValorBaseSubTribCarga +  ((@ValorBaseSubTribCarga * @MVA) / 100)                                                                                                                                 
       If @ValorBaseSubTribCarga > 0 and @EstAliqInterna > 0                                                                                                                                       
          Set @ValorSubTribCarga = (@ValorBaseSubTribCarga * @EstAliqInterna) / 100                                                                                                                                             
          Set @ValorSubTribCarga = @ValorSubTribCarga - Round((@ValorBaseSubTribDestino * @AliqICM) / 100,2)                               
    end                                                       
end        
                                                                    
                                                                                     
                             
--Calculo da substituição tributaria pela tabela SubstituicaoTributaria                                                                     
If @CodSubTributaria > 0                                                                                                   
   and @TriFlagSubTributaria = 1 and @ClaFlagSubTributaria = 1 and @GruFlagSubTributaria = 1                                                                                                                                                                  
   
   and @SubMargemLucro <> 0 and @EstFlagConvSub = 1                                                                                                                                     
begin                                                   
  If @SubPercReducao <> 0                                                                                                                         
     Set @CalcBaseSubTrib  = @CalcBaseSubTrib - ((@CalcBaseSubTrib * @SubPercReducao) / 100)                                                                                             
  If @SubMargemLucro <> 999.99                                                                                                                                                            
     Set @CalcBaseSubTrib = @CalcBaseSubTrib +  ((@CalcBaseSubTrib * @SubMargemLucro) / 100)                                                                          
  If @SubIndiceReducao <> 0                                                                                                     
   Set @CalcBaseSubTrib = @CalcBaseSubTrib * @SubIndiceReducao                                                                                                                                                      
                                                  
  --Quando não tem aliquota interna na sub.trib, pega a do estado de origem                                                                                                     
  If @CalcBaseSubTrib > 0 and                                                                                                                  
     (@SubAliquotaInterna > 0 or @EstAliqInterna > 0)                                                                           
  begin                                                                              
    if @SubAliquotaInterna > 0                                                                                                                                                    
     Set @CalcValorSubTrib = (@CalcBaseSubTrib * @SubAliquotaInterna) / 100                                                                                                                                              
    Else                                                                                                 
       Set @CalcValorSubTrib = (@CalcBaseSubTrib * @EstAliqInterna) / 100                                                                                                                      
  end                                 
                                                                                                                                                      
  --Opção que permite abater o icms da operação na substituição tributaria                                                                                                                                                      
  If @SubFlagAbaterICM = 1                                                                                                        
     Set @CalcValorSubTrib = @CalcValorSubTrib - Round((@CalcBaseSubTribDestino * @AliqICM) / 100,2)                                                                         
                                                            
  If @OprTipoICM = 0 and @OprTipoSubTributaria > 0                                                                                       
  begin                                                                                   
 Set @ValorBaseSubTrib = @CalcBaseSubTrib                                                                                           
    Set @ValorSubTrib = @CalcValorSubTrib                                                                                                                                                           
  end                            
                                                            
  --Eder - Chamado 262460                                                          
  If @OprTipoSubTributariaCarga = 0                                                                                
  begin                          
    Set @ValorBaseSubTribCarga = @CalcBaseSubTrib                                                                                                                   
    Set @ValorSubTribCarga = @CalcValorSubTrib                                                                                                                           
  end                                                                                
end                                                                              
                                                                       
--MARCELO - CHAMADO 195051                                                                                                            
if (@ValorBaseSubTrib <> 0) or (@ValorSubTrib <> 0)                                                                                                             
begin                               
  set @ValorBaseSubTribCarga = 0                                                                                                            
  set @ValorSubTribCarga = 0                                                                                     
end                        
                                                                
                                                                
--Eder - Chamado 295277                                                                
--O cálculo do ICMS para Simples deve ser feito após o calculo da ST pois a ST considera aliquotas internas normais de ICMS                                                                
If @ParTipoRegimeTributario in (1,2) and  --- Simples Nacional ou com excesso de sublimite receita bruta                                                                
   (@FlagEntrada = 0 or (@FlagEntrada = 1 and @OprTipoMovimento = 1))  --Saida ou entrada por devolução                                                                
begin                                             
  If @TriAliqICM <= 0                                                                 
    Set @AliqICM = 0                                                                
  else                                                                
    Set @AliqICM = @ParAliqICMSimples                                                                
  If (@OprTipoICM = 1) or                                                                                  
     (@OprTipoICM = 2 and @FlagEntrada = 0) or                                                                                                                                                                      
     (@OprTipoICM = 2 and @FlagEntrada = 1 and @OprFlagDefaultLancamentoOutras = 0)                                                                                                                                  
     Set @AliqICM = 0                                                                                                 
Set @ValorICM = (@ValorBaseIcm * @AliqICM) / 100          
end                                                                
                                                                                                                         
If @AliqICM = 0                                                                                                                                                                                    
   Set @ValorBaseIcm = 0                                                                                                                         
Else                                                                                                                               
   Set @ValorIsentoICM = @ValorIsentoICM - @ValorBaseIcm                                                                                                                      
                                                                                                                                                     
                                                         
If @OprTipoSubTributaria in(2,3) and @ClaFlagSubTributaria = 1 and @GruFlagSubTributaria = 1                                                                                        
   and @OprTipoICM = 0 and @EstFlagConvSub = 1                                                                       
   and (@TriFlagSubTributaria = 1 or @MVA <> 0 or @SubMargemLucro <> 0)                                                                                                                                 
begin                                                                      
  If @OprTipoSubTributaria = 2                                                                       
     Set @ValorIsentoICM = @ValorIsentoICM + @ValorBaseICM                                                                                                                         
  If @OprTipoSubTributaria = 3                                                                     
  begin                                                                          
     --Eder - 383214 - Quando ha redução na base, considerar apenas a parte tributada para outras (St)              
     --Set @ValorOutrasICM = @ValorOutrasICM + @ValorBaseICM + @ValorIsentoICM                                      
     if (@ValorIsentoICM <> 0 and @ValorBaseICM <> 0)              
       Set @ValorOutrasICM = @ValorBaseICM              
     else              
     begin            
       Set @ValorOutrasICM = @ValorBaseICM + @ValorIsentoICM              
       Set @ValorIsentoICM = 0         
     end              
  end                                                                                                                                    
  Set @ValorBaseIcm = 0                                                                                                                                                                      
  Set @ValorICM = 0                                                                                                                                                                      
end                                                                                                                                                                                    


--Eder - 303720                                                                        
Set @AcrDespesasPisCOFINS = @AcrescimoBaseICM                                                            
if (@OprFlagIPISobrePisCofins = 1)  --Calcula IPI sobre Pis e COFINS                         
  Set @AcrDespesasPisCOFINS = @AcrDespesasPisCOFINS + @VAuxValorIPI                             
             
-- Renato - Chamado 272165                                                                         
Select @ValorBasePisCofins = ValorBasePisCofins,                                                                         
       @AliqPis = AliqPis,                                                                
       @AliqCofins = AliqCofins,                                                                
       @NumCstPisCofins = NumCstPisCofins,                                                           
       -- Renato - 297792                                                          
       @NatReceitaPisCofins = NatReceitaPisCofins,                                              
       -- Renato - 332318                                            
       @NatBaseCalcCredito = NatBaseCalcCredito,                            
    -- Renato - 361650                          
       @AliqComplPis = AliqComplPis,                                                       
       @AliqComplCofins = AliqComplCofins,
       @ValorPis = ValorPis,
       @ValorCofins = ValorCofins
From dbo.Calcular_PisCofins(@Empresa, @CodProduto, @CodEntidade, @CodTributacao, @CodOperacao,                                                                       
                            @CodClassFiscal, @ValorTotal, @AcrDespesasPisCOFINS,              
                            -- Renato - 297792                                                              
            @FlagEntrada)                                                                                                                                                                                    

--408846
Set @aliqpiscofins = 0
if (@AliqPIS is not null) 
  Set @aliqpiscofins = @aliqpiscofins + @AliqPIS
if (@aliqcofins is not null) 
  Set @aliqpiscofins = @aliqpiscofins + @aliqcofins 
                                                                                                             
Set @FatorRedCusto = 1                                                                                                 
If (@ParTipoReducaoICM = 1) and (Ltrim(@CodEntidade) <> '')                                                                                 
   and (@FlagEntrada = 0 or (@FlagEntrada=1 and @OprTipoMovimento = 1))                                          
--Eder Chamado 170325                                                                                                                          
   and (@CodProduto <> 8888888)   
begin                                                                                                                                                
--   If @OprTipoSubTributaria not in(2,3)   --não calcula quando a sub. tributaria é isenta/outras                                                                          
--   Isaac - Chamado 191232                                                                                                            
   If not (@OprTipoSubTributaria in(2,3) and @ClaFlagSubTributaria = 1 and @GruFlagSubTributaria = 1                                                         
      and @OprTipoICM = 0 and @EstFlagConvSub = 1                                                                                                                    
      and (@TriFlagSubTributaria = 1 or @MVA <> 0 or @SubMargemLucro <> 0))                                                                                                       
      Set @FatorRedCusto = (100 - @TriAliqICM) / (100 - @AliqICM)                                                  
                                                                                                                                                                   
   If @OprPerRedMargem <> 0                                                                                                       
     Set @FatorRedCusto = @FatorRedCusto - (@OprPerRedMargem / 100)                                                                                                                                                      
   --Eder - Chamado 270320                                                                            
   --If (@TriPerRedMargem <> 0)                                                                            
   --  Set @FatorRedCusto = @FatorRedCusto - (@TriPerRedMargem / 100)                                                                                              
end                                                                                                                                                       
--Eder - Chamado 270320                                                                            
if (@TriPerRedMargem <> 0) and (@CodProduto <> 8888888)                                                
   Set @FatorRedCusto = @FatorRedCusto - (@TriPerRedMargem / 100)                                                        
                                                                                   
-- 298865                             
--Eder - Chamado 195755                                                                                                              
--Somente vai calcular DespesasNaoInclusas no fator quando for saída ou devolução                                                                                                                    
-- Renato - 278440                                                        
If (@FlagEntrada = 0) or                                                                                                                                                                   
   (@FlagEntrada = 1 and @OprTipoMovimento = 1)                                                                                                                                                                    
begin                                                                                                  
  --Eder - Chamado 170325                                                                                                     
  --Adiciona o acrescimo de custo, que já deve vir passado como percentual                                                                                                                          
                                                                             
  If (@PerRedDespesa <> 0) and (@ParTipoReducaoICM in (0,1)) and (@FlagDeduzirDespNaoInclNaMargem = 0)                                                                                 
  begin                                                                                                                          
    Set @FatorRedCusto = @FatorRedCusto + @PerRedDespesa                                                                              
  end                                                                                
end                                                                                                               
                                                  
                                                                                                
--Calcula o fator de venda para as saídas e entradas por devolução.                    
--Retira o Valor do ICM, a Aliquota de CPMF, a Aliquota de PIS/COFINS e soma o acrescimo de vend                                                                                                      
Set @FatorRedVenda = 1                                                                                                                                                     
If ((@FlagEntrada = 0) or                                                                                                                       
   (@FlagEntrada = 1 and @OprTipoMovimento = 1))                                                                      
   -- Renato - 278440                                             
   and (@ParTipoReducaoICM = 2) -- 2 - Deduzir Impostos da Venda                                                                                        
begin                                                                                                            
                                                                        
  --Eder -Chamado 292832 - Evitar arredondamento desnecessario na aliquota do ICM (Vide Chamado)                                                                  
  If (@AliqICM > 0) and (@ValorTotal > 0)                                                                             
     --408846 if @ValorBaseICM = @ValorTotal + @AcrescimoBaseICM                                                                  
     if @ValorBaseICM = @ValorTotal 
       Set @FatorRedVenda = @FatorRedVenda - (@AliqICM / 100)                                                                  
     Else                                                        
       Set @FatorRedVenda = @FatorRedVenda - Round(((@ValorICM * 100) / @ValorTotal) / 100,4)                                                                  
                                                                  
  If @ParAliqCPMF > 0                                                                                                                                                                                    
     Set @FatorRedVenda = @FatorRedVenda - (@ParAliqCPMF / 100)                                                 
                                                                        
  IF (@AliqPISCOFINS > 0) 
  begin
     --408846 FatorRedVenda = FatorRedVenda - (AliqPISCOFINS / 100));
     if (@ValorBasePisCofins = @ValorTotal) 
       Set @FatorRedVenda = @FatorRedVenda - (@AliqPISCOFINS / 100)
     else
     if (@ValorTotal > 0) 
       Set @FatorRedVenda = @FatorRedVenda - Round(((@Valorpis + @ValorCofins  * 100) / @ValorTotal ) / 100,4)
  end
                                                                                                                         
                                                                        
  If (@LisPercAcrescimoAdm1 + @LisPercAcrescimoAdm2 + @LisPercAcrescimoAdm3) > 0                                                                                                                 
     Set @FatorRedVenda = @FatorRedVenda - ((@LisPercAcrescimoAdm1 + @LisPercAcrescimoAdm2 + @LisPercAcrescimoAdm3) / 100)                                                               
          
  If (@AcrescimoRedVenda <> 0) and (@ValorTotal > 0)     
  begin    
 --397007      
    if (@AcrescimoRedVenda > @ValorTotal)    
      Set @FatorRedVenda = 0    
    else      
      Set @FatorRedVenda = @FatorRedVenda - Round(((@AcrescimoRedVenda * 100) / @ValorTotal) / 100,4)    
  end    
                                                                    
  --Renato - 290579                                                                      
  -- Se for uma venda fora do estado com ICMS, e os Percentuais de ICMS e SubTrib da Compra estiverem informados                                                                      
  -- na Lista de Preco vai abater o ICMS da compra no Custo.                                                                      
  If ((@CidEmpCodEstado <> @CidCodEstado) and (@ValorICM > 0) and (@PercICMCusto > 0) and (@PercSubTribCusto > 0))
  begin
    --408846    
    -- checagem tipomargemliquida = 0 é para evitar mudança no cálculo da margem de 
    -- clientes que utilizam este tipo de cálculo
    if (@TipoMargemLucro = 0 and @TipoMargemLiquida = 0)
    begin
      Set @ValorCustoCalc = dbo.CalculaCustoLiquido (@Empresa, @LisValorCustoBruto, 
            @LisPercDesconto1, @LisPercDesconto2, @LisPercDesconto3, @LisPercDesconto4, 
            @LisPercDesconto5, @LisPercAcrescimo1, @LisPercAcrescimo2, @LisPercAcrescimo3, 
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
  
      Set @ValorICMCustoCalc = Round((@PercICMCusto / 100.00) * @ValorCustoCalc,2)
      Set @FatorRedCusto = @FatorRedCusto - (@ValorICMCustoCalc / @LisValorCustoLiquido)
    end  
    else
      Set @FatorRedCusto = @FatorRedCusto - (@PercICMCusto / 100)
  end  
                                                                  
end                                                                         
  --Renato - 278440                                                                     
If (@PerRedDespesa <> 0) and (@FlagDeduzirDespNaoInclNaMargem = 1) and (@ParTipoReducaoICM <> 2)                                                                                                                         
begin                                                                                                                          
  Set @FatorRedVenda = @FatorRedVenda - @PerRedDespesa                                                                                    
end                                                                                                            
                                                                

/* 408846 - calculo do pis/cofins movido para mais acima                                                                
--Eder - 303720                                                                        
Set @AcrDespesasPisCOFINS = @AcrescimoBaseICM                                                            
if (@OprFlagIPISobrePisCofins = 1)  --Calcula IPI sobre Pis e COFINS                         
  Set @AcrDespesasPisCOFINS = @AcrDespesasPisCOFINS + @VAuxValorIPI                             
             
-- Renato - Chamado 272165                                                                         
Select @ValorBasePisCofins = ValorBasePisCofins,                                                                         
       @AliqPis = AliqPis,                                                                
       @AliqCofins = AliqCofins,                                                                
       @NumCstPisCofins = NumCstPisCofins,                                                           
       -- Renato - 297792                                                          
       @NatReceitaPisCofins = NatReceitaPisCofins,                                              
       -- Renato - 332318                                            
       @NatBaseCalcCredito = NatBaseCalcCredito,                            
    -- Renato - 361650                          
       @AliqComplPis = AliqComplPis,                                                       
       @AliqComplCofins = AliqComplCofins                          
                                                                      
From dbo.Calcular_PisCofins(@Empresa, @CodProduto, @CodEntidade, @CodTributacao, @CodOperacao,                                                                       
                            @CodClassFiscal, @ValorTotal, @AcrDespesasPisCOFINS,              
                            -- Renato - 297792                                                              
            @FlagEntrada)                                                                                                                                                                                    
*/            
            
                                                                    
if @CodProduto = 8888888                                                                                    
begin                                                                                                                                                                                    
  If @EntTipoPessoa in('F','N') and @CidCodEstado <> @CidEmpCodEstado and @CidCodEstado <> 'EX'                                                                                                                                                               
  
    
      
     and Ltrim(@OprCFOP_Servico_NCFora) <> ''                                                                                                                  
     Set @NumCFOP = @OprCFOP_Servico_NCFora                                                                                          
  Else                                                                                                                                           
     Set @NumCFOP = @OprCFOP_Servico                                                                                                              
end                                                                               
else                                                                                                                                                                
Begin                                                                                                                              
  If @TriTipoCFOP = 1 or @TriTipoCFOP = 0                              
  begin                                                                                                                             
    If @EntTipoPessoa in('F','N') and @CidCodEstado <> @CidEmpCodEstado and @CidCodEstado <> 'EX'                                                                                                                                                             
       and Ltrim(@OprCFOP1_Normal_NCFora) <> ''                                                                                                             
      Set @NumCFOP = @OprCFOP1_Normal_NCFora                                                                 
    Else                                                                                                                      
      Set @NumCFOP = @OprCFOP1_Normal                                                                               
  end                                                                                                            
        
  If @TriTipoCFOP = 2                                                                                                                                                                                    
  begin                                                                                                                                                     
    If @EntTipoPessoa in('F','N') and @CidCodEstado <> @CidEmpCodEstado and @CidCodEstado <> 'EX'                                                                                                            
         and Ltrim(@OprCFOP2_Industrializado_NCFora) <> ''                     
      Set @NumCFOP = @OprCFOP2_Industrializado_NCFora                                                                        
    Else                                                                                                                     
      Set @NumCFOP = @OprCFOP2_Industrializado                                                                  
  end                                                                                           
        
  If @TriTipoCFOP = 3                                                                                        
  begin                                                                  
    -- JALDO - CHAMADO 184880                                                                                                                      
    -- If @EntTipoPessoa in('F','N')                                                                                                                                 
    If @EntTipoPessoa in('F','N') and @CidCodEstado <> @CidEmpCodEstado and @CidCodEstado <> 'EX'                                                                                                                        
      Set @NumCFOP = @OprCFOP3_SubRevenda_NC                                                                                                        
    Else                               
      Set @NumCFOP = @OprCFOP3_SubRevenda                          
  end                                                                               
      
  If @TriTipoCFOP = 4                                                                                                                                                                                    
  begin                                                           
    -- JALDO - CHAMADO 184880                                                                           
    --If @EntTipoPessoa in('F','N')                                                                                                                       
    If @EntTipoPessoa in('F','N') and @CidCodEstado <> @CidEmpCodEstado and @CidCodEstado <> 'EX'                                                                                                                 
      Set @NumCFOP = @OprCFOP4_SubRevendaML_NC                                                                                                                                                                                    
    Else                                                                                                  
      Set @NumCFOP = @OprCFOP4_SubRevendaML                                                                                  
  end                                                                                                                            
        
  If @TriTipoCFOP = 5                                               
  begin                                           
    If @EntTipoPessoa in('F','N')                                                          
      Set @NumCFOP = @OprCFOP5_SubFabricacao_NC                                                                                            
    Else                                                                                                                                                                                    
      Set @NumCFOP = @OprCFOP5_SubFabricacao                                                                    
  end                                                                                                                                        
        
  If @TriTipoCFOP = 6                                                                                                                         
  begin                                                                                            
    If @EntTipoPessoa in('F','N')                                                                                          
      Set @NumCFOP = @OprCFOP6_SubFabricacaoML_NC                                                                                                                     
    Else                                                               
      Set @NumCFOP = @OprCFOP6_SubFabricacaoML                                    
  end                                                                                               
        
  If @TriTipoCFOP = 7                              
  begin                                                                                                                                                                      
    Set @NumCFOP = @OprCFOP7_Importado                                                                                                                                                           
  end                                                                                                                                                      
        
  If @TriTipoCFOP = 9                                                     
  begin            
    -- danilo If @EntTipoPessoa in('F','N','C','P')      
    If @EntTipoPessoa in('F','N')      
      Set @NumCFOP = @OprCFOP9_Petroleo_NC                                                                       
    Else                                                                                                                                                                                    
      Set @NumCFOP = @OprCFOP9_Petroleo                                                                                                                                         
  end       
end                                                                                                     
                                                                                                                                 
If Substring(@NumCFOP,1,1) in ('1','2','3') and @CidCodEstado <> @CidEmpCodEstado                                                                                                                                                
   If @CidCodEstado <> @CidEmpCodEstado and @CidCodEstado = 'EX'                                                        
      Set @NumCFOP=Stuff(@NumCFOP,1,1,'3')                                                                                                                                
 Else                                                                                                      
      Set @NumCFOP=Stuff(@NumCFOP,1,1,'2')                                                                                                                                                                                       
If Substring(@NumCFOP,1,1) in ('5','6','7') and @CidCodEstado <> @CidEmpCodEstado                                                                                                                                                                             
  
 If @CidCodEstado <> @CidEmpCodEstado and @CidCodEstado = 'EX'                                                                                                                                                   
      Set @NumCFOP=Stuff(@NumCFOP,1,1,'7')                                                                                             
   Else                                                                                                              
      Set @NumCFOP=Stuff(@NumCFOP,1,1,'6')                                                                    
                                                                                                          
--MARCELO - CHAMADO 209798                                                                                     
/*                                                                                                          
CFOP 5.405 não existe o seu correlado 6.405 para vendas fora do estado,                                                                                                           
devendo ser utilizado em seu lugar o CFOP 6.404, conforme reunião defina                                                          
com Eder                                                                                
*/                                                                                                        
--Rafael chamado 224824                                                                 
  --6.405  -> 6.404                                                                                                    
  --6405  --> 6404                                                                                                    
                                                                                                    
--if (Replace(@NumCFOP,'.','') = '6405')                                                                  
  --set @NumCFOP = '6404'                                                                                                     
                                                                                                
if (@NumCFOP  = '6.405')                      
  set @NumCFOP = '6.404'                                                                                                          
                                                                                         
if (@NumCFOP  = '6405')                                                                                                     
  set @NumCFOP = '6404'                                                                                                  
                                                                                                                            
If @NumCFOP is null                                                                                                                                                                      
   Set @NumCFOP = ''                                           
                                                                                                                                                                                     
If @AliqICM is null                                                                                            
   Set @AliqICM=0                                           
                                                                                                                                                      
if @CodProduto = 8888888                                      
Begin                                                        
  -- Renato - 341779                                           
  if (@OprFlagICMSSobreServicos = 0) or (@OprTipoIcm in (1,2))                                    
  begin                         
    set @AliqICM = 0                                                                                                                                                                      
    set @ValorBaseIcm = 0                                                                                   
    set @ValorICM = 0                                                                                    
    set @ValorIsentoICM = 0                                                                                                                          
    set @ValorOutrasICM = 0                                                     
                               
    if (@OprFlagICMSSobreServicos = 0)                                          
    begin                                            
 -- Mantendo compatibilidade com versões antigas, ou seja, se o usuario não marcar o FlagICMSSobreServicos                                           
   -- o sistema não muda a forma de gerar os impostos dos serviços.                                                                             
      if (@TriTipoValorNaoTributado = 0)                                                                              
        set @ValorIsentoICM = @ValorTotal + @AcrescimoBaseICM                                                                                                                              
      else                                                                                                                    
        set @ValorOutrasICM = @ValorTotal + @AcrescimoBaseICM                                            
    end                                          
    else                                          
    begin                                          
      if (@OprTipoIcm = 1)                                                                              
        set @ValorIsentoICM = @ValorTotal + @AcrescimoBaseICM                                                                 
      else                                                                                                                    
        set @ValorOutrasICM = @ValorTotal + @AcrescimoBaseICM                                            
    end                                          
                    
  end                                  
  else if ((@OprFlagICMSSobreServicos = 1) and (@OprTipoIcm = 0) and ((@AliqICM = 0) or (@ValorBaseIcm = 0)) )                                          
  begin                                          
    if (@TriTipoValorNaoTributado = 0)                                           
      set @ValorIsentoICM = @ValorTotal + @AcrescimoBaseICM                                                                                                                              
    else                           
      set @ValorOutrasICM = @ValorTotal + @AcrescimoBaseICM                                           
  end                                          
                                              
  set @ValorBaseSubTrib = 0                                                                                                                                                                     
  set @ValorSubTrib = 0                                                                                                                                   
  set @ValorBaseSubTribCarga = 0                                                                                                                                           
  set @ValorSubTribCarga = 0                                                                                                                                                                      
  set @RedBaseSubTrib = 0                         
--Eder - Chamado  170325                                                                                                                          
--  set @FatorRedCusto = 1                                                                                                            
  set @FatorRedVenda = 1                                                                                                                                                                      
  set @AliqPISCOFINS = 0                                            
                                                                                                        
end                                                                        
                                                                
                             
--Eder - 297029                                                                 
--383214 If (@ValorBaseICM > 0 and @ValorIsentoICM > 0)                            
If ((@ValorBaseICM > 0 or @ValorOutrasICM > 0) and @ValorIsentoICM > 0)                            
begin                              
  --Renato - 361064                             
  if (@TriPerReducaoICM = 0) and (@OprPerRedICM <> 0)                              
    Set @PerReducaoICM = @OprPerRedICM                            
  else if (@TriPerReducaoICM <> 0) and (@OprPerRedICM = 0)                              
    Set @PerReducaoICM = @TriPerReducaoICM                             
  else                            
    Set @PerReducaoICM = Round(@ValorIsentoICM / (@ValorBaseICM + @ValorIsentoICM) * 100,2)                                                                                     
end                           
else                                           
  Set @PerReducaoICM = 0                                
                            
                                 
                                                                                                       
--Define o valor de isento ou o valor de outras para o que não foi tributado                                                                                                                                                                
if @CodProduto <> 8888888 and @ValorIsentoICM > 0                                                     
begin                                                                                       
  --Chamado 156315 - calculando errado valor de isentas com tributação com coluna de outras                                               
 If @OprTipoICM = 2 or                                                                                         
    (@TriTipoValorNaoTributado = 1 and @OprTipoICM = 0)                                             
  begin                                                                                                                                                              
    If  not (@OprTipoSubTributaria in(2,3) and @ClaFlagSubTributaria = 1 and @GruFlagSubTributaria = 1                                                                                                                                                    
           and @EstFlagConvSub = 1                                                                                                                                                                 
            and (@TriFlagSubTributaria = 1 or @MVA <> 0))                        
       or @OprTipoICM = 2                                                                                            
    begin                                                                                                                                                                    
      Set @ValorOutrasICM = @ValorIsentoICM                                                                        
      Set @ValorIsentoICM = 0                                                                                                                                                                                                     
    end                                                                                          
  end                                      
end                              
                            
if (@ValorBaseSubTrib = 0  and @ValorSubTrib = 0 and @ValorBaseSubTribCarga = 0 and @ValorSubTribCarga = 0)                            
begin                            
  set @EstAliqInterna = 0                            
  set @MVA = 0                             
end                                                                          
                                                                                                        
Insert Into @Campos (AliqICM, ValorBaseICM, ValorICM, ValorIsentoICM, ValorOutrasICM, PerReducaoICM,                                              
               ValorBaseSubTrib, ValorSubTrib, FatorRedCusto, FatorRedVenda, NumCFOP,                                                                  
               ValorBaseSubTribCarga, ValorSubTribCarga, PerRedBaseSubTrib, AliqPISCOFINS,                                                                        
    -- Renato - Chamado 272165                                                                          
               ValorBasePisCofins, AliqPis, AliqCofins,                                                                
               NumCstICM, NumCstIPI, NumCstPisCofins, NumCsosn,                                                           
               -- Renato - 297792                                                          
               NatReceitaPisCofins,                                             
               -- Renato - 332318                                            
           NatBaseCalcCredito,                                 --Ronaldo 343696                                
   IndNaturezaFrete,                                                  
               --Gabriella - 333391                                 
               ValorBaseIPI,                                            
               ValorIsentoIPI,                                               
               ValorOutrasIPI,                            
               AliqICMSST,                            
               PercMvaICMSST,                          
               --Renato - 361650                          
               AliqComplICM,                          
               AliqComplPis,                          
               AliqComplCofins)                                                          
                                                                                                                                                           
       Values (@AliqICM, @ValorBaseICM, @ValorICM, @ValorIsentoICM, @ValorOutrasICM, @PerReducaoICM,                                                   
               @ValorBaseSubTrib, @ValorSubTrib, @FatorRedCusto, @FatorRedVenda, @NumCFOP,                                                                                                                           
               @ValorBaseSubTribCarga, @ValorSubTribCarga, @RedBaseSubTrib, @AliqPISCOFINS,                                                             
               -- Renato - Chamado 272165                                                                           
               @ValorBasePisCofins, @AliqPis, @AliqCofins,                                                                
               @NumCstICM, @NumCstIPI, @NumCstPisCofins, @NumCsosn,                                                           
               -- Renato - 297792                                                          
               @NatReceitaPisCofins,                                             
               -- Renato - 332318                                            
               @NatBaseCalcCredito,                                 
               --Ronaldo 343696                                
               @OprIndNaturezaFrete,                                           
               --Gabriella - 333391                                                   
               @ValorBaseIPI,                                            
               @ValorIsentoIPI,                                                                                                                              
               @ValorOutrasIPI,                            
               --Renato - 360358                            
               @EstAliqInterna,                            
               @MVA,                          
               --Renato - 361650                          
               @TriAliqComplICM,                          
               @AliqComplPis,                          
               @AliqComplCofins)                                                             
Return                                                                
                                                                
end   
GO

ALTER Trigger  [dbo].[TriggerDeletaProduto] on [dbo].[Produtos]
for delete 
as
/*********************
VERSÃO 3.02
*********************/

--Gabriella - 353832
If Exists(SELECT * from ConfiguracaoSistema where FlagTransacaoSnapShot = 1)
  SET TRANSACTION ISOLATION LEVEL READ COMMITTED  

  Delete ProdutosPesquisa
     From ProdutosPesquisa, Deleted
     Where ProdutosPesquisa.Codigo = Deleted.Codigo


  Delete ItemListaPreco
     From ItemListaPreco, Deleted
     Where ItemListaPreco.CodProduto = Deleted.Codigo


  Delete ComposicaoProduto
     From ComposicaoProduto, Deleted
     Where ComposicaoProduto.CodProdutoPrin = Deleted.Codigo or
           ComposicaoProduto.CodProdutoComp = Deleted.Codigo


  Delete NumerosAux
     From NumerosAux, Deleted
     Where NumerosAux.CodProduto = Deleted.Codigo


  Delete CoeficientesProduto
     From CoeficientesProduto, Deleted
    where CoeficientesProduto.CodProduto = Deleted.Codigo  

  delete Lotes
    From Deleted
    Where Lotes.CodProduto = Deleted.Codigo
     
  

  Update ItemPedidoCompra
       Set CodProduto = 9999999
       From ItemPedidoCompra, Deleted
       Where ItemPedidoCompra.CodProduto = Deleted.Codigo
	 and Deleted.Codigo <> 8888888 


  Update MovEstoque 
     Set CodProduto = 9999999
     From MovEstoque, Deleted
     Where MovEstoque.CodProduto = Deleted.Codigo
       and Deleted.Codigo <> 8888888 

  Update MovEstoque 
     Set CodProdutoMov = 9999999
     From MovEstoque, Deleted
     Where MovEstoque.CodProdutoMov = Deleted.Codigo
       and Deleted.Codigo <> 8888888 

  Delete EstoqueProduto
     from  EstoqueProduto, Deleted
     where EstoqueProduto.CodProduto = Deleted.Codigo
  
  --Gabriella - 403908   
  Delete EstoqueProdutoCompra
     from  EstoqueProdutoCompra, Deleted
     where EstoqueProdutoCompra.CodProduto = Deleted.Codigo     

  Delete EstoqueDetalhado
     from  EstoqueDetalhado, Deleted
     where EstoqueDetalhado.CodProduto = Deleted.Codigo

  Delete DescricaoProduto
     from  DescricaoProduto, Deleted
     where DescricaoProduto.CodProduto = Deleted.Codigo

  
  Delete CodigoBarraProdutos
    from CodigoBarraProdutos, Deleted
    where CodigoBarraProdutos.CodProduto = Deleted.Codigo

  Delete ProdutosSugeridos
     From ProdutosSugeridos, Deleted
     Where ProdutosSugeridos.CodProduto = Deleted.Codigo or
           ProdutosSugeridos.CodProdutoSugerido = Deleted.Codigo

  -- Rafael chamado 268479
  Delete ItensCatalogo
     From ItensCatalogo, Deleted
     Where ItensCatalogo.CodProduto = Deleted.Codigo
  
  --Gabriella - 353940   
  Delete NFeRelacaoProduto
    from NFeRelacaoProduto, Deleted
    where NFeRelacaoProduto.CodProduto = Deleted.Codigo
  
 --Ronaldo Chamado 408757
  Delete ProdutosFCI 
    From ProdutosFCI, Deleted
  Where ProdutosFCI.CodProduto = Deleted.Codigo
GO


--Ronaldo Chamado 400942
if not exists(select * from sysobjects where name like 'AcumuloOperacaoBancaria')
begin 
  Create Table AcumuloOperacaoBancaria(
    Empresa numeric(2,0) Not Null,
    MesAno Varchar(7)      Collate Latin1_General_CI_AS NOT NULL,
    CodEntidade Varchar(7) Collate Latin1_General_CI_AS NOT NULL, 
    ValorTotalDebito  Decimal(11,2)   Not Null,
    ValorTotalCredito Decimal (11,2)  Not Null,
    StatusTransacao   Smallint not Null,
    TransacaoEmpresas Varchar(50) Collate Latin1_General_CI_AS NOT NULL
  
    CONSTRAINT PK_AcumuloOperacaoBancaria PRIMARY KEY CLUSTERED 
	(
	  Empresa ASC,
	  MesAno ASC,
	  CodEntidade ASC
	) ON [PRIMARY]
  )

  exec sp_bindefault 'dbo.Numero',   'AcumuloOperacaoBancaria.Empresa'
  exec sp_bindefault 'dbo.Caracter', 'AcumuloOperacaoBancaria.MesAno'
  exec sp_bindefault 'dbo.Caracter', 'AcumuloOperacaoBancaria.CodEntidade'
  exec sp_bindefault 'dbo.Numero',   'AcumuloOperacaoBancaria.ValorTotalDebito'
  exec sp_bindefault 'dbo.Numero',   'AcumuloOperacaoBancaria.ValorTotalCredito'
  exec sp_bindefault 'dbo.Numero',   'AcumuloOperacaoBancaria.StatusTransacao'
  exec sp_bindefault 'dbo.Caracter', 'AcumuloOperacaoBancaria.TransacaoEmpresas'
end
Go

if not exists (Select * from dbo.SysColumns Where id = object_id(N'[dbo].[Marcas]') and 
                                                 Name Like 'DescricaoSite' And
                                                 OBJECTPROPERTY(id, N'IsUserTable') = 1 )
begin
  alter table Marcas  add DescricaoSite varchar(50) COLLATE LATIN1_GENERAL_CI_AS
end
go

sp_bindefault 'dbo.Caracter', 'Marcas.DescricaoSite' 
go

update Marcas set
DescricaoSite = ''
where
DescricaoSite is null
go


alter table Marcas  alter column DescricaoSite varchar(50)  COLLATE LATIN1_GENERAL_CI_AS not null
go


if not exists (Select * from dbo.SysColumns Where id = object_id(N'[dbo].[Atividades]') and 
                                                 Name Like 'TipoOrigemRessarcimentoSt' And
                                                 OBJECTPROPERTY(id, N'IsUserTable') = 1 )
begin
  alter table Atividades  add TipoOrigemRessarcimentoSt smallint 
end
go

sp_bindefault 'dbo.Caracter', 'Atividades.TipoOrigemRessarcimentoSt' 
go

update Atividades set
TipoOrigemRessarcimentoSt = 0
where
TipoOrigemRessarcimentoSt is null
go


alter table Atividades  alter column TipoOrigemRessarcimentoSt smallint not null
go

commit tran A