daily pastebin goal
51%
SHARE
TWEET

usp_fluxo

a guest Mar 20th, 2019 64 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top