Advertisement
Guest User

Untitled

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