DECLARE @operacion as varchar(15) = 'CREATE'
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[llenarDiasHistorico]') AND type in (N'P', N'PC'))
BEGIN
	SET @operacion = 'ALTER'
END
execute(
		@operacion + ' procedure [dbo].[llenarDiasHistorico]	--version2
			@p_eid varchar (100)
		as
		begin

			declare @licencia as varchar(100) = (SELECT uid FROM [seg_usuario] where id=1)

			--En esta tabla se cargan todas las fechas que no tienen un día posterior registrado en la tabla alq_historicoAlquiler
			declare @equ_historicoAlquiler_inicial table (fechaEstado smalldatetime, id_equipo int, id_estadoEquipo int, id_documento int)
			insert into @equ_historicoAlquiler_inicial(fechaEstado, id_equipo, id_estadoEquipo, id_documento)
			select alq_haAct.fechaEstado, alq_haAct.id_equipo, alq_haAct.id_estadoEquipo,alq_haAct.id_documento 
			from alq_historicoAlquiler alq_haAct left join alq_historicoAlquiler alq_haSup
				on convert (varchar(10), DATEADD(day, 1, alq_haAct.fechaEstado), 121) = convert (varchar(10), alq_haSup.fechaEstado, 121) 
					and alq_haAct.id_equipo = alq_haSup.id_equipo
			where convert (varchar(10), DATEADD(day, 1, alq_haSup.fechaEstado), 121) is null 
				and alq_haSup.id_equipo is null and alq_haAct.active = 1
				and convert (varchar(10), alq_haAct.fechaEstado, 121) < convert (varchar(10), GETDATE(), 121) 
			order by alq_haAct.id_equipo DESC, alq_haAct.fechaEstado ASC
	

			declare @id_equipo int, @id_estadoEquipo int, @id_documento int, @fechaEstado smalldatetime, @id_equ int = 0, @diaEstado smalldatetime 
			--Se realizan los registros apartir de las fechas cargadas en la tabla @equ_historicoAlquiler_inicial hasta el día actual o hasta que encuentre una fecha ya registrada
			declare c_historicoAlq cursor for select id_equipo, id_estadoEquipo, id_documento, fechaEstado from @equ_historicoAlquiler_inicial 
				open c_historicoAlq

					while @@FETCH_STATUS = 0
					begin
						fetch c_historicoAlq into @id_equipo, @id_estadoEquipo, @id_documento, @fechaEstado
						declare @cambioFecha as bit = 0
						set @diaEstado = @fechaEstado
						set @diaEstado = DATEADD(d, 1, @diaEstado)

						while convert (varchar(10), @diaEstado,121) <= convert (varchar(10), getdate(),121) and @cambioFecha = 0
						begin
							--sólo permite registrar un estado para aquellos días que no tenga el equipo registrado el estado
							if not exists (select 1 from alq_historicoAlquiler where id_equipo = @id_equipo and convert (varchar(10), fechaEstado,121) = convert (varchar(10), @diaEstado,121)) 
							begin
								exec [ins_alq_historicoAlquiler] @licencia, @p_eid, 1, 1, '''', '''', @id_equipo, @id_estadoEquipo, @id_documento, @diaEstado
								set @diaEstado = DATEADD(d, 1, @diaEstado)
							end
							else
							begin
								--Si ya existe un día con un registro, entonces sigue con otra fecha que no tenga una fecha posterior registrada con el mismo equipo
								set @cambioFecha = 1
							end
					
						end				
					end
	
				close c_historicoAlq
			deallocate c_historicoAlq

		end
')