USE [TryNFeOnline]
GO

ALTER TABLE [dbo].[MovimentoSerieProduto] ALTER COLUMN [numeroserie] [varchar] (100) COLLATE Latin1_General_CI_AS NULL
GO
ALTER TABLE [dbo].[MovimentoSerieProduto] ADD 
[numeroSerieGerado] [varchar] (100) COLLATE Latin1_General_CI_AS NULL,
[dataInclusaoAlteracao] [datetime] NULL,
[idOperador] [int] NULL,
[numeroLote] [bigint] NULL
GO
ALTER TABLE [dbo].[pedido] ADD 
[qtdPalletsInteiro] [int] NULL,
[qtdPalletsMeios60] [int] NULL,
[qtdPalletsCortado80] [int] NULL,
[numeroSerieGerador] [varchar] (150) COLLATE Latin1_General_CI_AS NULL
GO
CREATE TABLE [dbo].[NumeroSerieProduto]
(
	[id] [int] IDENTITY (1,1) NOT NULL,
	[numero] [bigint] NOT NULL,
	[idProduto] [int] NOT NULL,
	[idFilial] [int] NOT NULL,
	CONSTRAINT [PK_NumeroSerieProduto] 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].[OrdemProducao]
(
	[id] [bigint] IDENTITY (1,1) NOT NULL,
	[dataAbertura] [datetime] NOT NULL,
	[status] [varchar] (200) COLLATE Latin1_General_CI_AS NOT NULL,
	[idOperador] [int] NOT NULL,
	[sequenciaCard] [int] NOT NULL,
	[motivoCancelamento] [varchar] (300) COLLATE Latin1_General_CI_AS NULL,
	CONSTRAINT [PK_OrdemProducaoPedidos] 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].[TransferenciaEstoque]
(
	[id] [bigint] IDENTITY (1,1) NOT NULL,
	[idFilialOrigem] [int] NOT NULL,
	[idOperacaoAjusteSaida] [int] NOT NULL,
	[dataSaida] [datetime] NOT NULL,
	[observacaoSaida] [varchar] (200) COLLATE Latin1_General_CI_AS NULL,
	[idFilialDestino] [int] NOT NULL,
	[idOperacaoAjusteEntrada] [int] NOT NULL,
	[dataEntrada] [datetime] NOT NULL,
	[observacaoEntrada] [varchar] (200) COLLATE Latin1_General_CI_AS NULL,
	[idContaEstoqueConsulta] [int] NOT NULL,
	[idOperador] [int] NOT NULL,
	[dataHoraInclusao] [datetime] NULL,
	CONSTRAINT [PK_TransferenciaEstoque] 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].[TransferenciaEstoqueItens]
(
	[id] [bigint] IDENTITY (1,1) NOT NULL,
	[idTransferenciaEstoque] [bigint] NOT NULL,
	[idProduto] [int] NOT NULL,
	[idProdutoClassificacao] [int] NULL,
	[qtdEstoqueSaida] [decimal] (18,4) NULL,
	[qtdEstoqueEntrada] [decimal] (18,4) NULL,
	[unidadeMedida] [varchar] (20) COLLATE Latin1_General_CI_AS NOT NULL,
	[valorUnitarioSaida] [decimal] (18,4) NULL,
	[valorUnitarioEntrada] [decimal] (18,4) NULL,
	[idAjusteEstoqueEntrada] [int] NULL,
	[idAjusteEstoqueSaida] [int] NULL,
	CONSTRAINT [PK_TransferenciaEstoqueItens] 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 NONCLUSTERED INDEX [IX_TransferenciaEstoqueItens_idTransferenciaEstoque] ON [dbo].[TransferenciaEstoqueItens]
(
	[idTransferenciaEstoque] ASC
) WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY  = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO


ALTER FUNCTION [dbo].[EstoqueSerieProduto] 
(
	@numeroSerieInf varchar(100),
	@idEmitenteInf int,
	@idProdutoInf int = 0,
	@idProdutoClassificacaoInf int = 0
)
RETURNS 
@Resultado TABLE 
(
		numeroSerie varchar(100),
		idProduto int,
		idProdutoClassificacao int NULL,	
		dscProdutoClasse varchar(500),			
		codigoProdutoClasse varchar(50),
		qtd decimal(18,4)
)
AS
BEGIN

declare @ResultadoTemp TABLE
(
		numeroSerie varchar(100),
		idProduto int,
		idProdutoClassificacao int NULL,	
		dscProdutoClasse varchar(500),			
		codigoProdutoClasse varchar(50),
		qtd decimal(18,4)
)

	INSERT into @ResultadoTemp
	select (case when msp.numeroserie is null then msp.numeroSerieGerado else msp.numeroSerie end) as numeroserie, 	
	msp.idProduto, msp.idprodutoclassificacao, 
	(case when msp.idProdutoClassificacao is not null then pr.descricao + ' - ' + coalesce(pc.descricao, '') else pr.descricao end),
	(case when msp.idProdutoClassificacao is not null then cast(pr.id as varchar(47)) + REPLACE(STR(pc.sequencia, 3), SPACE(1), '0') else cast(pr.id as varchar(50)) end),
	sum((case when msp.idnEntradaSaida = '+' then 1 else -1 end)) as qtd
	from MovimentoSerieProduto msp
	inner join produto pr on pr.id = msp.idProduto
	left join ProdutoClassificacao pc on pc.id = msp.idProdutoClassificacao
	where (((case when msp.numeroserie is null then msp.numeroSerieGerado else msp.numeroSerie end) = @numeroSerieInf)  or (@numeroSerieInf = ''))
	and ((msp.idEmitente = @idEmitenteInf) or (@idEmitenteInf = 0))
	and ((msp.idProduto = @idProdutoInf) or (@idProdutoInf = 0))
	and ((msp.idProdutoClassificacao = @idProdutoClassificacaoInf) or (@idProdutoClassificacaoInf = 0))
	group by msp.numeroSerie, msp.idProduto, msp.idprodutoclassificacao, 
	(case when msp.numeroserie is null then msp.numeroSerieGerado else msp.numeroSerie end),
	(case when msp.idProdutoClassificacao is not null then pr.descricao + ' - ' + coalesce(pc.descricao, '') else pr.descricao end),
	(case when msp.idProdutoClassificacao is not null then cast(pr.id as varchar(47)) + REPLACE(STR(pc.sequencia, 3), SPACE(1), '0') else cast(pr.id as varchar(50)) end)

	INSERT into @Resultado
	select 	numeroSerie, idProduto, idProdutoClassificacao,	dscProdutoClasse, codigoProdutoClasse, 
	sum(qtd) as qtd
	from @ResultadoTemp
	group by numeroSerie, idProduto, idProdutoClassificacao,	dscProdutoClasse, codigoProdutoClasse

	RETURN 
END
GO
CREATE NONCLUSTERED INDEX [IX_IndicesMovimentoSerieProduto] ON [dbo].[MovimentoSerieProduto]
(
	[numeroserie] ASC,
	[idProduto] ASC,
	[idProdutoClassificacao] ASC,
	[idAjusteEstoque] ASC,
	[idNFProduto] ASC,
	[idOrdemServicoProduto] ASC,
	[idPedidoProduto] ASC,
	[idEmitente] ASC,
	[numeroSerieGerado] ASC,
	[idOperador] ASC,
	[numeroLote] ASC
) WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY  = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
ALTER TABLE [dbo].[TransferenciaEstoque] ADD CONSTRAINT [FK_TransferenciaEstoque_emitenteDestino] FOREIGN KEY
	(
		[idFilialDestino]
	)
	REFERENCES [dbo].[emitente]
	(
		[id]
	)
GO

ALTER TABLE [dbo].[TransferenciaEstoque] ADD CONSTRAINT [FK_TransferenciaEstoque_emitenteOrigem] FOREIGN KEY
	(
		[idFilialOrigem]
	)
	REFERENCES [dbo].[emitente]
	(
		[id]
	)
GO

ALTER TABLE [dbo].[TransferenciaEstoque] ADD CONSTRAINT [FK_TransferenciaEstoque_EstoqueConta] FOREIGN KEY
	(
		[idContaEstoqueConsulta]
	)
	REFERENCES [dbo].[EstoqueConta]
	(
		[id]
	)
GO

ALTER TABLE [dbo].[TransferenciaEstoque] ADD CONSTRAINT [FK_TransferenciaEstoque_operacaoEntrada] FOREIGN KEY
	(
		[idOperacaoAjusteEntrada]
	)
	REFERENCES [dbo].[operacao]
	(
		[id]
	)
GO

ALTER TABLE [dbo].[TransferenciaEstoque] ADD CONSTRAINT [FK_TransferenciaEstoque_operacaoSaida] FOREIGN KEY
	(
		[idOperacaoAjusteSaida]
	)
	REFERENCES [dbo].[operacao]
	(
		[id]
	)
GO

ALTER TABLE [dbo].[TransferenciaEstoqueItens] ADD CONSTRAINT [FK_TransferenciaEstoqueItens_estoqueAjustes] FOREIGN KEY
	(
		[idAjusteEstoqueEntrada]
	)
	REFERENCES [dbo].[estoqueAjustes]
	(
		[id]
	)
GO

ALTER TABLE [dbo].[TransferenciaEstoqueItens] ADD CONSTRAINT [FK_TransferenciaEstoqueItens_estoqueAjustes1] FOREIGN KEY
	(
		[idAjusteEstoqueSaida]
	)
	REFERENCES [dbo].[estoqueAjustes]
	(
		[id]
	)
GO

ALTER TABLE [dbo].[TransferenciaEstoqueItens] ADD CONSTRAINT [FK_TransferenciaEstoqueItens_produto] FOREIGN KEY
	(
		[idProduto]
	)
	REFERENCES [dbo].[produto]
	(
		[id]
	)
GO

ALTER TABLE [dbo].[TransferenciaEstoqueItens] ADD CONSTRAINT [FK_TransferenciaEstoqueItens_ProdutoClassificacao] FOREIGN KEY
	(
		[idProdutoClassificacao]
	)
	REFERENCES [dbo].[ProdutoClassificacao]
	(
		[id]
	)
GO

ALTER TABLE [dbo].[TransferenciaEstoqueItens] ADD CONSTRAINT [FK_TransferenciaEstoqueItens_TransferenciaEstoque] FOREIGN KEY
	(
		[idTransferenciaEstoque]
	)
	REFERENCES [dbo].[TransferenciaEstoque]
	(
		[id]
	)
GO

CREATE PROCEDURE [dbo].[OBTER_NUMERO_SERIE]
	-- Add the parameters for the stored procedure here
	@idFilial int,
	@idProduto int
AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;
	declare @ultimoNumero int = 0
	
    -- Insert statements for procedure here
    IF  EXISTS (SELECT * FROM NumeroSerieProduto WHERE (idFilial = @idFilial) and (idProduto = @idProduto))
	BEGIN
		SET @ultimoNumero = (select numero from NumeroSerieProduto WHERE (idFilial = @idFilial) and (idProduto = @idProduto))
		UPDATE NumeroSerieProduto SET numero = @ultimoNumero + 1 WHERE (idFilial = @idFilial) and (idProduto = @idProduto)
	END
    ELSE
	BEGIN		
		INSERT INTO NumeroSerieProduto(numero, idFilial, idProduto) VALUES (@ultimoNumero + 1, @idFilial, @idProduto)
	END

	SELECT * FROM NumeroSerieProduto WHERE (idFilial = @idFilial) and (idProduto = @idProduto)
END
GO
INSERT dbo.configuracaoNovo(nomeParametro, descricaoSimplificada, descricaoDetalhada, tipoValor, valor, grupo, subgrupo, tamanhoValorMaximo, idnParametroMultilinhas, idnParametroRadio, idnParametroSelecaoPasta, idnPermiteAlteracaoApenasPorAdmins, idnCampoSenha, tabelaSelecao, filtroSelecao, validacaoRegularExpression, dataInclusao) VALUES (N'idnNaoNotificarPlataforma', 'Não notificar plataforma na mudança de operação', '', 'bool', 'False', 'Ordem de Carga', 'Geral', 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, dataInclusao) VALUES (N'jsonGeracaoNumeroSerie', 'Padrão de geração do núme de série', '', 'varchar', '{"padroesGeracao":[{"chave":"TEXTO","tamanho":3,"ordemSequencia":0,"textoFixo":"TRY"},{"chave":"MARCA","tamanho":3,"ordemSequencia":0,"textoFixo":null},{"chave":"GRUPO","tamanho":3,"ordemSequencia":0,"textoFixo":null},{"chave":"CODIGOPRODUTO","tamanho":7,"ordemSequencia":0,"textoFixo":null},{"chave":"DIA","tamanho":2,"ordemSequencia":0,"textoFixo":null},{"chave":"MES","tamanho":2,"ordemSequencia":0,"textoFixo":null},{"chave":"ANO","tamanho":2,"ordemSequencia":0,"textoFixo":null},{"chave":"SEQUENCIASERIE","tamanho":7,"ordemSequencia":0,"textoFixo":null}],"separadorGrupos":" "}', 'Estoque', 'Serialização', NULL, 1, 0, 0, 1, 0, NULL, NULL, NULL, NULL)
GO
SET IDENTITY_INSERT dbo.MenuLateralGrupos ON
GO
INSERT dbo.MenuLateralGrupos(id, descricaoGrupo, ordem, telaOrigem) VALUES (66, 'Transferência de Estoque', 7, 'Estoque')
INSERT dbo.MenuLateralGrupos(id, descricaoGrupo, ordem, telaOrigem) VALUES (67, 'Serialização', 7, 'Estoque')
GO
SET IDENTITY_INSERT dbo.MenuLateralGrupos OFF
GO
SET IDENTITY_INSERT dbo.Telas ON
GO
INSERT dbo.Telas(id, descricao, controle, imagem, teclaAtalho1, teclaAtalho2, idnPermiteAbrirVarias, qtdVezesAberta, dataUltimaAbertura, idnRestricaoAcesso) VALUES (339, 'Produtos sem número de série', 'Cadastros.ucProdutosSemNumeroSerie, Cadastros, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null', NULL, NULL, NULL, NULL, NULL, NULL, NULL)
INSERT dbo.Telas(id, descricao, controle, imagem, teclaAtalho1, teclaAtalho2, idnPermiteAbrirVarias, qtdVezesAberta, dataUltimaAbertura, idnRestricaoAcesso) VALUES (340, 'Consultar Transferências de Estoque', 'Cadastros.ucConsTransferenciaEstoque, Cadastros, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null', NULL, NULL, NULL, NULL, NULL, NULL, NULL)
INSERT dbo.Telas(id, descricao, controle, imagem, teclaAtalho1, teclaAtalho2, idnPermiteAbrirVarias, qtdVezesAberta, dataUltimaAbertura, idnRestricaoAcesso) VALUES (341, 'Transferência de Estoque', 'Cadastros.ucTransferenciaEstoque, Cadastros, Version=1.0.0.0, Culture=neutral, PublicKeyToken=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 (304, 1, 'Efetuar transferência de estoque', 341, 66, 'search-2_32.png', 0)
INSERT dbo.MenuLateralItens(id, idMenu, descricao, idTela, idMenuLateralGrupo, imagem, ordem) VALUES (305, 1, 'Consultar transferência de estoque', 340, 66, 'product_32.png', 1)
INSERT dbo.MenuLateralItens(id, idMenu, descricao, idTela, idMenuLateralGrupo, imagem, ordem) VALUES (306, 1, 'Informar série para produtos em estoque', 339, 67, 'product_32.png', 0)
GO
SET IDENTITY_INSERT dbo.MenuLateralItens OFF
GO
INSERT INTO VERSAO(VERSAO, VERSAOATUALIZACAO, DATAATUALIZACAO) VALUES(458, 716, GETDATE());
