Advertisement
Guest User

Untitled

a guest
Jun 21st, 2017
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 4.13 KB | None | 0 0
  1. CREATE OR REPLACE FUNCTION "public"."fnc_merda" (OUT "sCodmot" INTEGER, "eDataIni" DATE, "eDataFim" DATE, OUT "sApelido" VARCHAR, OUT "sEntEfet" INTEGER, OUT "sPtEntEfet" INTEGER, OUT "sPesoEnt" numeric, OUT "sPtoPesoEnt" numeric, OUT "sTotal" numeric, "eQuem" CHAR) RETURNS SETOF RECORD AS
  2. $body$
  3. /*******************************************************************************
  4.                             DEFINIÇÕES DE ENTRADA
  5.                            
  6.    --> sQuem : Determina se vamos usar apenas um relatorio para
  7.                M - Motoristas
  8.                A - Ajudantes
  9.                T - Ambos
  10.                
  11. *******************************************************************************/
  12.                                            
  13.  
  14.  
  15. /*******************************************************************************
  16.                             VARIAVEIS GLOBAIS
  17. *******************************************************************************/
  18. DECLARE
  19. rMotoristas RECORD;
  20. cMotoristas CURSOR FOR SELECT DISTINCT(a.codmotorista),
  21.                               b.apelido
  22.                          FROM r905_acompviagem a
  23.                          join funcionarios     b ON a.codmotorista=b.seq
  24.                         WHERE a.tipo='P'
  25.                           AND a.retornado='S'
  26.                           AND a.dataretorno::DATE BETWEEN $2 AND $3;
  27.  
  28.                          
  29.                          
  30. vChapa INTEGER;                          
  31. BEGIN
  32.   OPEN cMotoristas;
  33.            
  34.  LOOP
  35.    FETCH cMotoristas INTO rMotoristas;
  36.    $1:=rMotoristas.codmotorista;
  37.    $4:=rMotoristas.apelido;
  38.    EXIT WHEN NOT found;
  39.    vChapa :=0;
  40.    
  41.    -- Entregas efetivadas
  42.    SELECT COUNT(x.*) INTO $5
  43.      FROM r905_acompviagem_cidade x
  44.     WHERE x.codcarga IN (SELECT y.seq
  45.                            FROM r905_acompviagem_cargas y
  46.                           WHERE codviagem IN (SELECT z.seq
  47.                                                 FROM r905_acompviagem z
  48.                                                WHERE z.tipo='P'
  49.                                                  AND z.dataretorno::DATE BETWEEN $2 AND $3
  50.                                                  AND z.retornado='S'
  51.                                                  AND z.codmotorista=$1))
  52.       AND x.status=0;
  53.      
  54.    -- Pontos entregas efetivadas  
  55.    $6:=$5*1;
  56.    
  57.    -- Peso das entregas efetivadas
  58.    SELECT SUM(u.peso) INTO $7
  59.      FROM r905_acompviagem_cidade x
  60.      join nfsaid                  v ON x.codpedsap=v.numdoc
  61.      join nfsaid_itens            u ON v.codpdd=u.codpdd
  62.     WHERE x.codcarga IN (SELECT y.seq
  63.                            FROM r905_acompviagem_cargas y
  64.                           WHERE codviagem IN (SELECT z.seq
  65.                                                 FROM r905_acompviagem z
  66.                                                WHERE z.dataretorno::DATE BETWEEN $2 AND $3
  67.                                                  AND z.retornado='S'
  68.                                                  AND z.codmotorista=$1))
  69.       AND x.status=0
  70.       AND EXTRACT(YEAR FROM v.dataemsdoc)>=2009
  71.       AND x.codcli NOT IN (SELECT DISTINCT(d.valor)::int
  72.                              FROM r905_acompviagem            a
  73.                              join r905_acompviagem_cargas     b ON a.seq=b.codviagem
  74.                              join r905_acompviagem_cidade     c ON b.seq=c.codcarga
  75.                              join r905_acompviagem_ocorrencia d ON (a.seq=d.codviagem AND d.valor::int=c.codcli)
  76.                             WHERE a.retornado='S'
  77.                               AND a.dataretorno::DATE BETWEEN $2 AND $3
  78.                               AND a.codmotorista=$1
  79.                               AND d.codtpocomot=30
  80.                               AND d.nivel='3');
  81.            
  82.    -- Pontuação do peso
  83.    $8:=ROUND($7/100);
  84.                  
  85.    -- Qual o maior
  86.    IF $8 > $6 THEN
  87.      $9 := $8;
  88.    ELSE
  89.      $9 := $6;
  90.    END IF;
  91.      
  92.    RETURN next rMotoristas;
  93.  END LOOP;  
  94.  
  95.  -- Fechando os motoristas
  96.  CLOSE cMotoristas;
  97. END;
  98. $body$
  99. LANGUAGE 'plpgsql'
  100. VOLATILE
  101. CALLED ON NULL INPUT
  102. SECURITY INVOKER
  103. COST 100 ROWS 1000;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement