Advertisement
LovelessIsma

FUNCION FACTURACION CINAD

Mar 20th, 2017
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. DROP FUNCTION pa_facturacion_generar(character varying, smallint, character varying, smallint, smallint, timestamp without time zone, timestamp without time zone, character varying, numeric, integer);
  2.  
  3. 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)
  4.   RETURNS record AS
  5. $BODY$
  6.  
  7. DECLARE rPropiedad record;
  8.         rConcepto record;
  9.         rFacturacion record;
  10.         idfactura CHARACTER VARYING(15);
  11.         correlativofacturacion CHARACTER VARYING(45);
  12.         prefijoproyecto CHARACTER VARYING(30);
  13.         FACTURAS integer;
  14.         codigomoneda CHARACTER VARYING;
  15.         codigofactura CHARACTER VARYING(15);
  16.         codigofactpropietario CHARACTER VARYING(15);
  17.         codigoconceptofact CHARACTER VARYING(15);
  18.         importefacturado NUMERIC(10, 2);
  19.         countfactpropietario BIGINT;
  20.         areapropiedad NUMERIC(6, 2);
  21.         valorconcepto NUMERIC(20,10);
  22.         areadepartamento NUMERIC(6, 2);
  23.         areaestacionamiento NUMERIC(6, 2);
  24.         ratioProp NUMERIC(6, 4);
  25.         areadeposito NUMERIC(6, 2);
  26.         formula TEXT;
  27.         consumomes NUMERIC(9, 2);
  28.         tipovalorizacion CHARACTER VARYING;
  29.         cantidadPropiedades SMALLINT;
  30.         AreaProyecto numeric (10,2);
  31.         variableDuplex SMALLINT;
  32.         PorcenDscto NUMERIC;
  33.         ratio NUMERIC(100, 10);
  34.         importefijo NUMERIC(10, 2);
  35.  
  36.  
  37. BEGIN
  38.     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
  39.       rpta := '1';
  40.       titulomsje := 'El proceso actual no ha sido abierto';
  41.       contenidomsje := 'La operación no se puede realizar';
  42.       RETURN;
  43.     END IF;
  44.  
  45.     variableDuplex := 0;
  46.    
  47.     PorcenDscto :=0;
  48.  
  49.     CREATE TEMP SEQUENCE temp_seq;
  50.    
  51.     IF idmoneda = '0' THEN
  52.       SELECT tm_idmoneda INTO codigomoneda FROM tm_moneda WHERE tm_default = 1 AND activo = 1;
  53.     ELSE
  54.       codigomoneda := idmoneda;
  55.     END IF;
  56.  
  57.     SELECT tm_codigoproyecto, ta_tipovaloracion INTO prefijoproyecto, tipovalorizacion FROM tm_proyecto WHERE tm_idproyecto = idproyecto AND activo = 1;
  58.  
  59.     --- Traer campo descuento para Dúplex
  60.    
  61.     SELECT tm_tieneporcjduplex INTO  variableDuplex FROM tm_proyecto WHERE tm_idproyecto = idproyecto AND activo = 1;
  62.    
  63.    --- Si se descuenta por dúplex, traer el % de descuento
  64.  
  65.     IF variableDuplex = 1 THEN
  66.    
  67.         SELECT tm_porcjduplex INTO  PorcenDscto FROM tm_proyecto WHERE tm_idproyecto = idproyecto AND activo = 1;    
  68.    
  69.     END IF;
  70.  
  71.     IF tipovalorizacion = '00' THEN
  72.    
  73.         SELECT COUNT(*) INTO cantidadPropiedades FROM tm_propiedad WHERE tm_idproyecto = idproyecto AND tm_idtipopropiedad = 'DPT' AND activo = 1;
  74.    
  75.     ELSE
  76.       IF tipovalorizacion = '01' THEN
  77.          select resultado into AreaProyecto from pa_area_proyecto(idproyecto,PorcenDscto);
  78.         --ELSE
  79.           --IF tipovalorizacion = '02' THEN
  80.             --select resultado into AreaProyecto from pa_area_proyecto(idproyecto,PorcenDscto);
  81.           --ELSE
  82.             --select resultado into AreaProyecto from pa_area_proyecto(idproyecto,PorcenDscto);
  83.           --END IF;
  84.         END IF;
  85.     END IF;
  86.  
  87.     SELECT COUNT(*) INTO countfactpropietario FROM td_facturacionpropietario;
  88.  
  89.     IF tipoFacturacion = 1 THEN
  90.         SELECT COUNT(*) INTO FACTURAS from tm_facturacion WHERE tm_idproyecto = idproyecto AND tm_per_ano = anho AND tm_per_mes = mes AND activo = 1;
  91.  
  92.         IF FACTURAS > 0 THEN
  93.            
  94.             UPDATE td_facturacionpropietario fprop SET activo = 0 FROM tm_facturacion fac
  95.             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;
  96.  
  97.             UPDATE tm_facturacion SET activo = 0  WHERE tm_idproyecto = idproyecto AND tm_per_ano = anho AND tm_per_mes = mes AND activo = 1;
  98.    
  99.             UPDATE td_conceptosfacturacion SET activo = 0  WHERE tm_idproyecto = idproyecto AND tm_per_ano = anho AND tm_per_mes = mes AND activo = 1;
  100.  
  101.  
  102.         END IF;
  103.    
  104.         FOR rPropiedad IN SELECT a.tm_idpropiedad, a.tm_idpropiedadrelacionada, a.tm_area, a.tm_ratio, a.tm_importefijo FROM tm_propiedad AS a WHERE a.tm_idproyecto = idproyecto AND a.activo = 1 AND a.tm_idtipopropiedad = 'DPT' ORDER BY a.tm_orden LOOP
  105.      
  106.             areadepartamento := rPropiedad.tm_area;
  107.             ratio := rPropiedad.tm_ratio;
  108.             importefijo := rPropiedad.tm_importefijo;
  109.  
  110.            
  111.             SELECT 'FN' || LPAD((COALESCE(MAX((substring(tm_idfacturacion from 3 for (char_length(tm_idfacturacion) - 2)))::integer), 0) + 1)::text, 13, '0') INTO codigofactura FROM tm_facturacion;
  112.  
  113.             -- SELECT 'FN' || LPAD((COUNT(*) + 1)::TEXT, 13, '0') INTO codigofactura FROM tm_facturacion;
  114.             -- SELECT prefijoproyecto || anho::character varying || mes::character varying || LPAD((COUNT(*) + 1)::TEXT, 10, '0') INTO correlativofacturacion FROM tm_facturacion WHERE activo = 1;
  115.            
  116.            
  117.             --- Se Calcula el porcentaje de participación y se graba en la cabecera de la factura
  118.             IF tipovalorizacion = '00' THEN
  119.                 ratioProp := round(1/cantidadPropiedades,4);
  120.             ELSE
  121.                   IF tipovalorizacion = '01' THEN
  122.                     select porcentaje into ratioProp from pa_porcentaje_participacion(rPropiedad.tm_idpropiedad, idproyecto, AreaProyecto);
  123.                   END IF;
  124.             END IF;
  125.  
  126.             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)
  127.             VALUES (codigofactura, '', idproyecto, anho, mes, ratioProp, codigomoneda, tipocambio, CURRENT_TIMESTAMP, fechavencimiento, fechatope, 0, 1, idusuario, CURRENT_TIMESTAMP, idusuario, CURRENT_TIMESTAMP);
  128.      
  129.      
  130.             INSERT INTO td_facturacionpropietario (td_idfacturacionpropietario, tm_idpropietario, tm_idfacturacion, activo, idusuarioreg, fechareg, idusuarioact, fechaact)
  131.             SELECT 'FP' || LPAD(( countfactpropietario + NEXTVAL('temp_seq'))::TEXT, 13, '0'), oldtable.tm_idtipopropietario, codigofactura, 1, idusuario, CURRENT_TIMESTAMP, idusuario, CURRENT_TIMESTAMP
  132.             FROM (SELECT * FROM vstpropietario AS propt
  133.                     INNER JOIN td_propiedadpropietario AS b ON propt.tm_idtipopropietario = b.tm_idpropietario AND b.tm_idpropiedad = rPropiedad.tm_idpropiedad
  134.             ORDER BY propt.tm_idtipopropietario) AS oldtable;
  135.            
  136.             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;
  137.      
  138.            
  139.             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
  140.      
  141.                 -- SELECT 'CF' || LPAD((COUNT(*) + 1)::TEXT, 13, '0') INTO codigoconceptofact FROM td_conceptosfacturacion;
  142.                 SELECT 'CF' || LPAD((COALESCE(MAX((substring(td_idconceptofacturacion from 3 for (char_length(td_idconceptofacturacion) - 2)))::integer), 0) + 1)::text, 13, '0') INTO codigoconceptofact FROM td_conceptosfacturacion;
  143.                
  144.                 IF rConcepto.tm_escalonable = 1 THEN
  145.                   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 AND activo = 1;
  146.      
  147.                   consumomes := COALESCE(consumomes, 0.0);
  148.      
  149.                   SELECT a.pagoconsumo INTO valorconcepto FROM pa_conceptoescalonable_calcular(rConcepto.tm_idconcepto, consumomes) AS a;
  150.                 ELSE
  151.                     IF rConcepto.tm_ascensor = 1 THEN
  152.                         SELECT a.facturarconcepto INTO valorconcepto  FROM pa_facturacion_ascensor(idproyecto, rPropiedad.tm_idpropiedad, anho, mes, idusuario ) AS a;
  153.                     ELSE
  154.                         IF rConcepto.tm_esformula = 1 THEN
  155.                            IF tipovalorizacion = '00' THEN
  156.                               SELECT a.facturarconcepto INTO valorconcepto  FROM pa_facturacion_equitativa(rConcepto.tm_idconcepto, rPropiedad.tm_idpropiedad, idproyecto, mes, anho, cantidadPropiedades) AS a;
  157.                            ELSE
  158.                                 IF tipovalorizacion = '01' THEN
  159.                                   SELECT a.facturarconcepto INTO valorconcepto FROM pa_facturacion_calcular(rConcepto.tm_idconcepto, rPropiedad.tm_idpropiedad, idproyecto, AreaProyecto, mes, anho) AS a;
  160.                                 ELSE
  161.                                     IF tipovalorizacion = '02' THEN
  162.                                         SELECT a.facturarconcepto INTO valorconcepto FROM pa_facturacion_ratio(rConcepto.tm_idconcepto, rPropiedad.tm_idpropiedad, idproyecto, mes, anho) AS a;    
  163.                                     ELSE
  164.                                         valorconcepto := importefijo;
  165.                                     END IF;              
  166.                                 END IF;
  167.                            END IF;
  168.                         ELSE
  169.                            SELECT a.facturarconcepto INTO valorconcepto FROM pa_obtener_dato_variable(rConcepto.tm_idconcepto, rPropiedad.tm_idpropiedad, idproyecto, mes, anho) AS a;    
  170.                            if valorconcepto is null THEN
  171.                                 if tipovalorizacion = '03' THEN
  172.                                     valorconcepto := importefijo;
  173.                                 ELSE  
  174.                                     valorconcepto := 0.0;            
  175.                                 end if;
  176.                             end if;            
  177.                         END IF;
  178.                     END IF;
  179.                 END IF;
  180.                
  181.                 if valorconcepto is null THEN
  182.                     valorconcepto := 0.0;
  183.                 end if;
  184.                 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)
  185.                 VALUES (codigoconceptofact, idproyecto, codigofactura, anho, mes, rPropiedad.tm_idpropiedad, rConcepto.tm_idconcepto, valorconcepto, '01', 1, idusuario, CURRENT_TIMESTAMP, idusuario, CURRENT_TIMESTAMP);
  186.      
  187.             END LOOP;
  188.      
  189.             SELECT SUM(td_valorconcepto) INTO importefacturado FROM td_conceptosfacturacion WHERE tm_idfacturacion = codigofactura;
  190.  
  191.             UPDATE tm_facturacion SET tm_importefacturado = importefacturado  WHERE tm_idfacturacion = codigofactura;
  192.      
  193.         END LOOP;
  194.      
  195.         IF tipovalorizacion <> '00' THEN
  196.  
  197.             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) ORDER BY a.tm_orden  LOOP
  198.          
  199.                 areadepartamento := rPropiedad.tm_area;
  200.          
  201.                 SELECT 'FN' || LPAD((COALESCE(MAX((substring(tm_idfacturacion from 3 for (char_length(tm_idfacturacion) - 2)))::integer), 0) + 1)::text, 13, '0') INTO codigofactura FROM tm_facturacion;
  202.                
  203.                 -- SELECT 'FN' || LPAD((COUNT(*) + 1)::TEXT, 13, '0') INTO codigofactura FROM tm_facturacion;
  204.                 -- SELECT prefijoproyecto || anho::character varying || mes::character varying || LPAD((COUNT(*) + 1)::TEXT, 10, '0') INTO correlativofacturacion FROM tm_facturacion WHERE activo = 1;
  205.                
  206.                 --- Se Calcula el porcentaje de participación y se graba en la cabecera de la factura
  207.            
  208.                 select porcentaje into ratioProp from pa_porcentaje_participacion(rPropiedad.tm_idpropiedad,idproyecto, AreaProyecto);
  209.  
  210.                 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)
  211.                 VALUES (codigofactura, '', idproyecto, anho, mes, ratioProp, codigomoneda, tipocambio, CURRENT_TIMESTAMP, fechavencimiento, fechatope, 0, 1, idusuario, CURRENT_TIMESTAMP, idusuario, CURRENT_TIMESTAMP);
  212.          
  213.          
  214.                 INSERT INTO td_facturacionpropietario (td_idfacturacionpropietario, tm_idpropietario, tm_idfacturacion, activo, idusuarioreg, fechareg, idusuarioact, fechaact)
  215.                 SELECT 'FP' || LPAD(( countfactpropietario + NEXTVAL('temp_seq'))::TEXT, 13, '0'), oldtable.tm_idtipopropietario, codigofactura, 1, idusuario, CURRENT_TIMESTAMP, idusuario, CURRENT_TIMESTAMP
  216.                 FROM (SELECT * FROM vstpropietario AS propt
  217.                         INNER JOIN td_propiedadpropietario AS b ON propt.tm_idtipopropietario = b.tm_idpropietario AND b.tm_idpropiedad = rPropiedad.tm_idpropiedad
  218.                 ORDER BY propt.tm_idtipopropietario) AS oldtable;
  219.                
  220.                
  221.                 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
  222.          
  223.                     -- SELECT 'CF' || LPAD((COUNT(*) + 1)::TEXT, 13, '0') INTO codigoconceptofact FROM td_conceptosfacturacion;
  224.                     SELECT 'CF' || LPAD((COALESCE(MAX((substring(td_idconceptofacturacion from 3 for (char_length(td_idconceptofacturacion) - 2)))::integer), 0) + 1)::text, 13, '0') INTO codigoconceptofact FROM td_conceptosfacturacion;
  225.  
  226.                         IF rConcepto.tm_esformula = 1 THEN
  227.                               SELECT a.facturarconcepto INTO valorconcepto FROM pa_facturacion_calcular(rConcepto.tm_idconcepto, rPropiedad.tm_idpropiedad, idproyecto, AreaProyecto, mes, anho) AS a;
  228.                         ELSE
  229.                            valorconcepto := 0.0;
  230.                         END IF;
  231.                      if valorconcepto is null THEN
  232.                         valorconcepto := 0.0;
  233.                     end if;
  234.                     valorconcepto:= round(valorconcepto,2);
  235.                     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)
  236.                     VALUES (codigoconceptofact, idproyecto, codigofactura, anho, mes, rPropiedad.tm_idpropiedad, rConcepto.tm_idconcepto, valorconcepto, '01', 1, idusuario, CURRENT_TIMESTAMP, idusuario, CURRENT_TIMESTAMP);
  237.          
  238.                 END LOOP;
  239.          
  240.                 SELECT SUM(td_valorconcepto) INTO importefacturado FROM td_conceptosfacturacion WHERE tm_idfacturacion = codigofactura;
  241.  
  242.                 UPDATE tm_facturacion SET tm_importefacturado = importefacturado  WHERE tm_idfacturacion = codigofactura;
  243.        
  244.             END LOOP;
  245.         END IF;
  246.     ELSE
  247.        
  248.         FOR rPropiedad IN SELECT a.tm_idpropiedad, a.tm_idpropiedadrelacionada, a.tm_area, a.tm_ratio, a.tm_importefijo  FROM tm_propiedad AS a WHERE a.tm_idpropiedad = idpropiedad AND a.activo = 1 ORDER BY a.tm_orden LOOP
  249.      
  250.             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;
  251.  
  252.             IF idfactura IS NOT NULL THEN
  253.                
  254.                 UPDATE td_facturacionpropietario fprop SET fprop.activo = 0 FROM tm_facturacion fac
  255.                 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;
  256.  
  257.             UPDATE tm_facturacion SET activo = 0  WHERE tm_idproyecto = idproyecto AND tm_per_ano = anho AND tm_per_mes = mes AND activo = 1;
  258.    
  259.             UPDATE td_conceptosfacturacion SET activo = 0  WHERE tm_idproyecto = idproyecto AND tm_per_ano = anho AND tm_per_mes = mes AND activo = 1;
  260.  
  261.  
  262.             END IF;
  263.  
  264.             areadepartamento := rPropiedad.tm_area;
  265.             ratio := rPropiedad.tm_ratio;
  266.             importefijo := rPropiedad.tm_importefijo;
  267.      
  268.             SELECT 'FN' || LPAD((COALESCE(MAX((substring(tm_idfacturacion from 3 for (char_length(tm_idfacturacion) - 2)))::integer), 0) + 1)::text, 13, '0') INTO codigofactura FROM tm_facturacion;
  269.             -- SELECT 'FN' || LPAD((COUNT(*) + 1)::TEXT, 13, '0') INTO codigofactura FROM tm_facturacion;
  270.             -- SELECT prefijoproyecto || anho::character varying || mes::character varying || LPAD((COUNT(*) + 1)::TEXT, 10, '0') INTO correlativofacturacion FROM tm_facturacion WHERE activo = 1;
  271.            
  272.             --- Se Calcula el porcentaje de participación y se graba en la cabecera de la factura
  273.             IF tipovalorizacion = '00' THEN
  274.                 ratioProp := round(1/cantidadPropiedades,4);
  275.             ELSE
  276.                 select porcentaje into ratioProp from pa_porcentaje_participacion(rPropiedad.tm_idpropiedad, idproyecto, AreaProyecto);
  277.             END IF;
  278.  
  279.             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)
  280.             VALUES (codigofactura, '', idproyecto, anho, mes, ratioProp, codigomoneda, tipocambio, CURRENT_TIMESTAMP, fechavencimiento, fechatope, 0, 1, idusuario, CURRENT_TIMESTAMP, idusuario, CURRENT_TIMESTAMP);
  281.      
  282.      
  283.             INSERT INTO td_facturacionpropietario (td_idfacturacionpropietario, tm_idpropietario, tm_idfacturacion, activo, idusuarioreg, fechareg, idusuarioact, fechaact)
  284.             SELECT 'FP' || LPAD(( countfactpropietario + NEXTVAL('temp_seq'))::TEXT, 13, '0'), oldtable.tm_idtipopropietario, codigofactura, 1, idusuario, CURRENT_TIMESTAMP, idusuario, CURRENT_TIMESTAMP
  285.             FROM (SELECT * FROM vstpropietario AS propt
  286.                     INNER JOIN td_propiedadpropietario AS b ON propt.tm_idtipopropietario = b.tm_idpropietario AND b.tm_idpropiedad = rPropiedad.tm_idpropiedad
  287.             ORDER BY propt.tm_idtipopropietario) AS oldtable;
  288.            
  289.             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;
  290.      
  291.            
  292.             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
  293.      
  294.                 -- SELECT 'CF' || LPAD((COUNT(*) + 1)::TEXT, 13, '0') INTO codigoconceptofact FROM td_conceptosfacturacion;
  295.                 SELECT 'CF' || LPAD((COALESCE(MAX((substring(td_idconceptofacturacion from 3 for (char_length(td_idconceptofacturacion) - 2)))::integer), 0) + 1)::text, 13, '0') INTO codigoconceptofact FROM td_conceptosfacturacion;
  296.                
  297.                 IF rConcepto.tm_escalonable = 1 THEN
  298.                   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 AND activo = 1;
  299.      
  300.                   consumomes := COALESCE(consumomes, 0.0);
  301.      
  302.                   SELECT a.pagoconsumo INTO valorconcepto FROM pa_conceptoescalonable_calcular(rConcepto.tm_idconcepto, consumomes ) AS a;
  303.                  
  304.                 ELSE
  305.                     IF rConcepto.tm_ascensor = 1 THEN
  306.                         SELECT a.facturarconcepto INTO valorconcepto  FROM pa_facturacion_ascensor(idproyecto, rPropiedad.tm_idpropiedad, anho, mes, idusuario) AS a;          
  307.                     ELSE
  308.                         IF rConcepto.tm_esformula = 1 THEN
  309.                            IF tipovalorizacion = '00' THEN
  310.                               SELECT a.facturarconcepto INTO valorconcepto  FROM pa_facturacion_equitativa(rConcepto.tm_idconcepto, rPropiedad.tm_idpropiedad, idproyecto, mes, anho, cantidadPropiedades) AS a;
  311.                            ELSE
  312.                                 IF tipovalorizacion = '01' THEN
  313.                                   SELECT a.facturarconcepto INTO valorconcepto FROM pa_facturacion_calcular(rConcepto.tm_idconcepto, rPropiedad.tm_idpropiedad, idproyecto, AreaProyecto, mes, anho) AS a;
  314.                                 ELSE
  315.                                     IF tipovalorizacion = '02' THEN
  316.                                         SELECT a.facturarconcepto INTO valorconcepto FROM pa_facturacion_ratio(rConcepto.tm_idconcepto, rPropiedad.tm_idpropiedad, idproyecto, mes, anho) AS a;    
  317.                                     ELSE
  318.                                         valorconcepto := importefijo;
  319.                                     END IF;              
  320.                                 END IF;
  321.                            END IF;
  322.                         ELSE
  323.                             SELECT a.facturarconcepto INTO valorconcepto FROM pa_obtener_dato_variable(rConcepto.tm_idconcepto, rPropiedad.tm_idpropiedad, idproyecto, mes, anho) AS a;    
  324.                             if valorconcepto is null THEN
  325.                                 if tipovalorizacion = '03' THEN
  326.                                     valorconcepto := importefijo;
  327.                                 ELSE  
  328.                                     valorconcepto := 0.0;            
  329.                                 end if;
  330.                             end if;
  331.                         END IF;
  332.                     END IF;
  333.                 END IF;
  334.                
  335.                 if valorconcepto is null THEN
  336.                     valorconcepto := 0.0;
  337.                 end if;
  338.                 valorconcepto:= round(valorconcepto,2);
  339.                 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)
  340.                 VALUES (codigoconceptofact, idproyecto, codigofactura, anho, mes, rPropiedad.tm_idpropiedad, rConcepto.tm_idconcepto, valorconcepto, '01', 1, idusuario, CURRENT_TIMESTAMP, idusuario, CURRENT_TIMESTAMP);
  341.      
  342.             END LOOP;
  343.      
  344.             SELECT SUM(td_valorconcepto) INTO importefacturado FROM td_conceptosfacturacion WHERE tm_idfacturacion = codigofactura;
  345.  
  346.             UPDATE tm_facturacion SET tm_importefacturado = importefacturado  WHERE tm_idfacturacion = codigofactura;
  347.      
  348.         END LOOP;
  349.     END IF;
  350.     DROP SEQUENCE temp_seq;
  351.  
  352.     rpta := '1';
  353.     titulomsje := 'Generado correctamente';
  354.     contenidomsje := 'La operaci&oacute;n se realiz&oacute; correctamente';
  355. END;
  356.  
  357. $BODY$
  358.   LANGUAGE plpgsql VOLATILE
  359.   COST 100;
  360. ALTER FUNCTION pa_facturacion_generar(character varying, smallint, character varying, smallint, smallint, timestamp without time zone, timestamp without time zone, character varying, numeric, integer)
  361.   OWNER TO postgres;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement