-- =============================================
-- Author:		<Yonatan Gaete>
-- Create date: <28/11/2024>
-- Description:	<Seleccionar Datos Grilla Bienes>
-- Alter date:  <27/01/2025>
-- Description:	<Optimizar Consulta>
-- Alter date:  <31/03/2025>
-- Description:	<Se agrega dar baja masivo solo sin dar de baja>
-- =============================================
ALTER PROCEDURE [dbo].[sp_AfiBienesGrilla_Sel]
(
	@id INT,
	@codigoBarra VARCHAR(50),
	@codigoInterno VARCHAR(50),
	@grupo INT,
	@subGrupo INT,
	@responsable INT,
	@ubicaciones INT,
	@estado INT
)
AS
BEGIN
    SET NOCOUNT ON;


	IF @estado = 999
		BEGIN
			-- Crea un CTE para mejorar la claridad y evitar consultas repetitivas
			WITH DepartamentoDesc AS (
				SELECT idDepartamento, descripcion
				FROM remDepartamentos
			)
			SELECT
				B.[id],
				B.[nombre],
				B.[descripcion],
				CASE 
				WHEN B.deBaja = 'True' THEN 'SI'
				ELSE 'NO'
				END AS deBaja,
				B.[codigoInterno],
				B.[uniNeg],
				ISNULL(UN.descripcion, 'SIN U. NEGOCIOS') AS uninegDesc,
				B.grupo,
				G.nombre AS grupoDesc,
				B.subgrupo,
				SG.nombre AS subgrupoDesc,
				B.orderCompra,
				B.fechaCompra,
				B.costoCompra,
				MovimientosAntiguos.fechaMovimiento,
				MovimientosAntiguos.cantidadMovida,
				B.ubicacion,
				U.nombre AS ubicacionDesc,
				U.sucursal,
				S.nomsuc,
				B.responsable,
				R.nombre AS responsableDesc,
				B.estado,
				E.nombre AS estadoDesc,
				B.departamento,
				B.rutCyV,
				B.tipoDocCyV,
				B.numDocCyV,
				ECV.monto_total,
				ECV.fecha_ing,
				ISNULL(D.descripcion, 'SIN DEPARTAMENTO') AS departamentoDesc,
				CASE WHEN B.permiteMovimiento = 1 THEN 'SI' ELSE 'NO' END AS permiteMovimiento,
				CASE WHEN B.manejaMantencion = 1 THEN 'SI' ELSE 'NO' END AS manejaMantencion,
				CASE WHEN B.enMantenimiento = 1 THEN 'SI' ELSE 'NO' END AS enMantenimiento
			FROM afiBienes B
			LEFT JOIN conUnidadNegocio UN ON UN.idUniNeg = B.uniNeg
			LEFT JOIN afiGrupo G ON G.id = B.grupo
			LEFT JOIN afiSubGrupo SG ON SG.id = B.subgrupo AND SG.idGrupo = B.grupo
			LEFT JOIN afiUbicaciones U ON U.id = B.ubicacion
			LEFT JOIN priSucursales S ON S.codsuc = U.sucursal
			LEFT JOIN afiResponsables R ON R.id = B.responsable
			LEFT JOIN afiEstados E ON E.id = B.estado
			OUTER APPLY (
				SELECT TOP 1 M.fechaMovimiento, M.cantidadMovida
				FROM afiMovimientos M
				WHERE M.idActivo = B.id AND M.ubicacionDestino = B.ubicacion
				ORDER BY M.fechaMovimiento ASC
			) AS MovimientosAntiguos
			LEFT JOIN DepartamentoDesc D ON D.idDepartamento = B.departamento
			LEFT JOIN cyvEncabezado ECV ON ECV.tipo_documento = B.tipoDocCyV 
										 AND ECV.num_documento = B.numDocCyV 
										 AND ECV.rut = B.rutCyV
			WHERE (@id = 0 OR B.id = @id)
				AND (@codigoBarra = '0' OR B.codigoBarra = @codigoBarra)
				AND (@codigoInterno = '0' OR B.codigoInterno = @codigoInterno)
				AND (@grupo = 0 OR B.grupo = @grupo)
				AND (@subGrupo = 0 OR (B.grupo = @grupo AND B.subgrupo = @subGrupo))
				AND (@responsable = 0 OR B.responsable = @responsable)
				AND (@ubicaciones = 0 OR B.ubicacion = @ubicaciones)
				AND (B.deBaja = 1)
			ORDER BY B.id, B.codigoInterno;
		END

	ELSE
		BEGIN
			-- Crea un CTE para mejorar la claridad y evitar consultas repetitivas
			WITH DepartamentoDesc AS (
				SELECT idDepartamento, descripcion
				FROM remDepartamentos
			)
			SELECT
				B.[id],
				B.[nombre],
				B.[descripcion],
				CASE 
				WHEN B.deBaja = 'True' THEN 'SI'
				ELSE 'NO'
				END AS deBaja,
				B.[codigoInterno],
				B.[uniNeg],
				ISNULL(UN.descripcion, 'SIN U. NEGOCIOS') AS uninegDesc,
				B.grupo,
				G.nombre AS grupoDesc,
				B.subgrupo,
				SG.nombre AS subgrupoDesc,
				B.orderCompra,
				B.fechaCompra,
				B.costoCompra,
				ST.fechaUltimaActualizacion AS fechaMovimiento,
				ST.cantidadDisponible AS cantidadMovida,
				ST.ubicacion,
				U.nombre AS ubicacionDesc,
				U.sucursal,
				S.nomsuc,
				B.responsable,
				R.nombre AS responsableDesc,
				B.estado,
				E.nombre AS estadoDesc,
				B.departamento,
				B.rutCyV,
				B.tipoDocCyV,
				B.numDocCyV,
				ECV.monto_total,
				ECV.fecha_ing,
				ISNULL(D.descripcion, 'SIN DEPARTAMENTO') AS departamentoDesc,
				CASE WHEN B.permiteMovimiento = 1 THEN 'SI' ELSE 'NO' END AS permiteMovimiento,
				CASE WHEN B.manejaMantencion = 1 THEN 'SI' ELSE 'NO' END AS manejaMantencion,
				CASE WHEN B.enMantenimiento = 1 THEN 'SI' ELSE 'NO' END AS enMantenimiento
			FROM afiStock ST
			LEFT JOIN afiBienes B ON ST.idActivo = B.id
			LEFT JOIN conUnidadNegocio UN ON UN.idUniNeg = B.uniNeg
			LEFT JOIN afiGrupo G ON G.id = B.grupo
			LEFT JOIN afiSubGrupo SG ON SG.id = B.subgrupo AND SG.idGrupo = B.grupo
			LEFT JOIN afiUbicaciones U ON U.id = ST.ubicacion
			LEFT JOIN priSucursales S ON S.codsuc = U.sucursal
			LEFT JOIN afiResponsables R ON R.id = B.responsable
			LEFT JOIN afiEstados E ON E.id = B.estado
			LEFT JOIN DepartamentoDesc D ON D.idDepartamento = B.departamento
			LEFT JOIN cyvEncabezado ECV ON ECV.tipo_documento = B.tipoDocCyV 
										 AND ECV.num_documento = B.numDocCyV 
										 AND ECV.rut = B.rutCyV
			WHERE (@id = 0 OR B.id = @id)
				AND (@codigoBarra = '0' OR B.codigoBarra = @codigoBarra)
				AND (@codigoInterno = '0' OR B.codigoInterno = @codigoInterno)
				AND (@grupo = 0 OR B.grupo = @grupo)
				AND (@subGrupo = 0 OR (B.grupo = @grupo AND B.subgrupo = @subGrupo))
				AND (@responsable = 0 OR B.responsable = @responsable)
				AND (@ubicaciones = 0 OR B.ubicacion = @ubicaciones)
				AND (B.deBaja = 'False')
				AND (ST.cantidadDisponible > 0)
			ORDER BY B.id, B.codigoInterno;
		END
    
END