
-- =============================================
-- Author:		<YONATAN GAETE ROJAS>
-- Create date: <19/07/2022>
-- Description:	<SELECCIONAR LOS TRABAJADORES PARA ASIGNAR LOS TURNOS ROTATIVOS>
-- Alter date:  <16-03-2023>
-- Description: <VALIDACION FECHA INGRESO Y TERMINO>
-- Alter date:  <06-01-2025>
-- Description: <SE AGREGAN FECHA INICIO Y FECHA TERMINO>
-- =============================================
ALTER PROCEDURE [dbo].[sp_remListarTrabajadoresTR] 
(
	@periodo INT,
	@mes INT,
	@fichaIni INT,
	@fichaFin INT,
	@uniNeg INT,
	@departamento INT,
	@semana INT,
	@cargos INT,
	@estado INT,
	@fechaInicio DATE,
	@fechaTermino DATE
)
AS
BEGIN
	SET DATEFIRST 1;
	
	IF @estado = 1
		SELECT 
			T.ficha,
			T.rut,
			T.apePaterno + ' ' + T.apeMaterno + ' ' + T.nombres AS nombre,
			CASE T.tipoTurno
			WHEN 1 THEN (SELECT turno FROM remAsignacionTurnoRotativo WHERE (ficha = T.ficha ) AND numeroSemana = @semana AND mes = @mes AND periodo = @periodo) 
			END AS turno,
			CASE T.tipoTurno
			WHEN 1 THEN (SELECT idAsignacion FROM remAsignacionTurnoRotativo WHERE (ficha = T.ficha ) AND numeroSemana = DATEPART(ISO_WEEK, @fechaInicio) AND mes = @mes AND periodo = @periodo)
			END AS idAsignacion
		FROM remTrabajadores T
		WHERE activo = 1
			AND (T.tipoTurno = 1)
			AND (T.periodo = @periodo)
			AND (T.mes = @mes)
			AND (T.ficha BETWEEN @fichaIni AND @fichaFin)
			AND (T.unidadNegocios = @uniNeg OR @uniNeg = 0)
			AND (T.departamento = @departamento OR @departamento = 0)
			AND (T.cargo = @cargos OR @cargos = 0)
			AND T.ficha IN (SELECT ficha FROM remAsignacionTurnoRotativo WHERE periodo = T.periodo AND mes = T.mes AND numeroSemana = DATEPART(ISO_WEEK, @fechaInicio) AND mes = @mes AND periodo = @periodo)
			AND T.fechaIngreso <= @fechaInicio
			AND (T.fechaTermino >= @fechaTermino OR T.fechaTermino = '1900-01-01')
		ORDER BY T.apePaterno
	ELSE
		IF @estado = 2
			SELECT 
			T.ficha,
			T.rut,
			T.apePaterno + ' ' + T.apeMaterno + ' ' + T.nombres AS nombre,
			CASE T.tipoTurno
			WHEN 1 THEN (SELECT turno FROM remAsignacionTurnoRotativo WHERE (ficha = T.ficha ) AND numeroSemana = DATEPART(ISO_WEEK, @fechaInicio) AND mes = @mes AND periodo = @periodo)
			END AS turno,
			CASE T.tipoTurno
			WHEN 1 THEN (SELECT idAsignacion FROM remAsignacionTurnoRotativo WHERE (ficha = T.ficha ) AND numeroSemana = DATEPART(ISO_WEEK, @fechaInicio) AND mes = @mes AND periodo = @periodo)
			END AS idAsignacion
		FROM remTrabajadores T
		WHERE activo = 1
			AND (T.tipoTurno = 1)
			AND (T.periodo = @periodo)
			AND (T.mes = @mes)
			AND (T.ficha BETWEEN @fichaIni AND @fichaFin)
			AND (T.unidadNegocios = @uniNeg OR @uniNeg = 0)
			AND (T.departamento = @departamento OR @departamento = 0)
			AND (T.cargo = @cargos OR @cargos = 0)
			AND T.ficha NOT IN (SELECT ficha FROM remAsignacionTurnoRotativo WHERE periodo = T.periodo AND mes = T.mes AND numeroSemana = DATEPART(ISO_WEEK, @fechaInicio) AND mes = @mes AND periodo = @periodo)
			AND T.fechaIngreso <= @fechaInicio
			AND (T.fechaTermino >= @fechaTermino OR T.fechaTermino = '1900-01-01')
		ORDER BY T.apePaterno
	ELSE
		SELECT 
			T.ficha,
			T.rut,
			T.apePaterno + ' ' + T.apeMaterno + ' ' + T.nombres AS nombre,
			CASE T.tipoTurno
			WHEN 1 THEN (SELECT turno FROM remAsignacionTurnoRotativo WHERE (ficha = T.ficha ) AND numeroSemana = DATEPART(ISO_WEEK, @fechaInicio) AND mes = @mes AND periodo = @periodo)
			END AS turno,
			CASE T.tipoTurno
			WHEN 1 THEN (SELECT idAsignacion FROM remAsignacionTurnoRotativo WHERE (ficha = T.ficha ) AND numeroSemana = DATEPART(ISO_WEEK, @fechaInicio) AND mes = @mes AND periodo = @periodo)
			END AS idAsignacion
		FROM remTrabajadores T
		WHERE activo = 1
			AND (T.tipoTurno = 1)
			AND (T.periodo = @periodo)
			AND (T.mes = @mes)
			AND (T.ficha BETWEEN @fichaIni AND @fichaFin)
			AND (T.unidadNegocios = @uniNeg OR @uniNeg = 0)
			AND (T.departamento = @departamento OR @departamento = 0)
			AND (T.cargo = @cargos OR @cargos = 0)
			--AND T.ficha IN (SELECT ficha FROM remAsignacionTurnoRotativo WHERE periodo = T.periodo AND mes = T.mes AND numeroSemana = @semana)
			AND T.fechaIngreso <= @fechaInicio
			AND (T.fechaTermino >= @fechaTermino OR T.fechaTermino = '1900-01-01')
		ORDER BY T.apePaterno
END