USE [TryNFeOnline]
GO

ALTER TABLE [dbo].[estoqueAjustes] ADD 
[qtdPerda] [decimal] (18,4) NULL,
[percPerda] [decimal] (18,4) NULL
GO
ALTER TABLE [dbo].[OrdemServicoProduto] ALTER COLUMN [ipiValor] [decimal] (18,4) NULL
GO
ALTER TABLE [dbo].[OrdemServicoProduto] ALTER COLUMN [icmsstValor] [decimal] (18,4) NULL
GO
ALTER TABLE [dbo].[produtoComponentes] ADD 
[percPerda] [decimal] (18,4) NULL
GO
ALTER TABLE [dbo].[ProdutoMontagem] ADD 
[idMaquinaProducaoProduto] [int] NULL
GO
CREATE TABLE [dbo].[TipoProducao]
(
	[id] [int] IDENTITY (1,1) NOT NULL,
	[descricao] [varchar] (100) COLLATE Latin1_General_CI_AS NULL,
	[idOperacaoEntrada] [int] NULL,
	[idOperacaoSaida] [int] NULL,
	[idnInativo] [bit] NOT NULL,
	CONSTRAINT [PK_ProcessoProducao] 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].[SaldoContasBancarias] 
(
	@idContaInf int = 0,
	@dataInf datetime
)
RETURNS 
@Resultado TABLE 
(
		idConta int,
		dscConta varchar(400),
		saldo decimal(18,4),
		dataSaldo datetime,
		numeroConta varchar(200),
		agencia varchar(200),				
		banco varchar(200)		
)
AS
BEGIN
INSERT INTO @Resultado
select c.id as idConta, c.descricao, sum(case when bm.tipoDC = 'C' then bm.valor * -1 else bm.valor end) as valor, @dataInf as dataSaldo, 
c.numeroConta, c.agencia, b.descricao
from BancoMovimento bm
inner join Conta c on c.id = bm.idConta
inner join Banco b on b.id = c.idBanco
--inner join BancoMovimentoComposicao bmc on bmc.idBancoMovimento = bm.id
--inner join CaixaMovimento cm on cm.id = bmc.idCaixaMovimento
--inner join FaturaParcelaPagamento fpp on fpp.id = cm.idFaturaParcelaPagamentoOrigem
--inner join FaturaParcela fp on fp.id = fpp.idFaturaParcela
--inner join Fatura f on f.id = fp.idFatura
--inner join ReceitaDespesa rd on rd.id = f.idReceitaDespesa
--left join parceiro p on p.id = f.idParceiro
where ((bm.idConta = @idContaInf) or (@idContaInf = 0))
and (bm.data <= @dataInf)
and (bm.dataConciliacao is not null)
and (bm.dataConciliacao <= @dataInf)
and (coalesce(c.idnInativo, 0) = 0)
group by c.id, c.numeroConta, c.agencia, b.descricao, c.descricao

RETURN 
END
GO
-- =============================================
-- Author:		Name
-- Create date: 
-- Description:	
-- =============================================
ALTER 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.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].[TipoProducao] ADD CONSTRAINT [FK_TipoProducao_operacaoEntrada] FOREIGN KEY
	(
		[idOperacaoEntrada]
	)
	REFERENCES [dbo].[operacao]
	(
		[id]
	)
GO

ALTER TABLE [dbo].[TipoProducao] ADD CONSTRAINT [FK_TipoProducao_operacaoSaida] FOREIGN KEY
	(
		[idOperacaoSaida]
	)
	REFERENCES [dbo].[operacao]
	(
		[id]
	)
GO

ALTER TABLE [dbo].[ProdutoMontagem] ADD CONSTRAINT [FK_ProdutoMontagem_MaquinaProducaoProduto] FOREIGN KEY
	(
		[idMaquinaProducaoProduto]
	)
	REFERENCES [dbo].[MaquinaProducaoProduto]
	(
		[id]
	)
GO
SET IDENTITY_INSERT [dbo].[Telas] ON
GO
INSERT [dbo].[Telas] ([id], [descricao], [controle], [idnPermiteAbrirVarias]) VALUES (401, N'Consultar Projeção Bancária', N'Cadastros.ucConsProjecaoBancaria, Cadastros, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null', 0)
GO
INSERT [dbo].[Telas] ([id], [descricao], [controle], [idnPermiteAbrirVarias]) VALUES (402, N'Consultar Tipos de Produção', N'Cadastros.ucConsTipoProducao, Cadastros, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null', 0)
GO
INSERT [dbo].[Telas] ([id], [descricao], [controle], [idnPermiteAbrirVarias]) VALUES (403, N'Cadastrar Tipo de Produção', N'Cadastros.ucCadTipoProducao, Cadastros, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null', 0)
GO
SET IDENTITY_INSERT [dbo].[Telas] OFF
GO
SET IDENTITY_INSERT [dbo].[MenuItens] ON 
GO
INSERT [dbo].[MenuItens] ([id], [idMenu], [descricao], [idTela], [idMenuItemPai], [ordem], [idnVisivel], [md5], [imagem]) VALUES (518, 1, N'Projeção Bancária', 401, 200, 4, 1, NULL, NULL)
GO
INSERT [dbo].[MenuItens] ([id], [idMenu], [descricao], [idTela], [idMenuItemPai], [ordem], [idnVisivel], [md5], [imagem]) VALUES (519, 2, N'Projeção Bancária', 401, 468, 4, 1, NULL, NULL)
GO
SET IDENTITY_INSERT [dbo].[MenuItens] OFF
GO
SET IDENTITY_INSERT [MenuLateralItens] ON
GO
INSERT INTO [dbo].[MenuLateralItens] ([id],[idMenu],[descricao],[idTela],[idMenuLateralGrupo],[imagem],[ordem]) VALUES (451, 1, '-', null, 29, null, 8)
GO
INSERT INTO [dbo].[MenuLateralItens] ([id],[idMenu],[descricao],[idTela],[idMenuLateralGrupo],[imagem],[ordem]) VALUES (452, 1, 'Consultar Tipos de Produção', 402, 29, 'search-2_32.png', 9)
GO
INSERT INTO [dbo].[MenuLateralItens] ([id],[idMenu],[descricao],[idTela],[idMenuLateralGrupo],[imagem],[ordem]) VALUES (453, 1, 'Cadastrar Tipo de Produção', 403, 29, 'wrench.png', 10)
GO
INSERT INTO [dbo].[MenuLateralItens] ([id],[idMenu],[descricao],[idTela],[idMenuLateralGrupo],[imagem],[ordem]) VALUES (454, 2, '-', null, 29, null, 8)
GO
INSERT INTO [dbo].[MenuLateralItens] ([id],[idMenu],[descricao],[idTela],[idMenuLateralGrupo],[imagem],[ordem]) VALUES (455, 2, 'Consultar Tipos de Produção', 402, 29, 'search-2_32.png', 9)
GO
INSERT INTO [dbo].[MenuLateralItens] ([id],[idMenu],[descricao],[idTela],[idMenuLateralGrupo],[imagem],[ordem]) VALUES (456, 2, 'Cadastrar Tipo de Produção', 403, 29, 'wrench.png', 10)
GO
SET IDENTITY_INSERT [MenuLateralItens] OFF
GO
INSERT INTO VERSAO(VERSAO, VERSAOATUALIZACAO, DATAATUALIZACAO, REVISAO) VALUES(511, 769, GETDATE(),1);