Advertisement
sahchas

LIQUIDACION_liquidar_periodo

Mar 28th, 2017
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MySQL 7.80 KB | None | 0 0
  1. CREATE DEFINER=`sueldos`@`%` PROCEDURE `liquidar_periodo`(IN id_usuario INT, IN id_sobre INT)
  2. BEGIN
  3.  
  4. #CALL output_data(CONCAT('COMIENZA PROCESO DE LIQUIDACION - ',UNIX_TIMESTAMP()));
  5.  
  6. SET @id_usuario = id_usuario,
  7.     @id_sobre = id_sobre;
  8.  
  9. DELETE e FROM Errores_liquidacion e WHERE e.id_usuario = id_usuario;
  10.  
  11. DELETE m FROM Mensajes_liquidacion m WHERE m.id_usuario = id_usuario;
  12.  
  13. CALL datos_sesion(id_usuario,@id_empresa,@mes,@anio,@quincena);
  14.  
  15. SET @id_periodo_liquidado = (SELECT p.id_periodo_liquidado
  16.                  FROM Periodos_liquidados p
  17.                 WHERE p.id_empresa = @id_empresa
  18.                 AND p.quincena = @quincena
  19.                 AND p.anio = @anio
  20.                 AND p.mes = @mes
  21.                 AND p.id_sobre = id_sobre);
  22.  
  23. IF @id_periodo_liquidado IS NULL THEN
  24.  
  25.   INSERT INTO Periodos_liquidados(id_empresa,quincena,anio,mes,id_sobre)
  26.     VALUES(@id_empresa,@quincena,@anio,@mes,id_sobre);
  27.  
  28.   SET @id_periodo_liquidado = LAST_INSERT_ID();
  29.    
  30. END IF;
  31.  
  32. DELETE d
  33.   FROM Detalles_liquidacion d INNER JOIN
  34.        Liquidaciones        l ON l.id_liquidacion = d.id_liquidacion INNER JOIN
  35.        Empleados_liquidar   e ON l.id_empleado = e.id_empleado
  36.  WHERE l.id_periodo_liquidado = @id_periodo_liquidado
  37.    AND e.id_usuario = id_usuario;
  38.  
  39. INSERT INTO Liquidaciones(id_periodo_liquidado,id_empleado)
  40. SELECT @id_periodo_liquidado,
  41.        e.id_empleado
  42.   FROM Empleados_liquidar e
  43.  WHERE e.id_usuario = @id_usuario
  44.    AND NOT EXISTS (
  45.   SELECT l.id_empleado
  46.     FROM Liquidaciones l
  47.    WHERE l.id_empleado = e.id_empleado
  48.        AND l.id_periodo_liquidado = @id_periodo_liquidado
  49. );
  50.  
  51. CREATE TEMPORARY TABLE IF NOT EXISTS Conceptos_liquidar(
  52.   id_concepto    INT,
  53.     sp_liquidacion VARCHAR(255),
  54.     id_empleado    INT,
  55.     id_convenio    INT,
  56.     id_liquidacion INT,
  57.     cantidad       FLOAT,
  58.     importe        DECIMAL(10,2),
  59.     comentario     VARCHAR(100),
  60.     accion         VARCHAR(255),
  61.     sueldo         DECIMAL(10,2),
  62.     horas_jornada  INT,
  63.     fecha_ingreso  DATE,
  64.     fecha_egreso   DATE
  65. ) ENGINE=MEMORY;
  66.  
  67. DELETE FROM Conceptos_liquidar;
  68.  
  69. INSERT INTO Conceptos_liquidar(id_concepto,sp_liquidacion,id_empleado,id_convenio,id_liquidacion,cantidad,importe,comentario,accion,sueldo,horas_jornada,fecha_ingreso,fecha_egreso)
  70. SELECT x.id_concepto,
  71.        x.sp_liquidacion,
  72.        x.id_empleado,
  73.        x.id_convenio,
  74.        x.id_liquidacion,
  75.        n.cantidad,
  76.        n.importe,
  77.        n.comentario,
  78.        if(ce.accion IS NULL OR TRIM(ce.accion) = '',
  79.           if(cc.accion IS NULL OR TRIM(cc.accion) = '',
  80.              x.accion,
  81.              cc.accion
  82.           ),
  83.           ce.accion
  84.        ),
  85.        x.sueldo_basico,
  86.        x.horas,
  87.        x.fecha_ingreso,
  88.        x.fecha_baja
  89.   FROM (
  90.         SELECT c.cod,
  91.          c.id_concepto,
  92.          c.sp_liquidacion,
  93.                l.id_empleado,
  94.                l.id_liquidacion,
  95.                em.id_convenio,
  96.                c.accion,
  97.                em.sueldo_basico,
  98.                em.fecha_ingreso,
  99.                em.fecha_baja,
  100.                j.horas
  101.           FROM Conceptos          c                                                  INNER JOIN
  102.              Rel_conceptos_sobres rcs ON rcs.id_concepto = c.id_concepto,
  103.                Liquidaciones      l                                                  INNER JOIN
  104.                Empleados_liquidar e   ON e.id_empleado = l.id_empleado               INNER JOIN
  105.                Empleados          em  ON em.id_empleado = e.id_empleado              INNER JOIN
  106.                Jornadas_laborales j   ON j.id_jornada_laboral = em.id_jornada_laboral
  107.      WHERE rcs.id_sobre = @id_sobre
  108.            AND l.id_periodo_liquidado = @id_periodo_liquidado
  109.            AND e.id_usuario = @id_usuario
  110.            AND NOT EXISTS (SELECT *
  111.                              FROM Rel_empleados_conceptos_excluidos recx
  112.                             WHERE recx.id_empleado = l.id_empleado
  113.                               AND recx.id_concepto = c.id_concepto)
  114.            AND IF(c.particular,
  115.                   EXISTS (SELECT *
  116.                 FROM Rel_empleados_conceptos rec
  117.                WHERE rec.id_empleado = l.id_empleado
  118.                  AND rec.id_concepto = c.id_concepto),
  119.               1)
  120.      ) x
  121.        LEFT JOIN
  122.        Novedades n  ON x.id_concepto = n.id_concepto
  123.                    AND x.id_empleado = n.id_empleado
  124.                    AND n.anio = @anio
  125.            AND n.mes = @mes
  126.            AND n.quincena = @quincena
  127.        LEFT JOIN
  128.      Conceptos_convenios  cc  ON cc.id_convenio = x.id_convenio
  129.                  AND cc.id_concepto = x.id_concepto
  130.        LEFT JOIN
  131.      Conceptos_empleados_valores ce  ON ce.id_empleado = x.id_empleado
  132.                     AND ce.id_concepto = x.id_concepto
  133.  ORDER BY x.cod, x.id_empleado;
  134.  
  135. #CALL output_data(CONCAT('ENTRA A BUCLE DE EMPLEADOS - ',UNIX_TIMESTAMP()));
  136.  
  137. BEGIN
  138.  
  139.   DECLARE id_empleado    INT;
  140.   DECLARE id_liquidacion INT;
  141.   DECLARE salir          INT DEFAULT FALSE;
  142.   DECLARE id_concepto    INT;
  143.   DECLARE cod_concepto   INT;
  144.   DECLARE cantidad       DECIMAL(10,2);
  145.   DECLARE importe        DECIMAL(10,2);
  146.   DECLARE comentario     VARCHAR(100);
  147.   DECLARE sp_liquidacion VARCHAR(255);
  148.   DECLARE accion         VARCHAR(255);
  149.   DECLARE id_convenio    INT;
  150.   DECLARE suedo          DECIMAL(10,2);
  151.   DECLARE horas_jornada  INT;
  152.   DECLARE fecha_ingreso  DATE;
  153.   DECLARE fecha_egreso   DATE;
  154.   DECLARE empleados CURSOR FOR
  155.   SELECT c.id_empleado, c.id_liquidacion, c.id_concepto,c.sp_liquidacion,c.cantidad,c.importe,c.comentario,c.accion,c.id_convenio,c.sueldo,c.horas_jornada,c.fecha_ingreso,c.fecha_egreso
  156.     FROM Conceptos_liquidar c;
  157.  
  158.   DECLARE CONTINUE HANDLER FOR NOT FOUND SET SALIR = TRUE;
  159.  
  160.   DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
  161.   BEGIN
  162.     CALL logear_error_liquidacion();
  163.     FETCH empleados INTO id_empleado,id_liquidacion,id_concepto,sp_liquidacion,cantidad,importe,comentario,accion,id_convenio,suedo,horas_jornada,fecha_ingreso,fecha_egreso;
  164.   END;
  165.  
  166.   OPEN empleados;
  167.  
  168.   SET @id_empleado = -1;
  169.  
  170.   loop_empleados: LOOP
  171.  
  172.     FETCH empleados INTO id_empleado,id_liquidacion,id_concepto,sp_liquidacion,cantidad,importe,comentario,accion,id_convenio,suedo,horas_jornada,fecha_ingreso,fecha_egreso;
  173.    
  174.     IF salir THEN
  175.       LEAVE loop_empleados;
  176.     END IF;
  177.  
  178.     IF @id_empleado <> id_empleado THEN
  179.  
  180.         SET @id_liquidacion = id_liquidacion,
  181.             @id_empleado = id_empleado,
  182.             @id_convenio = id_convenio,
  183.             @sueldo = sueldo,
  184.             @horasJornada = horas_jornada,
  185.             @fechaIngreso = fecha_ingreso,
  186.             @fechaEgreso = fecha_egreso;
  187.  
  188.     END IF;
  189.  
  190.     SET @id_concepto = id_concepto,
  191.         @sp_liquidar = sp_liquidacion,
  192.         @cantidad = COALESCE(cantidad,0),
  193.         @importe = COALESCE(importe,0),
  194.         @comentario = COALESCE(comentario,''),
  195.         @accion = accion;
  196.    
  197.     IF sp_liquidacion IS NOT NULL THEN
  198.    
  199.       PREPARE sp FROM @sp_liquidar;
  200.       EXECUTE sp;
  201.       DEALLOCATE PREPARE sp;
  202.      
  203.     ELSE
  204.       CALL liquidar_1_concepto(@id_empleado,@id_liquidacion,id_concepto,@id_convenio,cantidad,importe,comentario);
  205.     END IF;
  206.    
  207.    
  208.  
  209.   END LOOP;
  210.  
  211.   CLOSE empleados;
  212. END;
  213.  
  214. INSERT INTO Mensajes_liquidacion(mensaje,id_usuario)
  215. SELECT CONCAT('JUBILACION: ',e.legajo, ' - ', e.nombre_y_apellido), id_usuario
  216.   FROM Empleados          e  INNER JOIN
  217.        Empleados_liquidar el ON e.id_empleado = el.id_empleado
  218.                AND el.id_usuario = id_usuario
  219.  WHERE DATEDIFF(LAST_DAY(CONCAT_WS('-',@anio,@mes,1)), e.fecha_nacimiento ) / 365 > IF(e.sexo = 'M',64,59)
  220.    AND e.id_condicion <> 2;
  221.  
  222. IF EXISTS( SELECT * FROM Errores_liquidacion e WHERE e.id_usuario = id_usuario) THEN
  223.   SELECT 1 as `error`;
  224. ELSE
  225.   SELECT 0 as `error`;
  226. END IF;
  227.  
  228. #CALL output_data(CONCAT('FIN LIQUIDACION - ',UNIX_TIMESTAMP()));
  229.  
  230. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement