Advertisement
Guest User

Untitled

a guest
Sep 1st, 2015
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 3.44 KB | None | 0 0
  1. CREATE OR REPLACE FUNCTION pa_porcentaje_participacion(
  2.     IN idpropiedad CHARACTER VARYING,
  3.     IN idproyecto CHARACTER VARYING,
  4.     IN areaproyecto NUMERIC,
  5.     OUT porcentaje text)
  6.   RETURNS text AS
  7. $BODY$
  8. DECLARE
  9.   rPropiedad record;
  10.   areapropiedad NUMERIC;
  11.   sumaarearelacionada NUMERIC;
  12. BEGIN
  13.  
  14. FOR rPropiedad IN SELECT a.tm_idpropiedad, a.tm_area, a.tm_area_sintechar, a.tm_area_techada, a.ta_clasepropiedad FROM tm_propiedad AS a WHERE a.tm_idproyecto = idproyecto AND a.tm_idpropiedad = idpropiedad AND a.activo = 1 LOOP
  15.  
  16.     IF rPropiedad.ta_clasepropiedad = '01' THEN
  17.         areapropiedad := rPropiedad.tm_area_techada + (rPropiedad.tm_area_sintechar*0.5);
  18.     ELSE
  19.         areapropiedad := rPropiedad.tm_area;
  20.     END IF;
  21.  
  22.   SELECT SUM(a.tm_area) INTO sumaarearelacionada FROM tm_propiedad AS a WHERE tm_idpropiedadrelacionada = rPropiedad.tm_idpropiedad AND a.tm_idtipopropiedad <> 'DPT' AND a.activo = 1;
  23.  
  24. END LOOP;
  25.   IF sumaarearelacionada >  0 THEN
  26.     areapropiedad = areapropiedad + sumaarearelacionada;
  27.   END IF;
  28.   porcentaje = to_char(areapropiedad/areaproyecto*100,'99999999.99999');
  29.   porcentaje = TRIM(porcentaje);
  30. END;
  31. $BODY$
  32.   LANGUAGE plpgsql VOLATILE
  33.   COST 100;
  34.  
  35. -- DROP FUNCTION pa_area_proyecto(character varying, smallint, smallint);
  36. CREATE OR REPLACE FUNCTION pa_area_proyecto(
  37.     IN idproyecto CHARACTER VARYING,
  38.     IN Pduplex NUMERIC,
  39.     OUT resultado NUMERIC)
  40.   RETURNS NUMERIC AS
  41. $BODY$
  42. DECLARE
  43.   rPropiedad record;
  44.   arearelacionada NUMERIC;
  45.   areadepartamento NUMERIC;
  46.   Ratio NUMERIC(4,2);
  47. BEGIN
  48.  
  49. resultado := 0;
  50. Ratio = (Pduplex/100);
  51. FOR rPropiedad IN SELECT a.tm_idpropiedad, a.tm_area, a.tm_area_sintechar, a.tm_area_techada, a.ta_clasepropiedad  FROM tm_propiedad AS a WHERE a.tm_idproyecto = idproyecto AND a.activo = 1 AND a.tm_idtipopropiedad = 'DPT' LOOP
  52.     areadepartamento := 0;
  53.     IF rPropiedad.ta_clasepropiedad = '01' THEN
  54.       areadepartamento := rPropiedad.tm_area_techada + (rPropiedad.tm_area_sintechar*0.5);
  55.     ELSE
  56.       areadepartamento := rPropiedad.tm_area;
  57.     END IF;
  58.     SELECT SUM(b.tm_area) INTO arearelacionada FROM tm_propiedad AS b WHERE b.tm_idpropiedadrelacionada = rPropiedad.tm_idpropiedad AND b.activo = 1;
  59.     IF arearelacionada > 0 THEN
  60.         resultado := resultado + areadepartamento + arearelacionada ;
  61.     ELSE
  62.         resultado := resultado + areadepartamento ;
  63.     END IF;
  64. END LOOP;
  65.  
  66.     SELECT resultado+SUM(a.tm_area) INTO resultado FROM tm_propiedad AS a WHERE (tm_idpropiedadrelacionada = '' OR tm_idpropiedadrelacionada IS NULL)  AND a.tm_idtipopropiedad <> 'DPT' AND a.activo = 1;
  67.  
  68. END;
  69. $BODY$
  70.   LANGUAGE plpgsql VOLATILE
  71.   COST 100;
  72.  
  73.  
  74. DROP FUNCTION pa_facturacion_calcular(CHARACTER VARYING, CHARACTER VARYING, CHARACTER VARYING, SMALLINT, SMALLINT);
  75.  
  76. CREATE OR REPLACE FUNCTION pa_facturacion_calcular(
  77.     IN concepto CHARACTER VARYING,
  78.     IN propiedad CHARACTER VARYING,
  79.     IN proyecto CHARACTER VARYING,
  80.     IN AreaTotal NUMERIC,
  81.     IN mes SMALLINT,
  82.     IN anno SMALLINT,
  83.     OUT facturarconcepto NUMERIC)
  84.   RETURNS NUMERIC AS
  85. $BODY$
  86. DECLARE
  87.   presupuesto NUMERIC;
  88.   ratio NUMERIC;
  89.  
  90. BEGIN
  91.  
  92.   SELECT valorfinal INTO presupuesto FROM pa_concepto_calcular(concepto, ''::CHARACTER VARYING, proyecto , 0, mes, anno);
  93.   SELECT porcentaje INTO ratio FROM pa_porcentaje_participacion(propiedad, proyecto, AreaTotal);
  94.   facturarconcepto := presupuesto/100*ratio;
  95.  
  96. END;
  97. $BODY$
  98.   LANGUAGE plpgsql VOLATILE
  99.   COST 100;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement