Asociación y Des asociación de Deducciones

 

Resumen:

con la mayoría de las sp realizados lo siguiente es realizar las asociaciones y disociaciones de las deducciones de los empleados  la misma se planea realizar por medio de la tabla deducción por empleados. 

link del commit en github:

https://github.com/Stuart-Sandi/Planilla_Obrera_Etapa_2/commit/22b2f10b40c28efeb5ec151eb73e4ea75fa0d63f


Temas abarcados: 

Para realizar estas sp primero se modifico algunas tablas para la información necesaria de creación de las asociaciones y la inhabilitación de las asociaciones(desasocioaciones )



Modificación de las tablas para la correcta implementación de las asociaciones 

modificaciones tablas para obtener información para realizar las asociaciones y desasocioaciones adecuadas

creación del sp para la asociación con tablas temporales para la información necesaria para los select y las inserciones dentro de la tabla de deducciones 
La des asociación de la deducciones es bastante parecido a la asociación ya que requiere la misma información para llegar al empleado y la deducción requerida


     El siguiente código es el de desasociar una deducción a un empleado
BEGIN TRY
SET NOCOUNT ON;

--OBTIENE TODOS LOS TIPOS DE JORNADA DEL XML DE UNA FECHA Y LOS INSERTA EN UNA TABLA TMP
DECLARE @FechaOperacion XML;
SELECT @FechaOperacion = FO
FROM OPENROWSET (BULK 'S:\TEC\Cursos\Bases_de_Datos_I\Proyectos Programados\Proyecto_2_BD\Planilla_Obrera_Etapa_2\Datos\Operaciones.xml', SINGLE_BLOB) AS Operacion (FO)

DECLARE @hdoc INT;
EXEC sp_xml_preparedocument @hdoc OUT, @FechaOperacion;

--//--CREA TABLA TEMPORAL PARA ALMACENAR LOS TIPOS DE JORNADA DEL XML Y PODER RECORRERLAS
DECLARE @TBLDeduccionesTMP TABLE(
Id INT IDENTITY(1,1),
IdDeduccion INT,
ValorIdentificacion INT
);
INSERT @TBLDeduccionesTMP (IdDeduccion, ValorIdentificacion)
SELECT IdDeduccion, ValorDocumentoIdentidad FROM OPENXML(@hdoc, '/Datos/Operacion/DesasociaEmpleadoConDeduccion', 1)
WITH(
IdDeduccion INT,
ValorDocumentoIdentidad INT,
Fecha varchar(30) '../@Fecha'
)
WHERE @InFechaOperacionParam = CONVERT(DATE,Fecha,102)
EXEC sp_xml_removedocument @hdoc;

BEGIN TRANSACTION tDesasociarDeduccionesAEmpleado
--ACTUALIZA LOS TIPOS DE JORNADAS DEPENDIENDO DE LA PERSONA EN SEMANAPLANILLAXEMPLEADO
DECLARE @ContI INT = (SELECT MIN(DT.Id) FROM @TBLDeduccionesTMP DT);
DECLARE @ContF INT = (SELECT MAX(DT.Id) FROM @TBLDeduccionesTMP DT);

WHILE (@ContI <= @ContF)

BEGIN

--OBTIENE LA FECHA EN LA QUE EMPIEZA A APLICAR LA DEDUCCION
DECLARE @FechaFin DATE = @InFechaOperacionParam;
WHILE (1=1)
BEGIN
IF (FORMAT(@FechaFin,'dddd') <> 'Thursday')
SET @FechaFin = DATEADD(DAY, 1, @FechaFin)
ELSE
BREAK;

END

DECLARE @IdEmpleado INT;
DECLARE @IdDeduccion INT;
 
--SELECCION EL ID DE TIPO DEDUCCION, ID DEL EMPLEADO, MONTO DE LA TABLA TMP Y LA FECHA INICIO
SELECT @IdDeduccion = TD.Id, @IdEmpleado = E.Id
--DESDE LA TABLA TipoDeduccion ALIAS TD
FROM dbo.TBLTipoDeduccion TD
--CONECTE EL IdTipoDeduccion de @@TBLDeduccionesTMP alias  TDT con el id de TD
INNER JOIN @TBLDeduccionesTMP TDT ON TDT.IdDeduccion=TD.id
--CONECTE EL ValorIdentificacion DE dbo.TBLEmpleado ALIAS E con ValorIdentificacion DE TDT
INNER JOIN dbo.TBLEmpleado E ON E.ValorIdentificacion = TDT.ValorIdentificacion
WHERE TDT.Id = @ContI

--ACTUALIZA LA PLANILLA SEMANAL X EMPLEADO ASIGNANDOLES EL TIPO DE JORNADA
UPDATE dbo.TBLDeduccionXEmpleado SET FechaFin = @FechaFin
WHERE  IdEmpleado = @IdEmpleado AND IdTipoDeduccion = @IdDeduccion AND FechaFin IS NULL


--AUMENTA LA POSOCION EN LA TABLA TEMPORAL
SET @ContI = @ContI + 1;

END

COMMIT TRANSACTION tDesasociarDeduccionesAEmpleado

RETURN 1 
Donde se le modifica un elemento a una entrada en especifica que es la finalizacion de la deduccion a un empleado, para mas informacion del funcionamiento verificar la entrada de el github

Información del blog:

    Tiempo de la Reunión: 2h : 10min

Comentarios