Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- Function: pa_proceso_registrar(character varying, character varying, smallint, smallint, integer)
- DROP FUNCTION pa_proceso_registrar(character varying, character varying, smallint, smallint, integer);
- 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)
- RETURNS record AS
- $BODY$
- DECLARE
- codigo CHARACTER VARYING(10);
- correlativofacturacion CHARACTER VARYING(15);
- cantidad_facturable integer;
- tipovaloracion CHARACTER VARYING(2);
- rFacturacion record;
- BEGIN
- IF idproceso = '0' THEN
- IF (SELECT COUNT(*) FROM tm_proceso WHERE tm_idproyecto = idproyecto AND tm_idestadoproceso = 1 AND activo = 1) > 0 THEN
- rpta := '0';
- titulomsje := 'No se puede crear el proceso';
- contenidomsje := 'Todavía existen procesos abiertos en el sistema';
- RETURN;
- END IF;
- --SELECT 'PR' || LPAD((COUNT(*) + 1)::text, 8, '0') INTO codigo FROM tm_proceso;
- 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;
- INSERT INTO tm_proceso (tm_idproceso, tm_idproyecto, tm_per_mes, tm_per_ano, tm_idestadoproceso, activo, idusuarioreg, fechareg, idusuarioact, fechaact)
- VALUES (codigo, idproyecto, per_mes, per_ano, 1, 1, idusuario, CURRENT_TIMESTAMP, idusuario, CURRENT_TIMESTAMP);
- rpta := codigo;
- titulomsje := 'Proceso creado';
- ELSE
- 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
- WHERE tm_idproceso = idproceso;
- SELECT tm_cantidadfacturable, ta_tipovaloracion INTO cantidad_facturable, tipovaloracion FROM tm_proyecto WHERE tm_idproyecto = idproyecto AND activo = 1;
- IF tipovaloracion = '02' THEN
- 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
- 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;
- UPDATE tm_facturacion SET tm_codigo = correlativofacturacion WHERE tm_idfacturacion = rFacturacion.tm_idfacturacion;
- END LOOP;
- ELSE
- 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
- 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;
- UPDATE tm_facturacion SET tm_codigo = correlativofacturacion WHERE tm_idfacturacion = rFacturacion.tm_idfacturacion;
- END LOOP;
- END IF;
- SELECT a.rpta INTO rpta FROM pa_detalle_cuentacorriente_masivo(idproyecto,per_ano,per_mes,idusuario) AS a;
- titulomsje := 'Proceso cerrado';
- END IF;
- contenidomsje := 'La operación se completó satisfactoriamente';
- END;
- $BODY$
- LANGUAGE plpgsql VOLATILE
- COST 100;
- ALTER FUNCTION pa_proceso_registrar(character varying, character varying, smallint, smallint, integer)
- OWNER TO postgres;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement