Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- CREATE DEFINER=`bild_vendas`@`%` PROCEDURE `usp_fluxo`(IN ano_inicio int, IN ano_limite int, IN efetiva DATETIME, IN efetiva_fim DATETIME, IN empresa INT, IN contrato INT)
- SQL SECURITY INVOKER
- BEGIN
- DECLARE v_ano INT;
- DECLARE v_mes INT;
- DECLARE v_col VARCHAR(100) default '';
- DECLARE v_data VARCHAR(100) default '';
- DECLARE v_data_mes_ano VARCHAR(100) default '';
- -- DECLARE v_comissao decimal(10,2);
- SET v_ano = ano_inicio;
- SET v_mes = 0;
- SET @v_comissao = 0;
- SET @query = "SELECT
- emp.nome AS EMPREENDIMENTO,
- uni.nome_torre AS TORRE,
- uni.nome_bloco AS BLOCO,
- uni.nome_apto AS APTO,
- format(v.preco_m2,2,'pt_BR') AS PRECO_M2_PRATICADO,
- format(uni.metragem,2,'pt_BR') AS METRAGEM,
- cli.nome AS CLIENTE,
- cli.cpf AS CPF_CLIENTE,
- ger.nome AS GERENTE,
- sup.nome AS SUPERVISOR,
- cor.nome AS CORRETOR,
- v.id AS ID_VENDA,
- statusV.rotulo AS STATUS_VENDA,
- v.valida_dt AS DT_VENDA,
- format(v.vgv,2,'pt_BR') AS VGV,
- format(v.vgv_praticado,2,'pt_BR') AS VGV_PRATICADO
- ";
- loop_fluxo: LOOP
- SET v_mes = v_mes + 1;
- IF v_mes = 13 THEN
- SET v_ano = v_ano + 1;
- SET v_mes = 1;
- END IF;
- IF v_ano > ano_limite THEN
- LEAVE loop_fluxo;
- END IF;
- CASE v_mes
- WHEN 1 THEN SET v_col = concat("JAN_",v_ano);
- WHEN 2 THEN SET v_col = concat("FEV_",v_ano);
- WHEN 3 THEN SET v_col = concat("MAR_",v_ano);
- WHEN 4 THEN SET v_col = concat("ABR_",v_ano);
- WHEN 5 THEN SET v_col = concat("MAI_",v_ano);
- WHEN 6 THEN SET v_col = concat("JUN_",v_ano);
- WHEN 7 THEN SET v_col = concat("JUL_",v_ano);
- WHEN 8 THEN SET v_col = concat("AGO_",v_ano);
- WHEN 9 THEN SET v_col = concat("SET_",v_ano);
- WHEN 10 THEN SET v_col = concat("OUT_",v_ano);
- WHEN 11 THEN SET v_col = concat("NOV_",v_ano);
- WHEN 12 THEN SET v_col = concat("DEZ_",v_ano);
- END CASE;
- CASE v_mes < 10
- WHEN TRUE THEN SET v_data = CONCAT(v_ano,"0",v_mes);
- ELSE SET v_data = CONCAT(v_ano,v_mes);
- END CASE;
- SET v_data_mes_ano = CONCAT(v_mes,v_ano);
- SET @query = CONCAT(@query,"
- ,FORMAT(
- SUM(CASE
- WHEN
- (MONTH(parc.vcto) = '",v_mes,"'
- AND YEAR(parc.vcto) = '",v_ano,"')
- OR (CASE parc.tipo
- WHEN
- 3
- THEN
- PERIOD_DIFF('",v_data,"', DATE_FORMAT(parc.vcto, '%Y%m')) / 2 BETWEEN 1 AND (parc.qtd_parc - 1)
- AND PERIOD_DIFF('",v_data,"', DATE_FORMAT(parc.vcto, '%Y%m')) % 2 = 0
- AND parc.qtd_parc > 1
- WHEN
- 4
- THEN
- PERIOD_DIFF('",v_data,"', DATE_FORMAT(parc.vcto, '%Y%m')) / 6 BETWEEN 1 AND (parc.qtd_parc - 1)
- AND PERIOD_DIFF('",v_data,"', DATE_FORMAT(parc.vcto, '%Y%m')) % 6 = 0
- AND parc.qtd_parc > 1
- WHEN
- 5
- THEN
- PERIOD_DIFF('",v_data,"', DATE_FORMAT(parc.vcto, '%Y%m')) / 12 BETWEEN 1 AND (parc.qtd_parc - 1)
- AND PERIOD_DIFF('",v_data,"', DATE_FORMAT(parc.vcto, '%Y%m')) % 12 = 0
- AND parc.qtd_parc > 1
- ELSE
- PERIOD_DIFF('",v_data,"', DATE_FORMAT(parc.vcto, '%Y%m')) BETWEEN 1 AND (parc.qtd_parc - 1)
- AND parc.qtd_parc > 1
- END)
- THEN
- (
- parc.valor
- )
- ELSE 0
- END)+
- IF (
- (SELECT count(*) FROM t_vendas_comis AS comis
- WHERE comis.id_venda = v.id
- AND (DATE_FORMAT(comis.vcto, '%m%Y') = ",v_data_mes_ano,"
- OR PERIOD_DIFF('",v_data,"', DATE_FORMAT(comis.vcto, '%Y%m')) BETWEEN 1 AND (comis.qtd_parc - 1) AND comis.qtd_parc > 1) ) > 0,
- (SELECT sum(comis.valor) FROM t_vendas_comis AS comis
- WHERE comis.id_venda = v.id
- AND (DATE_FORMAT(comis.vcto, '%m%Y') = ",v_data_mes_ano,"
- OR PERIOD_DIFF('",v_data,"', DATE_FORMAT(comis.vcto, '%Y%m')) BETWEEN 1 AND (comis.qtd_parc - 1) AND comis.qtd_parc > 1) )
- , 0)
- ,2,'pt_BR')
- AS ",v_col,"");
- END LOOP loop_fluxo;
- SET @query = CONCAT(@query, "
- FROM
- t_vendas AS v
- INNER JOIN
- clientes AS cli ON cli.id = v.id_cliente_1
- INNER JOIN
- empreendimentos AS emp ON emp.id = v.id_empreend
- INNER JOIN
- t_unidades AS uni ON uni.id = v.id_unidade
- INNER JOIN
- t_vendas_parc AS parc ON v.id = parc.id_venda
- INNER JOIN
- t_etapas_vendas AS statusV ON statusV.codigo = v.status
- INNER JOIN
- gerentes AS ger ON ger.id = v.id_gerente
- INNER JOIN
- supervisores AS sup ON sup.id = v.id_supervisor
- INNER JOIN
- corretores AS cor ON cor.id = v.id_corretor
- WHERE 1=1 ");
- /*EFETIVADOS*/
- IF (contrato = 1) THEN
- IF (empresa <> 0) THEN
- SET @query = CONCAT(@query, " AND emp.id_tab_preco_tipo = ",empresa,"
- AND v.valida_dt > '",efetiva,"'
- AND v.valida_dt <= '",efetiva_fim,"'
- AND v.status IN (50 , 55)
- GROUP BY v.id
- ORDER BY v.valida_dt");
- ELSE
- SET @query = CONCAT(@query, " AND v.valida_dt > '",efetiva,"'
- AND v.valida_dt <= '",efetiva_fim,"'
- AND v.status IN (50 , 55)
- GROUP BY v.id
- ORDER BY v.valida_dt");
- END IF;
- /*TODOS*/
- ELSEIF (contrato = 0) THEN
- IF (empresa <> 0) THEN
- SET @query = CONCAT(@query, " AND emp.id_tab_preco_tipo = ",empresa,"
- AND ( (v.valida_dt > '",efetiva,"' AND v.valida_dt <= '",efetiva_fim,"'AND v.status IN (50,55)) OR (v.status IN (20,25,30,35,40,45)) )
- GROUP BY v.id
- ORDER BY v.valida_dt");
- ELSE
- SET @query = CONCAT(@query, " AND ( (v.valida_dt > '",efetiva,"' AND v.valida_dt <= '",efetiva_fim,"'AND v.status IN (50,55)) OR (v.status IN (20,25,30,35,40,45)) )
- GROUP BY v.id
- ORDER BY v.valida_dt");
- END IF;
- /*NÃO EFETIVADOS*/
- ELSE
- IF (empresa <> 0) THEN
- SET @query = CONCAT(@query, " AND emp.id_tab_preco_tipo = ",empresa,"
- AND v.status IN (20,25,30,35,40,45)
- GROUP BY v.id
- ORDER BY v.valida_dt");
- ELSE
- SET @query = CONCAT(@query, "
- AND v.status IN (20,25,30,35,40,45)
- GROUP BY v.id
- ORDER BY v.valida_dt");
- END IF;
- END IF;
- PREPARE executaQuery FROM @query;
- EXECUTE executaQuery;
- DEALLOCATE PREPARE executaQuery;
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement