USE [TryNFeOnline]
GO
ALTER TABLE [dbo].[Conta] ADD 
[numeroContratoOperacao] [varchar] (50) COLLATE Latin1_General_CI_AS NULL
GO
ALTER TABLE [dbo].[emitente] ADD 
[indMetodoEnvioNFSe] [int] NULL
GO
ALTER TABLE [dbo].[parceiro] ADD 
[naturezaJuridicaDominio] [varchar] (5) COLLATE Latin1_General_CI_AS NULL,
[regimeApuracaoDominio] [varchar] (5) COLLATE Latin1_General_CI_AS NULL,
[categoriaEstabelecimentoDominio] [varchar] (5) COLLATE Latin1_General_CI_AS NULL,
[interdependenciaComAEmpresaDominio] [varchar] (3) COLLATE Latin1_General_CI_AS NULL
GO
CREATE TABLE [dbo].[OrdemServicoFaturadaProdutoServico]
(
	[id] [int] IDENTITY (1,1) NOT NULL,
	[idOSProduto] [int] NULL,
	[idOSServico] [int] NULL,
	[idOrdemServicoFaturada] [int] NULL,
	[quantidadeFaturada] [decimal] (18,4) NULL,
	[idnCancelado] [bit] NULL,
	CONSTRAINT [PK_OrdemServicoFaturadaProdutoServico] 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 TABLE [dbo].[OrdemServicoFaturadaProdutoServico] ADD CONSTRAINT [FK_OrdemServicoFaturadaProdutoServico_OrdemServicoFaturada] FOREIGN KEY
	(
		[idOrdemServicoFaturada]
	)
	REFERENCES [dbo].[OrdemServicoFaturada]
	(
		[id]
	)
GO

ALTER TABLE [dbo].[OrdemServicoFaturadaProdutoServico] ADD CONSTRAINT [FK_OrdemServicoFaturadaProdutoServico_OrdemServicoProduto] FOREIGN KEY
	(
		[idOSProduto]
	)
	REFERENCES [dbo].[OrdemServicoProduto]
	(
		[id]
	)
GO

ALTER TABLE [dbo].[OrdemServicoFaturadaProdutoServico] ADD CONSTRAINT [FK_OrdemServicoFaturadaProdutoServico_OrdemServicoServico] FOREIGN KEY
	(
		[idOSServico]
	)
	REFERENCES [dbo].[OrdemServicoServico]
	(
		[id]
	)
GO
ALTER FUNCTION [dbo].[comissaoVendedorDescontoVendas]
(	
	@dataIniInf datetime,
	@dataFinInf datetime,
	@idVendedorInf int = 0,
	@idEmitente int = 0,
	@idnConsiderarValorFreteInf bit = 0 --Adicionado parametros de comissão de frete 04/02/2022)
)
RETURNS 
@Resultado TABLE 
(
	vendedor_id int,
	vendedor_nome varchar(60),
	numeroNota varchar(50),
	numeroMovimento varchar(50),
	parceiro_id int,
	parceiro_razaosocial varchar(60),
	percDesconto decimal(18,4),
	valorLiquido decimal(18,4),
	valorBruto decimal(18,4),
	valorRecebidoGerado decimal(18,4),
	valorComissao decimal(18,4),
	percComissao decimal(18,4),
	idnRecebimento bit,
	idnGeracao bit
)
AS
BEGIN

	declare @dataIni datetime = @dataIniInf;
	declare @dataFin datetime = @dataFinInf;
	declare @idVendedor int = 0;
	declare @idnConsiderarValorFrete bit;

	if (@idVendedorInf > 0)
		SET @idVendedor = @idVendedorInf;
	
	if (@idnConsiderarValorFreteInf > 0)
		SET @idnConsiderarValorFrete = @idnConsiderarValorFreteInf
	BEGIN
		--Comissão de Recebimento
		INSERT INTO @Resultado
		select f.idVendedor, pa.fantasia, nf.numero, nf.numeroMovimento, nd.idParceiro, nd.razaosocial,
		(case when @idnConsiderarValorFrete = 1 
		then (case when nt.icmsdesconto > 0 then ROUND(((nt.icmsdesconto / nt.icmsprodutosservicos) * 100),2) else 0 end)
		else (case when nt.icmsdesconto > 0 then ROUND(((nt.icmsdesconto / (nt.icmsprodutosservicos - nt.icmsfrete)) * 100),2) else 0 end)end) as percDesconto, 
		(case when @idnConsiderarValorFrete = 1 then nt.icmstotalnota else (nt.icmstotalnota - coalesce(nt.icmsfrete, 0))end) as valorLiquido ,
		nt.icmsprodutosservicos, (case when @idnConsiderarValorFrete = 1 then fpp.valor else fpp.valor - coalesce(nt.icmsfrete,0)end), 0, 0, 1, 0
		from FaturaParcelaPagamento fpp
		inner join FaturaParcela fp on fp.id = fpp.idFaturaParcela
		inner join Fatura f on f.id = fp.idFatura
		inner join notafiscal nf on nf.id = f.idNotaFiscal
		inner join nfEmitente nfe on nfe.idNotaFiscal = nf.id
		left join nfDestinatario nd on nd.idNotaFiscal = nf.id
		inner join NFTotal nt on nt.idNotaFiscal = nf.id
		inner join CaixaMovimento cm on cm.idFaturaParcelaPagamentoOrigem = fpp.id
		left join parceiro pa on pa.id = f.idVendedor
		where (
		(CAST(cm.dataHora as date) between @dataIni and @dataFin)
		and ((f.idVendedor = @idVendedor) or (@idVendedor = 0 and f.idVendedor is not null))
		and (f.idnReceitaDespesa = '+')
		and ((nfe.idEmitente = @idEmitente) or (@idEmitente = 0))
		and (nt.icmsprodutosservicos > 0))
		
		--Comissão de Geração
		INSERT INTO @Resultado
		select f.idVendedor, pa.fantasia, nf.numero, nf.numeroMovimento, nd.idParceiro, nd.razaosocial,
		(case when @idnConsiderarValorFrete = 1 
		then (case when nt.icmsdesconto > 0 then ROUND(((nt.icmsdesconto / nt.icmsprodutosservicos) * 100),2) else 0 end)
		else (case when nt.icmsdesconto > 0 then ROUND(((nt.icmsdesconto / (nt.icmsprodutosservicos - nt.icmsfrete)) * 100),2) else 0 end)end) as percDesconto, 
		(case when @idnConsiderarValorFrete = 1 then nt.icmstotalnota else (nt.icmstotalnota - coalesce(nt.icmsfrete, 0))end) as valorLiquido, 
		nt.icmsprodutosservicos, (case when @idnConsiderarValorFrete = 1 then f.valor else f.valor - coalesce(nt.icmsfrete,0)end), 0, 0, 0, 1
		from Fatura f
		inner join notafiscal nf on nf.id = f.idNotaFiscal
		inner join nfemitente nfe on nfe.idnotafiscal = nf.id
		left join nfDestinatario nd on nd.idNotaFiscal = nf.id
		inner join NFTotal nt on nt.idNotaFiscal = nf.id
		left join parceiro pa on pa.id = f.idVendedor
		where (
		(CAST(f.dataFatura as date) between @dataIni and @dataFin)
		and ((f.idVendedor = @idVendedor) or (@idVendedor = 0 and f.idVendedor is not null))
		and (f.idnReceitaDespesa = '+')
		and (nf.nfeCstat = 100 or nfeCstat = 150)
		and ((nfe.idEmitente = @idEmitente) or (@idEmitente = 0))
		and (nf.nfeTpAmb = 1)
		and (nt.icmsprodutosservicos > 0))
		
		--Altera o Percentual de Comissão dos Recebimentos
		UPDATE @Resultado set percComissao = coalesce((select top 1 pc.percComissaoRecebimento from ParametrosComissoes pc
		where (pc.idnComissaoDescontoVendas = 1)
		and (pc.idnRecebimento = 1)
		and ((pc.idnComDesconto = 0 and percDesconto = 0)
		or ((percDesconto > 0) and (cast(percDesconto as decimal(18,4)) between pc.percDescontoInicial and pc.percDescontoFinal)))
		and (pc.idVendedor = vendedor_id)), 0)
		where (idnRecebimento = 1)
		
		UPDATE @Resultado set percComissao = coalesce((select top 1 pc.percComissaoRecebimento from ParametrosComissoes pc
		where (pc.idnComissaoDescontoVendas = 1)
		and (pc.idnRecebimento = 1)
		and ((pc.idnComDesconto = 0 and percDesconto = 0)
		or ((percDesconto > 0) and (cast(percDesconto as decimal(18,4)) between pc.percDescontoInicial and pc.percDescontoFinal)))
		and (pc.idVendedor is null)), 0)
		where (percComissao = 0) and (idnRecebimento = 1)
		
		--Altera o Percentual de Comissão da Geração
		UPDATE @Resultado set percComissao = coalesce((select top 1 pc.percComissaoGeracao from ParametrosComissoes pc
		where (pc.idnComissaoDescontoVendas = 1)
		and (pc.idnGeracao = 1)
		and ((pc.idnComDesconto = 0 and percDesconto = 0)
		or ((percDesconto > 0) and (cast(percDesconto as decimal(18,4)) between pc.percDescontoInicial and pc.percDescontoFinal)))
		and (pc.idVendedor = vendedor_id)), 0)
		where (idnGeracao = 1)
		
		UPDATE @Resultado set percComissao = coalesce((select top 1 pc.percComissaoGeracao from ParametrosComissoes pc
		where (pc.idnComissaoDescontoVendas = 1)
		and (pc.idnGeracao = 1)
		and ((pc.idnComDesconto = 0 and percDesconto = 0)
		or ((percDesconto > 0) and (cast(percDesconto as decimal(18,4)) between pc.percDescontoInicial and pc.percDescontoFinal)))
		and (pc.idVendedor is null)), 0)
		where (percComissao = 0) and (idnGeracao = 1)
		
		--Altera o Valor da Comissão
		UPDATE @Resultado set valorComissao = (valorRecebidoGerado * percComissao) / 100
	END
	
	RETURN 

END
GO
update emitente set indMetodoEnvioNFSe = 0
GO
INSERT INTO [dbo].[configuracaoNovo]
           ([nomeParametro]
           ,[descricaoSimplificada]
           ,[descricaoDetalhada]
           ,[tipoValor]
           ,[valor]
           ,[grupo]
           ,[subgrupo]
           ,[tamanhoValorMaximo]
           ,[idnParametroMultilinhas]
           ,[idnParametroRadio]
           ,[idnParametroSelecaoPasta]
           ,[idnPermiteAlteracaoApenasPorAdmins]
           ,[idnCampoSenha]
           ,[tabelaSelecao]
           ,[filtroSelecao]
           ,[validacaoRegularExpression])
     VALUES
           ('idnImportarDadosTxtXmlEmissaoNFeComSequenciaSistema'
           ,'Utilizar Sequencia sistema como base ao emitir NFe importando arquivo (Txt/Xml)'
           ,'Na tela de emissão de NFe possui opção para importar um arquivo Txt ou Xml, e realizar emissão da NFe com base no arquivo importado, com esse parametro ativo, será considerado algumas informações tais como numero e serie para seguir a sequencia do sistema'
           ,'bool'
           ,'false'
           ,'NFe/Movimento'
           ,'Configurações da NFe'
           ,null
           ,0
           ,0
           ,0
           ,0
           ,0
           ,null
           ,null
           ,null)
GO
INSERT INTO VERSAO(VERSAO, VERSAOATUALIZACAO, DATAATUALIZACAO, REVISAO) VALUES(527, 785, GETDATE(),1);