Advertisement
LovelessIsma

FUNCION RENUMERAR RECIBOS

Feb 16th, 2017
127
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.   rFacturacion record;
  13.  
  14. BEGIN
  15.  
  16.     IF idproceso = '0' THEN
  17.  
  18.       IF (SELECT COUNT(*) FROM tm_proceso WHERE tm_idproyecto = idproyecto AND tm_idestadoproceso = 1 AND activo = 1) > 0 THEN
  19.  
  20.          rpta := '0';
  21.  
  22.          titulomsje := 'No se puede crear el proceso';
  23.  
  24.          contenidomsje := 'Todavía existen procesos abiertos en el sistema';
  25.  
  26.          RETURN;
  27.  
  28.       END IF;
  29.  
  30.       --SELECT 'PR' || LPAD((COUNT(*) + 1)::text, 8, '0') INTO codigo FROM tm_proceso;
  31.  
  32.       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;
  33.  
  34.       INSERT INTO tm_proceso (tm_idproceso, tm_idproyecto, tm_per_mes, tm_per_ano, tm_idestadoproceso, activo, idusuarioreg, fechareg, idusuarioact, fechaact)
  35.  
  36.       VALUES (codigo, idproyecto, per_mes, per_ano, 1, 1, idusuario, CURRENT_TIMESTAMP, idusuario, CURRENT_TIMESTAMP);
  37.  
  38.       rpta := codigo;
  39.  
  40.       titulomsje := 'Proceso creado';
  41.  
  42.     ELSE
  43.  
  44.       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
  45.  
  46.       WHERE tm_idproceso = idproceso;
  47.  
  48.      
  49.       FOR rFacturacion IN SELECT a.tm_idfacturacion, b.tm_codigoproyecto FROM tm_facturacion AS a INNER JOIN tm_proyecto AS b ON a.tm_idproyecto = b.tm_idproyecto WHERE a.tm_per_ano = per_ano AND a.tm_idproyecto = idproyecto AND a.activo = 1)  LOOP
  50.  
  51.         SELECT prefijoproyecto || anho::character varying || mes::character varying || LPAD((COUNT(*) + 1)::TEXT, 10, '0') INTO correlativofacturacion FROM tm_facturacion WHERE activo = 1;
  52.        
  53.         -- SELECT rFacturacion.tm_codigoproyecto || per_ano::character varying || mes::charcter varying || LPAD((COUNT(*) + 1)::TEXT, 10, '0') INTO correlativofacturacion FROM tm_facturacion WHERE activo = 1;
  54.  
  55.         UPDATE tm_facturacion SET tm_codigo = correlativofacturacion WHERE tm_idfacturacion = rFacturacion.tm_idfacturacion;
  56.       END LOOP;
  57.  
  58.  
  59.       SELECT a.rpta INTO rpta FROM pa_detalle_cuentacorriente_masivo(idproyecto,per_ano,per_mes,idusuario) AS a;
  60.  
  61.       titulomsje := 'Proceso cerrado';
  62.  
  63.     END IF;    
  64.  
  65.     contenidomsje := 'La operación se completó satisfactoriamente';
  66.  
  67. END;
  68.  
  69. $BODY$
  70.   LANGUAGE plpgsql VOLATILE
  71.   COST 100;
  72. ALTER FUNCTION pa_proceso_registrar(character varying, character varying, smallint, smallint, integer)
  73.   OWNER TO postgres;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement