USE [TryNFeOnline]
GO

ALTER TABLE [dbo].[Conta] ADD 
[chavePix] [varchar] (50) COLLATE Latin1_General_CI_AS NULL
GO
ALTER TABLE [dbo].[FaturaParcela] ADD 
[qrCodePix] [varchar] (250) COLLATE Latin1_General_CI_AS NULL
GO
ALTER TABLE [dbo].[FormaPagamento] ADD 
[idnPixQrCode] [bit] NULL
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 ((nt.icmsdesconto / nt.icmsprodutosservicos) * 100) else 0 end)
		else (case when nt.icmsdesconto > 0 then ((nt.icmsdesconto / (nt.icmsprodutosservicos - nt.icmsfrete)) * 100) 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 ((nt.icmsdesconto / nt.icmsprodutosservicos) * 100) else 0 end)
		else (case when nt.icmsdesconto > 0 then ((nt.icmsdesconto / (nt.icmsprodutosservicos - nt.icmsfrete)) * 100) 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
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

	declare @considerarConciliados bit = (select coalesce(valor, 'false') from ConfiguracoesValorParametro('idnConsiderarConciliacaoSaldoBancario'))

	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 (((@considerarConciliados = 1)
	and (bm.dataConciliacao is not null)
	and (bm.dataConciliacao <= @dataInf))
	or (@considerarConciliados = 0))
	and (coalesce(c.idnInativo, 0) = 0)
	group by c.id, c.numeroConta, c.agencia, b.descricao, c.descricao

RETURN 
END
GO
ALTER PROCEDURE [dbo].[TRYNFE_ATUALIZA_STATUS] (
    @nota_id integer,
    @cstat integer = null,
    @veraplic varchar(40) = null,
    @motivo varchar(MAX),
    @nrec varchar(30) = null,
    @dhrecbto datetime,
    @tmed integer = -100,
    @prot varchar(52) = null,
    @chave varchar(60) = null,
	@cMsg integer = null,
	@xMsg varchar(500) = null
    )
AS
BEGIN
	declare @acao_atualizar integer;

	/*
		Atualiza a nota informada com os dados recebidos dos Webservices
	*/

	if (@prot is null)
		set @acao_atualizar = 5;
	else
	    set @acao_atualizar = 10;

	-- Atualiza a nota com os dados do recibo
	UPDATE notafiscal set
	    nfeAcao = @acao_atualizar,
	    nfeVerAplic = @veraplic,	    
	    nfeMotivo = @motivo,
	    nfeNrec = @nrec,
	    nfeDhRecbto = @dhrecbto,
	    dataAtualizacaoStatusNota = GETDATE(),
	    nfeTmed = @tmed
	WHERE
	    id = @nota_id;
	
	if (@cstat is not null)
	begin
		UPDATE notafiscal set
			nfeCstat = @cstat
		WHERE
			id = @nota_id
	end

	if (@prot is not null)
	begin
		UPDATE notafiscal set
	        nfeProt = @prot
		WHERE
	        id = @nota_id;
	end	

	if (@cMsg is not null)
	begin
		UPDATE notafiscal set
			nfeCodigoMensagem = @cMsg,
			nfeMensagem = @xMsg
		WHERE
			id = @nota_id
	end
	
	/*if (@cstat = 100)
	begin
	
	INSERT INTO TrySincronizacaoNotaFiscal
	SELECT id, modelo, serie, numero, dataEmissao, naturezaOperacao, tipodocumento, dataSaidaEnt,
	horaSaiEnt, finalidadeEmissao, infadicionaisfisco, infcomplcontribuinte, nfeChave, nfeTpAmb, nfeCstat, nfeProtCancelamento, nfeMotivoCancelamento, 
	idOperacao, tpEmis, idnEmiteNF, idnFatura, nfeRef, codigoNumericoChave, dvChave, dataCompetencia, 
	idnEmiteCF, numeroCF, idnEmiteCte, nfeCstatDpec, nfeMotivoDpec, nfeDhRecbtoDpec, nfeNumRegistroDpec, idCondicao, idForma, numeroMovimento, idnMovimento, 
	idnDocumentoEmitido, idVendedor, valorEntrada, idOperador, idnNotaEntrada, idnGeraFatura, idnCondicional, nfeCstatEvento, 
	(SELECT hashbytes('md5', (SELECT id, modelo, serie, numero, dataEmissao, naturezaOperacao, tipodocumento, dataSaidaEnt,
	horaSaiEnt, finalidadeEmissao, infadicionaisfisco, infcomplcontribuinte, nfeChave, nfeTpAmb, nfeCstat, nfeProtCancelamento, nfeMotivoCancelamento, 
	idOperacao, tpEmis, idnEmiteNF, idnFatura, nfeRef, codigoNumericoChave, dvChave, dataCompetencia, 
	idnEmiteCF, numeroCF, idnEmiteCte, nfeCstatDpec, nfeMotivoDpec, nfeDhRecbtoDpec, nfeNumRegistroDpec, idCondicao, idForma, numeroMovimento, idnMovimento, 
	idnDocumentoEmitido, idVendedor, valorEntrada, idOperador, idnNotaEntrada, idnGeraFatura, idnCondicional, nfeCstatEvento
	FROM notafiscal WHERE id = @nota_id FOR xml raw)))
	FROM notafiscal WHERE id = @nota_id
	
	INSERT INTO TrySincronizacaoNFProduto
	SELECT id, idNotaFiscal, idProduto, cean, descricao, ncm, cfop, ucom, qcom, vuncom, vprod, vfrete, vseg, vdesc, voutro, icmscst, 
	icmsorigem, icmsmodalidade, icmsperreducaobc, icmavalorbasecalc, icmsaliq, icmsvalor, ipicst, ipivalorbasecalculo, ipialiquota, ipivalor, pisst, 
	pisvalorbasecalculo, pisvaloraliq, pisvalor, cofinscst, cofinsvalorbasecalculo, cofinspercentualaliq, cofinsvaloraliq, cofinsvalor, csosn, 
	indiceAliqIcmsCupomFiscal, idnItemCanceladoCF, idProdutoClassificacao, sequenciaClassificacao, aliqVTotTrib, vTotTrib,
	(SELECT hashbytes('md5', (SELECT id, idNotaFiscal, idProduto, cean, descricao, ncm, cfop, ucom, qcom, vuncom, vprod, vfrete, vseg, vdesc, voutro, icmscst, 
	icmsorigem, icmsmodalidade, icmsperreducaobc, icmavalorbasecalc, icmsaliq, icmsvalor, ipicst, ipivalorbasecalculo, ipialiquota, ipivalor, pisst, 
	pisvalorbasecalculo, pisvaloraliq, pisvalor, cofinscst, cofinsvalorbasecalculo, cofinspercentualaliq, cofinsvaloraliq, cofinsvalor, csosn, 
	indiceAliqIcmsCupomFiscal, idnItemCanceladoCF, idProdutoClassificacao, sequenciaClassificacao, aliqVTotTrib, vTotTrib
	FROM NFProduto WHERE id = nfp.id FOR xml raw)))
	FROM NFProduto nfp WHERE idNotaFiscal = @nota_id
	
	end*/
	
END
GO
INSERT INTO [dbo].[configuracaoNovo]([nomeParametro],[descricaoSimplificada],[descricaoDetalhada],[tipoValor],[valor],[grupo],[subgrupo],[tamanhoValorMaximo],[idnParametroMultilinhas],[idnParametroRadio],[idnParametroSelecaoPasta],[idnPermiteAlteracaoApenasPorAdmins],[idnCampoSenha],[tabelaSelecao],[filtroSelecao],[validacaoRegularExpression],[idnPermiteSelecaoMultiplaOpcoes]) VALUES ('idnConsiderarConciliacaoSaldoBancario', 'Considerar a Conciliação no Saldo Bancário', 'Selecione esta opção quando desejar que a Data de Conciliação seja considerada ao obter o Saldo das Contas Bancárias. Quando desmarcada, a Conciliação não é considerada, ou seja, todas as movimentações independente de conciliadas ou não serão consideradas.', 'bool', 'True', 'Financeiro', 'Configurações do Caixa',null,0,0,0,0,0,null,null,null,0)
GO
INSERT INTO [dbo].[configuracaoNovo]([nomeParametro],[descricaoSimplificada],[descricaoDetalhada],[tipoValor],[valor],[grupo],[subgrupo],[tamanhoValorMaximo],[idnParametroMultilinhas],[idnParametroRadio],[idnParametroSelecaoPasta],[idnPermiteAlteracaoApenasPorAdmins],[idnCampoSenha],[tabelaSelecao],[filtroSelecao],[validacaoRegularExpression],[idnPermiteSelecaoMultiplaOpcoes]) VALUES ('idnExibirAvisoQuandoNaoSelecionadoEntregaPedido', 'Exibir um aviso quando o Parceiro possuir endereço de Entrega e não for definido', 'Selecione esta opção quando desejar que um aviso seja exibido, caso o Parceiro possua endereços de Entrega, e nenhum for selecionado, na Emissão do Pedido.', 'bool', 'False', 'Pedido', 'Configurações do Pedido',null,0,0,0,0,0,null,null,null,0)
GO
INSERT INTO [dbo].[configuracaoNovo]([nomeParametro],[descricaoSimplificada],[descricaoDetalhada],[tipoValor],[valor],[grupo],[subgrupo],[tamanhoValorMaximo],[idnParametroMultilinhas],[idnParametroRadio],[idnParametroSelecaoPasta],[idnPermiteAlteracaoApenasPorAdmins],[idnCampoSenha],[tabelaSelecao],[filtroSelecao],[validacaoRegularExpression],[idnPermiteSelecaoMultiplaOpcoes]) VALUES ('idnConsiderarRefeicaoLivreAutomaticamentePreVenda', 'Considerar a "Refeição Livre" automaticamente quando passar do valor na Pré-venda Balança', 'Selecione esta opção quando desejar que o Livre seja considerado automaticamente na Pré-venda balança, caso o valor do KG seja igual ou superior ao livre. OBS: é necessário definir o Produto "livre" nas configurações do Pzei.', 'bool', 'False', 'Pré-Venda (Comanda/Delivery)', 'Configurações da Pré-Venda',null,0,0,0,0,0,null,null,null,0)
GO
INSERT INTO VERSAO(VERSAO, VERSAOATUALIZACAO, DATAATUALIZACAO, REVISAO) VALUES(526, 784, GETDATE(),1);