create procedure sistema.sp_cambiarContrasenia
@numId int,
@txtUsername varchar(30),
@txtContraseniaActual nvarchar(300),
@txtNuevaContrasenia nvarchar(300),
@txtOrigen varchar(50),
@dbResponse varchar(300) output
as
begin
	set nocount on;
	declare @dbContrasenia nvarchar(300);
	declare @dbError varchar(300);
	declare @dbCnt int,@dbCambio int;
	begin tran cambiarContrasenia
	begin try
		select @dbCnt = COUNT(*) from sistema.datos_usuarios where id = @numId OR username = @txtUsername;
		if @dbCnt > 0
			begin
				select top(1) @numId = id,@dbContrasenia = password,@dbCambio = cambioContrasenia from sistema.datos_usuarios where id = @numId OR username = @txtUsername;
				if @dbContrasenia != @txtContraseniaActual
					begin
						if @dbCambio = 1
							begin
								select top(1) @dbContrasenia = contrasenia from sistema.datos_restablecimientosContrasenia where idUsuario = @numId and estado = 1 and fechaUso is null AND cast(fechaRegistro as date) = cast(getdate() as date) order by fechaRegistro desc;
								if @dbContrasenia != @txtContraseniaActual
									begin
										set @dbError = 'contraseniaActualIncorrecta';
									end
							end
						else
							begin
								set @dbError = 'contraseniaActualIncorrecta';
							end
					end

				if @dbError is null
					begin
						update sistema.datos_usuarios set password = @txtNuevaContrasenia,primerIngreso = 0,intentosRestantes = 5,cambioContrasenia = 0 where id = @numId;
						insert into sistema.logs_cambiosContrasenia(idUsuario,contraseniaAnterior,origen) values(@numId,@txtContraseniaActual,@txtOrigen);
					end
			end
		else
			begin
				set @dbError = 'noEncontrado';
			end

		set @dbResponse = ISNULL(@dbError,'success');
		commit tran cambiarContrasenia
	end try
	begin catch
		SET @dbResponse = 'Ocurrió el siguiente error: '+ERROR_MESSAGE()+', en la línea '+ CONVERT ( NVARCHAR ( 255 ), ERROR_LINE( ) );
		rollback tran cambiarContrasenia
	end catch
end