Advertisement
Guest User

usp_fluxo

a guest
Mar 20th, 2019
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.18 KB | None | 0 0
  1. 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)
  2. SQL SECURITY INVOKER
  3. BEGIN
  4.  
  5. DECLARE v_ano INT;
  6. DECLARE v_mes INT;
  7. DECLARE v_col VARCHAR(100) default '';
  8. DECLARE v_data VARCHAR(100) default '';
  9. DECLARE v_data_mes_ano VARCHAR(100) default '';
  10. -- DECLARE v_comissao decimal(10,2);
  11.  
  12. SET v_ano = ano_inicio;
  13. SET v_mes = 0;
  14. SET @v_comissao = 0;
  15.  
  16.  
  17. SET @query = "SELECT
  18. emp.nome AS EMPREENDIMENTO,
  19. uni.nome_torre AS TORRE,
  20. uni.nome_bloco AS BLOCO,
  21. uni.nome_apto AS APTO,
  22. format(v.preco_m2,2,'pt_BR') AS PRECO_M2_PRATICADO,
  23. format(uni.metragem,2,'pt_BR') AS METRAGEM,
  24. cli.nome AS CLIENTE,
  25. cli.cpf AS CPF_CLIENTE,
  26. ger.nome AS GERENTE,
  27. sup.nome AS SUPERVISOR,
  28. cor.nome AS CORRETOR,
  29. v.id AS ID_VENDA,
  30. statusV.rotulo AS STATUS_VENDA,
  31. v.valida_dt AS DT_VENDA,
  32. format(v.vgv,2,'pt_BR') AS VGV,
  33. format(v.vgv_praticado,2,'pt_BR') AS VGV_PRATICADO
  34.  
  35. ";
  36.  
  37. loop_fluxo: LOOP
  38. SET v_mes = v_mes + 1;
  39. IF v_mes = 13 THEN
  40. SET v_ano = v_ano + 1;
  41. SET v_mes = 1;
  42. END IF;
  43.  
  44. IF v_ano > ano_limite THEN
  45. LEAVE loop_fluxo;
  46. END IF;
  47.  
  48. CASE v_mes
  49. WHEN 1 THEN SET v_col = concat("JAN_",v_ano);
  50. WHEN 2 THEN SET v_col = concat("FEV_",v_ano);
  51. WHEN 3 THEN SET v_col = concat("MAR_",v_ano);
  52. WHEN 4 THEN SET v_col = concat("ABR_",v_ano);
  53. WHEN 5 THEN SET v_col = concat("MAI_",v_ano);
  54. WHEN 6 THEN SET v_col = concat("JUN_",v_ano);
  55. WHEN 7 THEN SET v_col = concat("JUL_",v_ano);
  56. WHEN 8 THEN SET v_col = concat("AGO_",v_ano);
  57. WHEN 9 THEN SET v_col = concat("SET_",v_ano);
  58. WHEN 10 THEN SET v_col = concat("OUT_",v_ano);
  59. WHEN 11 THEN SET v_col = concat("NOV_",v_ano);
  60. WHEN 12 THEN SET v_col = concat("DEZ_",v_ano);
  61. END CASE;
  62.  
  63. CASE v_mes < 10
  64. WHEN TRUE THEN SET v_data = CONCAT(v_ano,"0",v_mes);
  65. ELSE SET v_data = CONCAT(v_ano,v_mes);
  66. END CASE;
  67.  
  68. SET v_data_mes_ano = CONCAT(v_mes,v_ano);
  69.  
  70. SET @query = CONCAT(@query,"
  71.  
  72. ,FORMAT(
  73. SUM(CASE
  74. WHEN
  75. (MONTH(parc.vcto) = '",v_mes,"'
  76. AND YEAR(parc.vcto) = '",v_ano,"')
  77. OR (CASE parc.tipo
  78. WHEN
  79. 3
  80. THEN
  81. PERIOD_DIFF('",v_data,"', DATE_FORMAT(parc.vcto, '%Y%m')) / 2 BETWEEN 1 AND (parc.qtd_parc - 1)
  82. AND PERIOD_DIFF('",v_data,"', DATE_FORMAT(parc.vcto, '%Y%m')) % 2 = 0
  83. AND parc.qtd_parc > 1
  84. WHEN
  85. 4
  86. THEN
  87. PERIOD_DIFF('",v_data,"', DATE_FORMAT(parc.vcto, '%Y%m')) / 6 BETWEEN 1 AND (parc.qtd_parc - 1)
  88. AND PERIOD_DIFF('",v_data,"', DATE_FORMAT(parc.vcto, '%Y%m')) % 6 = 0
  89. AND parc.qtd_parc > 1
  90. WHEN
  91. 5
  92. THEN
  93. PERIOD_DIFF('",v_data,"', DATE_FORMAT(parc.vcto, '%Y%m')) / 12 BETWEEN 1 AND (parc.qtd_parc - 1)
  94. AND PERIOD_DIFF('",v_data,"', DATE_FORMAT(parc.vcto, '%Y%m')) % 12 = 0
  95. AND parc.qtd_parc > 1
  96. ELSE
  97. PERIOD_DIFF('",v_data,"', DATE_FORMAT(parc.vcto, '%Y%m')) BETWEEN 1 AND (parc.qtd_parc - 1)
  98. AND parc.qtd_parc > 1
  99. END)
  100. THEN
  101. (
  102.  
  103. parc.valor
  104.  
  105. )
  106. ELSE 0
  107. END)+
  108.  
  109.  
  110. IF (
  111.  
  112. (SELECT count(*) FROM t_vendas_comis AS comis
  113. WHERE comis.id_venda = v.id
  114. AND (DATE_FORMAT(comis.vcto, '%m%Y') = ",v_data_mes_ano,"
  115. OR PERIOD_DIFF('",v_data,"', DATE_FORMAT(comis.vcto, '%Y%m')) BETWEEN 1 AND (comis.qtd_parc - 1) AND comis.qtd_parc > 1) ) > 0,
  116.  
  117. (SELECT sum(comis.valor) FROM t_vendas_comis AS comis
  118. WHERE comis.id_venda = v.id
  119. AND (DATE_FORMAT(comis.vcto, '%m%Y') = ",v_data_mes_ano,"
  120. OR PERIOD_DIFF('",v_data,"', DATE_FORMAT(comis.vcto, '%Y%m')) BETWEEN 1 AND (comis.qtd_parc - 1) AND comis.qtd_parc > 1) )
  121.  
  122. , 0)
  123.  
  124. ,2,'pt_BR')
  125.  
  126. AS ",v_col,"");
  127.  
  128. END LOOP loop_fluxo;
  129.  
  130.  
  131.  
  132.  
  133. SET @query = CONCAT(@query, "
  134.  
  135. FROM
  136. t_vendas AS v
  137. INNER JOIN
  138. clientes AS cli ON cli.id = v.id_cliente_1
  139. INNER JOIN
  140. empreendimentos AS emp ON emp.id = v.id_empreend
  141. INNER JOIN
  142. t_unidades AS uni ON uni.id = v.id_unidade
  143. INNER JOIN
  144. t_vendas_parc AS parc ON v.id = parc.id_venda
  145. INNER JOIN
  146. t_etapas_vendas AS statusV ON statusV.codigo = v.status
  147. INNER JOIN
  148. gerentes AS ger ON ger.id = v.id_gerente
  149. INNER JOIN
  150. supervisores AS sup ON sup.id = v.id_supervisor
  151. INNER JOIN
  152. corretores AS cor ON cor.id = v.id_corretor
  153. WHERE 1=1 ");
  154.  
  155. /*EFETIVADOS*/
  156. IF (contrato = 1) THEN
  157.  
  158.  
  159. IF (empresa <> 0) THEN
  160.  
  161. SET @query = CONCAT(@query, " AND emp.id_tab_preco_tipo = ",empresa,"
  162. AND v.valida_dt > '",efetiva,"'
  163. AND v.valida_dt <= '",efetiva_fim,"'
  164. AND v.status IN (50 , 55)
  165. GROUP BY v.id
  166. ORDER BY v.valida_dt");
  167.  
  168. ELSE
  169.  
  170.  
  171. SET @query = CONCAT(@query, " AND v.valida_dt > '",efetiva,"'
  172. AND v.valida_dt <= '",efetiva_fim,"'
  173. AND v.status IN (50 , 55)
  174. GROUP BY v.id
  175. ORDER BY v.valida_dt");
  176.  
  177.  
  178.  
  179. END IF;
  180. /*TODOS*/
  181. ELSEIF (contrato = 0) THEN
  182.  
  183.  
  184. IF (empresa <> 0) THEN
  185.  
  186. SET @query = CONCAT(@query, " AND emp.id_tab_preco_tipo = ",empresa,"
  187. 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)) )
  188. GROUP BY v.id
  189. ORDER BY v.valida_dt");
  190.  
  191. ELSE
  192.  
  193.  
  194. 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)) )
  195. GROUP BY v.id
  196. ORDER BY v.valida_dt");
  197.  
  198.  
  199.  
  200. END IF;
  201.  
  202. /*NÃO EFETIVADOS*/
  203. ELSE
  204.  
  205.  
  206. IF (empresa <> 0) THEN
  207.  
  208. SET @query = CONCAT(@query, " AND emp.id_tab_preco_tipo = ",empresa,"
  209. AND v.status IN (20,25,30,35,40,45)
  210. GROUP BY v.id
  211. ORDER BY v.valida_dt");
  212.  
  213. ELSE
  214.  
  215.  
  216. SET @query = CONCAT(@query, "
  217. AND v.status IN (20,25,30,35,40,45)
  218. GROUP BY v.id
  219. ORDER BY v.valida_dt");
  220.  
  221.  
  222.  
  223. END IF;
  224.  
  225.  
  226. END IF;
  227.  
  228. PREPARE executaQuery FROM @query;
  229. EXECUTE executaQuery;
  230.  
  231. DEALLOCATE PREPARE executaQuery;
  232.  
  233. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement