Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- CREATE DEFINER=`sueldos`@`%` PROCEDURE `liquidar_periodo`(IN id_usuario INT, IN id_sobre INT)
- BEGIN
- #CALL output_data(CONCAT('COMIENZA PROCESO DE LIQUIDACION - ',UNIX_TIMESTAMP()));
- SET @id_usuario = id_usuario,
- @id_sobre = id_sobre;
- DELETE e FROM Errores_liquidacion e WHERE e.id_usuario = id_usuario;
- DELETE m FROM Mensajes_liquidacion m WHERE m.id_usuario = id_usuario;
- CALL datos_sesion(id_usuario,@id_empresa,@mes,@anio,@quincena);
- SET @id_periodo_liquidado = (SELECT p.id_periodo_liquidado
- FROM Periodos_liquidados p
- WHERE p.id_empresa = @id_empresa
- AND p.quincena = @quincena
- AND p.anio = @anio
- AND p.mes = @mes
- AND p.id_sobre = id_sobre);
- IF @id_periodo_liquidado IS NULL THEN
- INSERT INTO Periodos_liquidados(id_empresa,quincena,anio,mes,id_sobre)
- VALUES(@id_empresa,@quincena,@anio,@mes,id_sobre);
- SET @id_periodo_liquidado = LAST_INSERT_ID();
- END IF;
- DELETE d
- FROM Detalles_liquidacion d INNER JOIN
- Liquidaciones l ON l.id_liquidacion = d.id_liquidacion INNER JOIN
- Empleados_liquidar e ON l.id_empleado = e.id_empleado
- WHERE l.id_periodo_liquidado = @id_periodo_liquidado
- AND e.id_usuario = id_usuario;
- INSERT INTO Liquidaciones(id_periodo_liquidado,id_empleado)
- SELECT @id_periodo_liquidado,
- e.id_empleado
- FROM Empleados_liquidar e
- WHERE e.id_usuario = @id_usuario
- AND NOT EXISTS (
- SELECT l.id_empleado
- FROM Liquidaciones l
- WHERE l.id_empleado = e.id_empleado
- AND l.id_periodo_liquidado = @id_periodo_liquidado
- );
- CREATE TEMPORARY TABLE IF NOT EXISTS Conceptos_liquidar(
- id_concepto INT,
- sp_liquidacion VARCHAR(255),
- id_empleado INT,
- id_convenio INT,
- id_liquidacion INT,
- cantidad FLOAT,
- importe DECIMAL(10,2),
- comentario VARCHAR(100),
- accion VARCHAR(255),
- sueldo DECIMAL(10,2),
- horas_jornada INT,
- fecha_ingreso DATE,
- fecha_egreso DATE
- ) ENGINE=MEMORY;
- DELETE FROM Conceptos_liquidar;
- 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)
- SELECT x.id_concepto,
- x.sp_liquidacion,
- x.id_empleado,
- x.id_convenio,
- x.id_liquidacion,
- n.cantidad,
- n.importe,
- n.comentario,
- if(ce.accion IS NULL OR TRIM(ce.accion) = '',
- if(cc.accion IS NULL OR TRIM(cc.accion) = '',
- x.accion,
- cc.accion
- ),
- ce.accion
- ),
- x.sueldo_basico,
- x.horas,
- x.fecha_ingreso,
- x.fecha_baja
- FROM (
- SELECT c.cod,
- c.id_concepto,
- c.sp_liquidacion,
- l.id_empleado,
- l.id_liquidacion,
- em.id_convenio,
- c.accion,
- em.sueldo_basico,
- em.fecha_ingreso,
- em.fecha_baja,
- j.horas
- FROM Conceptos c INNER JOIN
- Rel_conceptos_sobres rcs ON rcs.id_concepto = c.id_concepto,
- Liquidaciones l INNER JOIN
- Empleados_liquidar e ON e.id_empleado = l.id_empleado INNER JOIN
- Empleados em ON em.id_empleado = e.id_empleado INNER JOIN
- Jornadas_laborales j ON j.id_jornada_laboral = em.id_jornada_laboral
- WHERE rcs.id_sobre = @id_sobre
- AND l.id_periodo_liquidado = @id_periodo_liquidado
- AND e.id_usuario = @id_usuario
- AND NOT EXISTS (SELECT *
- FROM Rel_empleados_conceptos_excluidos recx
- WHERE recx.id_empleado = l.id_empleado
- AND recx.id_concepto = c.id_concepto)
- AND IF(c.particular,
- EXISTS (SELECT *
- FROM Rel_empleados_conceptos rec
- WHERE rec.id_empleado = l.id_empleado
- AND rec.id_concepto = c.id_concepto),
- 1)
- ) x
- LEFT JOIN
- Novedades n ON x.id_concepto = n.id_concepto
- AND x.id_empleado = n.id_empleado
- AND n.anio = @anio
- AND n.mes = @mes
- AND n.quincena = @quincena
- LEFT JOIN
- Conceptos_convenios cc ON cc.id_convenio = x.id_convenio
- AND cc.id_concepto = x.id_concepto
- LEFT JOIN
- Conceptos_empleados_valores ce ON ce.id_empleado = x.id_empleado
- AND ce.id_concepto = x.id_concepto
- ORDER BY x.cod, x.id_empleado;
- #CALL output_data(CONCAT('ENTRA A BUCLE DE EMPLEADOS - ',UNIX_TIMESTAMP()));
- BEGIN
- DECLARE id_empleado INT;
- DECLARE id_liquidacion INT;
- DECLARE salir INT DEFAULT FALSE;
- DECLARE id_concepto INT;
- DECLARE cod_concepto INT;
- DECLARE cantidad DECIMAL(10,2);
- DECLARE importe DECIMAL(10,2);
- DECLARE comentario VARCHAR(100);
- DECLARE sp_liquidacion VARCHAR(255);
- DECLARE accion VARCHAR(255);
- DECLARE id_convenio INT;
- DECLARE suedo DECIMAL(10,2);
- DECLARE horas_jornada INT;
- DECLARE fecha_ingreso DATE;
- DECLARE fecha_egreso DATE;
- DECLARE empleados CURSOR FOR
- 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
- FROM Conceptos_liquidar c;
- DECLARE CONTINUE HANDLER FOR NOT FOUND SET SALIR = TRUE;
- DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
- BEGIN
- CALL logear_error_liquidacion();
- FETCH empleados INTO id_empleado,id_liquidacion,id_concepto,sp_liquidacion,cantidad,importe,comentario,accion,id_convenio,suedo,horas_jornada,fecha_ingreso,fecha_egreso;
- END;
- OPEN empleados;
- SET @id_empleado = -1;
- loop_empleados: LOOP
- FETCH empleados INTO id_empleado,id_liquidacion,id_concepto,sp_liquidacion,cantidad,importe,comentario,accion,id_convenio,suedo,horas_jornada,fecha_ingreso,fecha_egreso;
- IF salir THEN
- LEAVE loop_empleados;
- END IF;
- IF @id_empleado <> id_empleado THEN
- SET @id_liquidacion = id_liquidacion,
- @id_empleado = id_empleado,
- @id_convenio = id_convenio,
- @sueldo = sueldo,
- @horasJornada = horas_jornada,
- @fechaIngreso = fecha_ingreso,
- @fechaEgreso = fecha_egreso;
- END IF;
- SET @id_concepto = id_concepto,
- @sp_liquidar = sp_liquidacion,
- @cantidad = COALESCE(cantidad,0),
- @importe = COALESCE(importe,0),
- @comentario = COALESCE(comentario,''),
- @accion = accion;
- IF sp_liquidacion IS NOT NULL THEN
- PREPARE sp FROM @sp_liquidar;
- EXECUTE sp;
- DEALLOCATE PREPARE sp;
- ELSE
- CALL liquidar_1_concepto(@id_empleado,@id_liquidacion,id_concepto,@id_convenio,cantidad,importe,comentario);
- END IF;
- END LOOP;
- CLOSE empleados;
- END;
- INSERT INTO Mensajes_liquidacion(mensaje,id_usuario)
- SELECT CONCAT('JUBILACION: ',e.legajo, ' - ', e.nombre_y_apellido), id_usuario
- FROM Empleados e INNER JOIN
- Empleados_liquidar el ON e.id_empleado = el.id_empleado
- AND el.id_usuario = id_usuario
- WHERE DATEDIFF(LAST_DAY(CONCAT_WS('-',@anio,@mes,1)), e.fecha_nacimiento ) / 365 > IF(e.sexo = 'M',64,59)
- AND e.id_condicion <> 2;
- IF EXISTS( SELECT * FROM Errores_liquidacion e WHERE e.id_usuario = id_usuario) THEN
- SELECT 1 as `error`;
- ELSE
- SELECT 0 as `error`;
- END IF;
- #CALL output_data(CONCAT('FIN LIQUIDACION - ',UNIX_TIMESTAMP()));
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement