25 de noviembre, se trabaja por 5 horas en la simulación, se logra añadir los movimientos respectivos pero no aplicarlos, a parte se pasa el proceso de masivo a iterativo.

insert into @asistOP(idOP,idEmpOP,idtipojornada,horaEntrada, horaSalida)
select * from dbo.Asistencia
where Asistencia.Fecha = @FechaOp and Asistencia.Incapacidad = 0

select @lo2 = min(aop.sec), @hi2 = max(aop.sec)
from @asistOP aop

while @lo2 < @hi2
begin
select @sot = tj.horaSalida, @sit = tj.horaEntrada from [Tipo Jornada] tj inner join @asistOP as att on att.IdTipoJornada = tj.Id
where att.sec = @lo2

select @fot = asi.horaSalida, @fit = asi.horaEntrada from  @asistOP asi
where asi.sec = @lo2

select @idP = E.idPuesto from Empleado E inner join @asistOP as A on e.Id = A.idEmpOP
where A.sec = @lo2

select @idEmp = A.idEmpOp from @asistOP A
where A.sec = @lo2

select @salario = PJ.SalarioxHoras from [Puesto x Tipo Jornada] PJ inner join @asistOP as assi on pj.IdTipoJornada = assi.IdTipoJornada where @idP = Pj.IdPuesto and  assi.sec = @lo2

if datepart(hour,@fot) = datepart(hour, @sot) and datepart(hour, @fit) = datepart(hour, @sit)
begin transaction
insert into [Movimiento Horas Trabajadas](IdAsistencia, IdTipoMovimiento, tipoJornada, cantidadHoras)
select a.IdOP, 1, a.idTipojornada, 8 from @asistOP a inner join Empleado as e on a.idEmpOP = e.Id
where a.sec = @lo2

insert into [Movimiento Planilla](IdPlanillaSemanal,IdTipoMovimiento, Fecha, monto)
select PS.id,1,@FechaOp,@salario from [Planilla Semanal] PS inner join @asistOP as ASs on Ps.IdEmpleado = ASs.idEmpOP
where ASs.sec = @lo2

update [Planilla Semanal]
set SalarioBruto = SalarioBruto + @salario
where IdEmpleado = @idEmp
commit

set @lo2 = @lo2 + 1
end

se emplea una tabla auxiliar y un ciclo, este porceso es igual para las incapacidades.

Comentarios