USE [TryNFeOnline]
GO

ALTER TABLE [dbo].[PedidoProdutoProducaoMaquinas] DROP CONSTRAINT [FK_PedidoProdutoProducao_MaquinaProducaoProduto]
GO
ALTER TABLE [dbo].[produtoimposto] ADD 
[idnPermitePartilhaUFDestinoZerada] [bit] NULL,
[idnUtilizarCstPisCofinsEquivalenteNaEntrada] [bit] NULL,
[idnObterAliqIcmsTabelaParametrizada] [bit] NULL,
[idnObterAliqPisTabelaParametrizada] [bit] NULL,
[idnObterAliqCofinsTabelaParametrizada] [bit] NULL,
[idnObterAliqIcmsStTabelaParametrizada] [bit] NULL,
[idnObterAliqIpiTabelaParametrizada] [bit] NULL,
[idnObterMVATabelaParametrizada] [bit] NULL,
[idnObterAliqIcmsPartilhaTabelaParametrizada] [bit] NULL
GO
ALTER TABLE [dbo].[produto] ADD 
[idProdutoTipoItem] [int] NULL
GO
ALTER TABLE [dbo].[PedidoProdutoProducao] ADD 
[idnOPCaixaImpressa] [bit] NULL
GO
ALTER TABLE [dbo].[pedidoProduto] ADD 
[idnProdutoCaixa] [bit] NULL
GO
ALTER TABLE [dbo].[ParametrizacaoAliquotas] ALTER COLUMN [ufDestino] [varchar] (200) COLLATE Latin1_General_CI_AS NULL
GO
ALTER TABLE [dbo].[ParametrizacaoAliquotas] ALTER COLUMN [ncm] [varchar] (500) COLLATE Latin1_General_CI_AS NULL
GO
ALTER TABLE [dbo].[NFProduto] ADD 
[cfopXMLEntrada] [varchar] (5) COLLATE Latin1_General_CI_AS NULL
GO
ALTER TABLE [dbo].[emitente] ADD 
[percAliqIcmsDifalUFDestino] [decimal] (18,4) NULL,
[percPisSaidaPrecificacao] [decimal] (18,4) NULL,
[percCofinsSaidaPrecificacao] [decimal] (18,4) NULL
GO
ALTER TABLE [dbo].[cstpis] ADD 
[cstEquivalente] [varchar] (4) COLLATE Latin1_General_CI_AS NULL
GO
ALTER TABLE [dbo].[cstipi] ADD 
[cstEquivalente] [varchar] (4) COLLATE Latin1_General_CI_AS NULL
GO
ALTER TABLE [dbo].[cstcofins] ADD 
[cstEquivalente] [varchar] (4) COLLATE Latin1_General_CI_AS NULL
GO
ALTER TABLE [dbo].[OperadorConfiguracoes] ADD 
[idnPermiteExcluirFatura] [bit] NULL
GO
CREATE TABLE [dbo].[ProdutoTipoItem]
(
	[id] [int] IDENTITY (1,1) NOT NULL,
	[descricaoTipoItem] [varchar] (100) COLLATE Latin1_General_CI_AS NOT NULL,
	[numeracaoInicial] [int] NULL,
	[numeracaoFinal] [int] NULL,
	[tipoItem] [varchar] (4) COLLATE Latin1_General_CI_AS NULL,
	CONSTRAINT [PK_ProdutoTipoItem] 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:	
-- =============================================
CREATE FUNCTION [dbo].[ListaPrecificacaoProduto] 
(
	@idEmitenteInf int,
	@dataVigenciaInf datetime,
	@idProdutoInf int,
	@idProdutoClassificacaoInf int,
	@idnUtilizarCustoMedioNoCustoInf bit,
	@idMarcaInf int,
	@idGrupoInf int,
	@idGrupoFiscalInf int,
	@ncmInf varchar(14)
)
RETURNS 
@Resultado TABLE 
(
	idProduto int,
	idProdutoClasse int,
	ucom varchar(20),
	dscProduto varchar(500),	
	custo decimal(18,4),
	precoVenda decimal(18,4),
	precoMinimo decimal(18,4),
	referenciaFabrica varchar(100),
	ncm varchar(14),
	idGrupoFiscal int,
	dscGrupoFiscal varchar(200),
	idGrupoProduto int,
	dscGrupoProduto varchar(100),
	idMarca int,
	dscMarca varchar(100),
	idNotaFiscalUltimaCompra int null,
	percMargemLucroLiquidaEmitente decimal(18,4),
	percMargemLucroLiquidaMinimaEmitente decimal(18,4),
	percDespesasOperacionaisEmitente decimal(18,4),
	percIrCsslEmitente decimal(18,4),
	pisCreditoEmitente decimal(18,4),
	cofinsCreditoEmitente decimal(18,4),
	percIcmsPadraoSaidas decimal(18,4),
	percAliqIcmsDifalUFDestino decimal(18,4),
	numeroNF varchar(100),	
	aliqIcmsUltimaCompra decimal(18,4),	
	aliqPisUltimaCompra decimal(18,4),
	aliqCofinsUltimaCompra decimal(18,4),
	cfopUltimaCompra varchar(10),
	cstIcmsUltimaCompra varchar(10)	,
	origemCstXmlUltimaCompra int null,
	aliqPisSaidas decimal(18,4),
	aliqCofinsSaidas decimal(18,4),
	dataUltimaCompra datetime null
)
AS
BEGIN

declare @idEmitente int = @idEmitenteInf;
declare @dataVigencia datetime = @dataVigenciaInf;
declare @idnUtilizarCustoMedioNoCusto bit = @idnUtilizarCustoMedioNoCustoInf;
declare @idMarca int = @idMarcaInf;
declare @idGrupo int = @idGrupoInf;
declare @idGrupoFiscal int = @idGrupoFiscalInf;
declare @ncm varchar(14) = @ncmInf;

INSERT into @Resultado
select pr.id, pc.id, (case when pc.ucom is not null then pc.ucom else pr.ucom end) as ucom,
pr.descricao,
(case when @idnUtilizarCustoMedioNoCusto = 1 then (select cpd.valor from CustoMedioProduto(@idEmitente, pr.id, coalesce(pc.id, 0), @dataVigencia) cpd) else (select cpd.valor from CustoProdutoData(@idEmitente, pr.id, coalesce(pc.id, 0), @dataVigencia) cpd) end) as custo,
(select pp.valor from PrecoProduto(@idEmitente, pr.id, coalesce(pc.id, 0), @dataVigencia) pp),
(select pp.valorMinimo from PrecoProduto(@idEmitente, pr.id, coalesce(pc.id, 0), @dataVigencia) pp),
pr.refFabrica, 
(case when pc.ncm is not null then pc.ncm else pr.ncm end),
pr.idGrupoFiscal, gf.descricao,
pr.idGrupo, pg.descricao,
ma.id, ma.descricao,
(select top 1 nf.id from nfproduto nfp 
inner join notafiscal nf on nf.id = nfp.idnotafiscal 
inner join operacao op on op.id = nf.idOperacao
inner join emitente em on em.id = @idEmitente
inner join nfEmitente nfe on nfe.idNotaFiscal = nf.id
where (nf.tipodocumento = 0)
and (op.idnCompraVenda = 1)
and (nfp.idProduto = pr.id)
and (nfe.idEmitente = @idEmitente)
and ((nfp.idProdutoClassificacao = pc.id) or (pc.id is null))
and (nf.nfeCstat in (100,150))
order by nf.dataEmissao desc),
0,0,0,0,0,0,0,0,
'',0,0,0, '', '', null, 0, 0, null

from produto pr
left join ProdutoClassificacao pc on pc.idProduto = pr.id
left join produtoGrupo pg on pg.id = pr.idGrupo
left join grupofiscal gf on gf.id = pr.idGrupoFiscal
left join marca ma on ma.id = pr.idMarca
where (coalesce(pr.idnBaixa, 0) = 0)
--and ((pr.idGrupo = @idGrupo) or (@idGrupo = 0))
and ((@idGrupo > 0) and (pr.idGrupo in (select idGrupo from ProdutoGruposFilhos(@idGrupo))) or (@idGrupo = 0))
and ((pr.idMarca = @idMarca) or (@idMarca = 0))
and ((pr.id = @idProdutoInf) or (@idProdutoInf = 0))
and ((pr.idGrupoFiscal = @idGrupoFiscal) or (@idGrupoFiscal = 0))
and ((@ncm = '') or (pr.ncm like @ncm + '%'))


update @Resultado 
set
	percMargemLucroLiquidaEmitente = em.percMargemLucroLiquidaPadrao,
	percMargemLucroLiquidaMinimaEmitente = em.percMargemLucroLiquidaMinima,
	percDespesasOperacionaisEmitente = em.percDespesasOperacionais,
	percIrCsslEmitente = em.percIrCssl,
	pisCreditoEmitente = em.percCreditoPisRecuperar,
	cofinsCreditoEmitente = em.percCreditoCofinsRecuperar,
	percIcmsPadraoSaidas = em.percIcmsPadraoSaidas,
	percAliqIcmsDifalUFDestino = em.percAliqIcmsDifalUFDestino,
	aliqCofinsSaidas = em.percCofinsSaidaPrecificacao,
	aliqPisSaidas = em.percPisSaidaPrecificacao
from (
select emi.percMargemLucroLiquidaPadrao, emi.percMargemLucroLiquidaMinima,	emi.percDespesasOperacionais,
emi.percIrCssl, emi.percCreditoPisRecuperar, emi.percCreditoCofinsRecuperar, emi.percIcmsPadraoSaidas,
emi.percAliqIcmsDifalUFDestino, emi.percCofinsSaidaPrecificacao, emi.percPisSaidaPrecificacao
from emitente emi 
where (emi.id = @idEmitente)
) as em

update @Resultado
set 
aliqIcmsUltimaCompra = nf.icmsaliq,
aliqCofinsUltimaCompra = nf.cofinspercentualaliq,
aliqPisUltimaCompra = nf.pispercentualaliq,
numeroNF = nf.numero,
cfopUltimaCompra = nf.cfopXMLEntrada,
cstIcmsUltimaCompra = nf.icmsCstXMLEntrada,
origemCstXmlUltimaCompra = nf.icmsOrigemXMLEntrada,
dataUltimaCompra = nf.dataEmissao
from @Resultado r
inner join (
select nfp.idnotafiscal, 
(case when nfp.icmsaliq is null or nfp.icmsaliq = 0 then nfp.icmsAliqXMLEntrada else nfp.icmsaliq end) as icmsaliq, 
(case when nfp.pispercentualaliq is null or nfp.pispercentualaliq = 0 then nfp.pisAliqXMLEntrada else nfp.pispercentualaliq end) as pispercentualaliq, 
(case when nfp.cofinspercentualaliq is null or nfp.cofinspercentualaliq = 0 then nfp.cofinsAliqXMLEntrada else nfp.cofinspercentualaliq end) as cofinspercentualaliq, 
nf.numero, nfp.idProduto, nfp.idProdutoClassificacao, nfp.icmsCstXMLEntrada, nfp.cfopXMLEntrada, nfp.icmsOrigemXMLEntrada, nf.dataEmissao
from nfproduto nfp
inner join notafiscal nf on nf.id = nfp.idnotafiscal
inner join operacao op on op.id = nf.idOperacao
inner join nfEmitente nfe on nfe.idNotaFiscal = nf.id
where (nf.tipodocumento = 0)
and (op.idnCompraVenda = 1)
and (nfe.idEmitente = @idEmitente)
and (nf.nfeCstat in (100,150))
) as nf
on r.idProduto = nf.idProduto and (r.idProdutoClasse = nf.idProdutoClassificacao or r.idProdutoClasse is null) and nf.idNotaFiscal = r.idNotaFiscalUltimaCompra

RETURN
END
GO
ALTER TABLE [dbo].[produto] ADD CONSTRAINT [FK_produto_ProdutoTipoItem] FOREIGN KEY
	(
		[idProdutoTipoItem]
	)
	REFERENCES [dbo].[ProdutoTipoItem]
	(
		[id]
	)
GO
ALTER TABLE [dbo].[PedidoProdutoProducaoMaquinas] ADD CONSTRAINT [FK_PedidoProdutoProducaoMaquinas_MaquinaProducaoProduto] FOREIGN KEY
	(
		[idMaquinaProducao]
	)
	REFERENCES [dbo].[MaquinaProducaoProduto]
	(
		[id]
	)
GO
GO
SET IDENTITY_INSERT [dbo].[Telas] ON 
GO
INSERT [dbo].[Telas] ([id], [descricao], [controle], [imagem], [parametrosControle], [teclaAtalho1], [teclaAtalho2], [idnPermiteAbrirVarias], [qtdVezesAberta], [dataUltimaAbertura], [idnRestricaoAcesso], [idnBloquearAcessoPlanoBasico]) VALUES (399, N'Consultar Produto Tipo', N'Cadastros.ucConsProdutoTipoItem, Cadastros, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
GO
INSERT [dbo].[Telas] ([id], [descricao], [controle], [imagem], [parametrosControle], [teclaAtalho1], [teclaAtalho2], [idnPermiteAbrirVarias], [qtdVezesAberta], [dataUltimaAbertura], [idnRestricaoAcesso], [idnBloquearAcessoPlanoBasico]) VALUES (400, N'Cadastrar Produto Tipo', N'Cadastros.ucCadProdutoTipoItem, Cadastros, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
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 (447, 1, N'Consultar Produto tipo', 399, 2, N'search-2_32.png', 22)
GO
INSERT [dbo].[MenuLateralItens] ([id], [idMenu], [descricao], [idTela], [idMenuLateralGrupo], [imagem], [ordem]) VALUES (448, 1, N'Cadastrar Produto Tipo', 400, 2, N'service-2_32.png', 23)
GO
INSERT [dbo].[MenuLateralItens] ([id], [idMenu], [descricao], [idTela], [idMenuLateralGrupo], [imagem], [ordem]) VALUES (449, 2, N'Consultar Produto Tipo', 399, 2, N'search-2_32.png', 19)
GO
INSERT [dbo].[MenuLateralItens] ([id], [idMenu], [descricao], [idTela], [idMenuLateralGrupo], [imagem], [ordem]) VALUES (450, 2, N'Cadastrar Produto Tipo', 400, 2, N'service-2_32.png', 20)
GO
SET IDENTITY_INSERT [dbo].[MenuLateralItens] OFF
GO
INSERT [dbo].[configuracaoNovo] ([nomeParametro], [descricaoSimplificada], [descricaoDetalhada], [tipoValor], [valor], [grupo], [subgrupo], [tamanhoValorMaximo], [idnParametroMultilinhas], [idnParametroRadio], [idnParametroSelecaoPasta], [idnPermiteAlteracaoApenasPorAdmins], [idnCampoSenha], [tabelaSelecao], [filtroSelecao], [validacaoRegularExpression], [idnPermiteSelecaoMultiplaOpcoes]) VALUES (N'idnGravarNotasAutomaticamenteAoFaturarPedidos', N'Gravar notas automaticamente ao faturar pedidos', N'Ao habilitar este parâmetro, a opção de Gravar notas automaticamente virá sempre marcada no faturamento do pedido', N'bool', N'False', N'Pedido', N'Configurações do Pedido', NULL, 0, 0, 0, 1, 0, NULL, NULL, NULL, NULL)
INSERT [dbo].[configuracaoNovo] ([nomeParametro], [descricaoSimplificada], [descricaoDetalhada], [tipoValor], [valor], [grupo], [subgrupo], [tamanhoValorMaximo], [idnParametroMultilinhas], [idnParametroRadio], [idnParametroSelecaoPasta], [idnPermiteAlteracaoApenasPorAdmins], [idnCampoSenha], [tabelaSelecao], [filtroSelecao], [validacaoRegularExpression], [idnPermiteSelecaoMultiplaOpcoes]) VALUES (N'idnNaoAgruparNotasAoFaturarPedido', N'Não agrupar notas ao faturar pedido', N'Ao faturar os pedidos de um mesmo parceiro, notas fiscais não serão agrupadas', N'bool', N'False', N'Pedido', N'Configurações do Pedido', NULL, 0, 0, 0, 1, 0, NULL, NULL, NULL, NULL)
INSERT [dbo].[configuracaoNovo] ([nomeParametro], [descricaoSimplificada], [descricaoDetalhada], [tipoValor], [valor], [grupo], [subgrupo], [tamanhoValorMaximo], [idnParametroMultilinhas], [idnParametroRadio], [idnParametroSelecaoPasta], [idnPermiteAlteracaoApenasPorAdmins], [idnCampoSenha], [tabelaSelecao], [filtroSelecao], [validacaoRegularExpression], [idnPermiteSelecaoMultiplaOpcoes]) VALUES (N'idnNaoObterPrecoAoIncluirItemPorCSV', N'Na inclusão de produto por CSV, se um item estiver com valor zerado, o preço não será buscado e o item será incluido sem valor', N'', N'bool', N'False', N'Pedido', N'Configurações do Pedido', NULL, 0, 0, 0, 1, 0, NULL, NULL, NULL, NULL)
INSERT [dbo].[configuracaoNovo] ([nomeParametro], [descricaoSimplificada], [descricaoDetalhada], [tipoValor], [valor], [grupo], [subgrupo], [tamanhoValorMaximo], [idnParametroMultilinhas], [idnParametroRadio], [idnParametroSelecaoPasta], [idnPermiteAlteracaoApenasPorAdmins], [idnCampoSenha], [tabelaSelecao], [filtroSelecao], [validacaoRegularExpression], [idnPermiteSelecaoMultiplaOpcoes]) VALUES (N'idnObrigarProdutoTipoItem', N'Exigir informar o Tipo Item 2 no Cadastro do Produto', N'', N'bool', N'False', N'Geral', N'Configurações do Produto', NULL, 0, 0, 0, 1, 0, NULL, NULL, NULL, NULL)
INSERT INTO [dbo].[configuracaoNovo]([nomeParametro],[descricaoSimplificada],[descricaoDetalhada],[tipoValor],[valor],[grupo],[subgrupo],[tamanhoValorMaximo],[idnParametroMultilinhas],[idnParametroRadio],[idnParametroSelecaoPasta],[idnPermiteAlteracaoApenasPorAdmins],[idnCampoSenha],[tabelaSelecao],[filtroSelecao],[validacaoRegularExpression],[idnPermiteSelecaoMultiplaOpcoes]) VALUES ('idnGerarGNREAutomaticamente', 'Salvar a GNRE automaticamente, na geração pela Consulta de Notas', 'Selecione esta opção quando desejar que a GNRE seja gravada automaticamente, ao solicitar a geração pela tela de Consulta de Notas. Com a opção desmarcada, é possível alterar alguma informação antes de salvar, caso necessário.', 'bool', 'False', 'Geral', 'Configurações Gerais',null,0,0,0,0,0,null,null,null,0)
INSERT INTO [dbo].[configuracaoNovo]([nomeParametro],[descricaoSimplificada],[descricaoDetalhada],[tipoValor],[valor],[grupo],[subgrupo],[tamanhoValorMaximo],[idnParametroMultilinhas],[idnParametroRadio],[idnParametroSelecaoPasta],[idnPermiteAlteracaoApenasPorAdmins],[idnCampoSenha],[tabelaSelecao],[filtroSelecao],[validacaoRegularExpression],[idnPermiteSelecaoMultiplaOpcoes]) VALUES ('codigoProdutoPadraoGNRE', 'Código do Produto padrão para a GNRE', 'Informe o Código do Produto desejado para a geração da GNRE de forma automática. Caso o produto possa variar conforme a venda, deixe o campo zerado para poder defini-lo manualmente.', 'int', '0', 'Geral', 'Configurações Gerais',null,0,0,0,0,0,null,null,null,0)
GO
update Telas set idnRestricaoAcesso = 0 where id in (153,154)
GO
INSERT INTO VERSAO(VERSAO, VERSAOATUALIZACAO, DATAATUALIZACAO, REVISAO) VALUES(510, 768, GETDATE(),1);