Calculo del Valor de la Conexion

 /* Carlos Olarte */
 /* Octubre 2012 */
 /* Las conexiones con valor NULl se les asigna valor de acuerdo al plan */
 CREATE OR REPLACE FUNCTION VALOR_CONEXION() RETURNS VOID AS $$
 DECLARE 
  CNX_CUR CURSOR FOR SELECT * FROM CONEXIONES WHERE VALOR IS NULL FOR UPDATE;
  CNX_VAR CONEXIONES%ROWTYPE;
  HORA INT; 
  VMIN INT; -- VALOR DEL MINUTO
  PDES INT; -- PORCENTAJE DE DESCUENTO 
  VAR_VALOR REAL; 
  NUM_CNX INT; -- NUMERO DE CONEXIONES MODIFICADAS
  NUM_ERRORES INT; -- NUMERO DE ERRORES ENCONTRADOS 
 BEGIN
  OPEN CNX_CUR;
  NUM_CNX := 0;
  NUM_ERRORES := 0;
  LOOP
      FETCH CNX_CUR INTO CNX_VAR;
      IF CNX_VAR IS NULL THEN EXIT;
      END IF;
/* CALCULANDO EL VALOR DEL MINUTO Y EL DESCUENTO */
      SELECT P.VMINUTO, P.PDESCUENTO INTO VMIN, PDES 
         FROM PLANES P INNER JOIN USUARIOS U ON (P.CODIGO = U.PLAN_COD)
         WHERE U.LOGIN = CNX_VAR.USR;
     IF NOT FOUND THEN
      RAISE NOTICE 'LA CNX ID=% NO SE PUDO PROCESAR', CNX_VAR.ID;
      NUM_ERRORES := NUM_ERRORES +1;
     ELSE
      HORA := EXTRACT('HOUR' FROM CNX_VAR.FECHA);
      VAR_VALOR := (CNX_VAR.DURACION * VMIN)::REAL;
      
      IF HORA<=5 OR HORA>=23 THEN
        VAR_VALOR := VAR_VALOR - VAR_VALOR*PDES::REAL/100.0;
      END IF;
  
      UPDATE CONEXIONES SET VALOR=VAR_VALOR  WHERE CURRENT OF  CNX_CUR;
      NUM_CNX := NUM_CNX + 1;
     END IF;
   END LOOP;
   CLOSE CNX_CUR;
   RAISE NOTICE 'NUMERO DE CONEXIONES: %. NUMERO DE ERRORES ENCONTRADOS: %',NUM_CNX, NUM_ERRORES;
 END;
 $$
 LANGUAGE PLPGSQL;
 

Liquidaciones

 CREATE OR REPLACE FUNCTION LIQUIDAR(MES VARCHAR, ANO INT) RETURNS VOID AS $$
 DECLARE
   PERIODO VARCHAR;
 BEGIN
  PERIODO = MES || '-' || ANO::VARCHAR;
   INSERT INTO LIQUIDACIONES (USR,PERIODO,TOTALMIN,VALORTOTAL)
    SELECT USR,TO_DATE('01-'|| PERIODO, 'dd-mon-YYYY'), SUM(DURACION), SUM(VALOR)
       FROM CONEXIONES
       WHERE VALOR IS NOT NULL 
       AND TO_CHAR(FECHA,'MON-YYYY') = PERIODO
       GROUP BY USR;
 END;
 $$
 LANGUAGE PLPGSQL;
 
materias/solucion_taller_2.txt · Última modificación: 2012/10/22 10:49 por caolarte
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki