Advertisement
Guest User

Untitled

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