Guest User

Untitled

a guest
Jul 18th, 2018
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.52 KB | None | 0 0
  1.  
  2. -- ======================================================================================================
  3. -- Author: <Jeremias Badilla> --
  4. -- Create date: <01-09-2009> --
  5. -- Description: <funcio que retorna las hrs extras y las hrs de turno entre fechas diferentes> --
  6. -- ======================================================================================================
  7. CREATE FUNCTION [dbo].[HrasExtras](@id_turno as int, @id_personal as varchar(15) , @id_actividad as int
  8. ,@id_proceso as int,@planta as varchar(5)) RETURNS @tbl table (hrs1 float ,hrs2 float)
  9. AS
  10. BEGIN
  11.  
  12. --declare @id_proceso as int
  13. --declare @planta as varchar(5)
  14. --declare @id_turno as int
  15. --declare @id_personal as varchar (15)
  16. --declare @id_actividad as int
  17.  
  18. --set @id_proceso = 11787
  19. --set @planta = 'LIN'
  20. --SET @id_turno = 6
  21. --SET @id_personal ='07.586.042-0'
  22. --SET @id_actividad = 17
  23.  
  24. declare @Diffturno as float -- Diferencia de hrs entre los turnos
  25. declare @hinicioT as datetime --hora inicio turno
  26. declare @hterminoT as datetime -- hora termino turno
  27.  
  28.  
  29. set @hinicioT = (select hora_inicio from turno where id_turno = @id_turno) -- obtenemos de la tabla turno la hora de inicio de
  30. set @hterminoT = (select hora_termino from turno where id_turno = @id_turno) -- un turno y sacamos la diferencia en turno
  31. set @diffturno = datediff(minute,@hinicioT,@hterminoT) -- 24 es la cantidad de hrs en un dia por lo que
  32. --restamos 24 menos la diferencia del turno y nos da la cantidad de
  33. if @Diffturno < 0
  34. begin
  35. set @hterminot = dateadd(day,1,@hterminot)
  36. set @diffturno = datediff(minute,@hinicioT,@hterminoT)
  37. end
  38. --hrs que se trabajan en un turno
  39.  
  40. declare @hraEntrada as datetime -- hora entrada trabajador;
  41. declare @hrasalida as datetime -- hora salida trabajador;
  42. declare @fsalida as varchar(20) -- salida es un convertidor para poder tomar la fecha del dia de inicio
  43. declare @hsalida as varchar(20) -- y tomar la hra de termino de un turno se concatena con hsalida;
  44. declare @fentrada as varchar(20) -- fecha actual + inicio turno
  45. declare @hentrada as varchar(20) -- para concatenar
  46.  
  47.  
  48. set @hraEntrada = (select top 1 Fecha_inicio from det_ActividadPersonal where id_personal = @id_personal
  49. and id_actividad = @id_actividad and id_proceso = @id_proceso and id_planta = @planta) --hra entrada trabajador segun su id , proceso y actividad
  50.  
  51. --print @hraentrada
  52. set @fsalida = convert(varchar ,@hraentrada) --convierte a varchar la hraentrada
  53. set @hsalida = convert(varchar ,@hterminoT) -- convierte a varchar la htermino que es del turno
  54.  
  55. set @fsalida = substring(@fsalida,1,11) -- toma el substring de la fecha 1 = inicio 11 la cantidad por lo que toma solo la fecha y no la hra
  56. set @hsalida = substring(@hsalida,14,6)-- toma la hra de termino de turno
  57.  
  58. set @fsalida = (@fsalida +' '+ @hsalida) -- concatenamos la fecha del dia con la hra fin de turno
  59. set @fsalida = convert(datetime , @fsalida , 103)-- volvcemos a tomar
  60.  
  61. set @hrasalida = (select top 1 fecha_termino from det_actividadpersonal where id_personal = @id_personal and id_actividad= @id_actividad
  62. and id_proceso = @id_proceso and id_planta = @planta order by fecha_termino desc) --obtenemos la hra de salida cuando es le mismo dia
  63. declare @diffdias int
  64. set @diffdias = 1
  65. while @hrasalida is null --si la hrasalida es nula es por que la fsalida es menor que fecha termino
  66. begin
  67. set @fsalida = dateadd(day,@diffdias,@fsalida) -- sumamos n cantidad de dias a la @fsalida para que sea la fecha correcta qe sale el trabajador
  68. set @hrasalida = (select top 1 fecha_termino from det_actividadpersonal where
  69. id_personal = @id_personal and id_planta = @planta order by fecha_termino desc) -- obtenemos la fecha correcta de salida para el caso de los turno
  70. -- que pasan por las 00:00:00 hrs y hay un cambio de dia
  71. set @diffdias = (@diffdias + 1) -- sumamos un dia para cuando la funcion hrasalida aun siguie siendo menor que la de entrada
  72. end
  73.  
  74.  
  75. declare @diffhrsT as float -- diferencias horas trabajadas
  76. declare @totalhrs as float -- total de hrs trabajadas
  77. declare @HrsExtra as float -- Hrs Extra Expresado en hrs,minutos
  78.  
  79. set @diffhrst = datediff(minute,@hraentrada,@hrasalida) -- sacamos la diff de hrs entre la entra y la salida eso nos data el total de horas trabajadas
  80. -- si las hrs son mayores a la duracion del turno entonses ubieron hrs extra
  81.  
  82. if @diffhrst <= @diffturno -- hrs menores que lo que dura el turno
  83. begin
  84. set @totalhrs = @diffhrst/60 -- entonses son hras trabajas normales
  85. end
  86. else
  87. begin
  88. set @hrsextra = (@diffhrst - @diffturno)/60 -- si se pasa se restan y se obtienen las hrs extra
  89. set @totalhrs = (@diffhrst/60) -- dividimos las hrs por 60 ya que estan calculadas en minutos
  90. set @totalhrs = (@totalhrs) - (@hrsextra) --restamos las hrs totales con las hrs extra y sacamos las hrs normales trabajadas
  91. end
  92. if @hrsextra is null -- si no tiene hrs extra entonses las hrs extra seran 0
  93. begin
  94. set @hrsextra = 0
  95. end
  96.  
  97. declare @ColacionI as datetime
  98. Declare @ColacionT as Datetime
  99.  
  100. set @ColacionI = (Select fecha_inicio from det_tiempomuerto where id_tiempomuerto = 3 and id_proceso = @id_proceso and id_actividad = @id_actividad and id_planta = @planta ) --Obtenemos La Fecha Inicio De La Colacion
  101. set @ColacionT = (Select fecha_Termino from det_tiempomuerto where id_tiempomuerto = 3 and id_proceso = @id_proceso and id_actividad = @id_actividad and id_planta = @planta ) --Obtenemos La Fecha Termino De la Colacion
  102.  
  103. if @hraentrada < @fsalida
  104. begin
  105. if @ColacionI > @hraentrada and @ColacionT < @hrasalida
  106. begin
  107. set @totalhrs = @totalhrs - 0.5
  108. end
  109. end
  110. else
  111. begin
  112. declare @paso as float
  113. declare @diffoo as varchar(20)
  114. set @diffoo = convert(varchar,@fsalida)
  115. set @diffoo = substring(@diffoo,1,11)
  116. set @diffoo = @diffoo + ' 23:59:59'
  117. set @diffoo = convert(datetime,@diffoo,103)
  118.  
  119. set @paso = datediff(minute,@hraentrada,@diffoo)
  120. set @hraentrada = dateadd(minute,@paso,@hraentrada)
  121. set @fsalida = dateadd(minute,@paso,@fsalida)
  122. set @ColacionI = dateadd(minute,@paso,@ColacionI)
  123. set @ColacionT = dateadd(minute,@paso,@ColacionT)
  124. if @ColacionI > @hraentrada and @ColacionT < @hrasalida
  125. begin
  126. set @totalhrs = @totalhrs - 0.5
  127. end
  128. end
  129.  
  130. Insert into @tbl Values (@totalhrs,@hrsextra)
  131.  
  132.  
  133. --print @hrsextra
  134. --print @totalhrs
  135. return
  136.  
  137. END
Add Comment
Please, Sign In to add comment