Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- Function: pa_facturacion_generar(character varying, smallint, character varying, smallint, smallint, timestamp without time zone, timestamp without time zone, character varying, numeric, integer)
- -- DROP FUNCTION pa_facturacion_generar(character varying, smallint, character varying, smallint, smallint, timestamp without time zone, timestamp without time zone, character varying, numeric, integer);
- CREATE OR REPLACE FUNCTION pa_facturacion_generar(
- IN idproyecto character varying,
- IN tipofacturacion smallint,
- IN idpropiedad character varying,
- IN anho smallint,
- IN mes smallint,
- IN fechavencimiento timestamp without time zone,
- IN fechatope timestamp without time zone,
- IN idmoneda character varying,
- IN tipocambio numeric,
- IN idusuario integer,
- OUT rpta character varying,
- OUT titulomsje character varying,
- OUT contenidomsje character varying)
- RETURNS record AS
- $BODY$
- DECLARE rPropiedad record;
- rConcepto record;
- rFacturacion record;
- idfactura CHARACTER VARYING(15);
- correlativofacturacion CHARACTER VARYING(45);
- prefijoproyecto CHARACTER VARYING(30);
- FACTURAS integer;
- codigomoneda CHARACTER VARYING;
- codigofactura CHARACTER VARYING(15);
- codigofactpropietario CHARACTER VARYING(15);
- codigoconceptofact CHARACTER VARYING(15);
- importefacturado NUMERIC(10, 2);
- countfactpropietario BIGINT;
- areapropiedad NUMERIC(6, 2);
- valorconcepto NUMERIC(6,2);
- areadepartamento NUMERIC(6, 2);
- areaestacionamiento NUMERIC(6, 2);
- ratioProp NUMERIC(6, 4);
- areadeposito NUMERIC(6, 2);
- formula TEXT;
- consumomes NUMERIC(9, 2);
- tipovalorizacion CHARACTER VARYING;
- cantidadPropiedades SMALLINT;
- AreaProyecto numeric (10,2);
- variableDuplex SMALLINT;
- PorcenDscto NUMERIC;
- BEGIN
- IF (SELECT COUNT(*) FROM tm_proceso WHERE tm_idestadoproceso = 1 AND tm_idproyecto = idproyecto AND tm_per_ano = anho AND tm_per_mes = mes AND activo = 1) = 0 THEN
- rpta := '1';
- titulomsje := 'El proceso actual no ha sido abierto';
- contenidomsje := 'La operación no se puede realizar';
- RETURN;
- END IF;
- SELECT COUNT(*) INTO FACTURAS from tm_facturacion WHERE tm_idproyecto = idproyecto AND tm_per_ano = anho AND tm_per_mes = mes AND activo = 1;
- IF FACTURAS > 0 THEN
- -- UPDATE td_facturacionpropietario SET activo = 0 WHERE tm_idfacturacion IN (SELECT tm_idfacturacion FROM tm_facturacion WHERE tm_idproyecto = idproyecto AND tm_per_ano = anho AND tm_per_mes = mes AND activo = 1);
- UPDATE td_facturacionpropietario fprop SET fprop.activo = 0 FROM tm_facturacion fac
- WHERE fac.tm_idproyecto = idproyecto AND fac.tm_per_ano = anho AND fac.tm_per_mes = mes AND fac.tm_idfacturacion = fprop.tm_idfacturacion AND fprop.activo = 1;
- UPDATE tm_facturacion SET activo = 0 WHERE tm_idproyecto = idproyecto AND tm_per_ano = anho AND tm_per_mes = mes AND activo = 1;
- UPDATE td_conceptosfacturacion SET activo = 0 WHERE tm_idproyecto = idproyecto AND tm_per_ano = anho AND tm_per_mes = mes AND activo = 1;
- END IF;
- variableDuplex := 0;
- PorcenDscto :=0;
- CREATE TEMP SEQUENCE temp_seq;
- IF idmoneda = '0' THEN
- SELECT tm_idmoneda INTO codigomoneda FROM tm_moneda WHERE tm_default = 1 AND activo = 1;
- ELSE
- codigomoneda := idmoneda;
- END IF;
- SELECT tm_codigoproyecto, ta_tipovaloracion INTO prefijoproyecto, tipovalorizacion FROM tm_proyecto WHERE tm_idproyecto = idproyecto AND activo = 1;
- --- Traer campo descuento para Dúplex
- SELECT tm_tieneporcjduplex INTO variableDuplex FROM tm_proyecto WHERE tm_idproyecto = idproyecto AND activo = 1;
- --- Si se descuenta por dúplex, traer el % de descuento
- IF variableDuplex = 1 THEN
- SELECT tm_porcjduplex INTO PorcenDscto FROM tm_proyecto WHERE tm_idproyecto = idproyecto AND activo = 1;
- END IF;
- IF tipovalorizacion = '00' THEN
- SELECT COUNT(*) INTO cantidadPropiedades FROM tm_propiedad WHERE tm_idproyecto = idproyecto AND tm_idtipopropiedad = 'DPT' AND activo = 1;
- ELSE
- select resultado into AreaProyecto from pa_area_proyecto(idproyecto,PorcenDscto);
- END IF;
- SELECT COUNT(*) INTO countfactpropietario FROM td_facturacionpropietario;
- IF tipoFacturacion = 1 THEN
- FOR rPropiedad IN SELECT a.tm_idpropiedad, a.tm_idpropiedadrelacionada, a.tm_area FROM tm_propiedad AS a WHERE a.tm_idproyecto = idproyecto AND a.activo = 1 AND a.tm_idtipopropiedad = 'DPT' LOOP
- areadepartamento := rPropiedad.tm_area;
- SELECT 'FN' || LPAD((COUNT(*) + 1)::TEXT, 13, '0') INTO codigofactura FROM tm_facturacion;
- SELECT prefijoproyecto || anho::character varying || mes::character varying || LPAD((COUNT(*) + 1)::TEXT, 10, '0') INTO correlativofacturacion FROM tm_facturacion WHERE activo = 1;
- --- Se Calcula el porcentaje de participación y se graba en la cabecera de la factura
- IF tipovalorizacion = '00' THEN
- ratioProp := round(1/cantidadPropiedades,4);
- ELSE
- select porcentaje into ratioProp from pa_porcentaje_participacion(rPropiedad.tm_idpropiedad, idproyecto, AreaProyecto);
- END IF;
- INSERT INTO tm_facturacion (tm_idfacturacion, tm_codigo, tm_idproyecto, tm_per_ano, tm_per_mes, tm_ratio, tm_idmoneda, tm_tipo_cambio, tm_fechaemision, tm_fechavencimiento, tm_fechatope, tm_importefacturado, activo, idusuarioreg, fechareg, idusuarioact, fechaact)
- VALUES (codigofactura, correlativofacturacion, idproyecto, anho, mes, ratioProp, codigomoneda, tipocambio, CURRENT_TIMESTAMP, fechavencimiento, fechatope, 0, 1, idusuario, CURRENT_TIMESTAMP, idusuario, CURRENT_TIMESTAMP);
- INSERT INTO td_facturacionpropietario (td_idfacturacionpropietario, tm_idpropietario, tm_idfacturacion, activo, idusuarioreg, fechareg, idusuarioact, fechaact)
- SELECT 'FP' || LPAD(( countfactpropietario + NEXTVAL('temp_seq'))::TEXT, 13, '0'), oldtable.tm_idtipopropietario, codigofactura, 1, idusuario, CURRENT_TIMESTAMP, idusuario, CURRENT_TIMESTAMP
- FROM (SELECT * FROM vstpropietario AS propt
- INNER JOIN td_propiedadpropietario AS b ON propt.tm_idtipopropietario = b.tm_idpropietario AND b.tm_idpropiedad = rPropiedad.tm_idpropiedad
- ORDER BY propt.tm_idtipopropietario) AS oldtable;
- SELECT areadepartamento + SUM(a.tm_area) INTO areapropiedad FROM tm_propiedad AS a WHERE tm_idpropiedadrelacionada = rPropiedad.tm_idpropiedad AND a.tm_idtipopropiedad <> 'DPT' AND a.activo = 1;
- FOR rConcepto IN SELECT a.tm_idconcepto, a.tm_definicion_formula, a.tm_esformula, a.tm_escalonable, a.tm_ascensor FROM tm_concepto AS a WHERE a.tm_idproyecto = idproyecto AND a.ta_tipoconcepto = '02' AND a.activo = 1 LOOP
- SELECT 'CF' || LPAD((COUNT(*) + 1)::TEXT, 13, '0') INTO codigoconceptofact FROM td_conceptosfacturacion;
- IF rConcepto.tm_escalonable = 1 THEN
- SELECT td_consumoperiodo INTO consumomes FROM td_consumoescalonable WHERE tm_idconcepto = rConcepto.tm_idconcepto AND tm_idproyecto = idproyecto AND tm_idpropiedad = rPropiedad.tm_idpropiedad AND tm_per_mes = mes AND tm_per_ano = anho;
- consumomes := COALESCE(consumomes, 0.0);
- SELECT a.pagoconsumo INTO valorconcepto FROM pa_conceptoescalonable_calcular(rConcepto.tm_idconcepto, consumomes) AS a;
- ELSE
- IF rConcepto.tm_ascensor = 1 THEN
- SELECT a.facturarconcepto INTO valorconcepto FROM pa_facturacion_ascensor(idproyecto, rPropiedad.tm_idpropiedad, anho, mes, idusuario ) AS a;
- ELSE
- IF rConcepto.tm_esformula = 1 THEN
- IF tipovalorizacion = '00' THEN
- SELECT a.facturarconcepto INTO valorconcepto FROM pa_facturacion_equitativa(rConcepto.tm_idconcepto, rPropiedad.tm_idpropiedad, idproyecto, mes, anho, cantidadPropiedades) AS a;
- ELSE
- SELECT a.facturarconcepto INTO valorconcepto FROM pa_facturacion_calcular(rConcepto.tm_idconcepto, rPropiedad.tm_idpropiedad, idproyecto, AreaProyecto, mes, anho) AS a;
- END IF;
- ELSE
- valorconcepto := 0.0;
- END IF;
- END IF;
- END IF;
- INSERT INTO td_conceptosfacturacion (td_idconceptofacturacion, tm_idproyecto, tm_idfacturacion, tm_per_ano, tm_per_mes, tm_idpropiedad, tm_idconcepto, td_valorconcepto, ta_tiporesultado, activo, idusuarioreg, fechareg, idusuarioact, fechaact)
- VALUES (codigoconceptofact, idproyecto, codigofactura, anho, mes, rPropiedad.tm_idpropiedad, rConcepto.tm_idconcepto, valorconcepto, '01', 1, idusuario, CURRENT_TIMESTAMP, idusuario, CURRENT_TIMESTAMP);
- END LOOP;
- SELECT SUM(td_valorconcepto) INTO importefacturado FROM td_conceptosfacturacion WHERE tm_idfacturacion = codigofactura;
- UPDATE tm_facturacion SET tm_importefacturado = importefacturado WHERE tm_idfacturacion = codigofactura;
- END LOOP;
- IF tipovalorizacion <> '00' THEN
- FOR rPropiedad IN SELECT a.tm_idpropiedad, a.tm_area FROM tm_propiedad AS a WHERE a.tm_idproyecto = idproyecto AND a.activo = 1 AND a.tm_idtipopropiedad <> 'DPT' AND (tm_idpropiedadrelacionada='' OR tm_idpropiedadrelacionada IS NULL) LOOP
- areadepartamento := rPropiedad.tm_area;
- SELECT 'FN' || LPAD((COUNT(*) + 1)::TEXT, 13, '0') INTO codigofactura FROM tm_facturacion;
- SELECT prefijoproyecto || anho::character varying || mes::character varying || LPAD((COUNT(*) + 1)::TEXT, 10, '0') INTO correlativofacturacion FROM tm_facturacion WHERE activo = 1;
- --- Se Calcula el porcentaje de participación y se graba en la cabecera de la factura
- select porcentaje into ratioProp from pa_porcentaje_participacion(rPropiedad.tm_idpropiedad,idproyecto, AreaProyecto);
- INSERT INTO tm_facturacion (tm_idfacturacion, tm_codigo, tm_idproyecto, tm_per_ano, tm_per_mes, tm_ratio, tm_idmoneda, tm_tipo_cambio, tm_fechaemision, tm_fechavencimiento, tm_fechatope, tm_importefacturado, activo, idusuarioreg, fechareg, idusuarioact, fechaact)
- VALUES (codigofactura, correlativofacturacion, idproyecto, anho, mes, ratioProp, codigomoneda, tipocambio, CURRENT_TIMESTAMP, fechavencimiento, fechatope, 0, 1, idusuario, CURRENT_TIMESTAMP, idusuario, CURRENT_TIMESTAMP);
- INSERT INTO td_facturacionpropietario (td_idfacturacionpropietario, tm_idpropietario, tm_idfacturacion, activo, idusuarioreg, fechareg, idusuarioact, fechaact)
- SELECT 'FP' || LPAD(( countfactpropietario + NEXTVAL('temp_seq'))::TEXT, 13, '0'), oldtable.tm_idtipopropietario, codigofactura, 1, idusuario, CURRENT_TIMESTAMP, idusuario, CURRENT_TIMESTAMP
- FROM (SELECT * FROM vstpropietario AS propt
- INNER JOIN td_propiedadpropietario AS b ON propt.tm_idtipopropietario = b.tm_idpropietario AND b.tm_idpropiedad = rPropiedad.tm_idpropiedad
- ORDER BY propt.tm_idtipopropietario) AS oldtable;
- FOR rConcepto IN SELECT a.tm_idconcepto, a.tm_definicion_formula, a.tm_esformula, a.tm_escalonable FROM tm_concepto AS a WHERE a.tm_idproyecto = idproyecto AND a.ta_tipoconcepto = '02' AND a.activo = 1 LOOP
- SELECT 'CF' || LPAD((COUNT(*) + 1)::TEXT, 13, '0') INTO codigoconceptofact FROM td_conceptosfacturacion;
- IF rConcepto.tm_esformula = 1 THEN
- SELECT a.facturarconcepto INTO valorconcepto FROM pa_facturacion_calcular(rConcepto.tm_idconcepto, rPropiedad.tm_idpropiedad, idproyecto, AreaProyecto, mes, anho) AS a;
- ELSE
- valorconcepto := 0.0;
- END IF;
- INSERT INTO td_conceptosfacturacion (td_idconceptofacturacion, tm_idproyecto, tm_idfacturacion, tm_per_ano, tm_per_mes, tm_idpropiedad, tm_idconcepto, td_valorconcepto, ta_tiporesultado, activo, idusuarioreg, fechareg, idusuarioact, fechaact)
- VALUES (codigoconceptofact, idproyecto, codigofactura, anho, mes, rPropiedad.tm_idpropiedad, rConcepto.tm_idconcepto, valorconcepto, '01', 1, idusuario, CURRENT_TIMESTAMP, idusuario, CURRENT_TIMESTAMP);
- END LOOP;
- SELECT SUM(td_valorconcepto) INTO importefacturado FROM td_conceptosfacturacion WHERE tm_idfacturacion = codigofactura;
- UPDATE tm_facturacion SET tm_importefacturado = importefacturado WHERE tm_idfacturacion = codigofactura;
- END LOOP;
- END IF;
- ELSE
- FOR rPropiedad IN SELECT a.tm_idpropiedad, a.tm_idpropiedadrelacionada, a.tm_area FROM tm_propiedad AS a WHERE a.tm_idpropiedad = idpropiedad AND a.activo = 1 LOOP
- SELECT DISTINCT tm_idfacturacion into idfactura from td_conceptosfacturacion WHERE tm_per_ano = anho AND tm_per_mes = mes AND tm_idpropiedad = rPropiedad.tm_idpropiedad AND activo = 1;
- IF idfactura IS NOT NULL THEN
- UPDATE td_facturacionpropietario SET activo = 0 WHERE tm_idfacturacion = idfactura and activo = 1;
- UPDATE tm_facturacion SET activo = 0 WHERE tm_idfacturacion = idfactura and activo = 1;
- UPDATE td_conceptosfacturacion SET activo = 0 WHERE tm_idfacturacion = idfactura and activo = 1;
- END IF;
- areadepartamento := rPropiedad.tm_area;
- SELECT 'FN' || LPAD((COUNT(*) + 1)::TEXT, 13, '0') INTO codigofactura FROM tm_facturacion;
- SELECT prefijoproyecto || anho::character varying || mes::character varying || LPAD((COUNT(*) + 1)::TEXT, 10, '0') INTO correlativofacturacion FROM tm_facturacion WHERE activo = 1;
- --- Se Calcula el porcentaje de participación y se graba en la cabecera de la factura
- IF tipovalorizacion = '00' THEN
- ratioProp := round(1/cantidadPropiedades,4);
- ELSE
- select porcentaje into ratioProp from pa_porcentaje_participacion(rPropiedad.tm_idpropiedad, idproyecto, AreaProyecto);
- END IF;
- INSERT INTO tm_facturacion (tm_idfacturacion, tm_codigo, tm_idproyecto, tm_per_ano, tm_per_mes, tm_ratio, tm_idmoneda, tm_tipo_cambio, tm_fechaemision, tm_fechavencimiento, tm_fechatope, tm_importefacturado, activo, idusuarioreg, fechareg, idusuarioact, fechaact)
- VALUES (codigofactura, correlativofacturacion, idproyecto, anho, mes, ratioProp, codigomoneda, tipocambio, CURRENT_TIMESTAMP, fechavencimiento, fechatope, 0, 1, idusuario, CURRENT_TIMESTAMP, idusuario, CURRENT_TIMESTAMP);
- INSERT INTO td_facturacionpropietario (td_idfacturacionpropietario, tm_idpropietario, tm_idfacturacion, activo, idusuarioreg, fechareg, idusuarioact, fechaact)
- SELECT 'FP' || LPAD(( countfactpropietario + NEXTVAL('temp_seq'))::TEXT, 13, '0'), oldtable.tm_idtipopropietario, codigofactura, 1, idusuario, CURRENT_TIMESTAMP, idusuario, CURRENT_TIMESTAMP
- FROM (SELECT * FROM vstpropietario AS propt
- INNER JOIN td_propiedadpropietario AS b ON propt.tm_idtipopropietario = b.tm_idpropietario AND b.tm_idpropiedad = rPropiedad.tm_idpropiedad
- ORDER BY propt.tm_idtipopropietario) AS oldtable;
- SELECT areadepartamento + SUM(a.tm_area) INTO areapropiedad FROM tm_propiedad AS a WHERE tm_idpropiedadrelacionada = rPropiedad.tm_idpropiedad AND a.tm_idtipopropiedad <> 'DPT' AND a.activo = 1;
- FOR rConcepto IN SELECT a.tm_idconcepto, a.tm_definicion_formula, a.tm_esformula, a.tm_escalonable, a.tm_ascensor FROM tm_concepto AS a WHERE a.tm_idproyecto = idproyecto AND a.ta_tipoconcepto = '02' AND a.activo = 1 LOOP
- SELECT 'CF' || LPAD((COUNT(*) + 1)::TEXT, 13, '0') INTO codigoconceptofact FROM td_conceptosfacturacion;
- IF rConcepto.tm_escalonable = 1 THEN
- SELECT td_consumoperiodo INTO consumomes FROM td_consumoescalonable WHERE tm_idconcepto = rConcepto.tm_idconcepto AND tm_idproyecto = idproyecto AND tm_idpropiedad = rPropiedad.tm_idpropiedad AND tm_per_mes = mes AND tm_per_ano = anho;
- consumomes := COALESCE(consumomes, 0.0);
- SELECT a.pagoconsumo INTO valorconcepto FROM pa_conceptoescalonable_calcular(rConcepto.tm_idconcepto, consumomes) AS a;
- ELSE
- IF rConcepto.tm_ascensor = 1 THEN
- SELECT a.facturarconcepto INTO valorconcepto FROM pa_facturacion_ascensor(idproyecto, rPropiedad.tm_idpropiedad, anho, mes, idusuario) AS a;
- ELSE
- IF rConcepto.tm_esformula = 1 THEN
- IF tipovalorizacion = '00' THEN
- SELECT a.facturarconcepto INTO valorconcepto FROM pa_facturacion_equitativa(rConcepto.tm_idconcepto, rPropiedad.tm_idpropiedad, idproyecto, mes, anho, cantidadPropiedades) AS a;
- ELSE
- SELECT a.facturarconcepto INTO valorconcepto FROM pa_facturacion_calcular(rConcepto.tm_idconcepto, rPropiedad.tm_idpropiedad, idproyecto, AreaProyecto, mes, anho) AS a;
- END IF;
- ELSE
- valorconcepto := 0.0;
- END IF;
- END IF;
- END IF;
- INSERT INTO td_conceptosfacturacion (td_idconceptofacturacion, tm_idproyecto, tm_idfacturacion, tm_per_ano, tm_per_mes, tm_idpropiedad, tm_idconcepto, td_valorconcepto, ta_tiporesultado, activo, idusuarioreg, fechareg, idusuarioact, fechaact)
- VALUES (codigoconceptofact, idproyecto, codigofactura, anho, mes, rPropiedad.tm_idpropiedad, rConcepto.tm_idconcepto, valorconcepto, '01', 1, idusuario, CURRENT_TIMESTAMP, idusuario, CURRENT_TIMESTAMP);
- END LOOP;
- SELECT SUM(td_valorconcepto) INTO importefacturado FROM td_conceptosfacturacion WHERE tm_idfacturacion = codigofactura;
- UPDATE tm_facturacion SET tm_importefacturado = importefacturado WHERE tm_idfacturacion = codigofactura;
- END LOOP;
- END IF;
- DROP SEQUENCE temp_seq;
- rpta := '1';
- titulomsje := 'Generado correctamente';
- contenidomsje := 'La operación se realizó correctamente';
- END;
- $BODY$
- LANGUAGE plpgsql VOLATILE
- COST 100;
- ALTER FUNCTION pa_facturacion_generar(character varying, smallint, character varying, smallint, smallint, timestamp without time zone, timestamp without time zone, character varying, numeric, integer)
- OWNER TO postgres;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement