Advertisement
LovelessIsma

PROCESO_CERRAR

Feb 21st, 2017
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- Function: pa_proceso_registrar(character varying, character varying, smallint, smallint, integer)
  2.  
  3. DROP FUNCTION pa_proceso_registrar(character varying, character varying, smallint, smallint, integer);
  4.  
  5. CREATE OR REPLACE FUNCTION pa_proceso_registrar(IN idproceso character varying, IN idproyecto character varying, IN per_ano smallint, IN per_mes smallint, IN idusuario integer, OUT rpta character varying, OUT titulomsje character varying, OUT contenidomsje character varying)
  6.   RETURNS record AS
  7. $BODY$
  8.  
  9. DECLARE
  10.  
  11.   codigo CHARACTER VARYING(10);
  12.   correlativofacturacion CHARACTER VARYING(15);
  13.   cantidad_facturable integer;
  14.   tipovaloracion CHARACTER VARYING(2);
  15.   rFacturacion record;
  16.  
  17. BEGIN
  18.  
  19.     IF idproceso = '0' THEN
  20.  
  21.       IF (SELECT COUNT(*) FROM tm_proceso WHERE tm_idproyecto = idproyecto AND tm_idestadoproceso = 1 AND activo = 1) > 0 THEN
  22.  
  23.          rpta := '0';
  24.  
  25.          titulomsje := 'No se puede crear el proceso';
  26.  
  27.          contenidomsje := 'Todavía existen procesos abiertos en el sistema';
  28.  
  29.          RETURN;
  30.  
  31.       END IF;
  32.  
  33.       --SELECT 'PR' || LPAD((COUNT(*) + 1)::text, 8, '0') INTO codigo FROM tm_proceso;
  34.  
  35.       SELECT 'PR' || LPAD((COALESCE(MAX((substring(tm_idproceso from 3 for (char_length(tm_idproceso) - 2)))::integer), 0) + 1)::text, 8, '0') INTO codigo FROM tm_proceso;
  36.  
  37.       INSERT INTO tm_proceso (tm_idproceso, tm_idproyecto, tm_per_mes, tm_per_ano, tm_idestadoproceso, activo, idusuarioreg, fechareg, idusuarioact, fechaact)
  38.  
  39.       VALUES (codigo, idproyecto, per_mes, per_ano, 1, 1, idusuario, CURRENT_TIMESTAMP, idusuario, CURRENT_TIMESTAMP);
  40.  
  41.       rpta := codigo;
  42.  
  43.       titulomsje := 'Proceso creado';
  44.  
  45.     ELSE
  46.  
  47.       UPDATE tm_proceso SET tm_idproyecto = idproyecto, tm_per_mes = per_mes, tm_per_ano = per_ano , tm_idestadoproceso = 0, idusuarioact = idusuario, fechaact = CURRENT_TIMESTAMP
  48.  
  49.       WHERE tm_idproceso = idproceso;
  50.  
  51.  
  52.       SELECT tm_cantidadfacturable, ta_tipovaloracion INTO cantidad_facturable, tipovaloracion FROM tm_proyecto WHERE tm_idproyecto = idproyecto AND activo = 1;
  53.      
  54.       IF tipovaloracion = '02' THEN
  55.         FOR rFacturacion IN SELECT DISTINCT(a.tm_idfacturacion) AS tm_idfacturacion, a.tm_idproyecto, c.tm_codigoproyecto, d.tm_idmoneda, d.tm_tipo_cambio, a.tm_per_mes, a.tm_per_ano, d.tm_importefacturado, (c.tm_nombreproyecto || ' - ' || b.tm_descripcionpropiedad)::character varying, a.tm_idpropiedad , b.tm_orden from td_conceptosfacturacion AS a, tm_propiedad AS b, tm_proyecto AS c, tm_facturacion AS d where a.tm_idfacturacion = d.tm_idfacturacion and a.tm_idpropiedad = b.tm_idpropiedad and a.tm_idproyecto = c.tm_idproyecto and a.tm_idproyecto = idproyecto and a.tm_per_mes = per_mes and a.tm_per_ano = per_ano and a.activo = 1 AND b.tm_ratio > 0 ORDER BY b.tm_orden LOOP
  56.  
  57.  
  58.           SELECT substring(rFacturacion.tm_codigoproyecto from 1 for 3) || per_ano::character varying || LPAD(((per_mes - 1) * cantidad_facturable + rFacturacion.tm_orden)::text, 8, '0')  INTO correlativofacturacion;
  59.  
  60.           UPDATE tm_facturacion SET tm_codigo = correlativofacturacion WHERE tm_idfacturacion = rFacturacion.tm_idfacturacion;
  61.         END LOOP;
  62.       ELSE
  63.         FOR rFacturacion IN SELECT DISTINCT(a.tm_idfacturacion) AS tm_idfacturacion, a.tm_idproyecto, c.tm_codigoproyecto, d.tm_idmoneda, d.tm_tipo_cambio, a.tm_per_mes, a.tm_per_ano, d.tm_importefacturado, (c.tm_nombreproyecto || ' - ' || b.tm_descripcionpropiedad)::character varying, a.tm_idpropiedad , b.tm_orden from td_conceptosfacturacion AS a, tm_propiedad AS b, tm_proyecto AS c, tm_facturacion AS d where a.tm_idfacturacion = d.tm_idfacturacion and a.tm_idpropiedad = b.tm_idpropiedad and a.tm_idproyecto = c.tm_idproyecto and a.tm_idproyecto = idproyecto and a.tm_per_mes = per_mes and a.tm_per_ano = per_ano and a.activo = 1 AND b.tm_idtipopropiedad = 'DPT' ORDER BY b.tm_orden LOOP
  64.  
  65.  
  66.           SELECT substring(rFacturacion.tm_codigoproyecto from 1 for 3) || per_ano::character varying || LPAD(((per_mes - 1) * cantidad_facturable + rFacturacion.tm_orden)::text, 8, '0')  INTO correlativofacturacion;
  67.  
  68.           UPDATE tm_facturacion SET tm_codigo = correlativofacturacion WHERE tm_idfacturacion = rFacturacion.tm_idfacturacion;
  69.         END LOOP;
  70.       END IF;
  71.  
  72.  
  73.       SELECT a.rpta INTO rpta FROM pa_detalle_cuentacorriente_masivo(idproyecto,per_ano,per_mes,idusuario) AS a;
  74.  
  75.       titulomsje := 'Proceso cerrado';
  76.  
  77.     END IF;    
  78.  
  79.     contenidomsje := 'La operación se completó satisfactoriamente';
  80.  
  81. END;
  82.  
  83. $BODY$
  84.   LANGUAGE plpgsql VOLATILE
  85.   COST 100;
  86. ALTER FUNCTION pa_proceso_registrar(character varying, character varying, smallint, smallint, integer)
  87.   OWNER TO postgres;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement