USE [TryNFeOnline]
GO

ALTER TABLE [dbo].[estoqueAjustes] ADD 
[idPedidoProduto] [int] NULL
GO
ALTER TABLE [dbo].[parceiro] ADD 
[idnEstrangeiro] [bit] NULL,
[numeroIdentidadeEstrangeiro] [int] NULL
GO
ALTER TABLE [dbo].[ProdutoLote] ADD 
[idFornecedorAvulso] [int] NULL
GO
ALTER TABLE [dbo].[SpedPlanoContas] ADD 
[cfop] [varchar] (500) COLLATE Latin1_General_CI_AS NULL
GO
CREATE TABLE [dbo].[NFAvulsa]
(
	[idNotaFiscal] [int] NOT NULL,
	[idParceiro] [int] NOT NULL,
	[cnpj] [varchar] (14) COLLATE Latin1_General_CI_AS NULL,
	[orgao] [varchar] (60) COLLATE Latin1_General_CI_AS NULL,
	[matricula] [varchar] (60) COLLATE Latin1_General_CI_AS NULL,
	[agente] [varchar] (60) COLLATE Latin1_General_CI_AS NULL,
	[fone] [varchar] (14) COLLATE Latin1_General_CI_AS NULL,
	[uf] [varchar] (5) COLLATE Latin1_General_CI_AS NULL,
	[numeroDAR] [varchar] (60) COLLATE Latin1_General_CI_AS NULL,
	[dataEmissaoDAR] [date] NULL,
	[valorDAR] [decimal] (18,2) NULL,
	[reparticaoFiscal] [varchar] (60) COLLATE Latin1_General_CI_AS NULL,
	[dataPagamentoDAR] [date] NULL,
	CONSTRAINT [PK_NFAvulsa] PRIMARY KEY CLUSTERED
	(
		[idNotaFiscal] ASC
	) WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY  = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[Reports]
(
	[id] [int] IDENTITY (1,1) NOT NULL,
	[descricao] [varchar] (50) COLLATE Latin1_General_CI_AS NOT NULL,
	[idReportsGrupo] [int] NOT NULL,
	[xml] [xml] NOT NULL,
	CONSTRAINT [PK_Reports] PRIMARY KEY CLUSTERED
	(
		[id] ASC
	) WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY  = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

CREATE TABLE [dbo].[ReportsGrupos]
(
	[id] [int] IDENTITY (1,1) NOT NULL,
	[descricao] [varchar] (50) COLLATE Latin1_General_CI_AS NOT NULL,
	[idnInativo] [bit] NOT NULL,
	CONSTRAINT [PK_ReportsGrupos] PRIMARY KEY CLUSTERED
	(
		[id] ASC
	) WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY  = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[ReportsRestricoes]
(
	[id] [int] IDENTITY (1,1) NOT NULL,
	[idReports] [int] NOT NULL,
	[idOperador] [int] NULL,
	[idGrupoOperador] [int] NULL,
	CONSTRAINT [PK_ReportsRestricoes] PRIMARY KEY CLUSTERED
	(
		[id] ASC
	) WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY  = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

ALTER FUNCTION [dbo].[EstoqueMovimento]
(
	@dataInf Date = null,
	@idEmitenteInf int,
	@idProdutoInf int = 0,
	@idProdutoClassificacaoInf int = 0,
	@idContaInf int = 0,
	@dataInicial Date = null
)
RETURNS 
@Resultado TABLE 
(
		idProduto int,
		idProdutoClassificacao int,
		dscProduto varchar(240),
		codigoProdutoClasse varchar(50),
		preco decimal(18,4),
		precoCadastro decimal(18,4),
		custo decimal(18,4),
		unidadeMedida varchar(30),
		unidadeMedidaConvertida varchar(30),
		fatorConversao decimal(18,4),
		qtd decimal(18,4),
		idOperacao int,
		idnOperacao varchar(5),
		idConta int,
		dscConta varchar(200),		
		numeroDocumento varchar(50) null,
		dscOperacao varchar(100),
		data datetime,
		idGrupo int,
		dscGrupo varchar(100),
		idNF int
)
AS
BEGIN

	declare @data datetime = @dataInf;
	declare @idEmitente int = @idEmitenteInf;
	declare @idProduto int = 0;
	declare @idProdutoClassificacao int = 0;
	declare @idConta int = 0;

	--declare @idnConsiderarPedidosFaturadosNoEstoque bit = 0;

	--SET @idnConsiderarPedidosFaturadosNoEstoque = (select coalesce(idnConsiderarPedidosFaturadosNoEstoque, 0) from configuracoes)
	
	declare @idnConsiderarPedidosFaturadosNoEstoque bit = 0;
	
	SET @idnConsiderarPedidosFaturadosNoEstoque = (select coalesce(valor, 'false') from ConfiguracoesValorParametro('idnConsiderarPedidosFaturadosNoEstoque'))

	
	if (@idContaInf > 0)
		SET @idConta = @idContaInf;
	
	if (@idProdutoClassificacaoInf > 0)
		SET @idProdutoClassificacao = @idProdutoClassificacaoInf;
	
	if (@idProdutoInf > 0)
		SET @idProduto = @idProdutoInf;
	
	if (@data is null)
		SET @data = (SELECT GETDATE());
			
	
	declare @ItensEntradaSaida TABLE
	(
		idProduto int,
		idProdutoClassificacao int,
		dscProduto varchar(240),
		codigoProdutoClasse varchar(50),
		preco decimal(18,4),
		precoCadastro decimal(18,4),
		custo decimal(18,4),
		unidadeMedida varchar(30),
		unidadeMedidaConvertida varchar(30),
		fatorConversao decimal(18,4),
		qtd decimal(18,4),
		idOperacao int,
		idnOperacao varchar(5),
		idConta int,
		dscConta varchar(200),		
		numeroDocumento varchar(50) null,
		dscOperacao varchar(100),
		data datetime,
		idNF int
	)
	
	--Notas de entrada / Saida
	INSERT INTO @ItensEntradaSaida
	select 
		np.idProduto, 
		np.idProdutoClassificacao, 
		(case when np.idProdutoClassificacao is not null then pr.descricao + ' - ' + coalesce(pc.descricao, '') else pr.descricao end),
		(case when np.idProdutoClassificacao is not null then cast(pr.id as varchar(47)) + replace((case when pc.sequencia > 999 then STR(pc.sequencia, 4) else STR(pc.sequencia, 3) end), space(1), '0') else cast(pr.id as varchar(50)) end),
		(case when np.qcom > 0 then (coalesce(np.vuncom, 0) - coalesce(np.vdesc / np.qcom, 0)) else (coalesce(np.vuncom, 0) - coalesce(np.vdesc, 0)) end),
		(case when np.idProdutoClassificacao is not null then (case when pc.vuncom > 0 then pc.vuncom else pr.vuncom end) else pr.vuncom end),
		np.precoCusto,
		upper(coalesce(pr.ucom, '')),
		upper(coalesce(np.ucom, '')),
		--Se não tem a quantidade real a ser considerada para o estoque, e as unidades de medida são diferentes, seleciona o fator de conversão
		(case when pr.ucom <> np.ucom and coalesce(np.qcomEstoque, 0) = 0 then (select top 1 pu.fatorConversao from produtoUnidade pu where (pu.idProduto = np.idProduto) and (pu.unidadeMedida = np.ucom)) else 0 end) as fatorConversao,
		(case when 
			(case when ecp.idnOperacao = '=' then (case when op.idnES = 0 then '+' else '-' end) else ecp.idnOperacao end) = '-' then
			(case when coalesce(np.qcomEstoque, 0) != 0 then np.qcomEstoque else np.qcom end) * -1
			else
			(case when coalesce(np.qcomEstoque, 0) != 0 then np.qcomEstoque else np.qcom end) --Considera a quantidade a ser usada para o estoque caso tenha sido informada
			end),
		nf.idOperacao,
		(case when ecp.idnOperacao = '=' then (case when op.idnES = 0 then '+' else '-' end) else ecp.idnOperacao end),
		ecp.idConta, 
		ec.descricao,
		(case when nf.numero > 0 then nf.numero else nf.numeroMovimento end),
		op.descricao as dscOperacao,
		(case when nfc.dataEntradaEstoque is not null then cast(nfc.dataEntradaEstoque as date) else (cast(nf.dataEmissao as date)) end),
		nf.id
		from nfproduto np
		inner join notafiscal nf on nf.id = np.idNotaFiscal
		inner join nfemitente nfe on nfe.idnotafiscal = np.idnotafiscal
		inner join produto pr on pr.id = np.idProduto
		inner join operacao op on op.id = nf.idOperacao
		inner join EstoqueContaOperacao ecp on ecp.idOperacao = nf.idOperacao
		inner join EstoqueConta ec on ec.id = ecp.idConta
		left join NFEstoqueContas nfc on nfc.idNotaFiscal = nf.id and nfc.idContaEstoque = ecp.idConta
		left join produtoClassificacao pc on pc.id = np.idProdutoClassificacao
		where ((nf.nfeCstat = 100) or (nf.nfeCstat = 150))
		and   (nf.nfeTpAmb = 1)
		--and   (cast(nf.dataEmissao as date) <= @data)
		and   ((case when nfc.dataEntradaEstoque is not null then cast(nfc.dataEntradaEstoque as date) else (cast(nf.dataEmissao as date)) end) <= @data)
		and   (((@dataInicial is not null) and ((case when nfc.dataEntradaEstoque is not null then cast(nfc.dataEntradaEstoque as date) else (cast(nf.dataEmissao as date)) end) >= @dataInicial)) or (@dataInicial is null))
		and   ((op.idnNaoCalcularEstoque is null) or (op.idnNaoCalcularEstoque = 0))
		and   (nfe.idEmitente = @idEmitente)		
		and   ((np.idProduto = @idProduto) or (@idProduto = 0))
		and   ((np.idProdutoClassificacao = @idProdutoClassificacao) or (@idProdutoClassificacao = 0))
		and   (pr.idnControlaEstoque = 1)
		and   ((np.idnItemCanceladoCF is null) or (np.idnItemCanceladoCF != 1))
		and   ((ecp.idConta = @idConta) or (@idConta = 0))
		and	  (coalesce(nf.idnIgnorarEstoque, 0) = 0)
		and ((coalesce(nfc.idnHabilitado, 0) = 1) or (nfc.id is null))
	
	--Ajustes de estoque
	INSERT INTO @ItensEntradaSaida
		select 
			ea.idProduto, 
			ea.idProdutoClassificacao,
			(case when ea.idProdutoClassificacao is not null then pr.descricao + ' - ' + coalesce(pc.descricao, '') else pr.descricao end),
			(case when ea.idProdutoClassificacao is not null then cast(pr.id as varchar(20)) + replace((case when pc.sequencia > 999 then STR(pc.sequencia, 4) else STR(pc.sequencia, 3) end), space(1), '0') else cast(pr.id as varchar(20)) end),
			ea.unitario, 
			(case when ea.idProdutoClassificacao is not null then (case when pc.vuncom > 0 then pc.vuncom else pr.vuncom end) else pr.vuncom end),
			ea.valor,
			upper(coalesce(pr.ucom, '')),
			upper(coalesce(ea.unidadeMedida, '')),
			(case when pr.ucom <> ea.unidadeMedida then (select top 1 pu.fatorConversao from produtoUnidade pu where (pu.idProduto = ea.idProduto) and (pu.unidadeMedida = ea.unidadeMedida)) else 0 end) as fatorConversao,
			(case when
				(case when ecp.idnOperacao = '=' then (case when ea.idnES = 0 then '+' else '-' end) else ecp.idnOperacao end) = '-' then
				ea.qtd * -1
				else
				ea.qtd end),
			ea.idOperacao,
			(case when ecp.idnOperacao = '=' then (case when ea.idnES = 0 then '+' else '-' end) else ecp.idnOperacao end),
			ecp.idConta, 
			ec.descricao,
			ea.numeroDocumento,
			op.descricao as dscOperacao,
			ea.data,
			0
		from estoqueAjustes ea
		inner join produto pr on pr.id = ea.idProduto
		inner join operacao op on op.id = ea.idOperacao
		inner join EstoqueContaOperacao ecp on ecp.idOperacao = ea.idOperacao
		inner join EstoqueConta ec on ec.id = ecp.idConta
		left join ProdutoClassificacao pc on pc.id = ea.idProdutoClassificacao
		left join notafiscal nf on nf.id = ea.idNotaFiscal
		where (cast(ea.data as date) <= @data)
		and   (((@dataInicial is not null) and (cast(ea.data as date) >= @dataInicial)) or (@dataInicial is null))
		and   (ea.idEmitente = @idEmitente)
		and   ((op.idnNaoCalcularEstoque is null) or (op.idnNaoCalcularEstoque = 0))
		and   ((ea.idProduto = @idProduto) or (@idProduto = 0))
		and   ((ea.idProdutoClassificacao = @idProdutoClassificacao) or (@idProdutoClassificacao = 0))
		and   (pr.idnControlaEstoque = 1)
		and   ((ecp.idConta = @idConta) or (@idConta = 0))
		and ((ea.idNotaFiscal is null) or (nf.nfeCstat = 100 or nf.nfeCstat = 150))
		
	--Produtos alocados nas ordens de servi?o
	INSERT INTO @ItensEntradaSaida
		select 
			osp.idProduto, 
			osp.idProdutoClassificacao,
			(case when osp.idProdutoClassificacao is not null then pr.descricao + ' - ' + coalesce(pc.descricao, '') else pr.descricao end),
			(case when osp.idProdutoClassificacao is not null then cast(pr.id as varchar(20)) + replace((case when pc.sequencia > 999 then STR(pc.sequencia, 4) else STR(pc.sequencia, 3) end), space(1), '0') else cast(pr.id as varchar(20)) end),
			osp.precoUnitario, 
			(case when osp.idProdutoClassificacao is not null then (case when pc.vuncom > 0 then pc.vuncom else pr.vuncom end) else pr.vuncom end),
			osp.custoTotal / (case when osp.quantidade <> 0 then osp.quantidade else 1 end),
			upper(coalesce(pr.ucom, '')),
			upper(coalesce(osp.ucom, '')),
			(case when pr.ucom <> osp.ucom then (select top 1 pu.fatorConversao from produtoUnidade pu where (pu.idProduto = osp.idProduto) and (pu.unidadeMedida = osp.ucom)) else 0 end) as fatorConversao,
			(case when 
				(case when ecp.idnOperacao = '=' then (case when op.idnES = 0 then '+' else '-' end) else ecp.idnOperacao end) = '-' then
				osp.quantidade * -1 else osp.quantidade end),
			os.idOperacao,
			(case when ecp.idnOperacao = '=' then (case when op.idnES = 0 then '+' else '-' end) else ecp.idnOperacao end),
			ec.id,
			ec.descricao,
			os.numeroOS,
			op.descricao,
			(case when osp.dataHora is not null then osp.dataHora else os.dataHora end),
			0
		from OrdemServicoProduto osp
		inner join produto pr on pr.id = osp.idProduto
		inner join OrdemServico os on os.id = osp.idOrdemServico
		inner join operacao op on op.id = os.idOperacao
		inner join EstoqueContaOperacao ecp on ecp.idOperacao = os.idOperacao
		inner join EstoqueConta ec on ec.id = ecp.idConta
		left join ProdutoClassificacao pc on pc.id = osp.idProdutoClassificacao	
		where ((case when osp.dataHora is not null then cast(osp.dataHora as date) else cast(os.dataHora as date) end) <= @data)
		and   (((@dataInicial is not null) and (cast(os.dataHora as date) >= @dataInicial)) or (@dataInicial is null))
		and   (os.idEmitente = @idEmitente)
		and   ((osp.idProduto = @idProduto) or (@idProduto = 0))
		and   ((osp.idProdutoClassificacao = @idProdutoClassificacao) or (@idProdutoClassificacao = 0))
		and   ((op.idnNaoCalcularEstoque is null) or (op.idnNaoCalcularEstoque = 0))
		and   (pr.idnControlaEstoque = 1)
		and   ((ecp.idConta = @idConta) or (@idConta = 0))
		and ((os.idnCancelada = 0) or (os.idnCancelada is null))
	
	--Pedidos
	INSERT INTO @ItensEntradaSaida
		select
		pp.idProduto,
		pp.idProdutoClassificacao,
		(case when pp.idProdutoClassificacao is not null then pr.descricao + ' - ' + coalesce(pc.descricao, '') else pr.descricao end),
		(case when pp.idProdutoClassificacao is not null then cast(pr.id as varchar(20)) + replace((case when pc.sequencia > 999 then STR(pc.sequencia, 4) else STR(pc.sequencia, 3) end), space(1), '0') else cast(pr.id as varchar(20)) end),
		pp.vuncom, 
		(case when pp.idProdutoClassificacao is not null then (case when pc.vuncom > 0 then pc.vuncom else pr.vuncom end) else pr.vuncom end),
		pp.valorCusto,
		upper(coalesce(pr.ucom, '')),
		upper(coalesce(pp.ucom, '')),
		(case when pr.ucom <> pp.ucom then (select top 1 pu.fatorConversao from produtoUnidade pu where (pu.idProduto = pp.idProduto) and (pu.unidadeMedida = pp.ucom)) else 0 end) as fatorConversao,
		(case when (case when ecp.idnOperacao = '=' then (case when op.idnES = 0 then '+' else '-' end) else ecp.idnOperacao end) = '-' then
			(pp.qcom - coalesce(pp.qtdFaturada, 0)) * -1
			else (pp.qcom - coalesce(pp.qtdFaturada, 0)) end),
		pe.idOperacao,
		(case when ecp.idnOperacao = '=' then (case when op.idnES = 0 then '+' else '-' end) else ecp.idnOperacao end),
		ec.id,
		ec.descricao,
		(case when pe.numeroPedido is not null then cast(pe.numeroPedido as int) else null end),
		op.descricao as dscOperacao,
		pe.dataPedido,
		0
		from pedidoProduto pp
		inner join produto pr on pr.id = pp.idProduto
		inner join pedido pe on pe.id = pp.idPedido
		inner join operacao op on op.id = pe.idOperacao
		inner join EstoqueContaOperacao ecp on ecp.idOperacao = pe.idOperacao
		inner join EstoqueConta ec on ec.id = ecp.idConta
		left join ProdutoClassificacao pc on pc.id = pp.idProdutoClassificacao
		where (cast(pe.dataPedido as date) <= @data)
		and   (((@dataInicial is not null) and (cast(pe.dataPedido as date) >= @dataInicial)) or (@dataInicial is null))
		--and   (((pe.idnFaturado is null) or (pe.idnFaturado = 0)) or ((coalesce(pe.idnFaturado, 0) <> 0) and (pe.id not in (select idPedido from pedidoFaturado))))
		and   ((@idnConsiderarPedidosFaturadosNoEstoque = 1) or (((pe.idnFaturado is null) or (pe.idnFaturado = 0)) or ((coalesce(pe.idnFaturado, 0) <> 0) and (pe.id not in (select idPedido from pedidoFaturado)))))
		and   ((pe.idnCancelado is null) or (pe.idnCancelado = 0))
		and   (pe.idEmitente = @idEmitente)
		and   ((pp.idProduto = @idProduto) or (@idProduto = 0))
		and   ((pp.idProdutoClassificacao = @idProdutoClassificacao) or (@idProdutoClassificacao = 0))
		and   ((op.idnNaoCalcularEstoque is null) or (op.idnNaoCalcularEstoque = 0))
		and   (pr.idnControlaEstoque = 1)		
		and	  (coalesce(pe.idnIgnorarEstoque, 0) = 0)
		and   ((ecp.idConta = @idConta) or (@idConta = 0))	
		
	--Condicional
	INSERT INTO @ItensEntradaSaida
		select 
			cp.idProduto, 
			cp.idProdutoClassificacao,
			(case when cp.idProdutoClassificacao is not null then pr.descricao + ' - ' + coalesce(pc.descricao, '') else pr.descricao end),
			(case when cp.idProdutoClassificacao is not null then cast(pr.id as varchar(20)) + replace((case when pc.sequencia > 999 then STR(pc.sequencia, 4) else STR(pc.sequencia, 3) end), space(1), '0') else cast(pr.id as varchar(20)) end),
			cp.vuncom, 
			(case when cp.idProdutoClassificacao is not null then (case when pc.vuncom > 0 then pc.vuncom else pr.vuncom end) else pr.vuncom end),
			0,
			upper(coalesce(pr.ucom, '')),
			upper(coalesce(cp.ucom, '')),
			0 as fatorConversao,
			(case when (case when ecp.idnOperacao = '=' then (case when op.idnES = 0 then '+' else '-' end) else ecp.idnOperacao end) = '-' then
		      (cp.qcom - (coalesce(cp.qtdDevolucao, 0)  + coalesce(cp.qtdFaturada, 0))) * -1
		      else (cp.qcom - (coalesce(cp.qtdDevolucao, 0)  + coalesce(cp.qtdFaturada, 0))) end),
			co.idOperacao,
			(case when ecp.idnOperacao = '=' then (case when op.idnES = 0 then '+' else '-' end) else ecp.idnOperacao end),
			ec.id,
			ec.descricao,
			(case when co.numero is not null then cast(co.numero as int) else null end),
			op.descricao as dscOperacao,
			co.dataEmissao,
			0
		from CondicionalProduto cp
		inner join produto pr on pr.id = cp.idProduto
		inner join Condicional co on co.id = cp.idCondicional		
		inner join operacao op on op.id = co.idOperacao
		inner join EstoqueContaOperacao ecp on ecp.idOperacao = co.idOperacao
		inner join EstoqueConta ec on ec.id = ecp.idConta
		left join ProdutoClassificacao pc on pc.id = cp.idProdutoClassificacao	
		where (cast(co.dataEmissao as date) <= @data)
		and   (((@dataInicial is not null) and (cast(co.dataEmissao as date) >= @dataInicial)) or (@dataInicial is null))
		and   ((co.idnFechado is null) or (co.idnFechado = 0))
		and   (co.idEmitente = @idEmitente)
		and   ((cp.idProduto = @idProduto) or (@idProduto = 0))
		and   ((cp.idProdutoClassificacao = @idProdutoClassificacao) or (@idProdutoClassificacao = 0))
		and   ((op.idnNaoCalcularEstoque is null) or (op.idnNaoCalcularEstoque = 0))
		and   (pr.idnControlaEstoque = 1)		
		and   ((ecp.idConta = @idConta) or (@idConta = 0))

	--Consignacao
	INSERT INTO @ItensEntradaSaida
		select 
			cp.idProduto, 
			cp.idProdutoClassificacao,
			(case when cp.idProdutoClassificacao is not null then pr.descricao + ' - ' + coalesce(pc.descricao, '') else pr.descricao end),
			(case when cp.idProdutoClassificacao is not null then cast(pr.id as varchar(20)) + replace((case when pc.sequencia > 999 then STR(pc.sequencia, 4) else STR(pc.sequencia, 3) end), space(1), '0') else cast(pr.id as varchar(20)) end),
			cp.vuncom, 
			(case when cp.idProdutoClassificacao is not null then (case when pc.vuncom > 0 then pc.vuncom else pr.vuncom end) else pr.vuncom end),
			0,
			upper(coalesce(pr.ucom, '')),
			upper(coalesce(cp.ucom, '')),
			0 as fatorConversao,
			(case when (case when ecp.idnOperacao = '=' then (case when op.idnES = 0 then '+' else '-' end) else ecp.idnOperacao end) = '-' then
		      cp.qcom * -1
		      else cp.qcom end),
			co.idOperacao,
			(case when ecp.idnOperacao = '=' then (case when op.idnES = 0 then '+' else '-' end) else ecp.idnOperacao end),
			ec.id,
			ec.descricao,
			(case when co.numeroConsignacao is not null then cast(co.numeroConsignacao as int) else null end),
			op.descricao as dscOperacao,
			co.data,
			0
		from ConsignacaoProduto cp
		inner join produto pr on pr.id = cp.idProduto
		inner join Consignacao co on co.id = cp.idConsignacao		
		inner join operacao op on op.id = co.idOperacao
		inner join EstoqueContaOperacao ecp on ecp.idOperacao = co.idOperacao
		inner join EstoqueConta ec on ec.id = ecp.idConta
		left join ProdutoClassificacao pc on pc.id = cp.idProdutoClassificacao	
		where (cast(co.data as date) <= @data)
		and   (((@dataInicial is not null) and (cast(co.data as date) >= @dataInicial)) or (@dataInicial is null))
		--and   ((co.idnFechado is null) or (co.idnFechado = 0))
		and   (co.idEmitente = @idEmitente)
		and   ((cp.idProduto = @idProduto) or (@idProduto = 0))
		and   ((cp.idProdutoClassificacao = @idProdutoClassificacao) or (@idProdutoClassificacao = 0))
		and   ((op.idnNaoCalcularEstoque is null) or (op.idnNaoCalcularEstoque = 0))
		and   (pr.idnControlaEstoque = 1)		
		and   ((ecp.idConta = @idConta) or (@idConta = 0))		

	--atualiza a qtd e o preço dos produtos com unidade de medida diferente da definida no cadastro e efetua a conversão conforme multiplicador	
	UPDATE @ItensEntradaSaida set qtd = qtd * fatorConversao, preco = preco / fatorConversao
	WHERE (unidadeMedidaConvertida <> '')
	and (unidadeMedida <> unidadeMedidaConvertida)
	and (fatorConversao > 0)
	
	INSERT INTO @Resultado
		SELECT ies.idProduto,
			   ies.idProdutoClassificacao,
			   ies.dscProduto,
			   ies.codigoProdutoClasse,
			   ies.preco,
			   ies.precoCadastro,
			   ies.custo,
			   ies.unidadeMedida,
			   ies.unidadeMedidaConvertida,
			   ies.fatorConversao,
			   ies.qtd,
			   ies.idOperacao,
			   ies.idnOperacao,
			   ies.idConta,
			   ies.dscConta,
			   ies.numeroDocumento,
			   ies.dscOperacao,
			   ies.data,
			   pr.idGrupo,
			   pg.descricao,
			   ies.idNF
	from @ItensEntradaSaida ies
	inner join produto pr on pr.id = ies.idProduto
	left join produtoGrupo pg on pg.id = pr.idGrupo
	order by ies.data
	
	RETURN 
END
GO
ALTER FUNCTION [dbo].[EstoqueProdutos2]
(
	@dataInf Datetime = null,
	@idEmitenteInf int,
	@idProdutoInf int = 0,
	@idProdutoClassificacaoInf int = 0,
	@idContaInf int = 0, 
	@idGrupoInf int = 0,
	@idnMostrarProdutosBaixadosInf bit = 0,
	@idnMostrarProdutosQtdNegativaInf bit = 1,
    @Produtos ListaProdutos READONLY,
	@selecaoMultipla int = 0,
	@idnRetornarTodosProdutos bit = 0
)
RETURNS 
@Resultado TABLE 
(
		idProduto int,
		idProdutoClassificacao int NULL,	
		dscProdutoClasse varchar(240),			
		qtd decimal(18,4),
		unidadeMedida varchar(30),
		codigoProdutoClasse varchar(50),
		precoCadastro decimal(18,4), 
		precoEntradaCadastro decimal(18,4),
		idGrupo int null,
		dscGrupo varchar(100) null,
		idConta int,
		dscConta varchar(200),
		precoCalculado decimal(18,10),
		custoCalculado decimal(18,4),
		refFabrica varchar(50),
		precoMinimo decimal(18,10),
		idnPrecoOferta bit
)
AS
BEGIN
	
	
	
	declare @data datetime = @dataInf;
	declare @idEmitente int = @idEmitenteInf;
	declare @idProduto int = 0;
	declare @idProdutoClassificacao int = 0;
	declare @idConta int = 0;
	declare @idGrupo int = 0;
	declare @idnMostrarProdutosBaixados bit = @idnMostrarProdutosBaixadosInf;
	declare @idnMostrarProdutosQtdNegativa bit = @idnMostrarProdutosQtdNegativaInf;
	
	if (@idGrupoInf > 0)
		SET @idGrupo = @idGrupoInf;
	
	if (@idContaInf > 0)
		SET @idConta = @idContaInf;
		
	if (@idProdutoClassificacaoInf > 0)
		SET @idProdutoClassificacao = @idProdutoClassificacaoInf;
	
	if (@idProdutoInf > 0)
		SET @idProduto = @idProdutoInf;
	
	if (@data is null)
		SET @data = (SELECT GETDATE());
		
	/*declare @idnConsiderarPedidosFaturadosNoEstoque bit = 0;

	SET @idnConsiderarPedidosFaturadosNoEstoque = (select coalesce(idnConsiderarPedidosFaturadosNoEstoque, 0) from configuracoes)*/

--	declare @exibirCustoLetras bit = (select coalesce(valor, 'false') from ConfiguracoesValorParametro('idnMostrarCustoEmLetras'))
	
	declare @idnConsiderarPedidosFaturadosNoEstoque bit = 0;
	
	SET @idnConsiderarPedidosFaturadosNoEstoque = (select coalesce(valor, 'false') from ConfiguracoesValorParametro('idnConsiderarPedidosFaturadosNoEstoque'))


	
	declare @ItensEntradaSaida TABLE
	(
		idProduto int,
		idProdutoClassificacao int,
		dscProduto varchar(240),
		codigoProdutoClasse varchar(50),
		preco decimal(18,10),
		precoCadastro decimal(18,4),
		precoEntradaCadastro decimal(18,4),
		unidadeMedida varchar(30),
		unidadeMedidaConvertida varchar(30),
		fatorConversao decimal(18,4),
		qtd decimal(18,4),
		idOperacao int,
		idnOperacao varchar(5),
		idConta int,
		dscConta varchar(200)		
	)
	
	--Notas de entrada / Saida
	INSERT INTO @ItensEntradaSaida
	select 
		np.idProduto, 
		np.idProdutoClassificacao, 
		(case when np.idProdutoClassificacao is not null then pr.descricao + ' - ' + coalesce(pc.descricao, '') else pr.descricao end),
		(case when np.idProdutoClassificacao is not null then cast(pr.id as varchar(47)) + replace((case when pc.sequencia > 999 then STR(pc.sequencia, 4) else STR(pc.sequencia, 3) end), space(1), '0') else cast(pr.id as varchar(50)) end),
		coalesce(np.vuncom, 0),
		(case when np.idProdutoClassificacao is not null then (case when pc.vuncom > 0 then pc.vuncom else pr.vuncom end) else pr.vuncom end),
		(case when np.idProdutoClassificacao is not null then (case when pc.precoEntrada > 0 then pc.precoEntrada else pr.precoEntrada end) else pr.precoEntrada end),
		upper(coalesce(pr.ucom, '')),
		upper(coalesce(np.ucom, '')),
		--Se não tem a quantidade real a ser considerada para o estoque, e as unidades de medida são diferentes, seleciona o fator de conversão
		(case when pr.ucom <> np.ucom and coalesce(np.qcomEstoque, 0) = 0 then (select top 1 pu.fatorConversao from produtoUnidade pu where (pu.idProduto = np.idProduto) and (pu.unidadeMedida = np.ucom)) else 0 end) as fatorConversao,
		(case when 
			(case when ecp.idnOperacao = '=' then (case when op.idnES = 0 then '+' else '-' end) else ecp.idnOperacao end) = '-' then
			(case when coalesce(np.qcomEstoque, 0) != 0 then np.qcomEstoque else np.qcom end) * -1
			else
			(case when coalesce(np.qcomEstoque, 0) != 0 then np.qcomEstoque else np.qcom end) --Considera a quantidade a ser usada para o estoque caso tenha sido informada
			end),
		nf.idOperacao,
		(case when ecp.idnOperacao = '=' then (case when op.idnES = 0 then '+' else '-' end) else ecp.idnOperacao end),
		ecp.idConta, 
		ec.descricao
		from nfproduto np
		inner join notafiscal nf on nf.id = np.idNotaFiscal
		inner join nfemitente nfe on nfe.idnotafiscal = np.idnotafiscal
		inner join produto pr on pr.id = np.idProduto
		inner join operacao op on op.id = nf.idOperacao
		inner join EstoqueContaOperacao ecp on ecp.idOperacao = nf.idOperacao
		left join NFEstoqueContas nfc on nfc.idNotaFiscal = nf.id and nfc.idContaEstoque = ecp.idConta
		inner join EstoqueConta ec on ec.id = ecp.idConta
		left join produtoClassificacao pc on pc.id = np.idProdutoClassificacao
		where ((nf.nfeCstat = 100) or (nf.nfeCstat = 150))
		and   (nf.nfeTpAmb = 1)
		--and   (cast(nf.dataEmissao as date) <= @data)
		and   ((case when nfc.dataEntradaEstoque is not null then cast(nfc.dataEntradaEstoque as date) else (cast(nf.dataEmissao as date)) end) <= @data)
		and   ((op.idnNaoCalcularEstoque is null) or (op.idnNaoCalcularEstoque = 0))
		and   (nfe.idEmitente = @idEmitente)
		and   ((np.idProduto = @idProduto) or (@idProduto = 0))
		and   ((np.idProdutoClassificacao = @idProdutoClassificacao) or (@idProdutoClassificacao = 0))
		and   (((@selecaoMultipla = 1) and  (np.idProduto in (select idProduto from @Produtos))) or (@selecaoMultipla = 0))
		and   (((@selecaoMultipla = 1) and  ((np.idProdutoClassificacao in (select idProdutoClassificacao from @Produtos))) or (@selecaoMultipla = 0)) or (np.idProdutoClassificacao is null))
		and   ((np.idnItemCanceladoCF is null) or (np.idnItemCanceladoCF != 1))
		and   (pr.idnControlaEstoque = 1)
		and ((@idnMostrarProdutosBaixados = 1) OR (coalesce(pr.idnBaixa,0) = 0))
		and ((@idnMostrarProdutosBaixados = 1) OR (coalesce(pc.idnBaixado,0) = 0))
		and   ((ecp.idConta = @idConta) or (@idConta = 0))
		and	  (coalesce(nf.idnIgnorarEstoque, 0) = 0)
		and ((coalesce(nfc.idnHabilitado, 0) = 1) or (nfc.id is null))		
	
	--Ajustes de estoque
	INSERT INTO @ItensEntradaSaida
		select 
			ea.idProduto, 
			ea.idProdutoClassificacao,
			(case when ea.idProdutoClassificacao is not null then pr.descricao + ' - ' + coalesce(pc.descricao, '') else pr.descricao end),
			(case when ea.idProdutoClassificacao is not null then cast(pr.id as varchar(20)) + replace((case when pc.sequencia > 999 then STR(pc.sequencia, 4) else STR(pc.sequencia, 3) end), space(1), '0') else cast(pr.id as varchar(20)) end),
			ea.unitario, 
			(case when ea.idProdutoClassificacao is not null then (case when pc.vuncom > 0 then pc.vuncom else pr.vuncom end) else pr.vuncom end),
			(case when ea.idProdutoClassificacao is not null then (case when pc.precoEntrada > 0 then pc.precoEntrada else pr.precoEntrada end) else pr.precoEntrada end),
			upper(coalesce(pr.ucom,'')),
			upper(coalesce(ea.unidadeMedida, '')),
			(case when pr.ucom <> ea.unidadeMedida then (select top 1 pu.fatorConversao from produtoUnidade pu where (pu.idProduto = ea.idProduto) and (pu.unidadeMedida = ea.unidadeMedida)) else 0 end) as fatorConversao,
			(case when
				(case when ecp.idnOperacao = '=' then (case when ea.idnES = 0 then '+' else '-' end) else ecp.idnOperacao end) = '-' then
				ea.qtd * -1
				else
				ea.qtd end),
			ea.idOperacao,
			(case when ecp.idnOperacao = '=' then (case when ea.idnES = 0 then '+' else '-' end) else ecp.idnOperacao end),
			ecp.idConta, 
			ec.descricao
		from estoqueAjustes ea
		inner join produto pr on pr.id = ea.idProduto
		inner join operacao op on op.id = ea.idOperacao
		inner join EstoqueContaOperacao ecp on ecp.idOperacao = ea.idOperacao
		inner join EstoqueConta ec on ec.id = ecp.idConta
		left join ProdutoClassificacao pc on pc.id = ea.idProdutoClassificacao
		left join notafiscal nf on nf.id = ea.idNotaFiscal
		where (cast(ea.data as date) <= @data)
		and   (ea.idEmitente = @idEmitente)
		and   ((ea.idProduto = @idProduto) or (@idProduto = 0))
		and   ((ea.idProdutoClassificacao = @idProdutoClassificacao) or (@idProdutoClassificacao = 0))
		and   (((@selecaoMultipla = 1) and  (ea.idProduto in (select idProduto from @Produtos))) or (@selecaoMultipla = 0))
		and   (((@selecaoMultipla = 1) and  ((ea.idProdutoClassificacao in (select idProdutoClassificacao from @Produtos))) or (@selecaoMultipla = 0)) or (ea.idProdutoClassificacao is null))
		and   (pr.idnControlaEstoque = 1)
		and   ((op.idnNaoCalcularEstoque is null) or (op.idnNaoCalcularEstoque = 0))
		and ((@idnMostrarProdutosBaixados = 1) OR (coalesce(pr.idnBaixa,0) = 0))
		and ((@idnMostrarProdutosBaixados = 1) OR (coalesce(pc.idnBaixado,0) = 0))
		and   ((ecp.idConta = @idConta) or (@idConta = 0))
		and ((ea.idNotaFiscal is null) or (nf.nfeCstat = 100 or nf.nfeCstat = 150))
		
	--Produtos alocados nas ordens de serviço
	INSERT INTO @ItensEntradaSaida
		select 
			osp.idProduto, 
			osp.idProdutoClassificacao,
			(case when osp.idProdutoClassificacao is not null then pr.descricao + ' - ' + coalesce(pc.descricao, '') else pr.descricao end),
			(case when osp.idProdutoClassificacao is not null then cast(pr.id as varchar(20)) + replace((case when pc.sequencia > 999 then STR(pc.sequencia, 4) else STR(pc.sequencia, 3) end), space(1), '0') else cast(pr.id as varchar(20)) end),
			osp.precoUnitario, 
			(case when osp.idProdutoClassificacao is not null then (case when pc.vuncom > 0 then pc.vuncom else pr.vuncom end) else pr.vuncom end),
			(case when osp.idProdutoClassificacao is not null then (case when pc.precoEntrada > 0 then pc.precoEntrada else pr.precoEntrada end) else pr.precoEntrada end),
			upper(coalesce(pr.ucom, '')),
			upper(coalesce(osp.ucom, '')),
			(case when pr.ucom <> osp.ucom then (select top 1 pu.fatorConversao from produtoUnidade pu where (pu.idProduto = osp.idProduto) and (pu.unidadeMedida = osp.ucom)) else 0 end) as fatorConversao,
			(case when 
				(case when ecp.idnOperacao = '=' then (case when op.idnES = 0 then '+' else '-' end) else ecp.idnOperacao end) = '-' then
				osp.quantidade * -1 else osp.quantidade end),
			os.idOperacao,
			(case when ecp.idnOperacao = '=' then (case when op.idnES = 0 then '+' else '-' end) else ecp.idnOperacao end),
			ec.id,
			ec.descricao
		from OrdemServicoProduto osp
		inner join produto pr on pr.id = osp.idProduto
		inner join OrdemServico os on os.id = osp.idOrdemServico
		inner join operacao op on op.id = os.idOperacao
		inner join EstoqueContaOperacao ecp on ecp.idOperacao = os.idOperacao
		inner join EstoqueConta ec on ec.id = ecp.idConta
		left join ProdutoClassificacao pc on pc.id = osp.idProdutoClassificacao
		where ((case when osp.dataHora is not null then cast(osp.dataHora as date) else cast(os.dataHora as date) end) <= @data)
		and   (os.idEmitente = @idEmitente)
		and   ((osp.idProduto = @idProduto) or (@idProduto = 0))
		and   ((osp.idProdutoClassificacao = @idProdutoClassificacao) or (@idProdutoClassificacao = 0))
		and   (((@selecaoMultipla = 1) and  (osp.idProduto in (select idProduto from @Produtos))) or (@selecaoMultipla = 0))
		and   (((@selecaoMultipla = 1) and  ((osp.idProdutoClassificacao in (select idProdutoClassificacao from @Produtos))) or (@selecaoMultipla = 0)) or (osp.idProdutoClassificacao is null))
		and   ((op.idnNaoCalcularEstoque is null) or (op.idnNaoCalcularEstoque = 0))
		and   (pr.idnControlaEstoque = 1)
		and ((@idnMostrarProdutosBaixados = 1) OR (coalesce(pr.idnBaixa,0) = 0))
		and ((@idnMostrarProdutosBaixados = 1) OR (coalesce(pc.idnBaixado,0) = 0))
		and   ((ecp.idConta = @idConta) or (@idConta = 0))
		and ((os.idnCancelada = 0) or (os.idnCancelada is null))

	--Pedidos
	INSERT INTO @ItensEntradaSaida
		select
		pp.idProduto,
		pp.idProdutoClassificacao,
		(case when pp.idProdutoClassificacao is not null then pr.descricao + ' - ' + coalesce(pc.descricao, '') else pr.descricao end),
		(case when pp.idProdutoClassificacao is not null then cast(pr.id as varchar(20)) + replace((case when pc.sequencia > 999 then STR(pc.sequencia, 4) else STR(pc.sequencia, 3) end), space(1), '0') else cast(pr.id as varchar(20)) end),
		pp.vuncom, 
		(case when pp.idProdutoClassificacao is not null then (case when pc.vuncom > 0 then pc.vuncom else pr.vuncom end) else pr.vuncom end),
		(case when pp.idProdutoClassificacao is not null then (case when pc.precoEntrada > 0 then pc.precoEntrada else pr.precoEntrada end) else pr.precoEntrada end),
		upper(coalesce(pr.ucom, '')),
		upper(coalesce(pp.ucom, '')),
		(case when pr.ucom <> pp.ucom then (select top 1 pu.fatorConversao from produtoUnidade pu where (pu.idProduto = pp.idProduto) and (pu.unidadeMedida = pp.ucom)) else 0 end) as fatorConversao,
		(case when (case when ecp.idnOperacao = '=' then (case when op.idnES = 0 then '+' else '-' end) else ecp.idnOperacao end) = '-' then
			(pp.qcom - coalesce(pp.qtdFaturada, 0)) * -1
			else (pp.qcom - coalesce(pp.qtdFaturada, 0)) end),
		pe.idOperacao,
		(case when ecp.idnOperacao = '=' then (case when op.idnES = 0 then '+' else '-' end) else ecp.idnOperacao end),
		ec.id,
		ec.descricao
		from pedidoProduto pp
		inner join produto pr on pr.id = pp.idProduto
		inner join pedido pe on pe.id = pp.idPedido
		inner join operacao op on op.id = pe.idOperacao
		inner join EstoqueContaOperacao ecp on ecp.idOperacao = pe.idOperacao
		inner join EstoqueConta ec on ec.id = ecp.idConta
		left join ProdutoClassificacao pc on pc.id = pp.idProdutoClassificacao
		where (cast(pe.dataPedido as date) <= @data)
		--and   (((pe.idnFaturado is null) or (pe.idnFaturado = 0)) or ((coalesce(pe.idnFaturado, 0) <> 0) and (pe.id not in (select idPedido from pedidoFaturado))))
		and   ((@idnConsiderarPedidosFaturadosNoEstoque = 1) or (((pe.idnFaturado is null) or (pe.idnFaturado = 0)) or ((coalesce(pe.idnFaturado, 0) <> 0) and (pe.id not in (select idPedido from pedidoFaturado)))))
		and   ((pe.idnCancelado is null) or (pe.idnCancelado = 0))
		and ((pe.idnProducao = 1)
		or (((pe.idnProducao is null) or (pe.idnProducao = 0)) and ((op.idnConsiderarEstoqueApenasPedidoEmProducao is null) or (op.idnConsiderarEstoqueApenasPedidoEmProducao = 0))))
		and   (pe.idEmitente = @idEmitente)
		and   ((pp.idProduto = @idProduto) or (@idProduto = 0))
		and   ((pp.idProdutoClassificacao = @idProdutoClassificacao) or (@idProdutoClassificacao = 0))
		and   ((pp.idnCancelado is null) or (pp.idnCancelado = 0))
		and   (((@selecaoMultipla = 1) and  (pp.idProduto in (select idProduto from @Produtos))) or (@selecaoMultipla = 0))
		and   (((@selecaoMultipla = 1) and  ((pp.idProdutoClassificacao in (select idProdutoClassificacao from @Produtos))) or (@selecaoMultipla = 0)) or (pp.idProdutoClassificacao is null))
		and   ((op.idnNaoCalcularEstoque is null) or (op.idnNaoCalcularEstoque = 0))
		and   (pr.idnControlaEstoque = 1)
		and	  (coalesce(pe.idnIgnorarEstoque, 0) = 0)
		and ((@idnMostrarProdutosBaixados = 1) OR (coalesce(pr.idnBaixa,0) = 0))
		and ((@idnMostrarProdutosBaixados = 1) OR (coalesce(pc.idnBaixado,0) = 0))
		and   ((ecp.idConta = @idConta) or (@idConta = 0))

		
	--Condicional
	INSERT INTO @ItensEntradaSaida
		select 
			cp.idProduto, 
			cp.idProdutoClassificacao,
			(case when cp.idProdutoClassificacao is not null then pr.descricao + ' - ' + coalesce(pc.descricao, '') else pr.descricao end),
			(case when cp.idProdutoClassificacao is not null then cast(pr.id as varchar(20)) + replace((case when pc.sequencia > 999 then STR(pc.sequencia, 4) else STR(pc.sequencia, 3) end), space(1), '0') else cast(pr.id as varchar(20)) end),
			cp.vuncom, 
			(case when cp.idProdutoClassificacao is not null then (case when pc.vuncom > 0 then pc.vuncom else pr.vuncom end) else pr.vuncom end),
			(case when cp.idProdutoClassificacao is not null then (case when pc.precoEntrada > 0 then pc.precoEntrada else pr.precoEntrada end) else pr.precoEntrada end),
			upper(coalesce(pr.ucom, '')),
			upper(coalesce(cp.ucom, '')),
			0 as fatorConversao,
			(case when (case when ecp.idnOperacao = '=' then (case when op.idnES = 0 then '+' else '-' end) else ecp.idnOperacao end) = '-' then
		      (cp.qcom - (coalesce(cp.qtdDevolucao, 0) + coalesce(cp.qtdFaturada, 0))) * -1
		      else (cp.qcom - (coalesce(cp.qtdDevolucao, 0) + coalesce(cp.qtdFaturada, 0))) end),
			co.idOperacao,
			(case when ecp.idnOperacao = '=' then (case when op.idnES = 0 then '+' else '-' end) else ecp.idnOperacao end),
			ec.id,
			ec.descricao
		from CondicionalProduto cp
		inner join produto pr on pr.id = cp.idProduto
		inner join Condicional co on co.id = cp.idCondicional
		inner join operacao op on op.id = co.idOperacao
		inner join EstoqueContaOperacao ecp on ecp.idOperacao = co.idOperacao
		inner join EstoqueConta ec on ec.id = ecp.idConta
		left join ProdutoClassificacao pc on pc.id = cp.idProdutoClassificacao
		where (cast(co.dataEmissao as date) <= @data)
		and   ((co.idnFechado is null) or (co.idnFechado = 0))
		and   (co.idEmitente = @idEmitente)
		and   ((cp.idProduto = @idProduto) or (@idProduto = 0))
		and   ((cp.idProdutoClassificacao = @idProdutoClassificacao) or (@idProdutoClassificacao = 0))
		and   ((op.idnNaoCalcularEstoque is null) or (op.idnNaoCalcularEstoque = 0))
		and   (((@selecaoMultipla = 1) and  (cp.idProduto in (select idProduto from @Produtos))) or (@selecaoMultipla = 0))
		and   (((@selecaoMultipla = 1) and  ((cp.idProdutoClassificacao in (select idProdutoClassificacao from @Produtos))) or (@selecaoMultipla = 0)) or (cp.idProdutoClassificacao is null))		
		and   (pr.idnControlaEstoque = 1)
		and ((@idnMostrarProdutosBaixados = 1) OR (coalesce(pr.idnBaixa,0) = 0))
		and ((@idnMostrarProdutosBaixados = 1) OR (coalesce(pc.idnBaixado,0) = 0))
		and   ((ecp.idConta = @idConta) or (@idConta = 0))


	--Consignacao (Só existe entrada no caso da consignação
	INSERT INTO @ItensEntradaSaida
		select 
			cp.idProduto, 
			cp.idProdutoClassificacao,
			(case when cp.idProdutoClassificacao is not null then pr.descricao + ' - ' + coalesce(pc.descricao, '') else pr.descricao end),
			(case when cp.idProdutoClassificacao is not null then cast(pr.id as varchar(20)) + replace((case when pc.sequencia > 999 then STR(pc.sequencia, 4) else STR(pc.sequencia, 3) end), space(1), '0') else cast(pr.id as varchar(20)) end),
			cp.vuncom, 
			(case when cp.idProdutoClassificacao is not null then (case when pc.vuncom > 0 then pc.vuncom else pr.vuncom end) else pr.vuncom end),
			(case when cp.idProdutoClassificacao is not null then (case when pc.precoEntrada > 0 then pc.precoEntrada else pr.precoEntrada end) else pr.precoEntrada end),
			upper(coalesce(pr.ucom, '')),
			upper(coalesce(cp.ucom, '')),
			0 as fatorConversao,
			(case when (case when ecp.idnOperacao = '=' then (case when op.idnES = 0 then '+' else '-' end) else ecp.idnOperacao end) = '-' then
		      cp.qcom * -1
		      else cp.qcom end),
			co.idOperacao,
			(case when ecp.idnOperacao = '=' then (case when op.idnES = 0 then '+' else '-' end) else ecp.idnOperacao end),
			ec.id,
			ec.descricao
		from ConsignacaoProduto cp
		inner join produto pr on pr.id = cp.idProduto
		inner join Consignacao co on co.id = cp.idConsignacao
		inner join operacao op on op.id = co.idOperacao
		inner join EstoqueContaOperacao ecp on ecp.idOperacao = co.idOperacao
		inner join EstoqueConta ec on ec.id = ecp.idConta
		left join ProdutoClassificacao pc on pc.id = cp.idProdutoClassificacao
		where (cast(co.data as date) <= @data)
		--and   ((co.idnFechado is null) or (co.idnFechado = 0))
		and   (co.idEmitente = @idEmitente)
		and   ((cp.idProduto = @idProduto) or (@idProduto = 0))
		and   ((cp.idProdutoClassificacao = @idProdutoClassificacao) or (@idProdutoClassificacao = 0))
		and   ((op.idnNaoCalcularEstoque is null) or (op.idnNaoCalcularEstoque = 0))
		and   (((@selecaoMultipla = 1) and  (cp.idProduto in (select idProduto from @Produtos))) or (@selecaoMultipla = 0))
		and   (((@selecaoMultipla = 1) and  ((cp.idProdutoClassificacao in (select idProdutoClassificacao from @Produtos))) or (@selecaoMultipla = 0)) or (cp.idProdutoClassificacao is null))
		and   (pr.idnControlaEstoque = 1)
		and ((@idnMostrarProdutosBaixados = 1) OR (coalesce(pr.idnBaixa,0) = 0))
		and ((@idnMostrarProdutosBaixados = 1) OR (coalesce(pc.idnBaixado,0) = 0))
		and   ((ecp.idConta = @idConta) or (@idConta = 0))
		
	
	--Adiciona os Produtos sem Movimentacao, quando o parametro @idnRetornarTodosProdutos for 1
	INSERT INTO @ItensEntradaSaida
	SELECT p.idProduto, p.idProdutoClassificacao,
	(case when p.idProdutoClassificacao is not null then pr.descricao + ' - ' + coalesce(pc.descricao, '') else pr.descricao end),
	(case when p.idProdutoClassificacao is not null then cast(pr.id as varchar(20)) + replace((case when pc.sequencia > 999 then STR(pc.sequencia, 4) else STR(pc.sequencia, 3) end), space(1), '0') else cast(pr.id as varchar(20)) end),
	0 as preco, 
	(case when p.idProdutoClassificacao is not null then (case when pc.vuncom > 0 then pc.vuncom else pr.vuncom end) else pr.vuncom end),
	(case when p.idProdutoClassificacao is not null then (case when pc.precoEntrada > 0 then pc.precoEntrada else pr.precoEntrada end) else pr.precoEntrada end),
	upper(coalesce(pr.ucom, '')),
	upper(coalesce(pr.ucom, '')),
	0 as fatorConversao,
	0 as qtd,
	0 as idOperacao,
	'=',
	ec.id,
	ec.descricao
	FROM @Produtos p
	inner join produto pr on pr.id = p.idProduto
	left join ProdutoClassificacao pc on pc.id = p.idProdutoClassificacao
	inner join EstoqueConta ec on ec.id = @idConta
	WHERE (@idnRetornarTodosProdutos = 1)
	and ((not exists (select null from @ItensEntradaSaida ies where p.idProduto = ies.idProduto)) or (p.idProdutoClassificacao is not null))
	and (not exists (select null from @ItensEntradaSaida ies where p.idProdutoClassificacao = ies.idProdutoClassificacao))
	
	
	--atualiza a qtd dos produtos com unidade de medida diferente da definida no cadastro e efetua a convers?o conforme multiplicador	
	UPDATE @ItensEntradaSaida set qtd = qtd * fatorConversao												
	WHERE (unidadeMedidaConvertida <> '')
	and   (unidadeMedida <> unidadeMedidaConvertida)
	and (fatorConversao > 0)
	
	INSERT INTO @Resultado
		select ies.idProduto, 
			   ies.idProdutoClassificacao, 
			   ies.dscProduto,
			   sum(ies.qtd),
			   ies.unidadeMedida,
			   ies.codigoProdutoClasse,
			   ies.precoCadastro,
			   ies.precoEntradaCadastro,
			   pr.idGrupo,
			   pg.descricao,
			   ies.idConta,
			   ies.dscConta,			   
			   (select top 1 coalesce(valor, 0) from PrecoProduto(@idEmitente,ies.idProduto, ies.idProdutoClassificacao, @data)) as precoCalculado,
			   (select top 1 coalesce(valor, 0) from CustoProduto(@idEmitente,ies.idProduto, ies.idProdutoClassificacao)) as custoCalculado,
			   pr.refFabrica,
			   (select top 1 coalesce(valorMinimo, 0) from PrecoProduto(@idEmitente,ies.idProduto, ies.idProdutoClassificacao, @data)),
			   (select top 1 coalesce(idnOferta, 0) from PrecoProduto(@idEmitente,ies.idProduto, ies.idProdutoClassificacao, @data))
		from @ItensEntradaSaida ies
		inner join produto pr on pr.id = ies.idProduto
		left join produtoGrupo pg on pg.id = pr.idGrupo
		WHERE ((pr.idGrupo in (select idGrupo from ProdutoGruposFilhos(@idGrupo))) or (@idGrupo = 0))
	    group by ies.idProduto, ies.idProdutoClassificacao, ies.dscProduto, ies.unidadeMedida, ies.codigoProdutoClasse, ies.precoCadastro, ies.precoEntradaCadastro, pr.idGrupo, pg.descricao, ies.idConta, ies.dscConta, pr.refFabrica	    	    			
	
	/*select * from @Resultado r
	where (((r.qtd > 0) and (@idnMostrarProdutosQtdNegativa = 0)) or (@idnMostrarProdutosQtdNegativa = 1))*/
	RETURN 
END
GO
-- =============================================
-- Author:		<Author,,Name>
-- Create date: <Create Date,,>
-- Description:	<Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[ESTOQUE_PRODUTOS_ALTERADOS]
	@dataUltimaSincronizacaoInf datetime,
	@idEmitenteInf int,
	@idContaInf int,
	@idnIgnorarAlteracoesEstoqueInf bit = 0
AS
BEGIN

	SET NOCOUNT ON;

	declare @dataUltimaSincronizacao datetime = @dataUltimaSincronizacaoInf;
	declare @idEmitente int = @idEmitenteInf;
	declare @idConta int = @idContaInf;
	declare @idnIgnorarAlteracoesEstoque bit = @idnIgnorarAlteracoesEstoqueInf;
	
	declare @ProdutosLista as ListaProdutos;
	
	declare @ProdutosAlterados as TABLE
	(
		idProduto int,
		idProdutoClasse int
	)
	
	--Registros Removidos
	INSERT INTO @ProdutosAlterados
	select reg.idProduto, reg.idProdutoClassificacao
	from RegistrosRemovidos reg
	where (CAST(reg.dataExclusao as datetime) >= @dataUltimaSincronizacao)
	and (reg.idProduto is not null)
	
	--Produtos Alterados
	INSERT INTO @ProdutosAlterados
	select pr.id, pc.id
	from produto pr
	left join ProdutoClassificacao pc on pc.idProduto = pr.id
	where ((CAST(pr.dataUltimaAlteracao as datetime) >= @dataUltimaSincronizacao)
	or (CAST(pc.dataUltimaAlteracao as datetime) >= @dataUltimaSincronizacao))
	
	--Preços Adicionados/Alterados
	INSERT INTO @ProdutosAlterados
	select pp.idProduto, pp.idProdutoClassificacao
	from ProdutoPreco pp
	where (CAST(pp.dataUltimaAlteracao as datetime) >= @dataUltimaSincronizacao)
	
	
	--Daqui para baixo Alteracoes de Estoque
	IF (@idnIgnorarAlteracoesEstoque = 1)
	BEGIN
		declare @Resultado TABLE 
		(
			idProduto int,
			idProdutoClassificacao int NULL,	
			dscProdutoClasse varchar(240),			
			qtd decimal(18,4),
			unidadeMedida varchar(30),
			codigoProdutoClasse varchar(50),
			precoCadastro decimal(18,4), 
			precoEntradaCadastro decimal(18,4),
			idGrupo int null,
			dscGrupo varchar(100) null,
			idConta int,
			dscConta varchar(200),
			precoCalculado decimal(18,4),
			custoCalculado decimal(18,4),
			refFabrica varchar(50),
			precoMinimo decimal(18,4),
			idnPrecoOferta bit
		)

		INSERT INTO @Resultado
		SELECT DISTINCT 
			   p.idProduto,
			   p.idProdutoClasse,
			   (case when p.idProdutoClasse is not null then pr.descricao + ' - ' + coalesce(pc.descricao, '') else pr.descricao end),
			   0,
			   (case when p.idProdutoClasse is not null then (case when pc.ucom is not null then pc.ucom else pr.ucom end) else pr.ucom end),
			   (case when p.idProdutoClasse is not null then cast(pr.id as varchar(20)) + REPLACE(STR(pc.sequencia, 3), SPACE(1), '0') else cast(pr.id as varchar(20)) end),
			   (case when p.idProdutoClasse is not null then (case when pc.vuncom > 0 then pc.vuncom else pr.vuncom end) else pr.vuncom end),
			   (case when p.idProdutoClasse is not null then (case when pc.precoEntrada > 0 then pc.precoEntrada else pr.precoEntrada end) else pr.precoEntrada end),
			   pr.idGrupo,
			   pg.descricao,
			   0,
			   '',
			   (select top 1 coalesce(valor, 0) from PrecoProduto(@idEmitente, p.idProduto, p.idProdutoClasse, null)) as precoCalculado,
			   (select top 1 coalesce(valor, 0) from CustoProduto(@idEmitente, p.idProduto, p.idProdutoClasse)) as custoCalculado,
			   pr.refFabrica,
			   (select top 1 coalesce(valorMinimo, 0) from PrecoProduto(@idEmitente, p.idProduto, p.idProdutoClasse, null)),
			   (select top 1 coalesce(idnOferta, 0) from PrecoProduto(@idEmitente, p.idProduto, p.idProdutoClasse, null))
		from @ProdutosAlterados p
		inner join produto pr on pr.id = p.idProduto
		left join ProdutoClassificacao pc on pc.idProduto = pr.id
		left join produtoGrupo pg on pg.id = pr.idGrupo

		SELECT * FROM @Resultado
	END
	ELSE
	BEGIN
		--Notas de Entrada / Saida
		INSERT INTO @ProdutosAlterados
		select np.idProduto, np.idProdutoClassificacao
		from NFProduto np
		inner join notafiscal nf on nf.id = np.idNotaFiscal
		inner join nfemitente nfe on nfe.idnotafiscal = np.idnotafiscal
		inner join produto pr on pr.id = np.idProduto
		inner join operacao op on op.id = nf.idOperacao
		inner join EstoqueContaOperacao ecp on ecp.idOperacao = nf.idOperacao
		where --((nf.nfeCstat = 100) or (nf.nfeCstat = 150))
		(nf.nfeTpAmb = 1)
		and (cast(nf.dataUltimaAlteracao as datetime) >= @dataUltimaSincronizacao)
		and ((op.idnNaoCalcularEstoque is null) or (op.idnNaoCalcularEstoque = 0))
		and (nfe.idEmitente = @idEmitente)
		and (pr.idnControlaEstoque = 1)
		and ((ecp.idConta = @idConta) or (@idConta = 0))
	
		--Ajustes de Estoque
		INSERT INTO @ProdutosAlterados
		select ea.idProduto, ea.idProdutoClassificacao
		from estoqueAjustes ea
		inner join produto pr on pr.id = ea.idProduto
		inner join operacao op on op.id = ea.idOperacao
		inner join EstoqueContaOperacao ecp on ecp.idOperacao = ea.idOperacao
		where (cast(ea.data as datetime) >= @dataUltimaSincronizacao)
		and (ea.idEmitente = @idEmitente)
		and (pr.idnControlaEstoque = 1)
		and ((op.idnNaoCalcularEstoque is null) or (op.idnNaoCalcularEstoque = 0))
		and ((ecp.idConta = @idConta) or (@idConta = 0))
	
		--Produtos alocados nas Ordens de Servico
		INSERT INTO @ProdutosAlterados
		select osp.idProduto, osp.idProdutoClassificacao
		from OrdemServicoProduto osp
		inner join produto pr on pr.id = osp.idProduto
		inner join OrdemServico os on os.id = osp.idOrdemServico
		inner join operacao op on op.id = os.idOperacao
		inner join EstoqueContaOperacao ecp on ecp.idOperacao = os.idOperacao
		where (cast(os.dataUltimaAlteracao as datetime) >= @dataUltimaSincronizacao)
		and (os.idEmitente = @idEmitente)
		and ((op.idnNaoCalcularEstoque is null) or (op.idnNaoCalcularEstoque = 0))
		and (pr.idnControlaEstoque = 1)
		and ((ecp.idConta = @idConta) or (@idConta = 0))
		--and ((os.idnCancelada = 0) or (os.idnCancelada is null))
	
		--Pedidos
		INSERT INTO @ProdutosAlterados
		select pp.idProduto, pp.idProdutoClassificacao
		from pedidoProduto pp
		inner join produto pr on pr.id = pp.idProduto
		inner join pedido pe on pe.id = pp.idPedido
		inner join operacao op on op.id = pe.idOperacao
		inner join EstoqueContaOperacao ecp on ecp.idOperacao = pe.idOperacao
		where (cast(pe.dataUltimaAlteracao as datetime) >= @dataUltimaSincronizacao)
		--and ((pe.idnFaturado is null) or (pe.idnFaturado = 0))
		--and ((pe.idnCancelado is null) or (pe.idnCancelado = 0))
		--and ((pe.idnProducao = 1)
		--or (((pe.idnProducao is null) or (pe.idnProducao = 0)) and ((op.idnConsiderarEstoqueApenasPedidoEmProducao is null) or (op.idnConsiderarEstoqueApenasPedidoEmProducao = 0))))
		and (pe.idEmitente = @idEmitente)
		and ((op.idnNaoCalcularEstoque is null) or (op.idnNaoCalcularEstoque = 0))
		and (pr.idnControlaEstoque = 1)
		and ((ecp.idConta = @idConta) or (@idConta = 0))
	
		--Condicional
		INSERT INTO @ProdutosAlterados
		select cp.idProduto, cp.idProdutoClassificacao
		from CondicionalProduto cp
		inner join produto pr on pr.id = cp.idProduto
		inner join Condicional co on co.id = cp.idCondicional		
		inner join operacao op on op.id = co.idOperacao
		inner join EstoqueContaOperacao ecp on ecp.idOperacao = co.idOperacao
		where (cast(co.dataUltimaAlteracao as datetime) >= @dataUltimaSincronizacao)
		--and ((co.idnFechado is null) or (co.idnFechado = 0))
		and (co.idEmitente = @idEmitente)
		and ((op.idnNaoCalcularEstoque is null) or (op.idnNaoCalcularEstoque = 0))
		and (pr.idnControlaEstoque = 1)
		and ((ecp.idConta = @idConta) or (@idConta = 0))
	
		--Consignacao (Só existe entrada no caso da consignação
		INSERT INTO @ProdutosAlterados
		select cp.idProduto, cp.idProdutoClassificacao
		from ConsignacaoProduto cp
		inner join produto pr on pr.id = cp.idProduto
		inner join Consignacao co on co.id = cp.idConsignacao		
		inner join operacao op on op.id = co.idOperacao
		inner join EstoqueContaOperacao ecp on ecp.idOperacao = co.idOperacao
		where (cast(co.dataUltimaAlteracao as datetime) >= @dataUltimaSincronizacao)
		and (co.idEmitente = @idEmitente)
		and ((op.idnNaoCalcularEstoque is null) or (op.idnNaoCalcularEstoque = 0))
		and (pr.idnControlaEstoque = 1)
		and ((ecp.idConta = @idConta) or (@idConta = 0))
	
	
		INSERT INTO @ProdutosLista
		SELECT DISTINCT pa.idProduto, pa.idProdutoClasse from @ProdutosAlterados pa
	
		SELECT * FROM EstoqueProdutos2(null, @idEmitente, 0, 0, @idConta, 0, 1, 1, @ProdutosLista, 1, 1)

    END
END
GO
ALTER TABLE [dbo].[ReportsRestricoes] ADD CONSTRAINT [FK_ReportsRestricoes_Operador] FOREIGN KEY
	(
		[idOperador]
	)
	REFERENCES [dbo].[Operador]
	(
		[id]
	)
GO

ALTER TABLE [dbo].[ReportsRestricoes] ADD CONSTRAINT [FK_ReportsRestricoes_OperadorGrupo] FOREIGN KEY
	(
		[idGrupoOperador]
	)
	REFERENCES [dbo].[OperadorGrupo]
	(
		[id]
	)
GO

ALTER TABLE [dbo].[Reports] ADD CONSTRAINT [FK_Reports_ReportsGrupos] FOREIGN KEY
	(
		[idReportsGrupo]
	)
	REFERENCES [dbo].[ReportsGrupos]
	(
		[id]
	)
GO

ALTER TABLE [dbo].[NFAvulsa] ADD CONSTRAINT [FK_NFAvulsa_notafiscal] FOREIGN KEY
	(
		[idNotaFiscal]
	)
	REFERENCES [dbo].[notafiscal]
	(
		[id]
	)
GO

ALTER TABLE [dbo].[NFAvulsa] ADD CONSTRAINT [FK_NFAvulsa_parceiro] FOREIGN KEY
	(
		[idParceiro]
	)
	REFERENCES [dbo].[parceiro]
	(
		[id]
	)
GO

ALTER TABLE [dbo].[ProdutoLote] ADD CONSTRAINT [FK_ProdutoLote_parceiro] FOREIGN KEY
	(
		[idFornecedorAvulso]
	)
	REFERENCES [dbo].[parceiro]
	(
		[id]
	)
GO
SET IDENTITY_INSERT [dbo].[MenuLateralGrupos] ON
GO
INSERT [dbo].[MenuLateralGrupos] ([id], [descricaoGrupo], [ordem], [telaOrigem]) VALUES (74, N'Relatórios', 31, N'Geral')
GO
SET IDENTITY_INSERT [dbo].[MenuLateralGrupos] OFF
GO
SET IDENTITY_INSERT [dbo].[Telas] ON
GO
INSERT [dbo].[Telas] ([id], [descricao], [controle], [imagem], [parametrosControle], [teclaAtalho1], [teclaAtalho2], [idnPermiteAbrirVarias], [qtdVezesAberta], [dataUltimaAbertura], [idnRestricaoAcesso], [idnBloquearAcessoPlanoBasico]) VALUES (374, N'Consultar Grupos de Dashboard', N'Cadastros.ucConsGrupoDashboard, Cadastros, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1)
GO
INSERT [dbo].[Telas] ([id], [descricao], [controle], [imagem], [parametrosControle], [teclaAtalho1], [teclaAtalho2], [idnPermiteAbrirVarias], [qtdVezesAberta], [dataUltimaAbertura], [idnRestricaoAcesso], [idnBloquearAcessoPlanoBasico]) VALUES (375, N'Cadastrar Grupo Dashboard', N'Cadastros.ucCadGrupoDashboard, Cadastros, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1)
GO
INSERT [dbo].[Telas] ([id], [descricao], [controle], [imagem], [parametrosControle], [teclaAtalho1], [teclaAtalho2], [idnPermiteAbrirVarias], [qtdVezesAberta], [dataUltimaAbertura], [idnRestricaoAcesso], [idnBloquearAcessoPlanoBasico]) VALUES (376, N'Consultar Grupo Relatórios', N'Cadastros.ucConsGrupoReports, Cadastros, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1)
GO
INSERT [dbo].[Telas] ([id], [descricao], [controle], [imagem], [parametrosControle], [teclaAtalho1], [teclaAtalho2], [idnPermiteAbrirVarias], [qtdVezesAberta], [dataUltimaAbertura], [idnRestricaoAcesso], [idnBloquearAcessoPlanoBasico]) VALUES (377, N'Cadastrar Grupo Relatórios', N'Cadastros.ucCadGrupoReports, Cadastros, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null', NULL, NULL, NULL, NULL, NULL, 7, CAST(N'2022-10-27T15:53:06.247' AS DateTime), NULL, 1)
GO
INSERT [dbo].[Telas] ([id], [descricao], [controle], [imagem], [parametrosControle], [teclaAtalho1], [teclaAtalho2], [idnPermiteAbrirVarias], [qtdVezesAberta], [dataUltimaAbertura], [idnRestricaoAcesso], [idnBloquearAcessoPlanoBasico]) VALUES (378, N'Painel de Relatórios', N'Cadastros.ucReports, Cadastros, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null', NULL, NULL, NULL, NULL, NULL, 62, CAST(N'2022-11-28T10:31:19.020' AS DateTime), NULL, 1)
GO
SET IDENTITY_INSERT [dbo].[Telas] OFF
GO

SET IDENTITY_INSERT [dbo].[MenuLateralItens] ON
GO
INSERT [dbo].[MenuLateralItens] ([id], [idMenu], [descricao], [idTela], [idMenuLateralGrupo], [imagem], [ordem]) VALUES (413, 1, N'Consultar Grupos de Dashboard', 374, 74, N'search-2_32.png', 0)
GO
INSERT [dbo].[MenuLateralItens] ([id], [idMenu], [descricao], [idTela], [idMenuLateralGrupo], [imagem], [ordem]) VALUES (414, 1, N'Cadastrar Grupo Dashboard', 375, 74, N'pie-chart2.png', 1)
GO
INSERT [dbo].[MenuLateralItens] ([id], [idMenu], [descricao], [idTela], [idMenuLateralGrupo], [imagem], [ordem]) VALUES (415, 2, N'Consultar Grupo Relatórios', 376, 74, N'search-2_32.png', 2)
GO
INSERT [dbo].[MenuLateralItens] ([id], [idMenu], [descricao], [idTela], [idMenuLateralGrupo], [imagem], [ordem]) VALUES (416, 2, N'Cadastrar Grupo Dashboard', 375, 74, N'pie-chart2.png', 1)
GO
INSERT [dbo].[MenuLateralItens] ([id], [idMenu], [descricao], [idTela], [idMenuLateralGrupo], [imagem], [ordem]) VALUES (417, 1, N'Consultar Grupo Relatórios', 376, 74, N'search-2_32.png', 2)
GO
INSERT [dbo].[MenuLateralItens] ([id], [idMenu], [descricao], [idTela], [idMenuLateralGrupo], [imagem], [ordem]) VALUES (418, 1, N'Cadastrar Grupo Relatórios', 377, 74, N'clipboard_32.png', 3)
GO
INSERT [dbo].[MenuLateralItens] ([id], [idMenu], [descricao], [idTela], [idMenuLateralGrupo], [imagem], [ordem]) VALUES (419, 2, N'Consultar Grupos de Dashboard', 374, 74, N'search-2_32.png', 0)
GO
INSERT [dbo].[MenuLateralItens] ([id], [idMenu], [descricao], [idTela], [idMenuLateralGrupo], [imagem], [ordem]) VALUES (420, 2, N'Cadastrar Grupo Relatórios', 376, 74, N'clipboard_32.png', 3)
GO
SET IDENTITY_INSERT [dbo].[MenuLateralItens] OFF
GO
SET IDENTITY_INSERT [dbo].[MenuItens] ON
GO
INSERT [dbo].[MenuItens] ([id], [idMenu], [descricao], [idTela], [idMenuItemPai], [ordem], [idnVisivel], [md5], [imagem]) VALUES (495, 1, N'Painel de Relatórios', 378, 229, 0, 1, NULL, N'')
GO
SET IDENTITY_INSERT [dbo].[MenuItens] OFF
GO

SET IDENTITY_INSERT [dbo].[ReportsGrupos] ON
GO
INSERT [dbo].[ReportsGrupos] ([id], [descricao], [idnInativo]) VALUES (1, N'Vendas', 0)
GO
INSERT [dbo].[ReportsGrupos] ([id], [descricao], [idnInativo]) VALUES (2, N'Pedidos', 1)
GO
INSERT [dbo].[ReportsGrupos] ([id], [descricao], [idnInativo]) VALUES (3, N'Ordem de Serviço', 0)
GO
INSERT [dbo].[ReportsGrupos] ([id], [descricao], [idnInativo]) VALUES (4, N'Transporte', 1)
GO
INSERT [dbo].[ReportsGrupos] ([id], [descricao], [idnInativo]) VALUES (5, N'Financeiro', 0)
GO
INSERT [dbo].[ReportsGrupos] ([id], [descricao], [idnInativo]) VALUES (6, N'Demonstrativos', 0)
GO
INSERT [dbo].[ReportsGrupos] ([id], [descricao], [idnInativo]) VALUES (7, N'Condicional', 1)
GO
INSERT [dbo].[ReportsGrupos] ([id], [descricao], [idnInativo]) VALUES (8, N'Pré-venda', 1)
GO
INSERT [dbo].[ReportsGrupos] ([id], [descricao], [idnInativo]) VALUES (9, N'Estoque', 1)
GO
SET IDENTITY_INSERT [dbo].[ReportsGrupos] OFF
GO
SET IDENTITY_INSERT [dbo].[Reports] ON
GO
INSERT [dbo].[Reports] ([id], [descricao], [idReportsGrupo], [xml]) VALUES (6, N'Resumo Mensal', 1, N'<XtraReportsLayoutSerializer SerializerVersion="20.1.10.0" Ref="1" ControlType="DevExpress.XtraReports.UI.XtraReport, DevExpress.XtraReports.v20.1, Version=20.1.10.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" Name="XtraReport" Margins="100, 100, 200, 100" PageWidth="850" PageHeight="1100" Version="20.1" DataMember="Query" DataSource="#Ref-0" Font="Arial, 9.75pt"><Parameters><Item1 Ref="3" Description="Data Inicial" ValueInfo="2022-11-01" Name="dataIni" Type="#Ref-2" /><Item2 Ref="4" Description="Data Final" ValueInfo="2022-11-30" Name="dataFinal" Type="#Ref-2" /><Item3 Ref="6" Description="Código Emitente" ValueInfo="1" Name="idEmitente" Type="#Ref-5" /></Parameters><Bands><Item1 Ref="7" ControlType="TopMarginBand" Name="TopMargin" HeightF="200"><Controls><Item1 Ref="8" ControlType="XRLabel" Name="label37" Multiline="true" Text="label4" TextAlignment="MiddleRight" SizeF="382.2917,23" LocationFloat="118,72.70832" Padding="2,2,0,0,100"><ExpressionBindings><Item1 Ref="9" EventName="BeforePrint" PropertyName="Text" Expression="Iif(IsNullOrEmpty([complemento]),Concat([bairro],'', '',[cep]),Concat([complemento],'', '',[bairro],'', '',[cep] ))" /></ExpressionBindings><StylePriority Ref="10" UseTextAlignment="false" /></Item1><Item2 Ref="11" ControlType="XRLabel" Name="label3" Multiline="true" Text="label3" TextAlignment="MiddleRight" SizeF="382.2917,23.0000076" LocationFloat="118,39.70833" Padding="2,2,0,0,100"><ExpressionBindings><Item1 Ref="12" EventName="BeforePrint" PropertyName="Text" Expression="Concat([logradouro] ,'', '',[numero] )" /></ExpressionBindings><StylePriority Ref="13" UseTextAlignment="false" /></Item2><Item3 Ref="14" ControlType="XRLabel" Name="label2" Multiline="true" Text="label2" SizeF="130.208313,23" LocationFloat="519.7917,10.0000067" Padding="2,2,0,0,100"><ExpressionBindings><Item1 Ref="15" EventName="BeforePrint" PropertyName="Text" Expression="Now()" /></ExpressionBindings></Item3><Item4 Ref="16" ControlType="XRLabel" Name="label1" Multiline="true" Text="label1" TextAlignment="MiddleRight" SizeF="382.2917,23" LocationFloat="118.000008,10.0000067" Padding="2,2,0,0,100"><ExpressionBindings><Item1 Ref="17" EventName="BeforePrint" PropertyName="Text" Expression="[razaosocial]" /></ExpressionBindings><StylePriority Ref="18" UseTextAlignment="false" /></Item4><Item5 Ref="19" ControlType="XRPictureBox" Name="pictureBox1" SizeF="107,107" LocationFloat="10.0000067,10.0000067"><ExpressionBindings><Item1 Ref="20" EventName="BeforePrint" PropertyName="ImageSource" Expression="[logotipo]" /></ExpressionBindings></Item5></Controls></Item1><Item2 Ref="21" ControlType="DetailBand" Name="Detail" HeightF="636.4583"><Controls><Item1 Ref="22" ControlType="XRShape" Name="shape1" Angle="270" SizeF="35.416687,23.000061" LocationFloat="519.7917,529.9582"><Shape Ref="23" ShapeName="Arrow" /></Item1><Item2 Ref="24" ControlType="XRLabel" Name="label36" TextFormatString="{0:0.00%}" Multiline="true" Text="label15" TextAlignment="TopLeft" SizeF="79.7915955,22.999939" LocationFloat="560.2084,529.9584" Padding="2,2,0,0,100"><ExpressionBindings><Item1 Ref="25" EventName="BeforePrint" PropertyName="Text" Expression="([valorVendaPeriodo]-[ValorPagoDespesasPeriodo])/[valorVendaPeriodo]" /></ExpressionBindings><StylePriority Ref="26" UseTextAlignment="false" /></Item2><Item3 Ref="27" ControlType="XRLabel" Name="label35" TextFormatString="{0:0.00%}" Multiline="true" Text="label23" TextAlignment="MiddleRight" SizeF="223.541641,22.9999847" LocationFloat="276.750031,359.208221" Padding="2,2,0,0,100"><ExpressionBindings><Item1 Ref="28" EventName="BeforePrint" PropertyName="Text" Expression="([valorVendaPeriodo]-[movimentoEstoqueSaidaCusto])/[valorVendaPeriodo]" /></ExpressionBindings><StylePriority Ref="29" UseTextAlignment="false" /></Item3><Item4 Ref="30" ControlType="XRLabel" Name="label34" Multiline="true" Text="Lucro Bruto" TextAlignment="MiddleRight" SizeF="226.041672,22.99997" LocationFloat="30.208334,359.2083" Padding="2,2,0,0,100"><StylePriority Ref="31" UseTextAlignment="false" /></Item4><Item5 Ref="32" ControlType="XRLabel" Name="label33" Multiline="true" TextAlignment="MiddleRight" SizeF="223.541641,22.99997" LocationFloat="276.750061,558.9583" Padding="2,2,0,0,100"><ExpressionBindings><Item1 Ref="33" EventName="BeforePrint" PropertyName="Text" Expression="[ValorVendaAVista]+[ValorRecebidosRefVendaPrazo]-[ValorPagoDespesasPeriodo]" /></ExpressionBindings><StylePriority Ref="34" UseTextAlignment="false" /></Item5><Item6 Ref="35" ControlType="XRLabel" Name="label32" Multiline="true" Text="Total Financeiro" TextAlignment="MiddleRight" SizeF="226.041656,23" LocationFloat="30.20835,558.9583" Padding="2,2,0,0,100"><StylePriority Ref="36" UseTextAlignment="false" /></Item6><Item7 Ref="37" ControlType="XRLabel" Name="label31" Multiline="true" Text="Pode haver diferença entre o Saldo Final do Período e o Custo do Estoque Final Período devido a possivel mudança do custo unitário dentro do período ou produtos que estavam com seu estoque negativo e não era realizado controle de estoque" TextAlignment="MiddleCenter" SizeF="609.7917,57" LocationFloat="30.208334,174.416672" ForeColor="Firebrick" Padding="2,2,0,0,100"><StylePriority Ref="38" UseForeColor="false" UseTextAlignment="false" /></Item7><Item8 Ref="39" ControlType="XRLabel" Name="label30" Multiline="true" Text="label26" TextAlignment="TopRight" SizeF="223.541641,23" LocationFloat="276.750061,115.333366" Padding="2,2,0,0,100"><ExpressionBindings><Item1 Ref="40" EventName="BeforePrint" PropertyName="Text" Expression="[custoEstoqueInicioPeriodo]+[movimentoEstoqueEntradaCusto]-[movimentoEstoqueSaidaCusto]" /></ExpressionBindings></Item8><Item9 Ref="41" ControlType="XRLabel" Name="label29" Multiline="true" Text="label29" TextAlignment="TopRight" SizeF="223.541641,23" LocationFloat="276.750061,144.333328" Padding="2,2,0,0,100"><ExpressionBindings><Item1 Ref="42" EventName="BeforePrint" PropertyName="Text" Expression="[custoEstoqueFinalPeriodo]" /></ExpressionBindings></Item9><Item10 Ref="43" ControlType="XRLabel" Name="label28" Multiline="true" Text="label28" TextAlignment="TopRight" SizeF="223.541641,23" LocationFloat="276.750061,37.3333931" Padding="2,2,0,0,100"><ExpressionBindings><Item1 Ref="44" EventName="BeforePrint" PropertyName="Text" Expression="[custoEstoqueInicioPeriodo]" /></ExpressionBindings></Item10><Item11 Ref="45" ControlType="XRLabel" Name="label27" Multiline="true" Text="Custo Estoque Final Período" TextAlignment="MiddleRight" SizeF="226.041672,22.99997" LocationFloat="30.2083645,144.333328" Padding="2,2,0,0,100"><StylePriority Ref="46" UseTextAlignment="false" /></Item11><Item12 Ref="47" ControlType="XRLabel" Name="label26" Multiline="true" Text="label26" TextAlignment="TopRight" SizeF="223.541641,23" LocationFloat="276.750061,89.3334045" Padding="2,2,0,0,100"><ExpressionBindings><Item1 Ref="48" EventName="BeforePrint" PropertyName="Text" Expression="[movimentoEstoqueSaidaCusto]" /></ExpressionBindings></Item12><Item13 Ref="49" ControlType="XRLabel" Name="label25" Multiline="true" Text="label25" TextAlignment="TopRight" SizeF="223.541641,23" LocationFloat="276.750061,63.3333855" Padding="2,2,0,0,100"><ExpressionBindings><Item1 Ref="50" EventName="BeforePrint" PropertyName="Text" Expression="[movimentoEstoqueEntradaCusto]" /></ExpressionBindings></Item13><Item14 Ref="51" ControlType="XRLabel" Name="label24" Multiline="true" Text="label24" TextAlignment="MiddleRight" SizeF="223.541641,23" LocationFloat="276.750061,270.208221" Padding="2,2,0,0,100"><ExpressionBindings><Item1 Ref="52" EventName="BeforePrint" PropertyName="Text" Expression="[valorVendaPeriodo]" /></ExpressionBindings><StylePriority Ref="53" UseTextAlignment="false" /></Item14><Item15 Ref="54" ControlType="XRLabel" Name="label23" Multiline="true" Text="label23" TextAlignment="MiddleRight" SizeF="223.541641,22.9999847" LocationFloat="276.750061,327.208252" Padding="2,2,0,0,100"><ExpressionBindings><Item1 Ref="55" EventName="BeforePrint" PropertyName="Text" Expression="[ValorVendaAPrazo]" /></ExpressionBindings><StylePriority Ref="56" UseTextAlignment="false" /></Item15><Item16 Ref="57" ControlType="XRLabel" Name="label22" Multiline="true" Text="label22" TextAlignment="MiddleRight" SizeF="223.541641,23" LocationFloat="276.750061,298.20816" Padding="2,2,0,0,100"><ExpressionBindings><Item1 Ref="58" EventName="BeforePrint" PropertyName="Text" Expression="[ValorVendaAVista]" /></ExpressionBindings><StylePriority Ref="59" UseTextAlignment="false" /></Item16><Item17 Ref="60" ControlType="XRLabel" Name="label21" Multiline="true" Text="label21" TextAlignment="MiddleRight" SizeF="223.541641,23" LocationFloat="276.750061,500.9583" Padding="2,2,0,0,100"><ExpressionBindings><Item1 Ref="61" EventName="BeforePrint" PropertyName="Text" Expression="[ValorVendaAVista]" /></ExpressionBindings><StylePriority Ref="62" UseTextAlignment="false" /></Item17><Item18 Ref="63" ControlType="XRLabel" Name="label20" Multiline="true" Text="Valor Recebido à vista" TextAlignment="MiddleRight" SizeF="226.041672,23" LocationFloat="30.2083645,500.958374" Padding="2,2,0,0,100"><StylePriority Ref="64" UseTextAlignment="false" /></Item18><Item19 Ref="65" ControlType="XRLabel" Name="label17" Multiline="true" Text="label17" TextAlignment="MiddleRight" SizeF="223.541641,23" LocationFloat="276.750061,465.7915" Padding="2,2,0,0,100"><ExpressionBindings><Item1 Ref="66" EventName="BeforePrint" PropertyName="Text" Expression="[ValorRecebidosRefVendaPrazo]" /></ExpressionBindings><StylePriority Ref="67" UseTextAlignment="false" /></Item19><Item20 Ref="68" ControlType="XRLabel" Name="label15" Multiline="true" Text="label15" TextAlignment="MiddleRight" SizeF="223.541641,23" LocationFloat="276.750061,529.958252" Padding="2,2,0,0,100"><ExpressionBindings><Item1 Ref="69" EventName="BeforePrint" PropertyName="Text" Expression="[ValorPagoDespesasPeriodo]" /></ExpressionBindings><StylePriority Ref="70" UseTextAlignment="false" /></Item20><Item21 Ref="71" ControlType="XRLabel" Name="label19" Multiline="true" Text="Pagamento Despesas" TextAlignment="MiddleRight" SizeF="226.041672,22.999939" LocationFloat="30.2083645,529.9584" Padding="2,2,0,0,100"><StylePriority Ref="72" UseTextAlignment="false" /></Item21><Item22 Ref="73" ControlType="XRLabel" Name="label18" Multiline="true" Text="Valor Recebido Crediário" TextAlignment="MiddleRight" SizeF="226.041656,23" LocationFloat="30.20835,465.791565" Padding="2,2,0,0,100"><StylePriority Ref="74" UseTextAlignment="false" /></Item22><Item23 Ref="75" ControlType="XRLabel" Name="label14" Multiline="true" Text="Total de Vendas(à Prazo)" TextAlignment="MiddleRight" SizeF="226.041672,23" LocationFloat="30.208334,327.2083" Padding="2,2,0,0,100"><StylePriority Ref="76" UseTextAlignment="false" /></Item23><Item24 Ref="77" ControlType="XRLabel" Name="label13" Multiline="true" Text="Total de Vendas(à Vista)" TextAlignment="MiddleRight" SizeF="226.041672,23" LocationFloat="30.208334,298.208252" Padding="2,2,0,0,100"><StylePriority Ref="78" UseTextAlignment="false" /></Item24><Item25 Ref="79" ControlType="XRLabel" Name="label12" Multiline="true" Text="Total de Vendas" TextAlignment="MiddleRight" SizeF="226.041672,23" LocationFloat="30.208334,270.208282" Padding="2,2,0,0,100"><StylePriority Ref="80" UseTextAlignment="false" /></Item25><Item26 Ref="81" ControlType="XRLabel" Name="label8" Multiline="true" Text="Resumo Financeiro" TextAlignment="MiddleCenter" SizeF="282.291626,23" LocationFloat="143.333344,433.208282" Font="Times New Roman, 12pt" Padding="2,2,0,0,100"><StylePriority Ref="82" UseFont="false" UseTextAlignment="false" /></Item26><Item27 Ref="83" ControlType="XRLabel" Name="label16" Multiline="true" Text="Evolução de Estoque" TextAlignment="MiddleCenter" SizeF="282.291626,23" LocationFloat="143.333344,10.0000067" Font="Times New Roman, 12pt" Padding="2,2,0,0,100"><StylePriority Ref="84" UseFont="false" UseTextAlignment="false" /></Item27><Item28 Ref="85" ControlType="XRLabel" Name="label11" Multiline="true" Text="Resumo das Vendas" TextAlignment="MiddleCenter" SizeF="282.291626,23" LocationFloat="143.333344,241.208252" Font="Times New Roman, 12pt" Padding="2,2,0,0,100"><StylePriority Ref="86" UseFont="false" UseTextAlignment="false" /></Item28><Item29 Ref="87" ControlType="XRLabel" Name="label10" Multiline="true" Text="Saldo Final do Período" TextAlignment="MiddleRight" SizeF="226.041672,22.9999771" LocationFloat="30.208334,115.333336" Padding="2,2,0,0,100"><StylePriority Ref="88" UseTextAlignment="false" /></Item29><Item30 Ref="89" ControlType="XRLabel" Name="label9" Multiline="true" Text="Saídas no Período" TextAlignment="MiddleRight" SizeF="226.041672,23" LocationFloat="30.208334,89.33334" Padding="2,2,0,0,100"><StylePriority Ref="90" UseTextAlignment="false" /></Item30><Item31 Ref="91" ControlType="XRLabel" Name="label7" Multiline="true" Text="Entradas no Período" TextAlignment="MiddleRight" SizeF="226.041672,23" LocationFloat="30.208334,63.33332" Padding="2,2,0,0,100"><StylePriority Ref="92" UseTextAlignment="false" /></Item31><Item32 Ref="93" ControlType="XRLabel" Name="label6" Multiline="true" Text="Estoque Anterior" TextAlignment="MiddleRight" SizeF="226.041672,23" LocationFloat="30.208334,37.33333" Padding="2,2,0,0,100"><StylePriority Ref="94" UseTextAlignment="false" /></Item32></Controls></Item2><Item3 Ref="95" ControlType="BottomMarginBand" Name="BottomMargin" /></Bands><ComponentStorage><Item1 Ref="0" ObjectType="DevExpress.DataAccess.Sql.SqlDataSource,DevExpress.DataAccess.v20.1" Name="sqlDataSource1" Base64=" " /></ComponentStorage><ObjectStorage><Item1 ObjectType="DevExpress.XtraReports.Serialization.ObjectStorageInfo, DevExpress.XtraReports.v20.1" Ref="2" Content="System.DateTime" Type="System.Type" /><Item2 ObjectType="DevExpress.XtraReports.Serialization.ObjectStorageInfo, DevExpress.XtraReports.v20.1" Ref="5" Content="System.Int32" Type="System.Type" /></ObjectStorage></XtraReportsLayoutSerializer>')
GO
SET IDENTITY_INSERT [dbo].[Reports] OFF
GO
INSERT [dbo].[selecao] ([tabela], [descricao], [camposListar], [campoChave], [campoRetorno], [joins], [filtro], [ordem], [campoChaveClasse], [prefixoTabela], [prefixoTabelaJoin], [campoChaveClasseFiltro], [campoChaveClasseFiltroRetorno], [campoRetornoFiltro], [nomeTela], [campoChaveAlternativo]) VALUES (N'ReportsGrupos', N'Grupo de Relatórios', N'upper(descricao) as descricao = Descrição, id = Código', N'id', N'descricao', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, N'ucCadGrupoReports', NULL)
GO
INSERT INTO [dbo].[configuracaoNovo]([nomeParametro],[descricaoSimplificada],[descricaoDetalhada],[tipoValor],[valor],[grupo],[subgrupo],[tamanhoValorMaximo],[idnParametroMultilinhas],[idnParametroRadio],[idnParametroSelecaoPasta],[idnPermiteAlteracaoApenasPorAdmins],[idnCampoSenha],[tabelaSelecao],[filtroSelecao],[validacaoRegularExpression]) VALUES ('idnPermitirInclusaoLoteAvulsoVenda', 'Permitir a inclusão de Lote Avulso na Venda', 'Selecione esta opção quando desejar que seja possível gerar um Lote Avulso na Venda, nos casos em que ainda não possua a nota de compra para o lançamento de entrada do item.', 'bool', 'False', 'Geral', 'Configurações do Produto',null,0,0,0,0,0,null,null,null)
GO
INSERT INTO [dbo].[configuracaoNovo]([nomeParametro],[descricaoSimplificada],[descricaoDetalhada],[tipoValor],[valor],[grupo],[subgrupo],[tamanhoValorMaximo],[idnParametroMultilinhas],[idnParametroRadio],[idnParametroSelecaoPasta],[idnPermiteAlteracaoApenasPorAdmins],[idnCampoSenha],[tabelaSelecao],[filtroSelecao],[validacaoRegularExpression]) VALUES ('idnObrigarIncluirItensDoGeradorImportacaoNFe', 'Obrigar a inclusão dos Itens do Gerador, na Importação do XML', 'Ao marcar esta opção, no lançamento de uma Entrada de produto Gerador, será obrigatório incluir os itens deste Gerador na opção de Ajuste de Estoque, da tela de Importação de NFe.', 'bool', 'False', 'Importação da NFe', 'Configurações da Importação do XML',null,0,0,0,0,0,null,null,null)
GO
INSERT INTO VERSAO(VERSAO, VERSAOATUALIZACAO, DATAATUALIZACAO, REVISAO) VALUES(483, 741, GETDATE(),1);