                    
select 	Codigo, 
		grprod, 
        grupodeproduto.descricaoGrupoProduto,
        Descricao, 
        Fabricante, 
        Tipo, 
        Cod_Estado, 
        Dat_UltCompra,
        prc_CusLiqEnt,
        '' as giroPeriodo,
        sum(Qtd_Fisico) as Qtd_Fisico, 
        sum(Qtd_Solicitado) as Qtd_Solicitado, 
        sum(Qtd_Quarentena) as Qtd_Quarentena, 
        sum(Qtd_Disponivel) as Qtd_Disponivel,
        sum(estoqueInicial) as estoqueInicialQtd,
        (sum(estoqueInicial)*ifnull((sum(TotalprcUltimaEntrada)/sum(Qtd_UnidVenda)),0)) as estoqueInicialVal,
        sum(estoqueFinal) as estoqueFinalQtd,
        (sum(estoqueFinal)*ifnull((sum(TotalprcUltimaEntrada)/sum(Qtd_UnidVenda)),0)) as estoqueFinalVal,
        
        round(ifnull(((((sum(estoqueInicial)*ifnull((sum(TotalprcUltimaEntrada)/sum(Qtd_UnidVenda)),0))+(sum(estoqueFinal)*ifnull((sum(TotalprcUltimaEntrada)/sum(Qtd_UnidVenda)),0)) )/2)/sum(TotalprcUltimaEntrada))*(DATEDIFF('2018-01-01 00:00:00','2018-12-31 23:59:59')*-1),0),2) as pme,
       
        ifnull((sum(TotalprcUltimaEntrada)/sum(Qtd_UnidVenda)),0) as vlrUnitMedioCompra,        
        sum(TotalprcUltimaEntrada) as TotalprcUltimaEntrada, 
        sum(qtdNF) as qtdNF, 
        sum(vlrUnit) as vlrUnit, 
        sum(ticketMedioVenda) as ticketMedioVenda, 
        sum(Qtd_UnidVenda) as Qtd_UnidVenda, 
        sum(vlrTotalVenda) as vlrTotalVenda, 
        sum(part) as part,
        ifnull((select 	-- cod_produ,
					-- produ.Descricao,
					-- produ.qtd_disponivel,
                    
					ifnull(round(sum(qtdFisicoTotal * diasParaVencer)/sum(qtdFisicoTotal),0),0) as diasParaVencer
			from loteproddinamicoerp
			left join produ on produ.codigo = loteproddinamicoerp.cod_produ
			where produ.codigo = produtos.codigo
			group by cod_produ,
					produ.Descricao,
					qtd_disponivel
			order by produ.codigo
		),0) as diasParaVencer,
        ifnull((select 	-- cod_produ,
					-- produ.Descricao,
					-- produ.qtd_disponivel,
					ifnull(round(sum(qtdFisicoTotal * diasNoEstoque)/sum(qtdFisicoTotal),0),0) as diasnoestoque
			from loteproddinamicoerp
			left join produ on produ.codigo = loteproddinamicoerp.cod_produ
			where produ.codigo = produtos.codigo
			group by cod_produ,
					produ.Descricao,
					qtd_disponivel
			order by produ.codigo
		),0) as diasnoestoque,
        month('2018-12-31 23:59:59') as qtdMeses,
        (DATEDIFF('2018-01-01 00:00:00','2018-12-31 23:59:59')*-1) as dias
from (
select 	
		Codigo, 
		grprod,
		Descricao, 
		Fabricante, 
		Tipo, 
		Cod_Estado,
		Qtd_Fisico, 
		Qtd_Solicitado, 
		Qtd_Quarentena, 
		Qtd_Disponivel,
        0 as estoqueInicial,
        0 as estoqueFinal,
        Dat_UltCompra,
        ifnull(produ.prc_CusLiqEnt,0) as prc_CusLiqEnt,
		-- day(Dat_Emissao),
		-- month(Dat_Emissao) as mes, 
		-- year(Dat_Emissao) as ano,
        sum(ifnull(`itensnfs`.`PrcUltimaEntrada`,0)*ifnull(`itensnfs`.`Qtd_Produto`,0)) as TotalprcUltimaEntrada,        
        count(num_nota) as qtdNF,
        (sum(ifnull(`itensnfs`.`Vlr_LiqItem`,0))/sum(ifnull(`itensnfs`.`Qtd_Produto`,0))) as vlrUnit,
        (sum(ifnull(`itensnfs`.`Vlr_LiqItem`,0))/count(num_nota)) as ticketMedioVenda,
        sum(ifnull(`itensnfs`.`Qtd_Produto`,0)) as Qtd_UnidVenda,        
        sum(ifnull(`itensnfs`.`Vlr_LiqItem`,0)) as vlrTotalVenda,
        round((sum(ifnull(`itensnfs`.`Vlr_LiqItem`,0))/@totalVendas)*100,2) as part
        
from produ
left join itensnfs on itensnfs.cod_produto = produ.codigo
where 
Dat_Emissao >= '2019-01-01 00:00:00'
and Dat_Emissao <= '2019-02-28 23:59:59'
and (itensnfs.Cod_Clien = 'medicamento' OR Tipo = 'controlado')
and `Cod_Cfop` IN (5102 , 
					6102,
					5403,
					6403,
					6108,
					6922,
					5922,
					6120,
					5120)
group by 
	Codigo, 
	Descricao, 
	Fabricante, 
	Tipo, 
	Cod_Estado,
	Qtd_Fisico, 
	Qtd_Solicitado, 
	Qtd_Quarentena, 
	Qtd_Disponivel,
    Dat_UltCompra,
    prc_CusLiqEnt,
    grprod

UNION ALL
select 	Codigo, 
		grprod,
		Descricao, 
		Fabricante, 
		Tipo, 
		Cod_Estado,
		Qtd_Fisico, 
		Qtd_Solicitado, 
		Qtd_Quarentena, 
		Qtd_Disponivel,
        ifnull((select Qtd_SldAtu
			from prsld
			where 
			Dat_Movime <= '2018-01-01 00:00:00'
			and Cod_Produt = produ.Codigo 
			order by Dat_Movime desc
			limit 1),0) as estoqueInicial,
		ifnull((select Qtd_SldAtu
			from prsld
			where 
			Dat_Movime <= '2018-12-31 23:59:59'
			and Cod_Produt = produ.Codigo  
			order by Dat_Movime desc
			limit 1),0) as estoqueFinal,
		Dat_UltCompra,
        ifnull(produ.prc_CusLiqEnt,0) as prc_CusLiqEnt,
        0 as TotalprcUltimaEntrada,
        0 as qtdNF,
        0 as vlrUnit,
        0 as ticketMedioVenda,
        0 as Qtd_UnidVenda,
        0 as vlrTotalVenda,
        0 as part
from produ
	where
		Qtd_Disponivel > 0
        and (Tipo = 'medicamento' OR Tipo = 'controlado')
) produtos
left join 
	grupodeproduto on grupodeproduto.idgrupoDeProduto = produtos.grprod
where
	((Qtd_Disponivel > 0) or (Qtd_UnidVenda > 0))
    -- and Codigo = 2538
group by 
	Codigo, 
	Descricao, 
	Fabricante, 
	Tipo, 
	Cod_Estado,
	Qtd_Fisico, 
	Qtd_Solicitado, 
	Qtd_Quarentena, 
	Qtd_Disponivel,
    Dat_UltCompra,
    prc_CusLiqEnt,
    grprod
order by part desc;


/*
select Qtd_SldAtu
from prsld
where 
Dat_Movime <= '2018-01-01 00:00:00'
and Cod_Produt = 7307 
order by Dat_Movime desc
limit 1
*/
