0
I have the following Query:
CREATE DEFINER=`db`@`%` PROCEDURE `RelatorioComissoesByDate`(
IN initialPeriod DATETIME,
IN finalPeriod DATETIME,
IN FK_Corretora INT,
IN NomeCliente VARCHAR(256),
IN Seguradora VARCHAR(256)
)
BEGIN
IF NomeCliente IS NULL AND Seguradora IS NULL THEN
SELECT c.FullName,p.Descricao as DescricaoPedido, S.Descricao as Seguradora, p.PremioLiquidoTotal,p.ComissaoLiquidoTotal,p.PercentualComissao,p.PercentualImpostos, pcss.ValorComissaoLiquido,pcss.Parcela, p.Parcelas as ParcelasTotais, pcss.ComissaoRecebida, pcss.DataRecebimentoComissao,PC.Descricao FROM pedidos p INNER JOIN clientes c on c.ID = p.FK_Clientes INNER JOIN corretorausuario CUsuario on C.FK_CorretoraUsuario = CUsuario.ID INNER JOIN seguradoras S on S.ID = p.FK_Seguradoras INNER JOIN pedidoscategorias PC on PC.ID = p.FK_PedidosCategorias INNER JOIN pedidostatus PS ON PS.ID = p.FK_PedidoStatus INNER JOIN pedidoscomissoes pcss on pcss.FK_Pedidos = p.ID
WHERE CUsuario.FK_Corretora = FK_Corretora and pcss.DataRecebimentoComissao between initialPeriod and finalPeriod;
ELSEIF NomeCliente IS NOT NULL AND Seguradora IS NOT NULL THEN
SELECT c.FullName,p.Descricao as DescricaoPedido, S.Descricao as Seguradora, p.PremioLiquidoTotal,p.ComissaoLiquidoTotal,p.PercentualComissao,p.PercentualImpostos, pcss.ValorComissaoLiquido,pcss.Parcela, p.Parcelas as ParcelasTotais, pcss.ComissaoRecebida, pcss.DataRecebimentoComissao,PC.Descricao FROM pedidos p INNER JOIN clientes c on c.ID = p.FK_Clientes INNER JOIN corretorausuario CUsuario on C.FK_CorretoraUsuario = CUsuario.ID INNER JOIN seguradoras S on S.ID = p.FK_Seguradoras INNER JOIN pedidoscategorias PC on PC.ID = p.FK_PedidosCategorias INNER JOIN pedidostatus PS ON PS.ID = p.FK_PedidoStatus INNER JOIN pedidoscomissoes pcss on pcss.FK_Pedidos = p.ID
WHERE CUsuario.FK_Corretora = FK_Corretora and pcss.DataRecebimentoComissao between initialPeriod and finalPeriod and c.FullName LIKE CONCAT('%', NomeCliente , '%') and S.Descricao LIKE CONCAT('%', Seguradora , '%');
ELSEIF NomeCliente IS NOT NULL THEN
SELECT c.FullName,p.Descricao as DescricaoPedido, S.Descricao as Seguradora, p.PremioLiquidoTotal,p.ComissaoLiquidoTotal,p.PercentualComissao,p.PercentualImpostos, pcss.ValorComissaoLiquido,pcss.Parcela, p.Parcelas as ParcelasTotais, pcss.ComissaoRecebida, pcss.DataRecebimentoComissao,PC.Descricao FROM pedidos p INNER JOIN clientes c on c.ID = p.FK_Clientes INNER JOIN corretorausuario CUsuario on C.FK_CorretoraUsuario = CUsuario.ID INNER JOIN seguradoras S on S.ID = p.FK_Seguradoras INNER JOIN pedidoscategorias PC on PC.ID = p.FK_PedidosCategorias INNER JOIN pedidostatus PS ON PS.ID = p.FK_PedidoStatus INNER JOIN pedidoscomissoes pcss on pcss.FK_Pedidos = p.ID
WHERE CUsuario.FK_Corretora = FK_Corretora and pcss.DataRecebimentoComissao between initialPeriod and finalPeriod and c.FullName LIKE CONCAT('%', NomeCliente , '%');
ELSEIF Seguradora IS NOT NULL THEN
SELECT c.FullName,p.Descricao as DescricaoPedido, S.Descricao as Seguradora, p.PremioLiquidoTotal,p.ComissaoLiquidoTotal,p.PercentualComissao,p.PercentualImpostos, pcss.ValorComissaoLiquido,pcss.Parcela, p.Parcelas as ParcelasTotais, pcss.ComissaoRecebida, pcss.DataRecebimentoComissao,PC.Descricao FROM pedidos p INNER JOIN clientes c on c.ID = p.FK_Clientes INNER JOIN corretorausuario CUsuario on C.FK_CorretoraUsuario = CUsuario.ID INNER JOIN seguradoras S on S.ID = p.FK_Seguradoras INNER JOIN pedidoscategorias PC on PC.ID = p.FK_PedidosCategorias INNER JOIN pedidostatus PS ON PS.ID = p.FK_PedidoStatus INNER JOIN pedidoscomissoes pcss on pcss.FK_Pedidos = p.ID
WHERE CUsuario.FK_Corretora = FK_Corretora and pcss.DataRecebimentoComissao between initialPeriod and finalPeriod and S.Descricao LIKE CONCAT('%', Seguradora , '%');
END IF;
END
How did you all realize SELECT
are the same, what changes is the WHERE
because I need him to add clauses only in the parameters that are NOT NULL
but the approach I used in my view is very amateur, but I’m not finding another way to do it without having to repeat code...
Very good, solved my problem and +1 point in kkkk knowledge was worth
– Leonardo Bonetti