Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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
- $body$
- /*******************************************************************************
- DEFINIÇÕES DE ENTRADA
- --> sQuem : Determina se vamos usar apenas um relatorio para
- M - Motoristas
- A - Ajudantes
- T - Ambos
- *******************************************************************************/
- /*******************************************************************************
- VARIAVEIS GLOBAIS
- *******************************************************************************/
- DECLARE
- rMotoristas RECORD;
- cMotoristas CURSOR FOR SELECT DISTINCT(a.codmotorista),
- b.apelido
- FROM r905_acompviagem a
- join funcionarios b ON a.codmotorista=b.seq
- WHERE a.tipo='P'
- AND a.retornado='S'
- AND a.dataretorno::DATE BETWEEN $2 AND $3;
- vChapa INTEGER;
- BEGIN
- OPEN cMotoristas;
- LOOP
- FETCH cMotoristas INTO rMotoristas;
- $1:=rMotoristas.codmotorista;
- $4:=rMotoristas.apelido;
- EXIT WHEN NOT found;
- vChapa :=0;
- -- Entregas efetivadas
- SELECT COUNT(x.*) INTO $5
- FROM r905_acompviagem_cidade x
- WHERE x.codcarga IN (SELECT y.seq
- FROM r905_acompviagem_cargas y
- WHERE codviagem IN (SELECT z.seq
- FROM r905_acompviagem z
- WHERE z.tipo='P'
- AND z.dataretorno::DATE BETWEEN $2 AND $3
- AND z.retornado='S'
- AND z.codmotorista=$1))
- AND x.status=0;
- -- Pontos entregas efetivadas
- $6:=$5*1;
- -- Peso das entregas efetivadas
- SELECT SUM(u.peso) INTO $7
- FROM r905_acompviagem_cidade x
- join nfsaid v ON x.codpedsap=v.numdoc
- join nfsaid_itens u ON v.codpdd=u.codpdd
- WHERE x.codcarga IN (SELECT y.seq
- FROM r905_acompviagem_cargas y
- WHERE codviagem IN (SELECT z.seq
- FROM r905_acompviagem z
- WHERE z.dataretorno::DATE BETWEEN $2 AND $3
- AND z.retornado='S'
- AND z.codmotorista=$1))
- AND x.status=0
- AND EXTRACT(YEAR FROM v.dataemsdoc)>=2009
- AND x.codcli NOT IN (SELECT DISTINCT(d.valor)::int
- FROM r905_acompviagem a
- join r905_acompviagem_cargas b ON a.seq=b.codviagem
- join r905_acompviagem_cidade c ON b.seq=c.codcarga
- join r905_acompviagem_ocorrencia d ON (a.seq=d.codviagem AND d.valor::int=c.codcli)
- WHERE a.retornado='S'
- AND a.dataretorno::DATE BETWEEN $2 AND $3
- AND a.codmotorista=$1
- AND d.codtpocomot=30
- AND d.nivel='3');
- -- Pontuação do peso
- $8:=ROUND($7/100);
- -- Qual o maior
- IF $8 > $6 THEN
- $9 := $8;
- ELSE
- $9 := $6;
- END IF;
- RETURN next rMotoristas;
- END LOOP;
- -- Fechando os motoristas
- CLOSE cMotoristas;
- END;
- $body$
- LANGUAGE 'plpgsql'
- VOLATILE
- CALLED ON NULL INPUT
- SECURITY INVOKER
- COST 100 ROWS 1000;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement