USE [TryNFeOnline]
GO

ALTER TABLE [dbo].[Boleto] ALTER COLUMN [mensagemStatusEnvio] [varchar] (500) COLLATE Latin1_General_CI_AS NULL
GO
ALTER TABLE [dbo].[Customizacao] ADD 
[idnObservacaoContribuinte] [bit] NULL
GO
CREATE TABLE [dbo].[CustomizacaoColunasValores]
(
	[id] [int] IDENTITY (1,1) NOT NULL,
	[idCustomizacaoColunas] [int] NOT NULL,
	[valor] [varchar] (max) COLLATE Latin1_General_CI_AS NULL,
	CONSTRAINT [PK_CustomizacaoColunasValores] 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].[EmailContaEnvio]
(
	[id] [int] IDENTITY (1,1) NOT NULL,
	[idFilial] [int] NOT NULL,
	[servidor] [varchar] (100) COLLATE Latin1_General_CI_AS NULL,
	[porta] [int] NULL,
	[utilizaSSL] [bit] NULL,
	[usuario] [varchar] (100) COLLATE Latin1_General_CI_AS NULL,
	[senha] [varchar] (100) COLLATE Latin1_General_CI_AS NULL,
	[formaEnvio] [varchar] (20) COLLATE Latin1_General_CI_AS NULL,
	[versaoTLS] [int] NULL,
	[idnEnvioOS] [bit] NOT NULL,
	[idnEnvioPedido] [bit] NOT NULL,
	[idnEnvioMovimento] [bit] NOT NULL,
	[idnEnvioBoleto] [bit] NOT NULL,
	[idnEnvioArquivosContador] [bit] NOT NULL,
	[idnEnvioCobranca] [bit] NOT NULL,
	[idnEnvioDocumentosFiscais] [bit] NOT NULL,
	CONSTRAINT [PK_EmailContaEnvio] 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

-- =============================================
-- Author:		Name
-- Create date: 
-- Description:	
-- =============================================
ALTER FUNCTION [dbo].[CustoProdutoDataRelatorio] 
(
	@idEmitenteInf int,
	@idProdutoInf int = 0,
	@idProdutoClassificacaoInf int = 0,
	@dataInf datetime = null
)
RETURNS 
@Resultado TABLE 
(
		idProduto int,
		idProdutoClassificacao int NULL,
		dscProdutoClasse varchar(2000),						
		valor decimal(18,4),
		origemCusto varchar(50), 
		idNotaFiscal int null, 
		idAjusteEstoque int null
)
AS
BEGIN
	declare @idEmitente int = @idEmitenteInf;
	declare @idProduto int = 0;
	declare @idProdutoClassificacao int = 0;
	declare @dataAtual date = @dataInf;
	declare @idnConsiderarCustoMedio bit = (select coalesce(idnConsiderarCustoMedioComoCustoProduto, 0) from configuracoes)
	
	if (@idProdutoClassificacaoInf > 0)
		SET @idProdutoClassificacao = @idProdutoClassificacaoInf;
	
	if (@idProdutoInf > 0)
		SET @idProduto = @idProdutoInf;
	
	if (@dataAtual is null)
		SET @dataAtual = (SELECT GETDATE());
	
	declare @idnPuxarSempreUltimoPreco bit = 0;

	SET @idnPuxarSempreUltimoPreco = (select idnSemprePuxarUltimaCusto from configuracoes)

	if (@idnPuxarSempreUltimoPreco = 1)
		SET @idEmitente = 0;
	

	if (@idProdutoClassificacao > 0)
	BEGIN
		INSERT INTO @Resultado
		select TOP 1
		pcu.idProduto, pcu.idProdutoClassificacao, 
		(case when pcu.idProdutoClassificacao is not null then pr.descricao + ' - ' + coalesce(pc.descricao, '') else pr.descricao end) as dscProdutoClasse,
		(case when @idnConsiderarCustoMedio = 1 then pcu.custoMedio else pcu.precoCusto end), cast('CUSTO' as varchar(50)),
		pcu.idNotaFiscal, pcu.idAjusteEstoque
		from ProdutoCusto pcu
		inner join produto pr on pr.id = pcu.idProduto
		left join ProdutoClassificacao pc on pc.id = pcu.idProdutoClassificacao
		where (pcu.dataVigencia <= @dataAtual)
		and ((pcu.idFilial = @idEmitente) or (@idEmitente = 0))
		and (pcu.idProduto = @idProduto)
		--and (pcu.idProdutoClassificacao = @idProdutoClassificacao)
		and (pcu.idNotaFiscal is not null)
		order by pcu.dataVigencia desc
		
		declare @totalClasse int = (select COUNT(*) from @Resultado)
		if (@totalClasse = 0)
		BEGIN
			INSERT INTO @Resultado
			select TOP 1
			pcu.idProduto, pcu.idProdutoClassificacao, 
			(case when pcu.idProdutoClassificacao is not null then pr.descricao + ' - ' + coalesce(pc.descricao, '') else pr.descricao end) as dscProdutoClasse,
			(case when @idnConsiderarCustoMedio = 1 then pcu.custoMedio else pcu.precoCusto end), cast('CUSTO' as varchar(50)),
			pcu.idNotaFiscal, pcu.idAjusteEstoque
			from ProdutoCusto pcu
			inner join produto pr on pr.id = pcu.idProduto
			left join ProdutoClassificacao pc on pc.id = pcu.idProdutoClassificacao
			where (pcu.dataVigencia <= @dataAtual)
			and ((pcu.idFilial = @idEmitente) or (@idEmitente = 0))
			and (pcu.idProduto = @idProduto)
			--and (pcu.idProdutoClassificacao is null)
			and (pcu.idNotaFiscal is not null)
			order by pcu.dataVigencia desc	
		END
	END
	ELSE
	BEGIN
		INSERT INTO @Resultado
		select TOP 1
		pcu.idProduto, pcu.idProdutoClassificacao, 
		(case when pcu.idProdutoClassificacao is not null then pr.descricao + ' - ' + coalesce(pc.descricao, '') else pr.descricao end) as dscProdutoClasse,
		(case when @idnConsiderarCustoMedio = 1 then pcu.custoMedio else pcu.precoCusto end), cast('CUSTO' as varchar(50)),
		pcu.idNotaFiscal, pcu.idAjusteEstoque
		from ProdutoCusto pcu
		inner join produto pr on pr.id = pcu.idProduto
		left join ProdutoClassificacao pc on pc.id = pcu.idProdutoClassificacao
		where (pcu.dataVigencia <= @dataAtual)
		and ((pcu.idFilial = @idEmitente) or (@idEmitente = 0))
		and (pcu.idProduto = @idProduto)
		--and (pcu.idProdutoClassificacao is null)
		and (pcu.idNotaFiscal is not null)
		order by pcu.dataVigencia desc	
	END
	
	declare @totalRegistros int
	SET @totalRegistros = (select count(*) from @Resultado)
	
	if @totalRegistros = 0
	BEGIN
	--Se n?o tem um custo definido, obtem o pre?o de entrada no cadastro do produto
		if (@idProdutoClassificacao > 0)
		BEGIN
		--Se foi informado classifica??o, obtem os dados da classifica??o
			INSERT INTO @Resultado
				select pc.idProduto, pc.id,
					pr.descricao + ' - ' + coalesce(pc.descricao, '') as dscProdutoClasse,
					(case when pc.precoEntrada > 0 then pc.precoEntrada else pr.precoEntrada end) as precoCusto,
					cast('CUSTOPADRAO' as varchar(50)),
					null,null
				from ProdutoClassificacao pc
				inner join Produto pr on pr.id = pc.idProduto
				where (pc.id = @idProdutoClassificacao)
		END
		ELSE
		BEGIN
		--Se uma classifica??o n?o foi informada, obtem os dados do cadastro do produto
			INSERT INTO @Resultado
				select pr.id, null,
					pr.descricao,
					pr.precoEntrada,
					cast('CUSTOPADRAO' as varchar(50)),
					null, null
				from Produto pr			
				where (pr.id = @idProduto)		
		END
					
	END
	
	RETURN 
END
GO
ALTER TABLE [dbo].[CustomizacaoColunasValores] ADD CONSTRAINT [FK_CustomizacaoColunasValores_CustomizacaoColunas] FOREIGN KEY
	(
		[idCustomizacaoColunas]
	)
	REFERENCES [dbo].[CustomizacaoColunas]
	(
		[id]
	)
GO

ALTER TABLE [dbo].[EmailContaEnvio] ADD CONSTRAINT [FK_EmailContaEnvio_emitente] FOREIGN KEY
	(
		[idFilial]
	)
	REFERENCES [dbo].[emitente]
	(
		[id]
	)
GO
SET IDENTITY_INSERT [dbo].[MenuItens] ON 
INSERT [dbo].[MenuItens] ([id], [idMenu], [descricao], [idTela], [idMenuItemPai], [ordem], [idnVisivel], [md5], [imagem]) VALUES (395, 1, N'Emissão de Pré Venda', 60, 22, 22, 1, NULL, N'')
GO
SET IDENTITY_INSERT [dbo].[MenuItens] OFF
GO
update menuitens set descricao = 'Pré Venda (Mesas/Comandas)', ordem = 22 where id = 197
GO
UPDATE cidade SET descricao = 'EMBU DAS ARTES' WHERE id = 4949
GO
INSERT INTO VERSAO(VERSAO, VERSAOATUALIZACAO, DATAATUALIZACAO) VALUES(382, 640, GETDATE());