<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.expertiza.ncsu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Dvnguye3</id>
	<title>Expertiza_Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.expertiza.ncsu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Dvnguye3"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Dvnguye3"/>
	<updated>2026-06-09T14:18:44Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145503</id>
		<title>CSC/ECE 517 Spring 2022 - E2245: View for results of bidding</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145503"/>
		<updated>2022-04-27T15:25:54Z</updated>

		<summary type="html">&lt;p&gt;Dvnguye3: /* Code changes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''CSC/ECE 517 Spring 2022 - E2245: View for results of bidding&lt;br /&gt;
'''&lt;br /&gt;
== Problem Statement == &lt;br /&gt;
&lt;br /&gt;
When students sign up for topics, they are presented with a system to bid on their favorite topics. This process is allowed for both individual students as well as teams. As a result, many students will first sign up for topics, which can reduce the number of teams that get their first pick, and result in long waitlists. There are several bidding algorithms available to the instructors to give as many groups as possible their first choice. As this is an NP-complete problem, the algorithm has to use heuristics to guess efficiently. There needs to be a way for instructors to easily view and compare the results of the bidding algorithms to get a quantitative sense of their effectiveness.&lt;br /&gt;
&lt;br /&gt;
== Project Goal == &lt;br /&gt;
This project aims to solve this issue by giving clear and concise feedback of the algorithms in topics list in the assignment. However, since topics in the table potentially have several fields, care must be taken not to overcrowd the table with information. There are several different UI/UX approaches to display this information, and the chosen one should:&lt;br /&gt;
* Maximize useful information at a glance, while minimizing clutter&lt;br /&gt;
* Fit into the flow of the topic page&lt;br /&gt;
* Allow further information to be obtained if requested&lt;br /&gt;
* Not be visible if bidding is not used&lt;br /&gt;
&lt;br /&gt;
Some other miscellaneous goals of this project are to:&lt;br /&gt;
* Remove topic fields from view if they are not applicable&lt;br /&gt;
* Refactor code as needed&lt;br /&gt;
* Increase test coverage as appropriate&lt;br /&gt;
&lt;br /&gt;
== Previous Work == &lt;br /&gt;
&lt;br /&gt;
=== Current User Cases ===&lt;br /&gt;
&lt;br /&gt;
Below is the use case diagram that depicts the existing use cases that associated to the topics bidding features of the application. Notice that in order to check some bidding information for a topic/project, the Instructor has to impersonate a student.&lt;br /&gt;
&lt;br /&gt;
[[File:old-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Current Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
As an Instructor, the user after, being authenticated, needs to go to the Assignments &amp;gt;&amp;gt; Topics view to create the topics/projects and then once the bidding started, needs to impersonate a student to partially (at very minimal level) get the bidding process information &lt;br /&gt;
&lt;br /&gt;
[[File:Old-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
== Strategy to implement our plan to improve previous Works ==&lt;br /&gt;
&lt;br /&gt;
=== Change in Use Cases ===&lt;br /&gt;
&lt;br /&gt;
[[File:new-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
'''Student''': This actor is responsible for submitting and deleting bids for topics while the topic selection period is open for an assignment which uses the new lottery topic selection mechanism. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Instructor''': This actor is responsible for updating an assignment to use the new lottery topic selection as well as closing the bidding period and beginning the automatic topic selection. Instructor is also able to view the progress details of bids without having to impersonate students&lt;br /&gt;
&lt;br /&gt;
=== UI design ===&lt;br /&gt;
&lt;br /&gt;
The existing view with very limited information about the bidding process&lt;br /&gt;
&lt;br /&gt;
'''Before''':&lt;br /&gt;
&lt;br /&gt;
[[File:before-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With this proposed new view, the Instructor can gain a more complete view of the whole bidding process in one place.&lt;br /&gt;
&lt;br /&gt;
'''Proposed UI'''&lt;br /&gt;
&lt;br /&gt;
[[File:after-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
=== Change in Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
With the new flow and implementation, the Instructor now can have all (complete) information he/she needs in one place at the Topics list/details view instead of having to impersonate a student to get even some minimal, un-completed piece of information about the bidding. &lt;br /&gt;
&lt;br /&gt;
[[File:new-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Class Diagram ===&lt;br /&gt;
&lt;br /&gt;
[[File:class-diagram.png|1000px|Class diagram]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Track our works for transparency, collaboration and productivity  ===&lt;br /&gt;
&lt;br /&gt;
We've been working collaboratively to deliver this project as a team, by using Github Project feature to assign, track and collaborate our tasks. We've created an accompanying github project for this purpose, link can be found [https://github.com/dnguyenv/final-e2245/projects/1 here]&lt;br /&gt;
&lt;br /&gt;
[[File:E2245-project-tasks.png|1200px|project tasks]]&lt;br /&gt;
&lt;br /&gt;
=== Code changes ===&lt;br /&gt;
&lt;br /&gt;
From preliminary research, we believed we would need to add and modify, refactor code from almost all layers of the features (including Controllers, Models, Views but we end up decided to focus on delivering the feature with minimum code changes and regression tests, so majority of our code changes are on Views layer. Following are the changes we made (We also added links to our Github commits for each change so that the reviewers can link directly to github for more in-depth inspection/review)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''New Files added:'''&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_total_bids.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:total-bids.png|1200px|Total bids]]&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_total_1_2_bids.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:total-1-2-bids.png|1200px|1-2 bids]]&lt;br /&gt;
&lt;br /&gt;
'''Files changed:'''&lt;br /&gt;
&lt;br /&gt;
'''View:'''&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_add_signup_topics.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:add-signup-topics.png|1200px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_table_header.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:table-header.png|1200px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_table_line.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:table-line.png|1200px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
'''Helper:'''&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/helpers/sign_up_sheet_helper.rb]&lt;br /&gt;
&lt;br /&gt;
[[File:e2245-signup-sheet-helper.png|1200px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
'''Test:'''&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 spec/helpers/sign_up_sheet_helper_spec.rb]&lt;br /&gt;
&lt;br /&gt;
[[File:e2245-helper-testcase.png|1200px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Configuration:'''&lt;br /&gt;
&lt;br /&gt;
*config/locales/en_US.yml&lt;br /&gt;
&lt;br /&gt;
== Functionalities added ==&lt;br /&gt;
 &lt;br /&gt;
# [https://drive.google.com/file/d/1uSPnL0S0E2VqvTidk534pcv-2rX4dBtN/view?usp=sharing Here is the link to our recorded demo of the feature] &lt;br /&gt;
# The instructor should be able to see how many teams have bid for each topic without having to impersonate students&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is the screenshot of real app running that shows what the Instructor will see in Assignment &amp;gt;&amp;gt; Topic view:&lt;br /&gt;
&lt;br /&gt;
[[File:assignment-topics.png|1200px|Assignment Topics View]]&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
=== Manual UI testing for the deployed project. ===&lt;br /&gt;
&lt;br /&gt;
==== UI Testing ====&lt;br /&gt;
'''Instructor View''' &amp;lt;br&amp;gt;&lt;br /&gt;
* username: instructor6 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Student View'''  &amp;lt;br&amp;gt;&lt;br /&gt;
* username: student575 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular assignment: SELECT topic_id as topic_id, COUNT(b.topic_id) as count FROM sign_up_topics t JOIN bids b ON t.id = b.topic_id WHERE t.assignment_id = 834 GROUP BY t.id&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; SELECT topic_id as topic_id, COUNT(b.topic_id) as count FROM sign_up_topics t JOIN bids b ON t.id = b.topic_id WHERE t.assignment_id = 834 GROUP BY t.id;&lt;br /&gt;
+----------+-------+&lt;br /&gt;
| topic_id | count |&lt;br /&gt;
+----------+-------+&lt;br /&gt;
|     3918 |    29 |&lt;br /&gt;
|     3919 |    14 |&lt;br /&gt;
|     3920 |    12 |&lt;br /&gt;
|     3921 |    29 |&lt;br /&gt;
|     3922 |    19 |&lt;br /&gt;
|     3923 |    13 |&lt;br /&gt;
|     3924 |    14 |&lt;br /&gt;
|     3925 |    15 |&lt;br /&gt;
|     3926 |    11 |&lt;br /&gt;
|     3927 |    10 |&lt;br /&gt;
|     3928 |     9 |&lt;br /&gt;
|     3929 |     6 |&lt;br /&gt;
|     3930 |     7 |&lt;br /&gt;
|     3931 |     8 |&lt;br /&gt;
|     3932 |     5 |&lt;br /&gt;
|     3933 |     7 |&lt;br /&gt;
|     3934 |    17 |&lt;br /&gt;
|     3935 |    12 |&lt;br /&gt;
|     3936 |     4 |&lt;br /&gt;
|     3937 |    19 |&lt;br /&gt;
|     3938 |    10 |&lt;br /&gt;
+----------+-------+&lt;br /&gt;
21 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total of #1 bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular topic: select * from bids where priority = 1 and topic_id=3918;&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of #1 bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select count(*) from bids where priority = 1 and topic_id=3918;&lt;br /&gt;
+----------+&lt;br /&gt;
| count(*) |&lt;br /&gt;
+----------+&lt;br /&gt;
|       10 |&lt;br /&gt;
+----------+&lt;br /&gt;
1 row in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total of #2 bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular topic: select * from bids where priority = 2 and topic_id=3918;&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of # 2 bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select count(*) from bids where priority = 2 and topic_id=3921;&lt;br /&gt;
+----------+&lt;br /&gt;
| count(*) |&lt;br /&gt;
+----------+&lt;br /&gt;
|        6 |&lt;br /&gt;
+----------+&lt;br /&gt;
1 row in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Test case for sign_up_sheet_helper ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  describe '#get_team_bids' do&lt;br /&gt;
    before(:each) do&lt;br /&gt;
      @assignment1 = create(:assignment, name: 'final 1', directory_path: 'final_1')&lt;br /&gt;
      @topic1 = create(:topic, assignment: @assignment1)&lt;br /&gt;
      @assignment2 = create(:assignment, name: 'final 2', directory_path: 'final_2')&lt;br /&gt;
      @topic2 = create(:topic, assignment: @assignment2)&lt;br /&gt;
      @participant1 = create(:participant, assignment: @assignment1)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    it 'The get_team_bids method return an empty string' do&lt;br /&gt;
      out_string = helper.get_team_bids(@topic1, [@participant1])&lt;br /&gt;
      expect(out_string).to be_nil&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    it 'The get_team_bids method should throw an exception' do&lt;br /&gt;
      expect { helper.get_team_bids(@topic1, @assignment1, nil) }.to raise_exception(ArgumentError)&lt;br /&gt;
    end&lt;br /&gt;
  end  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
&lt;br /&gt;
Because of the time constraints, we could only implement that much of features and would like to layout some potential future works need to be done:&lt;br /&gt;
&lt;br /&gt;
# More testing for edge-cases&lt;br /&gt;
# Add automatic test for UIs&lt;br /&gt;
&lt;br /&gt;
==Team Roster ==&lt;br /&gt;
&lt;br /&gt;
Mentor: Ed Gehringer - efg@ncsu.edu&lt;br /&gt;
&lt;br /&gt;
*Duy Nguyen - dvnguye3@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Kwon HyeokJun - khyeokj@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Shawn Salekin - ssaleki@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*David Glymph - dwglymph@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
#[https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit?pli=1#heading=h.5cgh9aixuut7 Previous works]&lt;br /&gt;
#[https://github.com/dnguyenv/expertiza/tree/beta Team code repo]&lt;br /&gt;
#[https://github.com/expertiza/expertiza/tree/beta Upstream code repo]&lt;/div&gt;</summary>
		<author><name>Dvnguye3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145502</id>
		<title>CSC/ECE 517 Spring 2022 - E2245: View for results of bidding</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145502"/>
		<updated>2022-04-27T15:25:30Z</updated>

		<summary type="html">&lt;p&gt;Dvnguye3: /* Test case for sign_up_sheet_helper */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''CSC/ECE 517 Spring 2022 - E2245: View for results of bidding&lt;br /&gt;
'''&lt;br /&gt;
== Problem Statement == &lt;br /&gt;
&lt;br /&gt;
When students sign up for topics, they are presented with a system to bid on their favorite topics. This process is allowed for both individual students as well as teams. As a result, many students will first sign up for topics, which can reduce the number of teams that get their first pick, and result in long waitlists. There are several bidding algorithms available to the instructors to give as many groups as possible their first choice. As this is an NP-complete problem, the algorithm has to use heuristics to guess efficiently. There needs to be a way for instructors to easily view and compare the results of the bidding algorithms to get a quantitative sense of their effectiveness.&lt;br /&gt;
&lt;br /&gt;
== Project Goal == &lt;br /&gt;
This project aims to solve this issue by giving clear and concise feedback of the algorithms in topics list in the assignment. However, since topics in the table potentially have several fields, care must be taken not to overcrowd the table with information. There are several different UI/UX approaches to display this information, and the chosen one should:&lt;br /&gt;
* Maximize useful information at a glance, while minimizing clutter&lt;br /&gt;
* Fit into the flow of the topic page&lt;br /&gt;
* Allow further information to be obtained if requested&lt;br /&gt;
* Not be visible if bidding is not used&lt;br /&gt;
&lt;br /&gt;
Some other miscellaneous goals of this project are to:&lt;br /&gt;
* Remove topic fields from view if they are not applicable&lt;br /&gt;
* Refactor code as needed&lt;br /&gt;
* Increase test coverage as appropriate&lt;br /&gt;
&lt;br /&gt;
== Previous Work == &lt;br /&gt;
&lt;br /&gt;
=== Current User Cases ===&lt;br /&gt;
&lt;br /&gt;
Below is the use case diagram that depicts the existing use cases that associated to the topics bidding features of the application. Notice that in order to check some bidding information for a topic/project, the Instructor has to impersonate a student.&lt;br /&gt;
&lt;br /&gt;
[[File:old-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Current Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
As an Instructor, the user after, being authenticated, needs to go to the Assignments &amp;gt;&amp;gt; Topics view to create the topics/projects and then once the bidding started, needs to impersonate a student to partially (at very minimal level) get the bidding process information &lt;br /&gt;
&lt;br /&gt;
[[File:Old-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
== Strategy to implement our plan to improve previous Works ==&lt;br /&gt;
&lt;br /&gt;
=== Change in Use Cases ===&lt;br /&gt;
&lt;br /&gt;
[[File:new-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
'''Student''': This actor is responsible for submitting and deleting bids for topics while the topic selection period is open for an assignment which uses the new lottery topic selection mechanism. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Instructor''': This actor is responsible for updating an assignment to use the new lottery topic selection as well as closing the bidding period and beginning the automatic topic selection. Instructor is also able to view the progress details of bids without having to impersonate students&lt;br /&gt;
&lt;br /&gt;
=== UI design ===&lt;br /&gt;
&lt;br /&gt;
The existing view with very limited information about the bidding process&lt;br /&gt;
&lt;br /&gt;
'''Before''':&lt;br /&gt;
&lt;br /&gt;
[[File:before-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With this proposed new view, the Instructor can gain a more complete view of the whole bidding process in one place.&lt;br /&gt;
&lt;br /&gt;
'''Proposed UI'''&lt;br /&gt;
&lt;br /&gt;
[[File:after-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
=== Change in Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
With the new flow and implementation, the Instructor now can have all (complete) information he/she needs in one place at the Topics list/details view instead of having to impersonate a student to get even some minimal, un-completed piece of information about the bidding. &lt;br /&gt;
&lt;br /&gt;
[[File:new-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Class Diagram ===&lt;br /&gt;
&lt;br /&gt;
[[File:class-diagram.png|1000px|Class diagram]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Track our works for transparency, collaboration and productivity  ===&lt;br /&gt;
&lt;br /&gt;
We've been working collaboratively to deliver this project as a team, by using Github Project feature to assign, track and collaborate our tasks. We've created an accompanying github project for this purpose, link can be found [https://github.com/dnguyenv/final-e2245/projects/1 here]&lt;br /&gt;
&lt;br /&gt;
[[File:E2245-project-tasks.png|1200px|project tasks]]&lt;br /&gt;
&lt;br /&gt;
=== Code changes ===&lt;br /&gt;
&lt;br /&gt;
From preliminary research, we believed we would need to add and modify, refactor code from almost all layers of the features (including Controllers, Models, Views but we end up decided to focus on delivering the feature with minimum code changes and regression tests, so majority of our code changes are on Views layer. Following are the changes we made (We also added links to our Github commits for each change so that the reviewers can link directly to github for more in-depth inspection/review)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''New Files added:'''&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_total_bids.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:total-bids.png|1200px|Total bids]]&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_total_1_2_bids.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:total-1-2-bids.png|1200px|1-2 bids]]&lt;br /&gt;
&lt;br /&gt;
'''Files changed:'''&lt;br /&gt;
&lt;br /&gt;
'''View:'''&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_add_signup_topics.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:add-signup-topics.png|1200px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_table_header.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:table-header.png|1200px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_table_line.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:table-line.png|1200px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
'''Helper:'''&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/helpers/sign_up_sheet_helper.rb]&lt;br /&gt;
&lt;br /&gt;
[[File:e2245-signup-sheet-helper.png|1200px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
'''Test:'''&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 spec/helpers/sign_up_sheet_helper_spec.rb]&lt;br /&gt;
&lt;br /&gt;
[[File:e2245-helper-testcase.png|1200px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Configuration:'''&lt;br /&gt;
&lt;br /&gt;
*config/locales/en_US.yml&lt;br /&gt;
&lt;br /&gt;
*config/locales/hi_IN.yml&lt;br /&gt;
&lt;br /&gt;
== Functionalities added ==&lt;br /&gt;
 &lt;br /&gt;
# [https://drive.google.com/file/d/1uSPnL0S0E2VqvTidk534pcv-2rX4dBtN/view?usp=sharing Here is the link to our recorded demo of the feature] &lt;br /&gt;
# The instructor should be able to see how many teams have bid for each topic without having to impersonate students&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is the screenshot of real app running that shows what the Instructor will see in Assignment &amp;gt;&amp;gt; Topic view:&lt;br /&gt;
&lt;br /&gt;
[[File:assignment-topics.png|1200px|Assignment Topics View]]&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
=== Manual UI testing for the deployed project. ===&lt;br /&gt;
&lt;br /&gt;
==== UI Testing ====&lt;br /&gt;
'''Instructor View''' &amp;lt;br&amp;gt;&lt;br /&gt;
* username: instructor6 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Student View'''  &amp;lt;br&amp;gt;&lt;br /&gt;
* username: student575 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular assignment: SELECT topic_id as topic_id, COUNT(b.topic_id) as count FROM sign_up_topics t JOIN bids b ON t.id = b.topic_id WHERE t.assignment_id = 834 GROUP BY t.id&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; SELECT topic_id as topic_id, COUNT(b.topic_id) as count FROM sign_up_topics t JOIN bids b ON t.id = b.topic_id WHERE t.assignment_id = 834 GROUP BY t.id;&lt;br /&gt;
+----------+-------+&lt;br /&gt;
| topic_id | count |&lt;br /&gt;
+----------+-------+&lt;br /&gt;
|     3918 |    29 |&lt;br /&gt;
|     3919 |    14 |&lt;br /&gt;
|     3920 |    12 |&lt;br /&gt;
|     3921 |    29 |&lt;br /&gt;
|     3922 |    19 |&lt;br /&gt;
|     3923 |    13 |&lt;br /&gt;
|     3924 |    14 |&lt;br /&gt;
|     3925 |    15 |&lt;br /&gt;
|     3926 |    11 |&lt;br /&gt;
|     3927 |    10 |&lt;br /&gt;
|     3928 |     9 |&lt;br /&gt;
|     3929 |     6 |&lt;br /&gt;
|     3930 |     7 |&lt;br /&gt;
|     3931 |     8 |&lt;br /&gt;
|     3932 |     5 |&lt;br /&gt;
|     3933 |     7 |&lt;br /&gt;
|     3934 |    17 |&lt;br /&gt;
|     3935 |    12 |&lt;br /&gt;
|     3936 |     4 |&lt;br /&gt;
|     3937 |    19 |&lt;br /&gt;
|     3938 |    10 |&lt;br /&gt;
+----------+-------+&lt;br /&gt;
21 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total of #1 bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular topic: select * from bids where priority = 1 and topic_id=3918;&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of #1 bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select count(*) from bids where priority = 1 and topic_id=3918;&lt;br /&gt;
+----------+&lt;br /&gt;
| count(*) |&lt;br /&gt;
+----------+&lt;br /&gt;
|       10 |&lt;br /&gt;
+----------+&lt;br /&gt;
1 row in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total of #2 bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular topic: select * from bids where priority = 2 and topic_id=3918;&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of # 2 bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select count(*) from bids where priority = 2 and topic_id=3921;&lt;br /&gt;
+----------+&lt;br /&gt;
| count(*) |&lt;br /&gt;
+----------+&lt;br /&gt;
|        6 |&lt;br /&gt;
+----------+&lt;br /&gt;
1 row in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Test case for sign_up_sheet_helper ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  describe '#get_team_bids' do&lt;br /&gt;
    before(:each) do&lt;br /&gt;
      @assignment1 = create(:assignment, name: 'final 1', directory_path: 'final_1')&lt;br /&gt;
      @topic1 = create(:topic, assignment: @assignment1)&lt;br /&gt;
      @assignment2 = create(:assignment, name: 'final 2', directory_path: 'final_2')&lt;br /&gt;
      @topic2 = create(:topic, assignment: @assignment2)&lt;br /&gt;
      @participant1 = create(:participant, assignment: @assignment1)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    it 'The get_team_bids method return an empty string' do&lt;br /&gt;
      out_string = helper.get_team_bids(@topic1, [@participant1])&lt;br /&gt;
      expect(out_string).to be_nil&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    it 'The get_team_bids method should throw an exception' do&lt;br /&gt;
      expect { helper.get_team_bids(@topic1, @assignment1, nil) }.to raise_exception(ArgumentError)&lt;br /&gt;
    end&lt;br /&gt;
  end  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
&lt;br /&gt;
Because of the time constraints, we could only implement that much of features and would like to layout some potential future works need to be done:&lt;br /&gt;
&lt;br /&gt;
# More testing for edge-cases&lt;br /&gt;
# Add automatic test for UIs&lt;br /&gt;
&lt;br /&gt;
==Team Roster ==&lt;br /&gt;
&lt;br /&gt;
Mentor: Ed Gehringer - efg@ncsu.edu&lt;br /&gt;
&lt;br /&gt;
*Duy Nguyen - dvnguye3@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Kwon HyeokJun - khyeokj@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Shawn Salekin - ssaleki@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*David Glymph - dwglymph@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
#[https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit?pli=1#heading=h.5cgh9aixuut7 Previous works]&lt;br /&gt;
#[https://github.com/dnguyenv/expertiza/tree/beta Team code repo]&lt;br /&gt;
#[https://github.com/expertiza/expertiza/tree/beta Upstream code repo]&lt;/div&gt;</summary>
		<author><name>Dvnguye3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:E2245-helper-testcase.png&amp;diff=145501</id>
		<title>File:E2245-helper-testcase.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:E2245-helper-testcase.png&amp;diff=145501"/>
		<updated>2022-04-27T15:24:46Z</updated>

		<summary type="html">&lt;p&gt;Dvnguye3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Dvnguye3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145500</id>
		<title>CSC/ECE 517 Spring 2022 - E2245: View for results of bidding</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145500"/>
		<updated>2022-04-27T15:24:20Z</updated>

		<summary type="html">&lt;p&gt;Dvnguye3: /* Code changes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''CSC/ECE 517 Spring 2022 - E2245: View for results of bidding&lt;br /&gt;
'''&lt;br /&gt;
== Problem Statement == &lt;br /&gt;
&lt;br /&gt;
When students sign up for topics, they are presented with a system to bid on their favorite topics. This process is allowed for both individual students as well as teams. As a result, many students will first sign up for topics, which can reduce the number of teams that get their first pick, and result in long waitlists. There are several bidding algorithms available to the instructors to give as many groups as possible their first choice. As this is an NP-complete problem, the algorithm has to use heuristics to guess efficiently. There needs to be a way for instructors to easily view and compare the results of the bidding algorithms to get a quantitative sense of their effectiveness.&lt;br /&gt;
&lt;br /&gt;
== Project Goal == &lt;br /&gt;
This project aims to solve this issue by giving clear and concise feedback of the algorithms in topics list in the assignment. However, since topics in the table potentially have several fields, care must be taken not to overcrowd the table with information. There are several different UI/UX approaches to display this information, and the chosen one should:&lt;br /&gt;
* Maximize useful information at a glance, while minimizing clutter&lt;br /&gt;
* Fit into the flow of the topic page&lt;br /&gt;
* Allow further information to be obtained if requested&lt;br /&gt;
* Not be visible if bidding is not used&lt;br /&gt;
&lt;br /&gt;
Some other miscellaneous goals of this project are to:&lt;br /&gt;
* Remove topic fields from view if they are not applicable&lt;br /&gt;
* Refactor code as needed&lt;br /&gt;
* Increase test coverage as appropriate&lt;br /&gt;
&lt;br /&gt;
== Previous Work == &lt;br /&gt;
&lt;br /&gt;
=== Current User Cases ===&lt;br /&gt;
&lt;br /&gt;
Below is the use case diagram that depicts the existing use cases that associated to the topics bidding features of the application. Notice that in order to check some bidding information for a topic/project, the Instructor has to impersonate a student.&lt;br /&gt;
&lt;br /&gt;
[[File:old-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Current Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
As an Instructor, the user after, being authenticated, needs to go to the Assignments &amp;gt;&amp;gt; Topics view to create the topics/projects and then once the bidding started, needs to impersonate a student to partially (at very minimal level) get the bidding process information &lt;br /&gt;
&lt;br /&gt;
[[File:Old-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
== Strategy to implement our plan to improve previous Works ==&lt;br /&gt;
&lt;br /&gt;
=== Change in Use Cases ===&lt;br /&gt;
&lt;br /&gt;
[[File:new-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
'''Student''': This actor is responsible for submitting and deleting bids for topics while the topic selection period is open for an assignment which uses the new lottery topic selection mechanism. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Instructor''': This actor is responsible for updating an assignment to use the new lottery topic selection as well as closing the bidding period and beginning the automatic topic selection. Instructor is also able to view the progress details of bids without having to impersonate students&lt;br /&gt;
&lt;br /&gt;
=== UI design ===&lt;br /&gt;
&lt;br /&gt;
The existing view with very limited information about the bidding process&lt;br /&gt;
&lt;br /&gt;
'''Before''':&lt;br /&gt;
&lt;br /&gt;
[[File:before-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With this proposed new view, the Instructor can gain a more complete view of the whole bidding process in one place.&lt;br /&gt;
&lt;br /&gt;
'''Proposed UI'''&lt;br /&gt;
&lt;br /&gt;
[[File:after-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
=== Change in Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
With the new flow and implementation, the Instructor now can have all (complete) information he/she needs in one place at the Topics list/details view instead of having to impersonate a student to get even some minimal, un-completed piece of information about the bidding. &lt;br /&gt;
&lt;br /&gt;
[[File:new-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Class Diagram ===&lt;br /&gt;
&lt;br /&gt;
[[File:class-diagram.png|1000px|Class diagram]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Track our works for transparency, collaboration and productivity  ===&lt;br /&gt;
&lt;br /&gt;
We've been working collaboratively to deliver this project as a team, by using Github Project feature to assign, track and collaborate our tasks. We've created an accompanying github project for this purpose, link can be found [https://github.com/dnguyenv/final-e2245/projects/1 here]&lt;br /&gt;
&lt;br /&gt;
[[File:E2245-project-tasks.png|1200px|project tasks]]&lt;br /&gt;
&lt;br /&gt;
=== Code changes ===&lt;br /&gt;
&lt;br /&gt;
From preliminary research, we believed we would need to add and modify, refactor code from almost all layers of the features (including Controllers, Models, Views but we end up decided to focus on delivering the feature with minimum code changes and regression tests, so majority of our code changes are on Views layer. Following are the changes we made (We also added links to our Github commits for each change so that the reviewers can link directly to github for more in-depth inspection/review)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''New Files added:'''&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_total_bids.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:total-bids.png|1200px|Total bids]]&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_total_1_2_bids.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:total-1-2-bids.png|1200px|1-2 bids]]&lt;br /&gt;
&lt;br /&gt;
'''Files changed:'''&lt;br /&gt;
&lt;br /&gt;
'''View:'''&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_add_signup_topics.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:add-signup-topics.png|1200px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_table_header.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:table-header.png|1200px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_table_line.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:table-line.png|1200px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
'''Helper:'''&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/helpers/sign_up_sheet_helper.rb]&lt;br /&gt;
&lt;br /&gt;
[[File:e2245-signup-sheet-helper.png|1200px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
'''Test:'''&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 spec/helpers/sign_up_sheet_helper_spec.rb]&lt;br /&gt;
&lt;br /&gt;
[[File:e2245-helper-testcase.png|1200px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Configuration:'''&lt;br /&gt;
&lt;br /&gt;
*config/locales/en_US.yml&lt;br /&gt;
&lt;br /&gt;
*config/locales/hi_IN.yml&lt;br /&gt;
&lt;br /&gt;
== Functionalities added ==&lt;br /&gt;
 &lt;br /&gt;
# [https://drive.google.com/file/d/1uSPnL0S0E2VqvTidk534pcv-2rX4dBtN/view?usp=sharing Here is the link to our recorded demo of the feature] &lt;br /&gt;
# The instructor should be able to see how many teams have bid for each topic without having to impersonate students&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is the screenshot of real app running that shows what the Instructor will see in Assignment &amp;gt;&amp;gt; Topic view:&lt;br /&gt;
&lt;br /&gt;
[[File:assignment-topics.png|1200px|Assignment Topics View]]&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
=== Manual UI testing for the deployed project. ===&lt;br /&gt;
&lt;br /&gt;
==== UI Testing ====&lt;br /&gt;
'''Instructor View''' &amp;lt;br&amp;gt;&lt;br /&gt;
* username: instructor6 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Student View'''  &amp;lt;br&amp;gt;&lt;br /&gt;
* username: student575 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular assignment: SELECT topic_id as topic_id, COUNT(b.topic_id) as count FROM sign_up_topics t JOIN bids b ON t.id = b.topic_id WHERE t.assignment_id = 834 GROUP BY t.id&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; SELECT topic_id as topic_id, COUNT(b.topic_id) as count FROM sign_up_topics t JOIN bids b ON t.id = b.topic_id WHERE t.assignment_id = 834 GROUP BY t.id;&lt;br /&gt;
+----------+-------+&lt;br /&gt;
| topic_id | count |&lt;br /&gt;
+----------+-------+&lt;br /&gt;
|     3918 |    29 |&lt;br /&gt;
|     3919 |    14 |&lt;br /&gt;
|     3920 |    12 |&lt;br /&gt;
|     3921 |    29 |&lt;br /&gt;
|     3922 |    19 |&lt;br /&gt;
|     3923 |    13 |&lt;br /&gt;
|     3924 |    14 |&lt;br /&gt;
|     3925 |    15 |&lt;br /&gt;
|     3926 |    11 |&lt;br /&gt;
|     3927 |    10 |&lt;br /&gt;
|     3928 |     9 |&lt;br /&gt;
|     3929 |     6 |&lt;br /&gt;
|     3930 |     7 |&lt;br /&gt;
|     3931 |     8 |&lt;br /&gt;
|     3932 |     5 |&lt;br /&gt;
|     3933 |     7 |&lt;br /&gt;
|     3934 |    17 |&lt;br /&gt;
|     3935 |    12 |&lt;br /&gt;
|     3936 |     4 |&lt;br /&gt;
|     3937 |    19 |&lt;br /&gt;
|     3938 |    10 |&lt;br /&gt;
+----------+-------+&lt;br /&gt;
21 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total of #1 bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular topic: select * from bids where priority = 1 and topic_id=3918;&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of #1 bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select count(*) from bids where priority = 1 and topic_id=3918;&lt;br /&gt;
+----------+&lt;br /&gt;
| count(*) |&lt;br /&gt;
+----------+&lt;br /&gt;
|       10 |&lt;br /&gt;
+----------+&lt;br /&gt;
1 row in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total of #2 bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular topic: select * from bids where priority = 2 and topic_id=3918;&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of # 2 bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select count(*) from bids where priority = 2 and topic_id=3921;&lt;br /&gt;
+----------+&lt;br /&gt;
| count(*) |&lt;br /&gt;
+----------+&lt;br /&gt;
|        6 |&lt;br /&gt;
+----------+&lt;br /&gt;
1 row in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Test case for sign_up_sheet_helper ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  describe '#get_team_bids' do&lt;br /&gt;
    before(:each) do&lt;br /&gt;
      @assignment1 = create(:assignment, name: 'final 1', directory_path: 'final_1')&lt;br /&gt;
      @topic1 = create(:topic, assignment: @assignment1)&lt;br /&gt;
      @assignment2 = create(:assignment, name: 'final 2', directory_path: 'final_2')&lt;br /&gt;
      @topic2 = create(:topic, assignment: @assignment2)&lt;br /&gt;
      @participant1 = create(:participant, assignment: @assignment1)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    it 'The get_team_bids method should not return an empty html' do&lt;br /&gt;
      out_string = helper.get_team_bids(@topic1, @participant1)&lt;br /&gt;
      expect(out_string).not_to be_empty&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    it 'The get_team_bids method should throw an exception' do&lt;br /&gt;
      expect { helper.get_team_bids(@topic1, @assignment1, [@participant1]) }.to raise_exception(NoMethodError)&lt;br /&gt;
    end&lt;br /&gt;
  end  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
&lt;br /&gt;
Because of the time constraints, we could only implement that much of features and would like to layout some potential future works need to be done:&lt;br /&gt;
&lt;br /&gt;
# More testing for edge-cases&lt;br /&gt;
# Add automatic test for UIs&lt;br /&gt;
&lt;br /&gt;
==Team Roster ==&lt;br /&gt;
&lt;br /&gt;
Mentor: Ed Gehringer - efg@ncsu.edu&lt;br /&gt;
&lt;br /&gt;
*Duy Nguyen - dvnguye3@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Kwon HyeokJun - khyeokj@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Shawn Salekin - ssaleki@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*David Glymph - dwglymph@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
#[https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit?pli=1#heading=h.5cgh9aixuut7 Previous works]&lt;br /&gt;
#[https://github.com/dnguyenv/expertiza/tree/beta Team code repo]&lt;br /&gt;
#[https://github.com/expertiza/expertiza/tree/beta Upstream code repo]&lt;/div&gt;</summary>
		<author><name>Dvnguye3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145497</id>
		<title>CSC/ECE 517 Spring 2022 - E2245: View for results of bidding</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145497"/>
		<updated>2022-04-27T13:46:03Z</updated>

		<summary type="html">&lt;p&gt;Dvnguye3: /* Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''CSC/ECE 517 Spring 2022 - E2245: View for results of bidding&lt;br /&gt;
'''&lt;br /&gt;
== Problem Statement == &lt;br /&gt;
&lt;br /&gt;
When students sign up for topics, they are presented with a system to bid on their favorite topics. This process is allowed for both individual students as well as teams. As a result, many students will first sign up for topics, which can reduce the number of teams that get their first pick, and result in long waitlists. There are several bidding algorithms available to the instructors to give as many groups as possible their first choice. As this is an NP-complete problem, the algorithm has to use heuristics to guess efficiently. There needs to be a way for instructors to easily view and compare the results of the bidding algorithms to get a quantitative sense of their effectiveness.&lt;br /&gt;
&lt;br /&gt;
== Project Goal == &lt;br /&gt;
This project aims to solve this issue by giving clear and concise feedback of the algorithms in topics list in the assignment. However, since topics in the table potentially have several fields, care must be taken not to overcrowd the table with information. There are several different UI/UX approaches to display this information, and the chosen one should:&lt;br /&gt;
* Maximize useful information at a glance, while minimizing clutter&lt;br /&gt;
* Fit into the flow of the topic page&lt;br /&gt;
* Allow further information to be obtained if requested&lt;br /&gt;
* Not be visible if bidding is not used&lt;br /&gt;
&lt;br /&gt;
Some other miscellaneous goals of this project are to:&lt;br /&gt;
* Remove topic fields from view if they are not applicable&lt;br /&gt;
* Refactor code as needed&lt;br /&gt;
* Increase test coverage as appropriate&lt;br /&gt;
&lt;br /&gt;
== Previous Work == &lt;br /&gt;
&lt;br /&gt;
=== Current User Cases ===&lt;br /&gt;
&lt;br /&gt;
Below is the use case diagram that depicts the existing use cases that associated to the topics bidding features of the application. Notice that in order to check some bidding information for a topic/project, the Instructor has to impersonate a student.&lt;br /&gt;
&lt;br /&gt;
[[File:old-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Current Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
As an Instructor, the user after, being authenticated, needs to go to the Assignments &amp;gt;&amp;gt; Topics view to create the topics/projects and then once the bidding started, needs to impersonate a student to partially (at very minimal level) get the bidding process information &lt;br /&gt;
&lt;br /&gt;
[[File:Old-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
== Strategy to implement our plan to improve previous Works ==&lt;br /&gt;
&lt;br /&gt;
=== Change in Use Cases ===&lt;br /&gt;
&lt;br /&gt;
[[File:new-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
'''Student''': This actor is responsible for submitting and deleting bids for topics while the topic selection period is open for an assignment which uses the new lottery topic selection mechanism. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Instructor''': This actor is responsible for updating an assignment to use the new lottery topic selection as well as closing the bidding period and beginning the automatic topic selection. Instructor is also able to view the progress details of bids without having to impersonate students&lt;br /&gt;
&lt;br /&gt;
=== UI design ===&lt;br /&gt;
&lt;br /&gt;
The existing view with very limited information about the bidding process&lt;br /&gt;
&lt;br /&gt;
'''Before''':&lt;br /&gt;
&lt;br /&gt;
[[File:before-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With this proposed new view, the Instructor can gain a more complete view of the whole bidding process in one place.&lt;br /&gt;
&lt;br /&gt;
'''Proposed UI'''&lt;br /&gt;
&lt;br /&gt;
[[File:after-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
=== Change in Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
With the new flow and implementation, the Instructor now can have all (complete) information he/she needs in one place at the Topics list/details view instead of having to impersonate a student to get even some minimal, un-completed piece of information about the bidding. &lt;br /&gt;
&lt;br /&gt;
[[File:new-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Class Diagram ===&lt;br /&gt;
&lt;br /&gt;
[[File:class-diagram.png|1000px|Class diagram]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Track our works for transparency, collaboration and productivity  ===&lt;br /&gt;
&lt;br /&gt;
We've been working collaboratively to deliver this project as a team, by using Github Project feature to assign, track and collaborate our tasks. We've created an accompanying github project for this purpose, link can be found [https://github.com/dnguyenv/final-e2245/projects/1 here]&lt;br /&gt;
&lt;br /&gt;
[[File:E2245-project-tasks.png|1200px|project tasks]]&lt;br /&gt;
&lt;br /&gt;
=== Code changes ===&lt;br /&gt;
&lt;br /&gt;
From preliminary research, we believed we would need to add and modify, refactor code from almost all layers of the features (including Controllers, Models, Views but we end up decided to focus on delivering the feature with minimum code changes and regression tests, so majority of our code changes are on Views layer. Following are the changes we made (We also added links to our Github commits for each change so that the reviewers can link directly to github for more in-depth inspection/review)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''New Files added:'''&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_total_bids.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:total-bids.png|1200px|Total bids]]&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_total_1_2_bids.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:total-1-2-bids.png|1200px|1-2 bids]]&lt;br /&gt;
&lt;br /&gt;
'''Files changed:'''&lt;br /&gt;
&lt;br /&gt;
'''View:'''&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_add_signup_topics.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:add-signup-topics.png|1200px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_table_header.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:table-header.png|1200px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_table_line.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:table-line.png|1200px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
'''Helper:'''&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/helpers/sign_up_sheet_helper.rb]&lt;br /&gt;
&lt;br /&gt;
[[File:e2245-signup-sheet-helper.png|1200px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
'''Configuration:'''&lt;br /&gt;
&lt;br /&gt;
*config/locales/en_US.yml&lt;br /&gt;
&lt;br /&gt;
*config/locales/hi_IN.yml&lt;br /&gt;
&lt;br /&gt;
== Functionalities added ==&lt;br /&gt;
 &lt;br /&gt;
# [https://drive.google.com/file/d/1uSPnL0S0E2VqvTidk534pcv-2rX4dBtN/view?usp=sharing Here is the link to our recorded demo of the feature] &lt;br /&gt;
# The instructor should be able to see how many teams have bid for each topic without having to impersonate students&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is the screenshot of real app running that shows what the Instructor will see in Assignment &amp;gt;&amp;gt; Topic view:&lt;br /&gt;
&lt;br /&gt;
[[File:assignment-topics.png|1200px|Assignment Topics View]]&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
=== Manual UI testing for the deployed project. ===&lt;br /&gt;
&lt;br /&gt;
==== UI Testing ====&lt;br /&gt;
'''Instructor View''' &amp;lt;br&amp;gt;&lt;br /&gt;
* username: instructor6 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Student View'''  &amp;lt;br&amp;gt;&lt;br /&gt;
* username: student575 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular assignment: SELECT topic_id as topic_id, COUNT(b.topic_id) as count FROM sign_up_topics t JOIN bids b ON t.id = b.topic_id WHERE t.assignment_id = 834 GROUP BY t.id&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; SELECT topic_id as topic_id, COUNT(b.topic_id) as count FROM sign_up_topics t JOIN bids b ON t.id = b.topic_id WHERE t.assignment_id = 834 GROUP BY t.id;&lt;br /&gt;
+----------+-------+&lt;br /&gt;
| topic_id | count |&lt;br /&gt;
+----------+-------+&lt;br /&gt;
|     3918 |    29 |&lt;br /&gt;
|     3919 |    14 |&lt;br /&gt;
|     3920 |    12 |&lt;br /&gt;
|     3921 |    29 |&lt;br /&gt;
|     3922 |    19 |&lt;br /&gt;
|     3923 |    13 |&lt;br /&gt;
|     3924 |    14 |&lt;br /&gt;
|     3925 |    15 |&lt;br /&gt;
|     3926 |    11 |&lt;br /&gt;
|     3927 |    10 |&lt;br /&gt;
|     3928 |     9 |&lt;br /&gt;
|     3929 |     6 |&lt;br /&gt;
|     3930 |     7 |&lt;br /&gt;
|     3931 |     8 |&lt;br /&gt;
|     3932 |     5 |&lt;br /&gt;
|     3933 |     7 |&lt;br /&gt;
|     3934 |    17 |&lt;br /&gt;
|     3935 |    12 |&lt;br /&gt;
|     3936 |     4 |&lt;br /&gt;
|     3937 |    19 |&lt;br /&gt;
|     3938 |    10 |&lt;br /&gt;
+----------+-------+&lt;br /&gt;
21 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total of #1 bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular topic: select * from bids where priority = 1 and topic_id=3918;&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of #1 bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select count(*) from bids where priority = 1 and topic_id=3918;&lt;br /&gt;
+----------+&lt;br /&gt;
| count(*) |&lt;br /&gt;
+----------+&lt;br /&gt;
|       10 |&lt;br /&gt;
+----------+&lt;br /&gt;
1 row in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total of #2 bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular topic: select * from bids where priority = 2 and topic_id=3918;&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of # 2 bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select count(*) from bids where priority = 2 and topic_id=3921;&lt;br /&gt;
+----------+&lt;br /&gt;
| count(*) |&lt;br /&gt;
+----------+&lt;br /&gt;
|        6 |&lt;br /&gt;
+----------+&lt;br /&gt;
1 row in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Test case for sign_up_sheet_helper ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  describe '#get_team_bids' do&lt;br /&gt;
    before(:each) do&lt;br /&gt;
      @assignment1 = create(:assignment, name: 'final 1', directory_path: 'final_1')&lt;br /&gt;
      @topic1 = create(:topic, assignment: @assignment1)&lt;br /&gt;
      @assignment2 = create(:assignment, name: 'final 2', directory_path: 'final_2')&lt;br /&gt;
      @topic2 = create(:topic, assignment: @assignment2)&lt;br /&gt;
      @participant1 = create(:participant, assignment: @assignment1)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    it 'The get_team_bids method should not return an empty html' do&lt;br /&gt;
      out_string = helper.get_team_bids(@topic1, @participant1)&lt;br /&gt;
      expect(out_string).not_to be_empty&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    it 'The get_team_bids method should throw an exception' do&lt;br /&gt;
      expect { helper.get_team_bids(@topic1, @assignment1, [@participant1]) }.to raise_exception(NoMethodError)&lt;br /&gt;
    end&lt;br /&gt;
  end  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
&lt;br /&gt;
Because of the time constraints, we could only implement that much of features and would like to layout some potential future works need to be done:&lt;br /&gt;
&lt;br /&gt;
# More testing for edge-cases&lt;br /&gt;
# Add automatic test for UIs&lt;br /&gt;
&lt;br /&gt;
==Team Roster ==&lt;br /&gt;
&lt;br /&gt;
Mentor: Ed Gehringer - efg@ncsu.edu&lt;br /&gt;
&lt;br /&gt;
*Duy Nguyen - dvnguye3@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Kwon HyeokJun - khyeokj@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Shawn Salekin - ssaleki@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*David Glymph - dwglymph@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
#[https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit?pli=1#heading=h.5cgh9aixuut7 Previous works]&lt;br /&gt;
#[https://github.com/dnguyenv/expertiza/tree/beta Team code repo]&lt;br /&gt;
#[https://github.com/expertiza/expertiza/tree/beta Upstream code repo]&lt;/div&gt;</summary>
		<author><name>Dvnguye3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145496</id>
		<title>CSC/ECE 517 Spring 2022 - E2245: View for results of bidding</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145496"/>
		<updated>2022-04-27T13:43:57Z</updated>

		<summary type="html">&lt;p&gt;Dvnguye3: /* Code changes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''CSC/ECE 517 Spring 2022 - E2245: View for results of bidding&lt;br /&gt;
'''&lt;br /&gt;
== Problem Statement == &lt;br /&gt;
&lt;br /&gt;
When students sign up for topics, they are presented with a system to bid on their favorite topics. This process is allowed for both individual students as well as teams. As a result, many students will first sign up for topics, which can reduce the number of teams that get their first pick, and result in long waitlists. There are several bidding algorithms available to the instructors to give as many groups as possible their first choice. As this is an NP-complete problem, the algorithm has to use heuristics to guess efficiently. There needs to be a way for instructors to easily view and compare the results of the bidding algorithms to get a quantitative sense of their effectiveness.&lt;br /&gt;
&lt;br /&gt;
== Project Goal == &lt;br /&gt;
This project aims to solve this issue by giving clear and concise feedback of the algorithms in topics list in the assignment. However, since topics in the table potentially have several fields, care must be taken not to overcrowd the table with information. There are several different UI/UX approaches to display this information, and the chosen one should:&lt;br /&gt;
* Maximize useful information at a glance, while minimizing clutter&lt;br /&gt;
* Fit into the flow of the topic page&lt;br /&gt;
* Allow further information to be obtained if requested&lt;br /&gt;
* Not be visible if bidding is not used&lt;br /&gt;
&lt;br /&gt;
Some other miscellaneous goals of this project are to:&lt;br /&gt;
* Remove topic fields from view if they are not applicable&lt;br /&gt;
* Refactor code as needed&lt;br /&gt;
* Increase test coverage as appropriate&lt;br /&gt;
&lt;br /&gt;
== Previous Work == &lt;br /&gt;
&lt;br /&gt;
=== Current User Cases ===&lt;br /&gt;
&lt;br /&gt;
Below is the use case diagram that depicts the existing use cases that associated to the topics bidding features of the application. Notice that in order to check some bidding information for a topic/project, the Instructor has to impersonate a student.&lt;br /&gt;
&lt;br /&gt;
[[File:old-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Current Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
As an Instructor, the user after, being authenticated, needs to go to the Assignments &amp;gt;&amp;gt; Topics view to create the topics/projects and then once the bidding started, needs to impersonate a student to partially (at very minimal level) get the bidding process information &lt;br /&gt;
&lt;br /&gt;
[[File:Old-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
== Strategy to implement our plan to improve previous Works ==&lt;br /&gt;
&lt;br /&gt;
=== Change in Use Cases ===&lt;br /&gt;
&lt;br /&gt;
[[File:new-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
'''Student''': This actor is responsible for submitting and deleting bids for topics while the topic selection period is open for an assignment which uses the new lottery topic selection mechanism. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Instructor''': This actor is responsible for updating an assignment to use the new lottery topic selection as well as closing the bidding period and beginning the automatic topic selection. Instructor is also able to view the progress details of bids without having to impersonate students&lt;br /&gt;
&lt;br /&gt;
=== UI design ===&lt;br /&gt;
&lt;br /&gt;
The existing view with very limited information about the bidding process&lt;br /&gt;
&lt;br /&gt;
'''Before''':&lt;br /&gt;
&lt;br /&gt;
[[File:before-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With this proposed new view, the Instructor can gain a more complete view of the whole bidding process in one place.&lt;br /&gt;
&lt;br /&gt;
'''Proposed UI'''&lt;br /&gt;
&lt;br /&gt;
[[File:after-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
=== Change in Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
With the new flow and implementation, the Instructor now can have all (complete) information he/she needs in one place at the Topics list/details view instead of having to impersonate a student to get even some minimal, un-completed piece of information about the bidding. &lt;br /&gt;
&lt;br /&gt;
[[File:new-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Class Diagram ===&lt;br /&gt;
&lt;br /&gt;
[[File:class-diagram.png|1000px|Class diagram]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Track our works for transparency, collaboration and productivity  ===&lt;br /&gt;
&lt;br /&gt;
We've been working collaboratively to deliver this project as a team, by using Github Project feature to assign, track and collaborate our tasks. We've created an accompanying github project for this purpose, link can be found [https://github.com/dnguyenv/final-e2245/projects/1 here]&lt;br /&gt;
&lt;br /&gt;
[[File:E2245-project-tasks.png|1200px|project tasks]]&lt;br /&gt;
&lt;br /&gt;
=== Code changes ===&lt;br /&gt;
&lt;br /&gt;
From preliminary research, we believed we would need to add and modify, refactor code from almost all layers of the features (including Controllers, Models, Views but we end up decided to focus on delivering the feature with minimum code changes and regression tests, so majority of our code changes are on Views layer. Following are the changes we made (We also added links to our Github commits for each change so that the reviewers can link directly to github for more in-depth inspection/review)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''New Files added:'''&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_total_bids.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:total-bids.png|1200px|Total bids]]&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_total_1_2_bids.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:total-1-2-bids.png|1200px|1-2 bids]]&lt;br /&gt;
&lt;br /&gt;
'''Files changed:'''&lt;br /&gt;
&lt;br /&gt;
'''View:'''&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_add_signup_topics.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:add-signup-topics.png|1200px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_table_header.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:table-header.png|1200px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_table_line.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:table-line.png|1200px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
'''Helper:'''&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/helpers/sign_up_sheet_helper.rb]&lt;br /&gt;
&lt;br /&gt;
[[File:e2245-signup-sheet-helper.png|1200px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
'''Configuration:'''&lt;br /&gt;
&lt;br /&gt;
*config/locales/en_US.yml&lt;br /&gt;
&lt;br /&gt;
*config/locales/hi_IN.yml&lt;br /&gt;
&lt;br /&gt;
== Functionalities added ==&lt;br /&gt;
 &lt;br /&gt;
# [https://drive.google.com/file/d/1uSPnL0S0E2VqvTidk534pcv-2rX4dBtN/view?usp=sharing Here is the link to our recorded demo of the feature] &lt;br /&gt;
# The instructor should be able to see how many teams have bid for each topic without having to impersonate students&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is the screenshot of real app running that shows what the Instructor will see in Assignment &amp;gt;&amp;gt; Topic view:&lt;br /&gt;
&lt;br /&gt;
[[File:assignment-topics.png|1200px|Assignment Topics View]]&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
=== Manual UI testing for the deployed project. ===&lt;br /&gt;
&lt;br /&gt;
==== UI Testing ====&lt;br /&gt;
'''Instructor View''' &amp;lt;br&amp;gt;&lt;br /&gt;
* username: instructor6 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Student View'''  &amp;lt;br&amp;gt;&lt;br /&gt;
* username: student575 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular assignment: SELECT topic_id as topic_id, COUNT(b.topic_id) as count FROM sign_up_topics t JOIN bids b ON t.id = b.topic_id WHERE t.assignment_id = 834 GROUP BY t.id&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; SELECT topic_id as topic_id, COUNT(b.topic_id) as count FROM sign_up_topics t JOIN bids b ON t.id = b.topic_id WHERE t.assignment_id = 834 GROUP BY t.id;&lt;br /&gt;
+----------+-------+&lt;br /&gt;
| topic_id | count |&lt;br /&gt;
+----------+-------+&lt;br /&gt;
|     3918 |    29 |&lt;br /&gt;
|     3919 |    14 |&lt;br /&gt;
|     3920 |    12 |&lt;br /&gt;
|     3921 |    29 |&lt;br /&gt;
|     3922 |    19 |&lt;br /&gt;
|     3923 |    13 |&lt;br /&gt;
|     3924 |    14 |&lt;br /&gt;
|     3925 |    15 |&lt;br /&gt;
|     3926 |    11 |&lt;br /&gt;
|     3927 |    10 |&lt;br /&gt;
|     3928 |     9 |&lt;br /&gt;
|     3929 |     6 |&lt;br /&gt;
|     3930 |     7 |&lt;br /&gt;
|     3931 |     8 |&lt;br /&gt;
|     3932 |     5 |&lt;br /&gt;
|     3933 |     7 |&lt;br /&gt;
|     3934 |    17 |&lt;br /&gt;
|     3935 |    12 |&lt;br /&gt;
|     3936 |     4 |&lt;br /&gt;
|     3937 |    19 |&lt;br /&gt;
|     3938 |    10 |&lt;br /&gt;
+----------+-------+&lt;br /&gt;
21 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total of #1 bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular topic: select * from bids where priority = 1 and topic_id=3918;&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of #1 bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select count(*) from bids where priority = 1 and topic_id=3918;&lt;br /&gt;
+----------+&lt;br /&gt;
| count(*) |&lt;br /&gt;
+----------+&lt;br /&gt;
|       10 |&lt;br /&gt;
+----------+&lt;br /&gt;
1 row in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total of #2 bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular topic: select * from bids where priority = 2 and topic_id=3918;&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of # 2 bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select count(*) from bids where priority = 2 and topic_id=3921;&lt;br /&gt;
+----------+&lt;br /&gt;
| count(*) |&lt;br /&gt;
+----------+&lt;br /&gt;
|        6 |&lt;br /&gt;
+----------+&lt;br /&gt;
1 row in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
&lt;br /&gt;
Because of the time constraints, we could only implement that much of features and would like to layout some potential future works need to be done:&lt;br /&gt;
&lt;br /&gt;
# More testing for edge-cases&lt;br /&gt;
# Add automatic test for UIs&lt;br /&gt;
&lt;br /&gt;
==Team Roster ==&lt;br /&gt;
&lt;br /&gt;
Mentor: Ed Gehringer - efg@ncsu.edu&lt;br /&gt;
&lt;br /&gt;
*Duy Nguyen - dvnguye3@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Kwon HyeokJun - khyeokj@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Shawn Salekin - ssaleki@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*David Glymph - dwglymph@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
#[https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit?pli=1#heading=h.5cgh9aixuut7 Previous works]&lt;br /&gt;
#[https://github.com/dnguyenv/expertiza/tree/beta Team code repo]&lt;br /&gt;
#[https://github.com/expertiza/expertiza/tree/beta Upstream code repo]&lt;/div&gt;</summary>
		<author><name>Dvnguye3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145428</id>
		<title>CSC/ECE 517 Spring 2022 - E2245: View for results of bidding</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145428"/>
		<updated>2022-04-26T03:53:42Z</updated>

		<summary type="html">&lt;p&gt;Dvnguye3: /* Code changes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''CSC/ECE 517 Spring 2022 - E2245: View for results of bidding&lt;br /&gt;
'''&lt;br /&gt;
== Problem Statement == &lt;br /&gt;
&lt;br /&gt;
When students sign up for topics, they are presented with a system to bid on their favorite topics. This process is allowed for both individual students as well as teams. As a result, many students will first sign up for topics, which can reduce the number of teams that get their first pick, and result in long waitlists. There are several bidding algorithms available to the instructors to give as many groups as possible their first choice. As this is an NP-complete problem, the algorithm has to use heuristics to guess efficiently. There needs to be a way for instructors to easily view and compare the results of the bidding algorithms to get a quantitative sense of their effectiveness.&lt;br /&gt;
&lt;br /&gt;
== Project Goal == &lt;br /&gt;
This project aims to solve this issue by giving clear and concise feedback of the algorithms in topics list in the assignment. However, since topics in the table potentially have several fields, care must be taken not to overcrowd the table with information. There are several different UI/UX approaches to display this information, and the chosen one should:&lt;br /&gt;
* Maximize useful information at a glance, while minimizing clutter&lt;br /&gt;
* Fit into the flow of the topic page&lt;br /&gt;
* Allow further information to be obtained if requested&lt;br /&gt;
* Not be visible if bidding is not used&lt;br /&gt;
&lt;br /&gt;
Some other miscellaneous goals of this project are to:&lt;br /&gt;
* Remove topic fields from view if they are not applicable&lt;br /&gt;
* Refactor code as needed&lt;br /&gt;
* Increase test coverage as appropriate&lt;br /&gt;
&lt;br /&gt;
== Previous Work == &lt;br /&gt;
&lt;br /&gt;
=== Current User Cases ===&lt;br /&gt;
&lt;br /&gt;
Below is the use case diagram that depicts the existing use cases that associated to the topics bidding features of the application. Notice that in order to check some bidding information for a topic/project, the Instructor has to impersonate a student.&lt;br /&gt;
&lt;br /&gt;
[[File:old-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Current Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
As an Instructor, the user after, being authenticated, needs to go to the Assignments &amp;gt;&amp;gt; Topics view to create the topics/projects and then once the bidding started, needs to impersonate a student to partially (at very minimal level) get the bidding process information &lt;br /&gt;
&lt;br /&gt;
[[File:Old-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
== Strategy to implement our plan to improve previous Works ==&lt;br /&gt;
&lt;br /&gt;
=== Change in Use Cases ===&lt;br /&gt;
&lt;br /&gt;
[[File:new-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
'''Student''': This actor is responsible for submitting and deleting bids for topics while the topic selection period is open for an assignment which uses the new lottery topic selection mechanism. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Instructor''': This actor is responsible for updating an assignment to use the new lottery topic selection as well as closing the bidding period and beginning the automatic topic selection. Instructor is also able to view the progress details of bids without having to impersonate students&lt;br /&gt;
&lt;br /&gt;
=== UI design ===&lt;br /&gt;
&lt;br /&gt;
The existing view with very limited information about the bidding process&lt;br /&gt;
&lt;br /&gt;
'''Before''':&lt;br /&gt;
&lt;br /&gt;
[[File:before-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With this proposed new view, the Instructor can gain a more complete view of the whole bidding process in one place.&lt;br /&gt;
&lt;br /&gt;
'''Proposed UI'''&lt;br /&gt;
&lt;br /&gt;
[[File:after-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
=== Change in Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
With the new flow and implementation, the Instructor now can have all (complete) information he/she needs in one place at the Topics list/details view instead of having to impersonate a student to get even some minimal, un-completed piece of information about the bidding. &lt;br /&gt;
&lt;br /&gt;
[[File:new-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Class Diagram ===&lt;br /&gt;
&lt;br /&gt;
[[File:class-diagram.png|1000px|Class diagram]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Track our works for transparency, collaboration and productivity  ===&lt;br /&gt;
&lt;br /&gt;
We've been working collaboratively to deliver this project as a team, by using Github Project feature to assign, track and collaborate our tasks. We've created an accompanying github project for this purpose, link can be found [https://github.com/dnguyenv/final-e2245/projects/1 here]&lt;br /&gt;
&lt;br /&gt;
[[File:E2245-project-tasks.png|1200px|project tasks]]&lt;br /&gt;
&lt;br /&gt;
=== Code changes ===&lt;br /&gt;
&lt;br /&gt;
From preliminary research, we believed we would need to add and modify, refactor code from almost all layers of the features (including Controllers, Models, Views but we end up decided to focus on delivering the feature with minimum code changes and regression tests, so majority of our code changes are on Views layer. Following are the changes we made (We also added links to our Github commits for each change so that the reviewers can link directly to github for more in-depth inspection/review)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''New Files added:'''&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_total_bids.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:total-bids.png|1200px|Total bids]]&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_total_1_2_bids.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:total-1-2-bids.png|1200px|1-2 bids]]&lt;br /&gt;
&lt;br /&gt;
'''Files changed:'''&lt;br /&gt;
&lt;br /&gt;
'''View:'''&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_actions.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:e2245-actions.png|1200px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_add_signup_topics.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:add-signup-topics.png|1200px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_table_header.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:table-header.png|1200px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_table_line.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:table-line.png|1200px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
'''Helper:'''&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/helpers/sign_up_sheet_helper.rb]&lt;br /&gt;
&lt;br /&gt;
[[File:e2245-signup-sheet-helper.png|1200px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
'''Configuration:'''&lt;br /&gt;
&lt;br /&gt;
*config/locales/en_US.yml&lt;br /&gt;
&lt;br /&gt;
*config/locales/hi_IN.yml&lt;br /&gt;
&lt;br /&gt;
== Functionalities added ==&lt;br /&gt;
 &lt;br /&gt;
# [https://drive.google.com/file/d/1uSPnL0S0E2VqvTidk534pcv-2rX4dBtN/view?usp=sharing Here is the link to our recorded demo of the feature] &lt;br /&gt;
# The instructor should be able to see how many teams have bid for each topic without having to impersonate students&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is the screenshot of real app running that shows what the Instructor will see in Assignment &amp;gt;&amp;gt; Topic view:&lt;br /&gt;
&lt;br /&gt;
[[File:assignment-topics.png|1200px|Assignment Topics View]]&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
=== Manual UI testing for the deployed project. ===&lt;br /&gt;
&lt;br /&gt;
==== UI Testing ====&lt;br /&gt;
'''Instructor View''' &amp;lt;br&amp;gt;&lt;br /&gt;
* username: instructor6 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Student View'''  &amp;lt;br&amp;gt;&lt;br /&gt;
* username: student575 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular assignment: SELECT topic_id as topic_id, COUNT(b.topic_id) as count FROM sign_up_topics t JOIN bids b ON t.id = b.topic_id WHERE t.assignment_id = 834 GROUP BY t.id&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; SELECT topic_id as topic_id, COUNT(b.topic_id) as count FROM sign_up_topics t JOIN bids b ON t.id = b.topic_id WHERE t.assignment_id = 834 GROUP BY t.id;&lt;br /&gt;
+----------+-------+&lt;br /&gt;
| topic_id | count |&lt;br /&gt;
+----------+-------+&lt;br /&gt;
|     3918 |    29 |&lt;br /&gt;
|     3919 |    14 |&lt;br /&gt;
|     3920 |    12 |&lt;br /&gt;
|     3921 |    29 |&lt;br /&gt;
|     3922 |    19 |&lt;br /&gt;
|     3923 |    13 |&lt;br /&gt;
|     3924 |    14 |&lt;br /&gt;
|     3925 |    15 |&lt;br /&gt;
|     3926 |    11 |&lt;br /&gt;
|     3927 |    10 |&lt;br /&gt;
|     3928 |     9 |&lt;br /&gt;
|     3929 |     6 |&lt;br /&gt;
|     3930 |     7 |&lt;br /&gt;
|     3931 |     8 |&lt;br /&gt;
|     3932 |     5 |&lt;br /&gt;
|     3933 |     7 |&lt;br /&gt;
|     3934 |    17 |&lt;br /&gt;
|     3935 |    12 |&lt;br /&gt;
|     3936 |     4 |&lt;br /&gt;
|     3937 |    19 |&lt;br /&gt;
|     3938 |    10 |&lt;br /&gt;
+----------+-------+&lt;br /&gt;
21 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total of #1 bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular topic: select * from bids where priority = 1 and topic_id=3918;&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of #1 bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select count(*) from bids where priority = 1 and topic_id=3918;&lt;br /&gt;
+----------+&lt;br /&gt;
| count(*) |&lt;br /&gt;
+----------+&lt;br /&gt;
|       10 |&lt;br /&gt;
+----------+&lt;br /&gt;
1 row in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total of #2 bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular topic: select * from bids where priority = 2 and topic_id=3918;&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of # 2 bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select count(*) from bids where priority = 2 and topic_id=3921;&lt;br /&gt;
+----------+&lt;br /&gt;
| count(*) |&lt;br /&gt;
+----------+&lt;br /&gt;
|        6 |&lt;br /&gt;
+----------+&lt;br /&gt;
1 row in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
&lt;br /&gt;
Because of the time constraints, we could only implement that much of features and would like to layout some potential future works need to be done:&lt;br /&gt;
&lt;br /&gt;
# More testing for edge-cases&lt;br /&gt;
# Add automatic test for UIs&lt;br /&gt;
&lt;br /&gt;
==Team Roster ==&lt;br /&gt;
&lt;br /&gt;
Mentor: Ed Gehringer - efg@ncsu.edu&lt;br /&gt;
&lt;br /&gt;
*Duy Nguyen - dvnguye3@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Kwon HyeokJun - khyeokj@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Shawn Salekin - ssaleki@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*David Glymph - dwglymph@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
#[https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit?pli=1#heading=h.5cgh9aixuut7 Previous works]&lt;br /&gt;
#[https://github.com/dnguyenv/expertiza/tree/beta Team code repo]&lt;br /&gt;
#[https://github.com/expertiza/expertiza/tree/beta Upstream code repo]&lt;/div&gt;</summary>
		<author><name>Dvnguye3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145427</id>
		<title>CSC/ECE 517 Spring 2022 - E2245: View for results of bidding</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145427"/>
		<updated>2022-04-26T03:53:06Z</updated>

		<summary type="html">&lt;p&gt;Dvnguye3: /* Code changes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''CSC/ECE 517 Spring 2022 - E2245: View for results of bidding&lt;br /&gt;
'''&lt;br /&gt;
== Problem Statement == &lt;br /&gt;
&lt;br /&gt;
When students sign up for topics, they are presented with a system to bid on their favorite topics. This process is allowed for both individual students as well as teams. As a result, many students will first sign up for topics, which can reduce the number of teams that get their first pick, and result in long waitlists. There are several bidding algorithms available to the instructors to give as many groups as possible their first choice. As this is an NP-complete problem, the algorithm has to use heuristics to guess efficiently. There needs to be a way for instructors to easily view and compare the results of the bidding algorithms to get a quantitative sense of their effectiveness.&lt;br /&gt;
&lt;br /&gt;
== Project Goal == &lt;br /&gt;
This project aims to solve this issue by giving clear and concise feedback of the algorithms in topics list in the assignment. However, since topics in the table potentially have several fields, care must be taken not to overcrowd the table with information. There are several different UI/UX approaches to display this information, and the chosen one should:&lt;br /&gt;
* Maximize useful information at a glance, while minimizing clutter&lt;br /&gt;
* Fit into the flow of the topic page&lt;br /&gt;
* Allow further information to be obtained if requested&lt;br /&gt;
* Not be visible if bidding is not used&lt;br /&gt;
&lt;br /&gt;
Some other miscellaneous goals of this project are to:&lt;br /&gt;
* Remove topic fields from view if they are not applicable&lt;br /&gt;
* Refactor code as needed&lt;br /&gt;
* Increase test coverage as appropriate&lt;br /&gt;
&lt;br /&gt;
== Previous Work == &lt;br /&gt;
&lt;br /&gt;
=== Current User Cases ===&lt;br /&gt;
&lt;br /&gt;
Below is the use case diagram that depicts the existing use cases that associated to the topics bidding features of the application. Notice that in order to check some bidding information for a topic/project, the Instructor has to impersonate a student.&lt;br /&gt;
&lt;br /&gt;
[[File:old-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Current Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
As an Instructor, the user after, being authenticated, needs to go to the Assignments &amp;gt;&amp;gt; Topics view to create the topics/projects and then once the bidding started, needs to impersonate a student to partially (at very minimal level) get the bidding process information &lt;br /&gt;
&lt;br /&gt;
[[File:Old-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
== Strategy to implement our plan to improve previous Works ==&lt;br /&gt;
&lt;br /&gt;
=== Change in Use Cases ===&lt;br /&gt;
&lt;br /&gt;
[[File:new-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
'''Student''': This actor is responsible for submitting and deleting bids for topics while the topic selection period is open for an assignment which uses the new lottery topic selection mechanism. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Instructor''': This actor is responsible for updating an assignment to use the new lottery topic selection as well as closing the bidding period and beginning the automatic topic selection. Instructor is also able to view the progress details of bids without having to impersonate students&lt;br /&gt;
&lt;br /&gt;
=== UI design ===&lt;br /&gt;
&lt;br /&gt;
The existing view with very limited information about the bidding process&lt;br /&gt;
&lt;br /&gt;
'''Before''':&lt;br /&gt;
&lt;br /&gt;
[[File:before-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With this proposed new view, the Instructor can gain a more complete view of the whole bidding process in one place.&lt;br /&gt;
&lt;br /&gt;
'''Proposed UI'''&lt;br /&gt;
&lt;br /&gt;
[[File:after-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
=== Change in Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
With the new flow and implementation, the Instructor now can have all (complete) information he/she needs in one place at the Topics list/details view instead of having to impersonate a student to get even some minimal, un-completed piece of information about the bidding. &lt;br /&gt;
&lt;br /&gt;
[[File:new-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Class Diagram ===&lt;br /&gt;
&lt;br /&gt;
[[File:class-diagram.png|1000px|Class diagram]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Track our works for transparency, collaboration and productivity  ===&lt;br /&gt;
&lt;br /&gt;
We've been working collaboratively to deliver this project as a team, by using Github Project feature to assign, track and collaborate our tasks. We've created an accompanying github project for this purpose, link can be found [https://github.com/dnguyenv/final-e2245/projects/1 here]&lt;br /&gt;
&lt;br /&gt;
[[File:E2245-project-tasks.png|1200px|project tasks]]&lt;br /&gt;
&lt;br /&gt;
=== Code changes ===&lt;br /&gt;
&lt;br /&gt;
From preliminary research, we believed we would need to add and modify, refactor code from almost all layers of the features (including Controllers, Models, Views but we end up decided to focus on delivering the feature with minimum code changes and regression tests, so majority of our code changes are on Views layer. Following are the changes we made (We also added links to our Github commits for each change so that the reviewers can link directly to github for more in-depth inspection/review)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''New Files added:'''&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_total_bids.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:total-bids.png|1200px|Total bids]]&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_total_1_2_bids.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:total-1-2-bids.png|1200px|1-2 bids]]&lt;br /&gt;
&lt;br /&gt;
'''Files changed:'''&lt;br /&gt;
&lt;br /&gt;
'''View:'''&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_actions.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:e2245-actions.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_add_signup_topics.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:add-signup-topics.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_table_header.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:table-header.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_table_line.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:table-line.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
'''Helper:'''&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/helpers/sign_up_sheet_helper.rb]&lt;br /&gt;
&lt;br /&gt;
[[File:e2245-signup-sheet-helper.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
'''Configuration:'''&lt;br /&gt;
&lt;br /&gt;
*config/locales/en_US.yml&lt;br /&gt;
&lt;br /&gt;
*config/locales/hi_IN.yml&lt;br /&gt;
&lt;br /&gt;
== Functionalities added ==&lt;br /&gt;
 &lt;br /&gt;
# [https://drive.google.com/file/d/1uSPnL0S0E2VqvTidk534pcv-2rX4dBtN/view?usp=sharing Here is the link to our recorded demo of the feature] &lt;br /&gt;
# The instructor should be able to see how many teams have bid for each topic without having to impersonate students&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is the screenshot of real app running that shows what the Instructor will see in Assignment &amp;gt;&amp;gt; Topic view:&lt;br /&gt;
&lt;br /&gt;
[[File:assignment-topics.png|1200px|Assignment Topics View]]&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
=== Manual UI testing for the deployed project. ===&lt;br /&gt;
&lt;br /&gt;
==== UI Testing ====&lt;br /&gt;
'''Instructor View''' &amp;lt;br&amp;gt;&lt;br /&gt;
* username: instructor6 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Student View'''  &amp;lt;br&amp;gt;&lt;br /&gt;
* username: student575 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular assignment: SELECT topic_id as topic_id, COUNT(b.topic_id) as count FROM sign_up_topics t JOIN bids b ON t.id = b.topic_id WHERE t.assignment_id = 834 GROUP BY t.id&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; SELECT topic_id as topic_id, COUNT(b.topic_id) as count FROM sign_up_topics t JOIN bids b ON t.id = b.topic_id WHERE t.assignment_id = 834 GROUP BY t.id;&lt;br /&gt;
+----------+-------+&lt;br /&gt;
| topic_id | count |&lt;br /&gt;
+----------+-------+&lt;br /&gt;
|     3918 |    29 |&lt;br /&gt;
|     3919 |    14 |&lt;br /&gt;
|     3920 |    12 |&lt;br /&gt;
|     3921 |    29 |&lt;br /&gt;
|     3922 |    19 |&lt;br /&gt;
|     3923 |    13 |&lt;br /&gt;
|     3924 |    14 |&lt;br /&gt;
|     3925 |    15 |&lt;br /&gt;
|     3926 |    11 |&lt;br /&gt;
|     3927 |    10 |&lt;br /&gt;
|     3928 |     9 |&lt;br /&gt;
|     3929 |     6 |&lt;br /&gt;
|     3930 |     7 |&lt;br /&gt;
|     3931 |     8 |&lt;br /&gt;
|     3932 |     5 |&lt;br /&gt;
|     3933 |     7 |&lt;br /&gt;
|     3934 |    17 |&lt;br /&gt;
|     3935 |    12 |&lt;br /&gt;
|     3936 |     4 |&lt;br /&gt;
|     3937 |    19 |&lt;br /&gt;
|     3938 |    10 |&lt;br /&gt;
+----------+-------+&lt;br /&gt;
21 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total of #1 bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular topic: select * from bids where priority = 1 and topic_id=3918;&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of #1 bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select count(*) from bids where priority = 1 and topic_id=3918;&lt;br /&gt;
+----------+&lt;br /&gt;
| count(*) |&lt;br /&gt;
+----------+&lt;br /&gt;
|       10 |&lt;br /&gt;
+----------+&lt;br /&gt;
1 row in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total of #2 bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular topic: select * from bids where priority = 2 and topic_id=3918;&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of # 2 bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select count(*) from bids where priority = 2 and topic_id=3921;&lt;br /&gt;
+----------+&lt;br /&gt;
| count(*) |&lt;br /&gt;
+----------+&lt;br /&gt;
|        6 |&lt;br /&gt;
+----------+&lt;br /&gt;
1 row in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
&lt;br /&gt;
Because of the time constraints, we could only implement that much of features and would like to layout some potential future works need to be done:&lt;br /&gt;
&lt;br /&gt;
# More testing for edge-cases&lt;br /&gt;
# Add automatic test for UIs&lt;br /&gt;
&lt;br /&gt;
==Team Roster ==&lt;br /&gt;
&lt;br /&gt;
Mentor: Ed Gehringer - efg@ncsu.edu&lt;br /&gt;
&lt;br /&gt;
*Duy Nguyen - dvnguye3@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Kwon HyeokJun - khyeokj@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Shawn Salekin - ssaleki@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*David Glymph - dwglymph@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
#[https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit?pli=1#heading=h.5cgh9aixuut7 Previous works]&lt;br /&gt;
#[https://github.com/dnguyenv/expertiza/tree/beta Team code repo]&lt;br /&gt;
#[https://github.com/expertiza/expertiza/tree/beta Upstream code repo]&lt;/div&gt;</summary>
		<author><name>Dvnguye3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145424</id>
		<title>CSC/ECE 517 Spring 2022 - E2245: View for results of bidding</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145424"/>
		<updated>2022-04-26T03:52:02Z</updated>

		<summary type="html">&lt;p&gt;Dvnguye3: /* Code changes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''CSC/ECE 517 Spring 2022 - E2245: View for results of bidding&lt;br /&gt;
'''&lt;br /&gt;
== Problem Statement == &lt;br /&gt;
&lt;br /&gt;
When students sign up for topics, they are presented with a system to bid on their favorite topics. This process is allowed for both individual students as well as teams. As a result, many students will first sign up for topics, which can reduce the number of teams that get their first pick, and result in long waitlists. There are several bidding algorithms available to the instructors to give as many groups as possible their first choice. As this is an NP-complete problem, the algorithm has to use heuristics to guess efficiently. There needs to be a way for instructors to easily view and compare the results of the bidding algorithms to get a quantitative sense of their effectiveness.&lt;br /&gt;
&lt;br /&gt;
== Project Goal == &lt;br /&gt;
This project aims to solve this issue by giving clear and concise feedback of the algorithms in topics list in the assignment. However, since topics in the table potentially have several fields, care must be taken not to overcrowd the table with information. There are several different UI/UX approaches to display this information, and the chosen one should:&lt;br /&gt;
* Maximize useful information at a glance, while minimizing clutter&lt;br /&gt;
* Fit into the flow of the topic page&lt;br /&gt;
* Allow further information to be obtained if requested&lt;br /&gt;
* Not be visible if bidding is not used&lt;br /&gt;
&lt;br /&gt;
Some other miscellaneous goals of this project are to:&lt;br /&gt;
* Remove topic fields from view if they are not applicable&lt;br /&gt;
* Refactor code as needed&lt;br /&gt;
* Increase test coverage as appropriate&lt;br /&gt;
&lt;br /&gt;
== Previous Work == &lt;br /&gt;
&lt;br /&gt;
=== Current User Cases ===&lt;br /&gt;
&lt;br /&gt;
Below is the use case diagram that depicts the existing use cases that associated to the topics bidding features of the application. Notice that in order to check some bidding information for a topic/project, the Instructor has to impersonate a student.&lt;br /&gt;
&lt;br /&gt;
[[File:old-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Current Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
As an Instructor, the user after, being authenticated, needs to go to the Assignments &amp;gt;&amp;gt; Topics view to create the topics/projects and then once the bidding started, needs to impersonate a student to partially (at very minimal level) get the bidding process information &lt;br /&gt;
&lt;br /&gt;
[[File:Old-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
== Strategy to implement our plan to improve previous Works ==&lt;br /&gt;
&lt;br /&gt;
=== Change in Use Cases ===&lt;br /&gt;
&lt;br /&gt;
[[File:new-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
'''Student''': This actor is responsible for submitting and deleting bids for topics while the topic selection period is open for an assignment which uses the new lottery topic selection mechanism. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Instructor''': This actor is responsible for updating an assignment to use the new lottery topic selection as well as closing the bidding period and beginning the automatic topic selection. Instructor is also able to view the progress details of bids without having to impersonate students&lt;br /&gt;
&lt;br /&gt;
=== UI design ===&lt;br /&gt;
&lt;br /&gt;
The existing view with very limited information about the bidding process&lt;br /&gt;
&lt;br /&gt;
'''Before''':&lt;br /&gt;
&lt;br /&gt;
[[File:before-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With this proposed new view, the Instructor can gain a more complete view of the whole bidding process in one place.&lt;br /&gt;
&lt;br /&gt;
'''Proposed UI'''&lt;br /&gt;
&lt;br /&gt;
[[File:after-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
=== Change in Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
With the new flow and implementation, the Instructor now can have all (complete) information he/she needs in one place at the Topics list/details view instead of having to impersonate a student to get even some minimal, un-completed piece of information about the bidding. &lt;br /&gt;
&lt;br /&gt;
[[File:new-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Class Diagram ===&lt;br /&gt;
&lt;br /&gt;
[[File:class-diagram.png|1000px|Class diagram]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Track our works for transparency, collaboration and productivity  ===&lt;br /&gt;
&lt;br /&gt;
We've been working collaboratively to deliver this project as a team, by using Github Project feature to assign, track and collaborate our tasks. We've created an accompanying github project for this purpose, link can be found [https://github.com/dnguyenv/final-e2245/projects/1 here]&lt;br /&gt;
&lt;br /&gt;
[[File:E2245-project-tasks.png|1200px|project tasks]]&lt;br /&gt;
&lt;br /&gt;
=== Code changes ===&lt;br /&gt;
&lt;br /&gt;
From preliminary research, we believed we would need to add and modify, refactor code from almost all layers of the features (including Controllers, Models, Views but we end up decided to focus on delivering the feature with minimum code changes and regression tests, so majority of our code changes are on Views layer. Following are the changes we made (We also added links to our Github commits for each change so that the reviewers can link directly to github for more in-depth inspection/review)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''New Files added:'''&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_total_bids.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:total-bids.png|1921px|Total bids]]&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_total_1_2_bids.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:total-1-2-bids.png|1921px|1-2 bids]]&lt;br /&gt;
&lt;br /&gt;
'''Files changed:'''&lt;br /&gt;
&lt;br /&gt;
'''View:'''&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_actions.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:e2245-actions.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_add_signup_topics.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:add-signup-topics.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_table_header.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:table-header.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_table_line.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:table-line.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
'''Helper:'''&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/helpers/sign_up_sheet_helper.rb]&lt;br /&gt;
&lt;br /&gt;
[[File:e2245-signup-sheet-helper.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
'''Configuration:'''&lt;br /&gt;
&lt;br /&gt;
*config/locales/en_US.yml&lt;br /&gt;
&lt;br /&gt;
*config/locales/hi_IN.yml&lt;br /&gt;
&lt;br /&gt;
== Functionalities added ==&lt;br /&gt;
 &lt;br /&gt;
# [https://drive.google.com/file/d/1uSPnL0S0E2VqvTidk534pcv-2rX4dBtN/view?usp=sharing Here is the link to our recorded demo of the feature] &lt;br /&gt;
# The instructor should be able to see how many teams have bid for each topic without having to impersonate students&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is the screenshot of real app running that shows what the Instructor will see in Assignment &amp;gt;&amp;gt; Topic view:&lt;br /&gt;
&lt;br /&gt;
[[File:assignment-topics.png|1200px|Assignment Topics View]]&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
=== Manual UI testing for the deployed project. ===&lt;br /&gt;
&lt;br /&gt;
==== UI Testing ====&lt;br /&gt;
'''Instructor View''' &amp;lt;br&amp;gt;&lt;br /&gt;
* username: instructor6 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Student View'''  &amp;lt;br&amp;gt;&lt;br /&gt;
* username: student575 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular assignment: SELECT topic_id as topic_id, COUNT(b.topic_id) as count FROM sign_up_topics t JOIN bids b ON t.id = b.topic_id WHERE t.assignment_id = 834 GROUP BY t.id&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; SELECT topic_id as topic_id, COUNT(b.topic_id) as count FROM sign_up_topics t JOIN bids b ON t.id = b.topic_id WHERE t.assignment_id = 834 GROUP BY t.id;&lt;br /&gt;
+----------+-------+&lt;br /&gt;
| topic_id | count |&lt;br /&gt;
+----------+-------+&lt;br /&gt;
|     3918 |    29 |&lt;br /&gt;
|     3919 |    14 |&lt;br /&gt;
|     3920 |    12 |&lt;br /&gt;
|     3921 |    29 |&lt;br /&gt;
|     3922 |    19 |&lt;br /&gt;
|     3923 |    13 |&lt;br /&gt;
|     3924 |    14 |&lt;br /&gt;
|     3925 |    15 |&lt;br /&gt;
|     3926 |    11 |&lt;br /&gt;
|     3927 |    10 |&lt;br /&gt;
|     3928 |     9 |&lt;br /&gt;
|     3929 |     6 |&lt;br /&gt;
|     3930 |     7 |&lt;br /&gt;
|     3931 |     8 |&lt;br /&gt;
|     3932 |     5 |&lt;br /&gt;
|     3933 |     7 |&lt;br /&gt;
|     3934 |    17 |&lt;br /&gt;
|     3935 |    12 |&lt;br /&gt;
|     3936 |     4 |&lt;br /&gt;
|     3937 |    19 |&lt;br /&gt;
|     3938 |    10 |&lt;br /&gt;
+----------+-------+&lt;br /&gt;
21 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total of #1 bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular topic: select * from bids where priority = 1 and topic_id=3918;&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of #1 bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select count(*) from bids where priority = 1 and topic_id=3918;&lt;br /&gt;
+----------+&lt;br /&gt;
| count(*) |&lt;br /&gt;
+----------+&lt;br /&gt;
|       10 |&lt;br /&gt;
+----------+&lt;br /&gt;
1 row in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total of #2 bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular topic: select * from bids where priority = 2 and topic_id=3918;&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of # 2 bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select count(*) from bids where priority = 2 and topic_id=3921;&lt;br /&gt;
+----------+&lt;br /&gt;
| count(*) |&lt;br /&gt;
+----------+&lt;br /&gt;
|        6 |&lt;br /&gt;
+----------+&lt;br /&gt;
1 row in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
&lt;br /&gt;
Because of the time constraints, we could only implement that much of features and would like to layout some potential future works need to be done:&lt;br /&gt;
&lt;br /&gt;
# More testing for edge-cases&lt;br /&gt;
# Add automatic test for UIs&lt;br /&gt;
&lt;br /&gt;
==Team Roster ==&lt;br /&gt;
&lt;br /&gt;
Mentor: Ed Gehringer - efg@ncsu.edu&lt;br /&gt;
&lt;br /&gt;
*Duy Nguyen - dvnguye3@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Kwon HyeokJun - khyeokj@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Shawn Salekin - ssaleki@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*David Glymph - dwglymph@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
#[https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit?pli=1#heading=h.5cgh9aixuut7 Previous works]&lt;br /&gt;
#[https://github.com/dnguyenv/expertiza/tree/beta Team code repo]&lt;br /&gt;
#[https://github.com/expertiza/expertiza/tree/beta Upstream code repo]&lt;/div&gt;</summary>
		<author><name>Dvnguye3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Total-1-2-bids.png&amp;diff=145421</id>
		<title>File:Total-1-2-bids.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Total-1-2-bids.png&amp;diff=145421"/>
		<updated>2022-04-26T03:50:30Z</updated>

		<summary type="html">&lt;p&gt;Dvnguye3: Dvnguye3 uploaded a new version of File:Total-1-2-bids.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Dvnguye3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Total-bids.png&amp;diff=145420</id>
		<title>File:Total-bids.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Total-bids.png&amp;diff=145420"/>
		<updated>2022-04-26T03:49:50Z</updated>

		<summary type="html">&lt;p&gt;Dvnguye3: Dvnguye3 uploaded a new version of File:Total-bids.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Dvnguye3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145417</id>
		<title>CSC/ECE 517 Spring 2022 - E2245: View for results of bidding</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145417"/>
		<updated>2022-04-26T03:48:37Z</updated>

		<summary type="html">&lt;p&gt;Dvnguye3: /* Code changes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''CSC/ECE 517 Spring 2022 - E2245: View for results of bidding&lt;br /&gt;
'''&lt;br /&gt;
== Problem Statement == &lt;br /&gt;
&lt;br /&gt;
When students sign up for topics, they are presented with a system to bid on their favorite topics. This process is allowed for both individual students as well as teams. As a result, many students will first sign up for topics, which can reduce the number of teams that get their first pick, and result in long waitlists. There are several bidding algorithms available to the instructors to give as many groups as possible their first choice. As this is an NP-complete problem, the algorithm has to use heuristics to guess efficiently. There needs to be a way for instructors to easily view and compare the results of the bidding algorithms to get a quantitative sense of their effectiveness.&lt;br /&gt;
&lt;br /&gt;
== Project Goal == &lt;br /&gt;
This project aims to solve this issue by giving clear and concise feedback of the algorithms in topics list in the assignment. However, since topics in the table potentially have several fields, care must be taken not to overcrowd the table with information. There are several different UI/UX approaches to display this information, and the chosen one should:&lt;br /&gt;
* Maximize useful information at a glance, while minimizing clutter&lt;br /&gt;
* Fit into the flow of the topic page&lt;br /&gt;
* Allow further information to be obtained if requested&lt;br /&gt;
* Not be visible if bidding is not used&lt;br /&gt;
&lt;br /&gt;
Some other miscellaneous goals of this project are to:&lt;br /&gt;
* Remove topic fields from view if they are not applicable&lt;br /&gt;
* Refactor code as needed&lt;br /&gt;
* Increase test coverage as appropriate&lt;br /&gt;
&lt;br /&gt;
== Previous Work == &lt;br /&gt;
&lt;br /&gt;
=== Current User Cases ===&lt;br /&gt;
&lt;br /&gt;
Below is the use case diagram that depicts the existing use cases that associated to the topics bidding features of the application. Notice that in order to check some bidding information for a topic/project, the Instructor has to impersonate a student.&lt;br /&gt;
&lt;br /&gt;
[[File:old-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Current Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
As an Instructor, the user after, being authenticated, needs to go to the Assignments &amp;gt;&amp;gt; Topics view to create the topics/projects and then once the bidding started, needs to impersonate a student to partially (at very minimal level) get the bidding process information &lt;br /&gt;
&lt;br /&gt;
[[File:Old-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
== Strategy to implement our plan to improve previous Works ==&lt;br /&gt;
&lt;br /&gt;
=== Change in Use Cases ===&lt;br /&gt;
&lt;br /&gt;
[[File:new-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
'''Student''': This actor is responsible for submitting and deleting bids for topics while the topic selection period is open for an assignment which uses the new lottery topic selection mechanism. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Instructor''': This actor is responsible for updating an assignment to use the new lottery topic selection as well as closing the bidding period and beginning the automatic topic selection. Instructor is also able to view the progress details of bids without having to impersonate students&lt;br /&gt;
&lt;br /&gt;
=== UI design ===&lt;br /&gt;
&lt;br /&gt;
The existing view with very limited information about the bidding process&lt;br /&gt;
&lt;br /&gt;
'''Before''':&lt;br /&gt;
&lt;br /&gt;
[[File:before-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With this proposed new view, the Instructor can gain a more complete view of the whole bidding process in one place.&lt;br /&gt;
&lt;br /&gt;
'''Proposed UI'''&lt;br /&gt;
&lt;br /&gt;
[[File:after-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
=== Change in Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
With the new flow and implementation, the Instructor now can have all (complete) information he/she needs in one place at the Topics list/details view instead of having to impersonate a student to get even some minimal, un-completed piece of information about the bidding. &lt;br /&gt;
&lt;br /&gt;
[[File:new-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Class Diagram ===&lt;br /&gt;
&lt;br /&gt;
[[File:class-diagram.png|1000px|Class diagram]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Track our works for transparency, collaboration and productivity  ===&lt;br /&gt;
&lt;br /&gt;
We've been working collaboratively to deliver this project as a team, by using Github Project feature to assign, track and collaborate our tasks. We've created an accompanying github project for this purpose, link can be found [https://github.com/dnguyenv/final-e2245/projects/1 here]&lt;br /&gt;
&lt;br /&gt;
[[File:E2245-project-tasks.png|1200px|project tasks]]&lt;br /&gt;
&lt;br /&gt;
=== Code changes ===&lt;br /&gt;
&lt;br /&gt;
From preliminary research, we believed we would need to add and modify, refactor code from almost all layers of the features (including Controllers, Models, Views but we end up decided to focus on delivering the feature with minimum code changes and regression tests, so majority of our code changes are on Views layer. Following are the changes we made (We also added links to our Github commits for each change so that the reviewers can link directly to github for more in-depth inspection/review)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''New Files added:'''&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_total_bids.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:total-bids.png|1000px|Total bids]]&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_total_1_2_bids.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:total-1-2-bids.png|1000px|1-2 bids]]&lt;br /&gt;
&lt;br /&gt;
'''Files changed:'''&lt;br /&gt;
&lt;br /&gt;
'''View:'''&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_actions.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:e2245-actions.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_add_signup_topics.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:add-signup-topics.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_table_header.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:table-header.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_table_line.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:table-line.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
'''Helper:'''&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/helpers/sign_up_sheet_helper.rb]&lt;br /&gt;
&lt;br /&gt;
[[File:e2245-signup-sheet-helper.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
'''Configuration:'''&lt;br /&gt;
&lt;br /&gt;
*config/locales/en_US.yml&lt;br /&gt;
&lt;br /&gt;
*config/locales/hi_IN.yml&lt;br /&gt;
&lt;br /&gt;
== Functionalities added ==&lt;br /&gt;
 &lt;br /&gt;
# [https://drive.google.com/file/d/1uSPnL0S0E2VqvTidk534pcv-2rX4dBtN/view?usp=sharing Here is the link to our recorded demo of the feature] &lt;br /&gt;
# The instructor should be able to see how many teams have bid for each topic without having to impersonate students&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is the screenshot of real app running that shows what the Instructor will see in Assignment &amp;gt;&amp;gt; Topic view:&lt;br /&gt;
&lt;br /&gt;
[[File:assignment-topics.png|1200px|Assignment Topics View]]&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
=== Manual UI testing for the deployed project. ===&lt;br /&gt;
&lt;br /&gt;
==== UI Testing ====&lt;br /&gt;
'''Instructor View''' &amp;lt;br&amp;gt;&lt;br /&gt;
* username: instructor6 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Student View'''  &amp;lt;br&amp;gt;&lt;br /&gt;
* username: student575 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular assignment: SELECT topic_id as topic_id, COUNT(b.topic_id) as count FROM sign_up_topics t JOIN bids b ON t.id = b.topic_id WHERE t.assignment_id = 834 GROUP BY t.id&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; SELECT topic_id as topic_id, COUNT(b.topic_id) as count FROM sign_up_topics t JOIN bids b ON t.id = b.topic_id WHERE t.assignment_id = 834 GROUP BY t.id;&lt;br /&gt;
+----------+-------+&lt;br /&gt;
| topic_id | count |&lt;br /&gt;
+----------+-------+&lt;br /&gt;
|     3918 |    29 |&lt;br /&gt;
|     3919 |    14 |&lt;br /&gt;
|     3920 |    12 |&lt;br /&gt;
|     3921 |    29 |&lt;br /&gt;
|     3922 |    19 |&lt;br /&gt;
|     3923 |    13 |&lt;br /&gt;
|     3924 |    14 |&lt;br /&gt;
|     3925 |    15 |&lt;br /&gt;
|     3926 |    11 |&lt;br /&gt;
|     3927 |    10 |&lt;br /&gt;
|     3928 |     9 |&lt;br /&gt;
|     3929 |     6 |&lt;br /&gt;
|     3930 |     7 |&lt;br /&gt;
|     3931 |     8 |&lt;br /&gt;
|     3932 |     5 |&lt;br /&gt;
|     3933 |     7 |&lt;br /&gt;
|     3934 |    17 |&lt;br /&gt;
|     3935 |    12 |&lt;br /&gt;
|     3936 |     4 |&lt;br /&gt;
|     3937 |    19 |&lt;br /&gt;
|     3938 |    10 |&lt;br /&gt;
+----------+-------+&lt;br /&gt;
21 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total of #1 bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular topic: select * from bids where priority = 1 and topic_id=3918;&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of #1 bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select count(*) from bids where priority = 1 and topic_id=3918;&lt;br /&gt;
+----------+&lt;br /&gt;
| count(*) |&lt;br /&gt;
+----------+&lt;br /&gt;
|       10 |&lt;br /&gt;
+----------+&lt;br /&gt;
1 row in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total of #2 bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular topic: select * from bids where priority = 2 and topic_id=3918;&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of # 2 bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select count(*) from bids where priority = 2 and topic_id=3921;&lt;br /&gt;
+----------+&lt;br /&gt;
| count(*) |&lt;br /&gt;
+----------+&lt;br /&gt;
|        6 |&lt;br /&gt;
+----------+&lt;br /&gt;
1 row in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
&lt;br /&gt;
Because of the time constraints, we could only implement that much of features and would like to layout some potential future works need to be done:&lt;br /&gt;
&lt;br /&gt;
# More testing for edge-cases&lt;br /&gt;
# Add automatic test for UIs&lt;br /&gt;
&lt;br /&gt;
==Team Roster ==&lt;br /&gt;
&lt;br /&gt;
Mentor: Ed Gehringer - efg@ncsu.edu&lt;br /&gt;
&lt;br /&gt;
*Duy Nguyen - dvnguye3@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Kwon HyeokJun - khyeokj@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Shawn Salekin - ssaleki@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*David Glymph - dwglymph@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
#[https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit?pli=1#heading=h.5cgh9aixuut7 Previous works]&lt;br /&gt;
#[https://github.com/dnguyenv/expertiza/tree/beta Team code repo]&lt;br /&gt;
#[https://github.com/expertiza/expertiza/tree/beta Upstream code repo]&lt;/div&gt;</summary>
		<author><name>Dvnguye3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145414</id>
		<title>CSC/ECE 517 Spring 2022 - E2245: View for results of bidding</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145414"/>
		<updated>2022-04-26T03:46:32Z</updated>

		<summary type="html">&lt;p&gt;Dvnguye3: /* Code changes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''CSC/ECE 517 Spring 2022 - E2245: View for results of bidding&lt;br /&gt;
'''&lt;br /&gt;
== Problem Statement == &lt;br /&gt;
&lt;br /&gt;
When students sign up for topics, they are presented with a system to bid on their favorite topics. This process is allowed for both individual students as well as teams. As a result, many students will first sign up for topics, which can reduce the number of teams that get their first pick, and result in long waitlists. There are several bidding algorithms available to the instructors to give as many groups as possible their first choice. As this is an NP-complete problem, the algorithm has to use heuristics to guess efficiently. There needs to be a way for instructors to easily view and compare the results of the bidding algorithms to get a quantitative sense of their effectiveness.&lt;br /&gt;
&lt;br /&gt;
== Project Goal == &lt;br /&gt;
This project aims to solve this issue by giving clear and concise feedback of the algorithms in topics list in the assignment. However, since topics in the table potentially have several fields, care must be taken not to overcrowd the table with information. There are several different UI/UX approaches to display this information, and the chosen one should:&lt;br /&gt;
* Maximize useful information at a glance, while minimizing clutter&lt;br /&gt;
* Fit into the flow of the topic page&lt;br /&gt;
* Allow further information to be obtained if requested&lt;br /&gt;
* Not be visible if bidding is not used&lt;br /&gt;
&lt;br /&gt;
Some other miscellaneous goals of this project are to:&lt;br /&gt;
* Remove topic fields from view if they are not applicable&lt;br /&gt;
* Refactor code as needed&lt;br /&gt;
* Increase test coverage as appropriate&lt;br /&gt;
&lt;br /&gt;
== Previous Work == &lt;br /&gt;
&lt;br /&gt;
=== Current User Cases ===&lt;br /&gt;
&lt;br /&gt;
Below is the use case diagram that depicts the existing use cases that associated to the topics bidding features of the application. Notice that in order to check some bidding information for a topic/project, the Instructor has to impersonate a student.&lt;br /&gt;
&lt;br /&gt;
[[File:old-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Current Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
As an Instructor, the user after, being authenticated, needs to go to the Assignments &amp;gt;&amp;gt; Topics view to create the topics/projects and then once the bidding started, needs to impersonate a student to partially (at very minimal level) get the bidding process information &lt;br /&gt;
&lt;br /&gt;
[[File:Old-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
== Strategy to implement our plan to improve previous Works ==&lt;br /&gt;
&lt;br /&gt;
=== Change in Use Cases ===&lt;br /&gt;
&lt;br /&gt;
[[File:new-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
'''Student''': This actor is responsible for submitting and deleting bids for topics while the topic selection period is open for an assignment which uses the new lottery topic selection mechanism. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Instructor''': This actor is responsible for updating an assignment to use the new lottery topic selection as well as closing the bidding period and beginning the automatic topic selection. Instructor is also able to view the progress details of bids without having to impersonate students&lt;br /&gt;
&lt;br /&gt;
=== UI design ===&lt;br /&gt;
&lt;br /&gt;
The existing view with very limited information about the bidding process&lt;br /&gt;
&lt;br /&gt;
'''Before''':&lt;br /&gt;
&lt;br /&gt;
[[File:before-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With this proposed new view, the Instructor can gain a more complete view of the whole bidding process in one place.&lt;br /&gt;
&lt;br /&gt;
'''Proposed UI'''&lt;br /&gt;
&lt;br /&gt;
[[File:after-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
=== Change in Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
With the new flow and implementation, the Instructor now can have all (complete) information he/she needs in one place at the Topics list/details view instead of having to impersonate a student to get even some minimal, un-completed piece of information about the bidding. &lt;br /&gt;
&lt;br /&gt;
[[File:new-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Class Diagram ===&lt;br /&gt;
&lt;br /&gt;
[[File:class-diagram.png|1000px|Class diagram]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Track our works for transparency, collaboration and productivity  ===&lt;br /&gt;
&lt;br /&gt;
We've been working collaboratively to deliver this project as a team, by using Github Project feature to assign, track and collaborate our tasks. We've created an accompanying github project for this purpose, link can be found [https://github.com/dnguyenv/final-e2245/projects/1 here]&lt;br /&gt;
&lt;br /&gt;
[[File:E2245-project-tasks.png|1200px|project tasks]]&lt;br /&gt;
&lt;br /&gt;
=== Code changes ===&lt;br /&gt;
&lt;br /&gt;
From preliminary research, we believed we would need to add and modify, refactor code from almost all layers of the features (including Controllers, Models, Views but we end up decided to focus on delivering the feature with minimum code changes and regression tests, so majority of our code changes are on Views layer. Following are the changes we made (We also added links to our Github commits for each change so that the reviewers can link directly to github for more in-depth inspection/review)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''New Files added:'''&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_total_bids.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:total-bids.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_total_1_2_bids.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:total-1-2-bids.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
'''Files changed:'''&lt;br /&gt;
&lt;br /&gt;
'''View:'''&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_actions.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:e2245-actions.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_add_signup_topics.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:add-signup-topics.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_table_header.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:table-header.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_table_line.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:table-line.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
'''Helper:'''&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/helpers/sign_up_sheet_helper.rb]&lt;br /&gt;
&lt;br /&gt;
'''Configuration:'''&lt;br /&gt;
&lt;br /&gt;
*config/locales/en_US.yml&lt;br /&gt;
&lt;br /&gt;
*config/locales/hi_IN.yml&lt;br /&gt;
&lt;br /&gt;
== Functionalities added ==&lt;br /&gt;
 &lt;br /&gt;
# [https://drive.google.com/file/d/1uSPnL0S0E2VqvTidk534pcv-2rX4dBtN/view?usp=sharing Here is the link to our recorded demo of the feature] &lt;br /&gt;
# The instructor should be able to see how many teams have bid for each topic without having to impersonate students&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is the screenshot of real app running that shows what the Instructor will see in Assignment &amp;gt;&amp;gt; Topic view:&lt;br /&gt;
&lt;br /&gt;
[[File:assignment-topics.png|1200px|Assignment Topics View]]&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
=== Manual UI testing for the deployed project. ===&lt;br /&gt;
&lt;br /&gt;
==== UI Testing ====&lt;br /&gt;
'''Instructor View''' &amp;lt;br&amp;gt;&lt;br /&gt;
* username: instructor6 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Student View'''  &amp;lt;br&amp;gt;&lt;br /&gt;
* username: student575 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular assignment: SELECT topic_id as topic_id, COUNT(b.topic_id) as count FROM sign_up_topics t JOIN bids b ON t.id = b.topic_id WHERE t.assignment_id = 834 GROUP BY t.id&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; SELECT topic_id as topic_id, COUNT(b.topic_id) as count FROM sign_up_topics t JOIN bids b ON t.id = b.topic_id WHERE t.assignment_id = 834 GROUP BY t.id;&lt;br /&gt;
+----------+-------+&lt;br /&gt;
| topic_id | count |&lt;br /&gt;
+----------+-------+&lt;br /&gt;
|     3918 |    29 |&lt;br /&gt;
|     3919 |    14 |&lt;br /&gt;
|     3920 |    12 |&lt;br /&gt;
|     3921 |    29 |&lt;br /&gt;
|     3922 |    19 |&lt;br /&gt;
|     3923 |    13 |&lt;br /&gt;
|     3924 |    14 |&lt;br /&gt;
|     3925 |    15 |&lt;br /&gt;
|     3926 |    11 |&lt;br /&gt;
|     3927 |    10 |&lt;br /&gt;
|     3928 |     9 |&lt;br /&gt;
|     3929 |     6 |&lt;br /&gt;
|     3930 |     7 |&lt;br /&gt;
|     3931 |     8 |&lt;br /&gt;
|     3932 |     5 |&lt;br /&gt;
|     3933 |     7 |&lt;br /&gt;
|     3934 |    17 |&lt;br /&gt;
|     3935 |    12 |&lt;br /&gt;
|     3936 |     4 |&lt;br /&gt;
|     3937 |    19 |&lt;br /&gt;
|     3938 |    10 |&lt;br /&gt;
+----------+-------+&lt;br /&gt;
21 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total of #1 bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular topic: select * from bids where priority = 1 and topic_id=3918;&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of #1 bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select count(*) from bids where priority = 1 and topic_id=3918;&lt;br /&gt;
+----------+&lt;br /&gt;
| count(*) |&lt;br /&gt;
+----------+&lt;br /&gt;
|       10 |&lt;br /&gt;
+----------+&lt;br /&gt;
1 row in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total of #2 bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular topic: select * from bids where priority = 2 and topic_id=3918;&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of # 2 bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select count(*) from bids where priority = 2 and topic_id=3921;&lt;br /&gt;
+----------+&lt;br /&gt;
| count(*) |&lt;br /&gt;
+----------+&lt;br /&gt;
|        6 |&lt;br /&gt;
+----------+&lt;br /&gt;
1 row in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
&lt;br /&gt;
Because of the time constraints, we could only implement that much of features and would like to layout some potential future works need to be done:&lt;br /&gt;
&lt;br /&gt;
# More testing for edge-cases&lt;br /&gt;
# Add automatic test for UIs&lt;br /&gt;
&lt;br /&gt;
==Team Roster ==&lt;br /&gt;
&lt;br /&gt;
Mentor: Ed Gehringer - efg@ncsu.edu&lt;br /&gt;
&lt;br /&gt;
*Duy Nguyen - dvnguye3@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Kwon HyeokJun - khyeokj@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Shawn Salekin - ssaleki@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*David Glymph - dwglymph@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
#[https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit?pli=1#heading=h.5cgh9aixuut7 Previous works]&lt;br /&gt;
#[https://github.com/dnguyenv/expertiza/tree/beta Team code repo]&lt;br /&gt;
#[https://github.com/expertiza/expertiza/tree/beta Upstream code repo]&lt;/div&gt;</summary>
		<author><name>Dvnguye3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:E2245-signup-sheet-helper.png&amp;diff=145410</id>
		<title>File:E2245-signup-sheet-helper.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:E2245-signup-sheet-helper.png&amp;diff=145410"/>
		<updated>2022-04-26T03:44:14Z</updated>

		<summary type="html">&lt;p&gt;Dvnguye3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Dvnguye3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Table-header.png&amp;diff=145408</id>
		<title>File:Table-header.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Table-header.png&amp;diff=145408"/>
		<updated>2022-04-26T03:43:59Z</updated>

		<summary type="html">&lt;p&gt;Dvnguye3: Dvnguye3 uploaded a new version of File:Table-header.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Dvnguye3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Table-line.png&amp;diff=145406</id>
		<title>File:Table-line.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Table-line.png&amp;diff=145406"/>
		<updated>2022-04-26T03:43:37Z</updated>

		<summary type="html">&lt;p&gt;Dvnguye3: Dvnguye3 uploaded a new version of File:Table-line.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Dvnguye3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Topic-names.png&amp;diff=145405</id>
		<title>File:Topic-names.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Topic-names.png&amp;diff=145405"/>
		<updated>2022-04-26T03:43:21Z</updated>

		<summary type="html">&lt;p&gt;Dvnguye3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Dvnguye3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Total-1-2-bids.png&amp;diff=145404</id>
		<title>File:Total-1-2-bids.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Total-1-2-bids.png&amp;diff=145404"/>
		<updated>2022-04-26T03:43:04Z</updated>

		<summary type="html">&lt;p&gt;Dvnguye3: Dvnguye3 uploaded a new version of File:Total-1-2-bids.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Dvnguye3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Total-bids.png&amp;diff=145402</id>
		<title>File:Total-bids.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Total-bids.png&amp;diff=145402"/>
		<updated>2022-04-26T03:42:49Z</updated>

		<summary type="html">&lt;p&gt;Dvnguye3: Dvnguye3 uploaded a new version of File:Total-bids.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Dvnguye3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145389</id>
		<title>CSC/ECE 517 Spring 2022 - E2245: View for results of bidding</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145389"/>
		<updated>2022-04-26T03:33:05Z</updated>

		<summary type="html">&lt;p&gt;Dvnguye3: /* Functionalities added */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''CSC/ECE 517 Spring 2022 - E2245: View for results of bidding&lt;br /&gt;
'''&lt;br /&gt;
== Problem Statement == &lt;br /&gt;
&lt;br /&gt;
When students sign up for topics, they are presented with a system to bid on their favorite topics. This process is allowed for both individual students as well as teams. As a result, many students will first sign up for topics, which can reduce the number of teams that get their first pick, and result in long waitlists. There are several bidding algorithms available to the instructors to give as many groups as possible their first choice. As this is an NP-complete problem, the algorithm has to use heuristics to guess efficiently. There needs to be a way for instructors to easily view and compare the results of the bidding algorithms to get a quantitative sense of their effectiveness.&lt;br /&gt;
&lt;br /&gt;
== Project Goal == &lt;br /&gt;
This project aims to solve this issue by giving clear and concise feedback of the algorithms in topics list in the assignment. However, since topics in the table potentially have several fields, care must be taken not to overcrowd the table with information. There are several different UI/UX approaches to display this information, and the chosen one should:&lt;br /&gt;
* Maximize useful information at a glance, while minimizing clutter&lt;br /&gt;
* Fit into the flow of the topic page&lt;br /&gt;
* Allow further information to be obtained if requested&lt;br /&gt;
* Not be visible if bidding is not used&lt;br /&gt;
&lt;br /&gt;
Some other miscellaneous goals of this project are to:&lt;br /&gt;
* Remove topic fields from view if they are not applicable&lt;br /&gt;
* Refactor code as needed&lt;br /&gt;
* Increase test coverage as appropriate&lt;br /&gt;
&lt;br /&gt;
== Previous Work == &lt;br /&gt;
&lt;br /&gt;
=== Current User Cases ===&lt;br /&gt;
&lt;br /&gt;
Below is the use case diagram that depicts the existing use cases that associated to the topics bidding features of the application. Notice that in order to check some bidding information for a topic/project, the Instructor has to impersonate a student.&lt;br /&gt;
&lt;br /&gt;
[[File:old-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Current Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
As an Instructor, the user after, being authenticated, needs to go to the Assignments &amp;gt;&amp;gt; Topics view to create the topics/projects and then once the bidding started, needs to impersonate a student to partially (at very minimal level) get the bidding process information &lt;br /&gt;
&lt;br /&gt;
[[File:Old-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
== Strategy to implement our plan to improve previous Works ==&lt;br /&gt;
&lt;br /&gt;
=== Change in Use Cases ===&lt;br /&gt;
&lt;br /&gt;
[[File:new-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
'''Student''': This actor is responsible for submitting and deleting bids for topics while the topic selection period is open for an assignment which uses the new lottery topic selection mechanism. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Instructor''': This actor is responsible for updating an assignment to use the new lottery topic selection as well as closing the bidding period and beginning the automatic topic selection. Instructor is also able to view the progress details of bids without having to impersonate students&lt;br /&gt;
&lt;br /&gt;
=== UI design ===&lt;br /&gt;
&lt;br /&gt;
The existing view with very limited information about the bidding process&lt;br /&gt;
&lt;br /&gt;
'''Before''':&lt;br /&gt;
&lt;br /&gt;
[[File:before-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With this proposed new view, the Instructor can gain a more complete view of the whole bidding process in one place.&lt;br /&gt;
&lt;br /&gt;
'''Proposed UI'''&lt;br /&gt;
&lt;br /&gt;
[[File:after-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
=== Change in Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
With the new flow and implementation, the Instructor now can have all (complete) information he/she needs in one place at the Topics list/details view instead of having to impersonate a student to get even some minimal, un-completed piece of information about the bidding. &lt;br /&gt;
&lt;br /&gt;
[[File:new-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Class Diagram ===&lt;br /&gt;
&lt;br /&gt;
[[File:class-diagram.png|1000px|Class diagram]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Track our works for transparency, collaboration and productivity  ===&lt;br /&gt;
&lt;br /&gt;
We've been working collaboratively to deliver this project as a team, by using Github Project feature to assign, track and collaborate our tasks. We've created an accompanying github project for this purpose, link can be found [https://github.com/dnguyenv/final-e2245/projects/1 here]&lt;br /&gt;
&lt;br /&gt;
[[File:E2245-project-tasks.png|1200px|project tasks]]&lt;br /&gt;
&lt;br /&gt;
=== Code changes ===&lt;br /&gt;
&lt;br /&gt;
From preliminary research, we believed we would need to add and modify, refactor code from almost all layers of the features (including Controllers, Models, Views but we end up decided to focus on delivering the feature with minimum code changes and regression tests, so majority of our code changes are on Views layer. Following are the changes we made (We also added links to our Github commits for each change so that the reviewers can link directly to github for more in-depth inspection/review)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''New Files added:'''&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_total_bids.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:total-bids.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_total_1_2_bids.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:total-1-2-bids.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
'''Files changed:'''&lt;br /&gt;
&lt;br /&gt;
'''View:'''&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_actions.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:e2245-actions.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_add_signup_topics.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:add-signup-topics.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_table_header.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:table-header.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_table_line.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:table-line.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
'''Configuration:'''&lt;br /&gt;
&lt;br /&gt;
*config/locales/en_US.yml&lt;br /&gt;
&lt;br /&gt;
*config/locales/hi_IN.yml&lt;br /&gt;
&lt;br /&gt;
== Functionalities added ==&lt;br /&gt;
 &lt;br /&gt;
# [https://drive.google.com/file/d/1uSPnL0S0E2VqvTidk534pcv-2rX4dBtN/view?usp=sharing Here is the link to our recorded demo of the feature] &lt;br /&gt;
# The instructor should be able to see how many teams have bid for each topic without having to impersonate students&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is the screenshot of real app running that shows what the Instructor will see in Assignment &amp;gt;&amp;gt; Topic view:&lt;br /&gt;
&lt;br /&gt;
[[File:assignment-topics.png|1200px|Assignment Topics View]]&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
=== Manual UI testing for the deployed project. ===&lt;br /&gt;
&lt;br /&gt;
==== UI Testing ====&lt;br /&gt;
'''Instructor View''' &amp;lt;br&amp;gt;&lt;br /&gt;
* username: instructor6 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Student View'''  &amp;lt;br&amp;gt;&lt;br /&gt;
* username: student575 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular assignment: SELECT topic_id as topic_id, COUNT(b.topic_id) as count FROM sign_up_topics t JOIN bids b ON t.id = b.topic_id WHERE t.assignment_id = 834 GROUP BY t.id&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; SELECT topic_id as topic_id, COUNT(b.topic_id) as count FROM sign_up_topics t JOIN bids b ON t.id = b.topic_id WHERE t.assignment_id = 834 GROUP BY t.id;&lt;br /&gt;
+----------+-------+&lt;br /&gt;
| topic_id | count |&lt;br /&gt;
+----------+-------+&lt;br /&gt;
|     3918 |    29 |&lt;br /&gt;
|     3919 |    14 |&lt;br /&gt;
|     3920 |    12 |&lt;br /&gt;
|     3921 |    29 |&lt;br /&gt;
|     3922 |    19 |&lt;br /&gt;
|     3923 |    13 |&lt;br /&gt;
|     3924 |    14 |&lt;br /&gt;
|     3925 |    15 |&lt;br /&gt;
|     3926 |    11 |&lt;br /&gt;
|     3927 |    10 |&lt;br /&gt;
|     3928 |     9 |&lt;br /&gt;
|     3929 |     6 |&lt;br /&gt;
|     3930 |     7 |&lt;br /&gt;
|     3931 |     8 |&lt;br /&gt;
|     3932 |     5 |&lt;br /&gt;
|     3933 |     7 |&lt;br /&gt;
|     3934 |    17 |&lt;br /&gt;
|     3935 |    12 |&lt;br /&gt;
|     3936 |     4 |&lt;br /&gt;
|     3937 |    19 |&lt;br /&gt;
|     3938 |    10 |&lt;br /&gt;
+----------+-------+&lt;br /&gt;
21 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total of #1 bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular topic: select * from bids where priority = 1 and topic_id=3918;&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of #1 bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select count(*) from bids where priority = 1 and topic_id=3918;&lt;br /&gt;
+----------+&lt;br /&gt;
| count(*) |&lt;br /&gt;
+----------+&lt;br /&gt;
|       10 |&lt;br /&gt;
+----------+&lt;br /&gt;
1 row in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total of #2 bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular topic: select * from bids where priority = 2 and topic_id=3918;&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of # 2 bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select count(*) from bids where priority = 2 and topic_id=3921;&lt;br /&gt;
+----------+&lt;br /&gt;
| count(*) |&lt;br /&gt;
+----------+&lt;br /&gt;
|        6 |&lt;br /&gt;
+----------+&lt;br /&gt;
1 row in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
&lt;br /&gt;
Because of the time constraints, we could only implement that much of features and would like to layout some potential future works need to be done:&lt;br /&gt;
&lt;br /&gt;
# More testing for edge-cases&lt;br /&gt;
# Add automatic test for UIs&lt;br /&gt;
&lt;br /&gt;
==Team Roster ==&lt;br /&gt;
&lt;br /&gt;
Mentor: Ed Gehringer - efg@ncsu.edu&lt;br /&gt;
&lt;br /&gt;
*Duy Nguyen - dvnguye3@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Kwon HyeokJun - khyeokj@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Shawn Salekin - ssaleki@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*David Glymph - dwglymph@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
#[https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit?pli=1#heading=h.5cgh9aixuut7 Previous works]&lt;br /&gt;
#[https://github.com/dnguyenv/expertiza/tree/beta Team code repo]&lt;br /&gt;
#[https://github.com/expertiza/expertiza/tree/beta Upstream code repo]&lt;/div&gt;</summary>
		<author><name>Dvnguye3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145080</id>
		<title>CSC/ECE 517 Spring 2022 - E2245: View for results of bidding</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145080"/>
		<updated>2022-04-24T20:51:32Z</updated>

		<summary type="html">&lt;p&gt;Dvnguye3: /* Track our works for transparency, collaboration and productivity */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''CSC/ECE 517 Spring 2022 - E2245: View for results of bidding&lt;br /&gt;
'''&lt;br /&gt;
== Problem Statement == &lt;br /&gt;
&lt;br /&gt;
When students sign up for topics, they are presented with a system to bid on their favorite topics. This process is allowed for both individual students as well as teams. As a result, many students will first sign up for topics, which can reduce the number of teams that get their first pick, and result in long waitlists. There are several bidding algorithms available to the instructors to give as many groups as possible their first choice. As this is an NP-complete problem, the algorithm has to use heuristics to guess efficiently. There needs to be a way for instructors to easily view and compare the results of the bidding algorithms to get a quantitative sense of their effectiveness.&lt;br /&gt;
&lt;br /&gt;
== Project Goal == &lt;br /&gt;
This project aims to solve this issue by giving clear and concise feedback of the algorithms in topics list in the assignment. However, since topics in the table potentially have several fields, care must be taken not to overcrowd the table with information. There are several different UI/UX approaches to display this information, and the chosen one should:&lt;br /&gt;
* Maximize useful information at a glance, while minimizing clutter&lt;br /&gt;
* Fit into the flow of the topic page&lt;br /&gt;
* Allow further information to be obtained if requested&lt;br /&gt;
* Not be visible if bidding is not used&lt;br /&gt;
&lt;br /&gt;
Some other miscellaneous goals of this project are to:&lt;br /&gt;
* Remove topic fields from view if they are not applicable&lt;br /&gt;
* Refactor code as needed&lt;br /&gt;
* Increase test coverage as appropriate&lt;br /&gt;
&lt;br /&gt;
== Previous Work == &lt;br /&gt;
&lt;br /&gt;
=== Current User Cases ===&lt;br /&gt;
&lt;br /&gt;
Below is the use case diagram that depicts the existing use cases that associated to the topics bidding features of the application. Notice that in order to check some bidding information for a topic/project, the Instructor has to impersonate a student.&lt;br /&gt;
&lt;br /&gt;
[[File:old-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Current Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
As an Instructor, the user after, being authenticated, needs to go to the Assignments &amp;gt;&amp;gt; Topics view to create the topics/projects and then once the bidding started, needs to impersonate a student to partially (at very minimal level) get the bidding process information &lt;br /&gt;
&lt;br /&gt;
[[File:Old-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
== Strategy to implement our plan to improve previous Works ==&lt;br /&gt;
&lt;br /&gt;
=== Change in Use Cases ===&lt;br /&gt;
&lt;br /&gt;
[[File:new-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
'''Student''': This actor is responsible for submitting and deleting bids for topics while the topic selection period is open for an assignment which uses the new lottery topic selection mechanism. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Instructor''': This actor is responsible for updating an assignment to use the new lottery topic selection as well as closing the bidding period and beginning the automatic topic selection. Instructor is also able to view the progress details of bids without having to impersonate students&lt;br /&gt;
&lt;br /&gt;
=== UI design ===&lt;br /&gt;
&lt;br /&gt;
The existing view with very limited information about the bidding process&lt;br /&gt;
&lt;br /&gt;
'''Before''':&lt;br /&gt;
&lt;br /&gt;
[[File:before-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With this proposed new view, the Instructor can gain a more complete view of the whole bidding process in one place.&lt;br /&gt;
&lt;br /&gt;
'''Proposed UI'''&lt;br /&gt;
&lt;br /&gt;
[[File:after-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
=== Change in Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
With the new flow and implementation, the Instructor now can have all (complete) information he/she needs in one place at the Topics list/details view instead of having to impersonate a student to get even some minimal, un-completed piece of information about the bidding. &lt;br /&gt;
&lt;br /&gt;
[[File:new-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Class Diagram ===&lt;br /&gt;
&lt;br /&gt;
[[File:class-diagram.png|1000px|Class diagram]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Track our works for transparency, collaboration and productivity  ===&lt;br /&gt;
&lt;br /&gt;
We've been working collaboratively to deliver this project as a team, by using Github Project feature to assign, track and collaborate our tasks. We've created an accompanying github project for this purpose, link can be found [https://github.com/dnguyenv/final-e2245/projects/1 here]&lt;br /&gt;
&lt;br /&gt;
[[File:E2245-project-tasks.png|1200px|project tasks]]&lt;br /&gt;
&lt;br /&gt;
=== Code changes ===&lt;br /&gt;
&lt;br /&gt;
From preliminary research, we believed we would need to add and modify, refactor code from almost all layers of the features (including Controllers, Models, Views but we end up decided to focus on delivering the feature with minimum code changes and regression tests, so majority of our code changes are on Views layer. Following are the changes we made (We also added links to our Github commits for each change so that the reviewers can link directly to github for more in-depth inspection/review)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''New Files added:'''&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_total_bids.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:total-bids.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_total_1_2_bids.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:total-1-2-bids.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
'''Files changed:'''&lt;br /&gt;
&lt;br /&gt;
'''View:'''&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_actions.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:e2245-actions.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_add_signup_topics.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:add-signup-topics.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_table_header.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:table-header.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_table_line.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:table-line.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
'''Configuration:'''&lt;br /&gt;
&lt;br /&gt;
*config/locales/en_US.yml&lt;br /&gt;
&lt;br /&gt;
*config/locales/hi_IN.yml&lt;br /&gt;
&lt;br /&gt;
== Functionalities added ==&lt;br /&gt;
 &lt;br /&gt;
* The instructor should be able to see how many teams have bid for each topic without having to impersonate students&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is the screenshot of real app running that shows what the Instructor will see in Assignment &amp;gt;&amp;gt; Topic view:&lt;br /&gt;
&lt;br /&gt;
[[File:assignment-topics.png|1200px|Assignment Topics View]]&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
=== Manual UI testing for the deployed project. ===&lt;br /&gt;
&lt;br /&gt;
==== UI Testing ====&lt;br /&gt;
'''Instructor View''' &amp;lt;br&amp;gt;&lt;br /&gt;
* username: instructor6 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Student View'''  &amp;lt;br&amp;gt;&lt;br /&gt;
* username: student575 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular assignment: SELECT topic_id as topic_id, COUNT(b.topic_id) as count FROM sign_up_topics t JOIN bids b ON t.id = b.topic_id WHERE t.assignment_id = 834 GROUP BY t.id&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; SELECT topic_id as topic_id, COUNT(b.topic_id) as count FROM sign_up_topics t JOIN bids b ON t.id = b.topic_id WHERE t.assignment_id = 834 GROUP BY t.id;&lt;br /&gt;
+----------+-------+&lt;br /&gt;
| topic_id | count |&lt;br /&gt;
+----------+-------+&lt;br /&gt;
|     3918 |    29 |&lt;br /&gt;
|     3919 |    14 |&lt;br /&gt;
|     3920 |    12 |&lt;br /&gt;
|     3921 |    29 |&lt;br /&gt;
|     3922 |    19 |&lt;br /&gt;
|     3923 |    13 |&lt;br /&gt;
|     3924 |    14 |&lt;br /&gt;
|     3925 |    15 |&lt;br /&gt;
|     3926 |    11 |&lt;br /&gt;
|     3927 |    10 |&lt;br /&gt;
|     3928 |     9 |&lt;br /&gt;
|     3929 |     6 |&lt;br /&gt;
|     3930 |     7 |&lt;br /&gt;
|     3931 |     8 |&lt;br /&gt;
|     3932 |     5 |&lt;br /&gt;
|     3933 |     7 |&lt;br /&gt;
|     3934 |    17 |&lt;br /&gt;
|     3935 |    12 |&lt;br /&gt;
|     3936 |     4 |&lt;br /&gt;
|     3937 |    19 |&lt;br /&gt;
|     3938 |    10 |&lt;br /&gt;
+----------+-------+&lt;br /&gt;
21 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total of #1 bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular topic: select * from bids where priority = 1 and topic_id=3918;&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of #1 bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select count(*) from bids where priority = 1 and topic_id=3918;&lt;br /&gt;
+----------+&lt;br /&gt;
| count(*) |&lt;br /&gt;
+----------+&lt;br /&gt;
|       10 |&lt;br /&gt;
+----------+&lt;br /&gt;
1 row in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total of #2 bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular topic: select * from bids where priority = 2 and topic_id=3918;&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of # 2 bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select count(*) from bids where priority = 2 and topic_id=3921;&lt;br /&gt;
+----------+&lt;br /&gt;
| count(*) |&lt;br /&gt;
+----------+&lt;br /&gt;
|        6 |&lt;br /&gt;
+----------+&lt;br /&gt;
1 row in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
&lt;br /&gt;
Because of the time constraints, we could only implement that much of features and would like to layout some potential future works need to be done:&lt;br /&gt;
&lt;br /&gt;
# More testing for edge-cases&lt;br /&gt;
# Add automatic test for UIs&lt;br /&gt;
&lt;br /&gt;
==Team Roster ==&lt;br /&gt;
&lt;br /&gt;
Mentor: Ed Gehringer - efg@ncsu.edu&lt;br /&gt;
&lt;br /&gt;
*Duy Nguyen - dvnguye3@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Kwon HyeokJun - khyeokj@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Shawn Salekin - ssaleki@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*David Glymph - dwglymph@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
#[https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit?pli=1#heading=h.5cgh9aixuut7 Previous works]&lt;br /&gt;
#[https://github.com/dnguyenv/expertiza/tree/beta Team code repo]&lt;br /&gt;
#[https://github.com/expertiza/expertiza/tree/beta Upstream code repo]&lt;/div&gt;</summary>
		<author><name>Dvnguye3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:E2245-project-tasks.png&amp;diff=145079</id>
		<title>File:E2245-project-tasks.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:E2245-project-tasks.png&amp;diff=145079"/>
		<updated>2022-04-24T20:50:55Z</updated>

		<summary type="html">&lt;p&gt;Dvnguye3: Dvnguye3 uploaded a new version of File:E2245-project-tasks.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Dvnguye3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:E2245-project-tasks.png&amp;diff=145078</id>
		<title>File:E2245-project-tasks.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:E2245-project-tasks.png&amp;diff=145078"/>
		<updated>2022-04-24T20:50:30Z</updated>

		<summary type="html">&lt;p&gt;Dvnguye3: Dvnguye3 uploaded a new version of File:E2245-project-tasks.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Dvnguye3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:E2245-project-tasks.png&amp;diff=145077</id>
		<title>File:E2245-project-tasks.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:E2245-project-tasks.png&amp;diff=145077"/>
		<updated>2022-04-24T20:47:05Z</updated>

		<summary type="html">&lt;p&gt;Dvnguye3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Dvnguye3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145076</id>
		<title>CSC/ECE 517 Spring 2022 - E2245: View for results of bidding</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145076"/>
		<updated>2022-04-24T20:46:47Z</updated>

		<summary type="html">&lt;p&gt;Dvnguye3: /* Improvement on the Previous Work */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''CSC/ECE 517 Spring 2022 - E2245: View for results of bidding&lt;br /&gt;
'''&lt;br /&gt;
== Problem Statement == &lt;br /&gt;
&lt;br /&gt;
When students sign up for topics, they are presented with a system to bid on their favorite topics. This process is allowed for both individual students as well as teams. As a result, many students will first sign up for topics, which can reduce the number of teams that get their first pick, and result in long waitlists. There are several bidding algorithms available to the instructors to give as many groups as possible their first choice. As this is an NP-complete problem, the algorithm has to use heuristics to guess efficiently. There needs to be a way for instructors to easily view and compare the results of the bidding algorithms to get a quantitative sense of their effectiveness.&lt;br /&gt;
&lt;br /&gt;
== Project Goal == &lt;br /&gt;
This project aims to solve this issue by giving clear and concise feedback of the algorithms in topics list in the assignment. However, since topics in the table potentially have several fields, care must be taken not to overcrowd the table with information. There are several different UI/UX approaches to display this information, and the chosen one should:&lt;br /&gt;
* Maximize useful information at a glance, while minimizing clutter&lt;br /&gt;
* Fit into the flow of the topic page&lt;br /&gt;
* Allow further information to be obtained if requested&lt;br /&gt;
* Not be visible if bidding is not used&lt;br /&gt;
&lt;br /&gt;
Some other miscellaneous goals of this project are to:&lt;br /&gt;
* Remove topic fields from view if they are not applicable&lt;br /&gt;
* Refactor code as needed&lt;br /&gt;
* Increase test coverage as appropriate&lt;br /&gt;
&lt;br /&gt;
== Previous Work == &lt;br /&gt;
&lt;br /&gt;
=== Current User Cases ===&lt;br /&gt;
&lt;br /&gt;
Below is the use case diagram that depicts the existing use cases that associated to the topics bidding features of the application. Notice that in order to check some bidding information for a topic/project, the Instructor has to impersonate a student.&lt;br /&gt;
&lt;br /&gt;
[[File:old-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Current Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
As an Instructor, the user after, being authenticated, needs to go to the Assignments &amp;gt;&amp;gt; Topics view to create the topics/projects and then once the bidding started, needs to impersonate a student to partially (at very minimal level) get the bidding process information &lt;br /&gt;
&lt;br /&gt;
[[File:Old-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
== Strategy to implement our plan to improve previous Works ==&lt;br /&gt;
&lt;br /&gt;
=== Change in Use Cases ===&lt;br /&gt;
&lt;br /&gt;
[[File:new-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
'''Student''': This actor is responsible for submitting and deleting bids for topics while the topic selection period is open for an assignment which uses the new lottery topic selection mechanism. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Instructor''': This actor is responsible for updating an assignment to use the new lottery topic selection as well as closing the bidding period and beginning the automatic topic selection. Instructor is also able to view the progress details of bids without having to impersonate students&lt;br /&gt;
&lt;br /&gt;
=== UI design ===&lt;br /&gt;
&lt;br /&gt;
The existing view with very limited information about the bidding process&lt;br /&gt;
&lt;br /&gt;
'''Before''':&lt;br /&gt;
&lt;br /&gt;
[[File:before-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With this proposed new view, the Instructor can gain a more complete view of the whole bidding process in one place.&lt;br /&gt;
&lt;br /&gt;
'''Proposed UI'''&lt;br /&gt;
&lt;br /&gt;
[[File:after-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
=== Change in Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
With the new flow and implementation, the Instructor now can have all (complete) information he/she needs in one place at the Topics list/details view instead of having to impersonate a student to get even some minimal, un-completed piece of information about the bidding. &lt;br /&gt;
&lt;br /&gt;
[[File:new-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Class Diagram ===&lt;br /&gt;
&lt;br /&gt;
[[File:class-diagram.png|1000px|Class diagram]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Track our works for transparency, collaboration and productivity  ===&lt;br /&gt;
&lt;br /&gt;
We've been working collaboratively to deliver this project as a team, by using Github Project feature to assign, track and collaborate our tasks. We've created an accompanying github project for this purpose, link can be found [https://github.com/dnguyenv/final-e2245/projects/1 here]&lt;br /&gt;
&lt;br /&gt;
[[File:e2245-project-tasks.png|1200px|project tasks]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Code changes ===&lt;br /&gt;
&lt;br /&gt;
From preliminary research, we believed we would need to add and modify, refactor code from almost all layers of the features (including Controllers, Models, Views but we end up decided to focus on delivering the feature with minimum code changes and regression tests, so majority of our code changes are on Views layer. Following are the changes we made (We also added links to our Github commits for each change so that the reviewers can link directly to github for more in-depth inspection/review)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''New Files added:'''&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_total_bids.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:total-bids.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_total_1_2_bids.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:total-1-2-bids.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
'''Files changed:'''&lt;br /&gt;
&lt;br /&gt;
'''View:'''&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_actions.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:e2245-actions.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_add_signup_topics.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:add-signup-topics.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_table_header.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:table-header.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_table_line.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:table-line.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
'''Configuration:'''&lt;br /&gt;
&lt;br /&gt;
*config/locales/en_US.yml&lt;br /&gt;
&lt;br /&gt;
*config/locales/hi_IN.yml&lt;br /&gt;
&lt;br /&gt;
== Functionalities added ==&lt;br /&gt;
 &lt;br /&gt;
* The instructor should be able to see how many teams have bid for each topic without having to impersonate students&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is the screenshot of real app running that shows what the Instructor will see in Assignment &amp;gt;&amp;gt; Topic view:&lt;br /&gt;
&lt;br /&gt;
[[File:assignment-topics.png|1200px|Assignment Topics View]]&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
=== Manual UI testing for the deployed project. ===&lt;br /&gt;
&lt;br /&gt;
==== UI Testing ====&lt;br /&gt;
'''Instructor View''' &amp;lt;br&amp;gt;&lt;br /&gt;
* username: instructor6 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Student View'''  &amp;lt;br&amp;gt;&lt;br /&gt;
* username: student575 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular assignment: SELECT topic_id as topic_id, COUNT(b.topic_id) as count FROM sign_up_topics t JOIN bids b ON t.id = b.topic_id WHERE t.assignment_id = 834 GROUP BY t.id&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; SELECT topic_id as topic_id, COUNT(b.topic_id) as count FROM sign_up_topics t JOIN bids b ON t.id = b.topic_id WHERE t.assignment_id = 834 GROUP BY t.id;&lt;br /&gt;
+----------+-------+&lt;br /&gt;
| topic_id | count |&lt;br /&gt;
+----------+-------+&lt;br /&gt;
|     3918 |    29 |&lt;br /&gt;
|     3919 |    14 |&lt;br /&gt;
|     3920 |    12 |&lt;br /&gt;
|     3921 |    29 |&lt;br /&gt;
|     3922 |    19 |&lt;br /&gt;
|     3923 |    13 |&lt;br /&gt;
|     3924 |    14 |&lt;br /&gt;
|     3925 |    15 |&lt;br /&gt;
|     3926 |    11 |&lt;br /&gt;
|     3927 |    10 |&lt;br /&gt;
|     3928 |     9 |&lt;br /&gt;
|     3929 |     6 |&lt;br /&gt;
|     3930 |     7 |&lt;br /&gt;
|     3931 |     8 |&lt;br /&gt;
|     3932 |     5 |&lt;br /&gt;
|     3933 |     7 |&lt;br /&gt;
|     3934 |    17 |&lt;br /&gt;
|     3935 |    12 |&lt;br /&gt;
|     3936 |     4 |&lt;br /&gt;
|     3937 |    19 |&lt;br /&gt;
|     3938 |    10 |&lt;br /&gt;
+----------+-------+&lt;br /&gt;
21 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total of #1 bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular topic: select * from bids where priority = 1 and topic_id=3918;&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of #1 bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select count(*) from bids where priority = 1 and topic_id=3918;&lt;br /&gt;
+----------+&lt;br /&gt;
| count(*) |&lt;br /&gt;
+----------+&lt;br /&gt;
|       10 |&lt;br /&gt;
+----------+&lt;br /&gt;
1 row in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total of #2 bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular topic: select * from bids where priority = 2 and topic_id=3918;&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of # 2 bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select count(*) from bids where priority = 2 and topic_id=3921;&lt;br /&gt;
+----------+&lt;br /&gt;
| count(*) |&lt;br /&gt;
+----------+&lt;br /&gt;
|        6 |&lt;br /&gt;
+----------+&lt;br /&gt;
1 row in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
&lt;br /&gt;
Because of the time constraints, we could only implement that much of features and would like to layout some potential future works need to be done:&lt;br /&gt;
&lt;br /&gt;
# More testing for edge-cases&lt;br /&gt;
# Add automatic test for UIs&lt;br /&gt;
&lt;br /&gt;
==Team Roster ==&lt;br /&gt;
&lt;br /&gt;
Mentor: Ed Gehringer - efg@ncsu.edu&lt;br /&gt;
&lt;br /&gt;
*Duy Nguyen - dvnguye3@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Kwon HyeokJun - khyeokj@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Shawn Salekin - ssaleki@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*David Glymph - dwglymph@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
#[https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit?pli=1#heading=h.5cgh9aixuut7 Previous works]&lt;br /&gt;
#[https://github.com/dnguyenv/expertiza/tree/beta Team code repo]&lt;br /&gt;
#[https://github.com/expertiza/expertiza/tree/beta Upstream code repo]&lt;/div&gt;</summary>
		<author><name>Dvnguye3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145075</id>
		<title>CSC/ECE 517 Spring 2022 - E2245: View for results of bidding</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145075"/>
		<updated>2022-04-24T20:38:36Z</updated>

		<summary type="html">&lt;p&gt;Dvnguye3: /* Code changes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''CSC/ECE 517 Spring 2022 - E2245: View for results of bidding&lt;br /&gt;
'''&lt;br /&gt;
== Problem Statement == &lt;br /&gt;
&lt;br /&gt;
When students sign up for topics, they are presented with a system to bid on their favorite topics. This process is allowed for both individual students as well as teams. As a result, many students will first sign up for topics, which can reduce the number of teams that get their first pick, and result in long waitlists. There are several bidding algorithms available to the instructors to give as many groups as possible their first choice. As this is an NP-complete problem, the algorithm has to use heuristics to guess efficiently. There needs to be a way for instructors to easily view and compare the results of the bidding algorithms to get a quantitative sense of their effectiveness.&lt;br /&gt;
&lt;br /&gt;
== Project Goal == &lt;br /&gt;
This project aims to solve this issue by giving clear and concise feedback of the algorithms in topics list in the assignment. However, since topics in the table potentially have several fields, care must be taken not to overcrowd the table with information. There are several different UI/UX approaches to display this information, and the chosen one should:&lt;br /&gt;
* Maximize useful information at a glance, while minimizing clutter&lt;br /&gt;
* Fit into the flow of the topic page&lt;br /&gt;
* Allow further information to be obtained if requested&lt;br /&gt;
* Not be visible if bidding is not used&lt;br /&gt;
&lt;br /&gt;
Some other miscellaneous goals of this project are to:&lt;br /&gt;
* Remove topic fields from view if they are not applicable&lt;br /&gt;
* Refactor code as needed&lt;br /&gt;
* Increase test coverage as appropriate&lt;br /&gt;
&lt;br /&gt;
== Previous Work == &lt;br /&gt;
&lt;br /&gt;
=== Current User Cases ===&lt;br /&gt;
&lt;br /&gt;
Below is the use case diagram that depicts the existing use cases that associated to the topics bidding features of the application. Notice that in order to check some bidding information for a topic/project, the Instructor has to impersonate a student.&lt;br /&gt;
&lt;br /&gt;
[[File:old-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Current Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
As an Instructor, the user after, being authenticated, needs to go to the Assignments &amp;gt;&amp;gt; Topics view to create the topics/projects and then once the bidding started, needs to impersonate a student to partially (at very minimal level) get the bidding process information &lt;br /&gt;
&lt;br /&gt;
[[File:Old-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
== Improvement on the Previous Work ==&lt;br /&gt;
&lt;br /&gt;
=== Change in Use Cases ===&lt;br /&gt;
&lt;br /&gt;
[[File:new-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
'''Student''': This actor is responsible for submitting and deleting bids for topics while the topic selection period is open for an assignment which uses the new lottery topic selection mechanism. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Instructor''': This actor is responsible for updating an assignment to use the new lottery topic selection as well as closing the bidding period and beginning the automatic topic selection. Instructor is also able to view the progress details of bids without having to impersonate students&lt;br /&gt;
&lt;br /&gt;
=== UI design ===&lt;br /&gt;
&lt;br /&gt;
The existing view with very limited information about the bidding process&lt;br /&gt;
&lt;br /&gt;
'''Before''':&lt;br /&gt;
&lt;br /&gt;
[[File:before-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With this proposed new view, the Instructor can gain a more complete view of the whole bidding process in one place.&lt;br /&gt;
&lt;br /&gt;
'''Proposed UI'''&lt;br /&gt;
&lt;br /&gt;
[[File:after-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
=== Change in Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
With the new flow and implementation, the Instructor now can have all (complete) information he/she needs in one place at the Topics list/details view instead of having to impersonate a student to get even some minimal, un-completed piece of information about the bidding. &lt;br /&gt;
&lt;br /&gt;
[[File:new-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Class Diagram ===&lt;br /&gt;
&lt;br /&gt;
[[File:class-diagram.png|1000px|Class diagram]]&lt;br /&gt;
&lt;br /&gt;
=== Code changes ===&lt;br /&gt;
&lt;br /&gt;
From preliminary research, we believed we would need to add and modify, refactor code from almost all layers of the features (including Controllers, Models, Views but we end up decided to focus on delivering the feature with minimum code changes and regression tests, so majority of our code changes are on Views layer. Following are the changes we made (We also added links to our Github commits for each change so that the reviewers can link directly to github for more in-depth inspection/review)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''New Files added:'''&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_total_bids.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:total-bids.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_total_1_2_bids.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:total-1-2-bids.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
'''Files changed:'''&lt;br /&gt;
&lt;br /&gt;
'''View:'''&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_actions.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:e2245-actions.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_add_signup_topics.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:add-signup-topics.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_table_header.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:table-header.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_table_line.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:table-line.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
'''Configuration:'''&lt;br /&gt;
&lt;br /&gt;
*config/locales/en_US.yml&lt;br /&gt;
&lt;br /&gt;
*config/locales/hi_IN.yml&lt;br /&gt;
&lt;br /&gt;
== Functionalities added ==&lt;br /&gt;
 &lt;br /&gt;
* The instructor should be able to see how many teams have bid for each topic without having to impersonate students&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is the screenshot of real app running that shows what the Instructor will see in Assignment &amp;gt;&amp;gt; Topic view:&lt;br /&gt;
&lt;br /&gt;
[[File:assignment-topics.png|1200px|Assignment Topics View]]&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
=== Manual UI testing for the deployed project. ===&lt;br /&gt;
&lt;br /&gt;
==== UI Testing ====&lt;br /&gt;
'''Instructor View''' &amp;lt;br&amp;gt;&lt;br /&gt;
* username: instructor6 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Student View'''  &amp;lt;br&amp;gt;&lt;br /&gt;
* username: student575 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular assignment: SELECT topic_id as topic_id, COUNT(b.topic_id) as count FROM sign_up_topics t JOIN bids b ON t.id = b.topic_id WHERE t.assignment_id = 834 GROUP BY t.id&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; SELECT topic_id as topic_id, COUNT(b.topic_id) as count FROM sign_up_topics t JOIN bids b ON t.id = b.topic_id WHERE t.assignment_id = 834 GROUP BY t.id;&lt;br /&gt;
+----------+-------+&lt;br /&gt;
| topic_id | count |&lt;br /&gt;
+----------+-------+&lt;br /&gt;
|     3918 |    29 |&lt;br /&gt;
|     3919 |    14 |&lt;br /&gt;
|     3920 |    12 |&lt;br /&gt;
|     3921 |    29 |&lt;br /&gt;
|     3922 |    19 |&lt;br /&gt;
|     3923 |    13 |&lt;br /&gt;
|     3924 |    14 |&lt;br /&gt;
|     3925 |    15 |&lt;br /&gt;
|     3926 |    11 |&lt;br /&gt;
|     3927 |    10 |&lt;br /&gt;
|     3928 |     9 |&lt;br /&gt;
|     3929 |     6 |&lt;br /&gt;
|     3930 |     7 |&lt;br /&gt;
|     3931 |     8 |&lt;br /&gt;
|     3932 |     5 |&lt;br /&gt;
|     3933 |     7 |&lt;br /&gt;
|     3934 |    17 |&lt;br /&gt;
|     3935 |    12 |&lt;br /&gt;
|     3936 |     4 |&lt;br /&gt;
|     3937 |    19 |&lt;br /&gt;
|     3938 |    10 |&lt;br /&gt;
+----------+-------+&lt;br /&gt;
21 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total of #1 bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular topic: select * from bids where priority = 1 and topic_id=3918;&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of #1 bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select count(*) from bids where priority = 1 and topic_id=3918;&lt;br /&gt;
+----------+&lt;br /&gt;
| count(*) |&lt;br /&gt;
+----------+&lt;br /&gt;
|       10 |&lt;br /&gt;
+----------+&lt;br /&gt;
1 row in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total of #2 bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular topic: select * from bids where priority = 2 and topic_id=3918;&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of # 2 bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select count(*) from bids where priority = 2 and topic_id=3921;&lt;br /&gt;
+----------+&lt;br /&gt;
| count(*) |&lt;br /&gt;
+----------+&lt;br /&gt;
|        6 |&lt;br /&gt;
+----------+&lt;br /&gt;
1 row in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
&lt;br /&gt;
Because of the time constraints, we could only implement that much of features and would like to layout some potential future works need to be done:&lt;br /&gt;
&lt;br /&gt;
# More testing for edge-cases&lt;br /&gt;
# Add automatic test for UIs&lt;br /&gt;
&lt;br /&gt;
==Team Roster ==&lt;br /&gt;
&lt;br /&gt;
Mentor: Ed Gehringer - efg@ncsu.edu&lt;br /&gt;
&lt;br /&gt;
*Duy Nguyen - dvnguye3@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Kwon HyeokJun - khyeokj@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Shawn Salekin - ssaleki@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*David Glymph - dwglymph@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
#[https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit?pli=1#heading=h.5cgh9aixuut7 Previous works]&lt;br /&gt;
#[https://github.com/dnguyenv/expertiza/tree/beta Team code repo]&lt;br /&gt;
#[https://github.com/expertiza/expertiza/tree/beta Upstream code repo]&lt;/div&gt;</summary>
		<author><name>Dvnguye3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145074</id>
		<title>CSC/ECE 517 Spring 2022 - E2245: View for results of bidding</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145074"/>
		<updated>2022-04-24T20:37:40Z</updated>

		<summary type="html">&lt;p&gt;Dvnguye3: /* Code changes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''CSC/ECE 517 Spring 2022 - E2245: View for results of bidding&lt;br /&gt;
'''&lt;br /&gt;
== Problem Statement == &lt;br /&gt;
&lt;br /&gt;
When students sign up for topics, they are presented with a system to bid on their favorite topics. This process is allowed for both individual students as well as teams. As a result, many students will first sign up for topics, which can reduce the number of teams that get their first pick, and result in long waitlists. There are several bidding algorithms available to the instructors to give as many groups as possible their first choice. As this is an NP-complete problem, the algorithm has to use heuristics to guess efficiently. There needs to be a way for instructors to easily view and compare the results of the bidding algorithms to get a quantitative sense of their effectiveness.&lt;br /&gt;
&lt;br /&gt;
== Project Goal == &lt;br /&gt;
This project aims to solve this issue by giving clear and concise feedback of the algorithms in topics list in the assignment. However, since topics in the table potentially have several fields, care must be taken not to overcrowd the table with information. There are several different UI/UX approaches to display this information, and the chosen one should:&lt;br /&gt;
* Maximize useful information at a glance, while minimizing clutter&lt;br /&gt;
* Fit into the flow of the topic page&lt;br /&gt;
* Allow further information to be obtained if requested&lt;br /&gt;
* Not be visible if bidding is not used&lt;br /&gt;
&lt;br /&gt;
Some other miscellaneous goals of this project are to:&lt;br /&gt;
* Remove topic fields from view if they are not applicable&lt;br /&gt;
* Refactor code as needed&lt;br /&gt;
* Increase test coverage as appropriate&lt;br /&gt;
&lt;br /&gt;
== Previous Work == &lt;br /&gt;
&lt;br /&gt;
=== Current User Cases ===&lt;br /&gt;
&lt;br /&gt;
Below is the use case diagram that depicts the existing use cases that associated to the topics bidding features of the application. Notice that in order to check some bidding information for a topic/project, the Instructor has to impersonate a student.&lt;br /&gt;
&lt;br /&gt;
[[File:old-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Current Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
As an Instructor, the user after, being authenticated, needs to go to the Assignments &amp;gt;&amp;gt; Topics view to create the topics/projects and then once the bidding started, needs to impersonate a student to partially (at very minimal level) get the bidding process information &lt;br /&gt;
&lt;br /&gt;
[[File:Old-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
== Improvement on the Previous Work ==&lt;br /&gt;
&lt;br /&gt;
=== Change in Use Cases ===&lt;br /&gt;
&lt;br /&gt;
[[File:new-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
'''Student''': This actor is responsible for submitting and deleting bids for topics while the topic selection period is open for an assignment which uses the new lottery topic selection mechanism. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Instructor''': This actor is responsible for updating an assignment to use the new lottery topic selection as well as closing the bidding period and beginning the automatic topic selection. Instructor is also able to view the progress details of bids without having to impersonate students&lt;br /&gt;
&lt;br /&gt;
=== UI design ===&lt;br /&gt;
&lt;br /&gt;
The existing view with very limited information about the bidding process&lt;br /&gt;
&lt;br /&gt;
'''Before''':&lt;br /&gt;
&lt;br /&gt;
[[File:before-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With this proposed new view, the Instructor can gain a more complete view of the whole bidding process in one place.&lt;br /&gt;
&lt;br /&gt;
'''Proposed UI'''&lt;br /&gt;
&lt;br /&gt;
[[File:after-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
=== Change in Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
With the new flow and implementation, the Instructor now can have all (complete) information he/she needs in one place at the Topics list/details view instead of having to impersonate a student to get even some minimal, un-completed piece of information about the bidding. &lt;br /&gt;
&lt;br /&gt;
[[File:new-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Class Diagram ===&lt;br /&gt;
&lt;br /&gt;
[[File:class-diagram.png|1000px|Class diagram]]&lt;br /&gt;
&lt;br /&gt;
=== Code changes ===&lt;br /&gt;
&lt;br /&gt;
From preliminary research, we believed we would need to add and modify, refactor code from almost all layers of the features (including Controllers, Models, Views but we end up decided to focus on delivering the feature with minimum code changes and regression tests, so majority of our code changes are on Views layer. Following are the changes we made (We also added links to our Github commits for each change so that the reviewers can link directly to github for more in-depth inspection/review)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''New Files added:'''&lt;br /&gt;
&lt;br /&gt;
*[https://github.com/expertiza/expertiza/pull/2392/files#diff-5df8b9300332120367b2b5930ef57a17907270e3705e7ed90e0f5f825f335449 app/views/sign_up_sheet/_total_bids.html.erb]&lt;br /&gt;
&lt;br /&gt;
[[File:total-bids.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_total_1_2_bids.html.erb&lt;br /&gt;
&lt;br /&gt;
[[File:total-1-2-bids.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
'''Files changed:'''&lt;br /&gt;
&lt;br /&gt;
'''View:'''&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_actions.html.erb&lt;br /&gt;
&lt;br /&gt;
[[File:e2245-actions.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_add_signup_topics.html.erb&lt;br /&gt;
&lt;br /&gt;
[[File:add-signup-topics.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_table_header.html.erb&lt;br /&gt;
&lt;br /&gt;
[[File:table-header.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_table_line.html.erb&lt;br /&gt;
&lt;br /&gt;
[[File:table-line.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
'''Configuration:'''&lt;br /&gt;
&lt;br /&gt;
*config/locales/en_US.yml&lt;br /&gt;
&lt;br /&gt;
*config/locales/hi_IN.yml&lt;br /&gt;
&lt;br /&gt;
== Functionalities added ==&lt;br /&gt;
 &lt;br /&gt;
* The instructor should be able to see how many teams have bid for each topic without having to impersonate students&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is the screenshot of real app running that shows what the Instructor will see in Assignment &amp;gt;&amp;gt; Topic view:&lt;br /&gt;
&lt;br /&gt;
[[File:assignment-topics.png|1200px|Assignment Topics View]]&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
=== Manual UI testing for the deployed project. ===&lt;br /&gt;
&lt;br /&gt;
==== UI Testing ====&lt;br /&gt;
'''Instructor View''' &amp;lt;br&amp;gt;&lt;br /&gt;
* username: instructor6 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Student View'''  &amp;lt;br&amp;gt;&lt;br /&gt;
* username: student575 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular assignment: SELECT topic_id as topic_id, COUNT(b.topic_id) as count FROM sign_up_topics t JOIN bids b ON t.id = b.topic_id WHERE t.assignment_id = 834 GROUP BY t.id&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; SELECT topic_id as topic_id, COUNT(b.topic_id) as count FROM sign_up_topics t JOIN bids b ON t.id = b.topic_id WHERE t.assignment_id = 834 GROUP BY t.id;&lt;br /&gt;
+----------+-------+&lt;br /&gt;
| topic_id | count |&lt;br /&gt;
+----------+-------+&lt;br /&gt;
|     3918 |    29 |&lt;br /&gt;
|     3919 |    14 |&lt;br /&gt;
|     3920 |    12 |&lt;br /&gt;
|     3921 |    29 |&lt;br /&gt;
|     3922 |    19 |&lt;br /&gt;
|     3923 |    13 |&lt;br /&gt;
|     3924 |    14 |&lt;br /&gt;
|     3925 |    15 |&lt;br /&gt;
|     3926 |    11 |&lt;br /&gt;
|     3927 |    10 |&lt;br /&gt;
|     3928 |     9 |&lt;br /&gt;
|     3929 |     6 |&lt;br /&gt;
|     3930 |     7 |&lt;br /&gt;
|     3931 |     8 |&lt;br /&gt;
|     3932 |     5 |&lt;br /&gt;
|     3933 |     7 |&lt;br /&gt;
|     3934 |    17 |&lt;br /&gt;
|     3935 |    12 |&lt;br /&gt;
|     3936 |     4 |&lt;br /&gt;
|     3937 |    19 |&lt;br /&gt;
|     3938 |    10 |&lt;br /&gt;
+----------+-------+&lt;br /&gt;
21 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total of #1 bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular topic: select * from bids where priority = 1 and topic_id=3918;&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of #1 bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select count(*) from bids where priority = 1 and topic_id=3918;&lt;br /&gt;
+----------+&lt;br /&gt;
| count(*) |&lt;br /&gt;
+----------+&lt;br /&gt;
|       10 |&lt;br /&gt;
+----------+&lt;br /&gt;
1 row in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total of #2 bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular topic: select * from bids where priority = 2 and topic_id=3918;&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of # 2 bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select count(*) from bids where priority = 2 and topic_id=3921;&lt;br /&gt;
+----------+&lt;br /&gt;
| count(*) |&lt;br /&gt;
+----------+&lt;br /&gt;
|        6 |&lt;br /&gt;
+----------+&lt;br /&gt;
1 row in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
&lt;br /&gt;
Because of the time constraints, we could only implement that much of features and would like to layout some potential future works need to be done:&lt;br /&gt;
&lt;br /&gt;
# More testing for edge-cases&lt;br /&gt;
# Add automatic test for UIs&lt;br /&gt;
&lt;br /&gt;
==Team Roster ==&lt;br /&gt;
&lt;br /&gt;
Mentor: Ed Gehringer - efg@ncsu.edu&lt;br /&gt;
&lt;br /&gt;
*Duy Nguyen - dvnguye3@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Kwon HyeokJun - khyeokj@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Shawn Salekin - ssaleki@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*David Glymph - dwglymph@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
#[https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit?pli=1#heading=h.5cgh9aixuut7 Previous works]&lt;br /&gt;
#[https://github.com/dnguyenv/expertiza/tree/beta Team code repo]&lt;br /&gt;
#[https://github.com/expertiza/expertiza/tree/beta Upstream code repo]&lt;/div&gt;</summary>
		<author><name>Dvnguye3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145073</id>
		<title>CSC/ECE 517 Spring 2022 - E2245: View for results of bidding</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145073"/>
		<updated>2022-04-24T20:33:15Z</updated>

		<summary type="html">&lt;p&gt;Dvnguye3: /* Project Goal */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''CSC/ECE 517 Spring 2022 - E2245: View for results of bidding&lt;br /&gt;
'''&lt;br /&gt;
== Problem Statement == &lt;br /&gt;
&lt;br /&gt;
When students sign up for topics, they are presented with a system to bid on their favorite topics. This process is allowed for both individual students as well as teams. As a result, many students will first sign up for topics, which can reduce the number of teams that get their first pick, and result in long waitlists. There are several bidding algorithms available to the instructors to give as many groups as possible their first choice. As this is an NP-complete problem, the algorithm has to use heuristics to guess efficiently. There needs to be a way for instructors to easily view and compare the results of the bidding algorithms to get a quantitative sense of their effectiveness.&lt;br /&gt;
&lt;br /&gt;
== Project Goal == &lt;br /&gt;
This project aims to solve this issue by giving clear and concise feedback of the algorithms in topics list in the assignment. However, since topics in the table potentially have several fields, care must be taken not to overcrowd the table with information. There are several different UI/UX approaches to display this information, and the chosen one should:&lt;br /&gt;
* Maximize useful information at a glance, while minimizing clutter&lt;br /&gt;
* Fit into the flow of the topic page&lt;br /&gt;
* Allow further information to be obtained if requested&lt;br /&gt;
* Not be visible if bidding is not used&lt;br /&gt;
&lt;br /&gt;
Some other miscellaneous goals of this project are to:&lt;br /&gt;
* Remove topic fields from view if they are not applicable&lt;br /&gt;
* Refactor code as needed&lt;br /&gt;
* Increase test coverage as appropriate&lt;br /&gt;
&lt;br /&gt;
== Previous Work == &lt;br /&gt;
&lt;br /&gt;
=== Current User Cases ===&lt;br /&gt;
&lt;br /&gt;
Below is the use case diagram that depicts the existing use cases that associated to the topics bidding features of the application. Notice that in order to check some bidding information for a topic/project, the Instructor has to impersonate a student.&lt;br /&gt;
&lt;br /&gt;
[[File:old-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Current Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
As an Instructor, the user after, being authenticated, needs to go to the Assignments &amp;gt;&amp;gt; Topics view to create the topics/projects and then once the bidding started, needs to impersonate a student to partially (at very minimal level) get the bidding process information &lt;br /&gt;
&lt;br /&gt;
[[File:Old-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
== Improvement on the Previous Work ==&lt;br /&gt;
&lt;br /&gt;
=== Change in Use Cases ===&lt;br /&gt;
&lt;br /&gt;
[[File:new-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
'''Student''': This actor is responsible for submitting and deleting bids for topics while the topic selection period is open for an assignment which uses the new lottery topic selection mechanism. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Instructor''': This actor is responsible for updating an assignment to use the new lottery topic selection as well as closing the bidding period and beginning the automatic topic selection. Instructor is also able to view the progress details of bids without having to impersonate students&lt;br /&gt;
&lt;br /&gt;
=== UI design ===&lt;br /&gt;
&lt;br /&gt;
The existing view with very limited information about the bidding process&lt;br /&gt;
&lt;br /&gt;
'''Before''':&lt;br /&gt;
&lt;br /&gt;
[[File:before-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With this proposed new view, the Instructor can gain a more complete view of the whole bidding process in one place.&lt;br /&gt;
&lt;br /&gt;
'''Proposed UI'''&lt;br /&gt;
&lt;br /&gt;
[[File:after-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
=== Change in Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
With the new flow and implementation, the Instructor now can have all (complete) information he/she needs in one place at the Topics list/details view instead of having to impersonate a student to get even some minimal, un-completed piece of information about the bidding. &lt;br /&gt;
&lt;br /&gt;
[[File:new-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Class Diagram ===&lt;br /&gt;
&lt;br /&gt;
[[File:class-diagram.png|1000px|Class diagram]]&lt;br /&gt;
&lt;br /&gt;
=== Code changes ===&lt;br /&gt;
&lt;br /&gt;
From preliminary research, we believed we would need to add and modify, refactor code from almost all layers of the features (including Controllers, Models, Views but we end up decided to focus on delivering the feature with minimum code changes and regression tests, so majority of our code changes are on Views layer. Following are the changes we made (We also added links to our Github commits for each change so that the reviewers can link directly to github for more in-depth inspection/review)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''New Files added:'''&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_total_bids.html.erb&lt;br /&gt;
&lt;br /&gt;
[[File:total-bids.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_total_1_2_bids.html.erb&lt;br /&gt;
&lt;br /&gt;
[[File:total-1-2-bids.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
'''Files changed:'''&lt;br /&gt;
&lt;br /&gt;
'''View:'''&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_actions.html.erb&lt;br /&gt;
&lt;br /&gt;
[[File:e2245-actions.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_add_signup_topics.html.erb&lt;br /&gt;
&lt;br /&gt;
[[File:add-signup-topics.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_table_header.html.erb&lt;br /&gt;
&lt;br /&gt;
[[File:table-header.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_table_line.html.erb&lt;br /&gt;
&lt;br /&gt;
[[File:table-line.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
'''Configuration:'''&lt;br /&gt;
&lt;br /&gt;
*config/locales/en_US.yml&lt;br /&gt;
&lt;br /&gt;
*config/locales/hi_IN.yml&lt;br /&gt;
&lt;br /&gt;
== Functionalities added ==&lt;br /&gt;
 &lt;br /&gt;
* The instructor should be able to see how many teams have bid for each topic without having to impersonate students&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is the screenshot of real app running that shows what the Instructor will see in Assignment &amp;gt;&amp;gt; Topic view:&lt;br /&gt;
&lt;br /&gt;
[[File:assignment-topics.png|1200px|Assignment Topics View]]&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
=== Manual UI testing for the deployed project. ===&lt;br /&gt;
&lt;br /&gt;
==== UI Testing ====&lt;br /&gt;
'''Instructor View''' &amp;lt;br&amp;gt;&lt;br /&gt;
* username: instructor6 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Student View'''  &amp;lt;br&amp;gt;&lt;br /&gt;
* username: student575 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular assignment: SELECT topic_id as topic_id, COUNT(b.topic_id) as count FROM sign_up_topics t JOIN bids b ON t.id = b.topic_id WHERE t.assignment_id = 834 GROUP BY t.id&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; SELECT topic_id as topic_id, COUNT(b.topic_id) as count FROM sign_up_topics t JOIN bids b ON t.id = b.topic_id WHERE t.assignment_id = 834 GROUP BY t.id;&lt;br /&gt;
+----------+-------+&lt;br /&gt;
| topic_id | count |&lt;br /&gt;
+----------+-------+&lt;br /&gt;
|     3918 |    29 |&lt;br /&gt;
|     3919 |    14 |&lt;br /&gt;
|     3920 |    12 |&lt;br /&gt;
|     3921 |    29 |&lt;br /&gt;
|     3922 |    19 |&lt;br /&gt;
|     3923 |    13 |&lt;br /&gt;
|     3924 |    14 |&lt;br /&gt;
|     3925 |    15 |&lt;br /&gt;
|     3926 |    11 |&lt;br /&gt;
|     3927 |    10 |&lt;br /&gt;
|     3928 |     9 |&lt;br /&gt;
|     3929 |     6 |&lt;br /&gt;
|     3930 |     7 |&lt;br /&gt;
|     3931 |     8 |&lt;br /&gt;
|     3932 |     5 |&lt;br /&gt;
|     3933 |     7 |&lt;br /&gt;
|     3934 |    17 |&lt;br /&gt;
|     3935 |    12 |&lt;br /&gt;
|     3936 |     4 |&lt;br /&gt;
|     3937 |    19 |&lt;br /&gt;
|     3938 |    10 |&lt;br /&gt;
+----------+-------+&lt;br /&gt;
21 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total of #1 bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular topic: select * from bids where priority = 1 and topic_id=3918;&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of #1 bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select count(*) from bids where priority = 1 and topic_id=3918;&lt;br /&gt;
+----------+&lt;br /&gt;
| count(*) |&lt;br /&gt;
+----------+&lt;br /&gt;
|       10 |&lt;br /&gt;
+----------+&lt;br /&gt;
1 row in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total of #2 bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular topic: select * from bids where priority = 2 and topic_id=3918;&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of # 2 bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select count(*) from bids where priority = 2 and topic_id=3921;&lt;br /&gt;
+----------+&lt;br /&gt;
| count(*) |&lt;br /&gt;
+----------+&lt;br /&gt;
|        6 |&lt;br /&gt;
+----------+&lt;br /&gt;
1 row in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
&lt;br /&gt;
Because of the time constraints, we could only implement that much of features and would like to layout some potential future works need to be done:&lt;br /&gt;
&lt;br /&gt;
# More testing for edge-cases&lt;br /&gt;
# Add automatic test for UIs&lt;br /&gt;
&lt;br /&gt;
==Team Roster ==&lt;br /&gt;
&lt;br /&gt;
Mentor: Ed Gehringer - efg@ncsu.edu&lt;br /&gt;
&lt;br /&gt;
*Duy Nguyen - dvnguye3@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Kwon HyeokJun - khyeokj@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Shawn Salekin - ssaleki@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*David Glymph - dwglymph@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
#[https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit?pli=1#heading=h.5cgh9aixuut7 Previous works]&lt;br /&gt;
#[https://github.com/dnguyenv/expertiza/tree/beta Team code repo]&lt;br /&gt;
#[https://github.com/expertiza/expertiza/tree/beta Upstream code repo]&lt;/div&gt;</summary>
		<author><name>Dvnguye3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145072</id>
		<title>CSC/ECE 517 Spring 2022 - E2245: View for results of bidding</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145072"/>
		<updated>2022-04-24T20:31:27Z</updated>

		<summary type="html">&lt;p&gt;Dvnguye3: /* Future Work */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''CSC/ECE 517 Spring 2022 - E2245: View for results of bidding&lt;br /&gt;
'''&lt;br /&gt;
== Problem Statement == &lt;br /&gt;
&lt;br /&gt;
When students sign up for topics, they are presented with a system to bid on their favorite topics. This process is allowed for both individual students as well as teams. As a result, many students will first sign up for topics, which can reduce the number of teams that get their first pick, and result in long waitlists. There are several bidding algorithms available to the instructors to give as many groups as possible their first choice. As this is an NP-complete problem, the algorithm has to use heuristics to guess efficiently. There needs to be a way for instructors to easily view and compare the results of the bidding algorithms to get a quantitative sense of their effectiveness.&lt;br /&gt;
&lt;br /&gt;
== Project Goal == &lt;br /&gt;
This project aims to solve this issue by giving clear and concise feedback of the algorithms in topics list in the assignment. However, since topics in the table potentially have several fields, care must be taken not to overcrowd the table with information. There are several different UI/UX approaches to display this information, and the chosen one should:&lt;br /&gt;
* Maximize useful information at a glance, while minimizing clutter&lt;br /&gt;
* Fit into the flow of the topic page&lt;br /&gt;
* Allow further information to be obtained if requested&lt;br /&gt;
* Not be visible if bidding is not used&lt;br /&gt;
&lt;br /&gt;
Some other miscellaneous goals of this project are to:&lt;br /&gt;
* Remove topic fields from view if they are not applicable&lt;br /&gt;
* Refactor code&lt;br /&gt;
* Increase test coverage&lt;br /&gt;
&lt;br /&gt;
== Previous Work == &lt;br /&gt;
&lt;br /&gt;
=== Current User Cases ===&lt;br /&gt;
&lt;br /&gt;
Below is the use case diagram that depicts the existing use cases that associated to the topics bidding features of the application. Notice that in order to check some bidding information for a topic/project, the Instructor has to impersonate a student.&lt;br /&gt;
&lt;br /&gt;
[[File:old-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Current Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
As an Instructor, the user after, being authenticated, needs to go to the Assignments &amp;gt;&amp;gt; Topics view to create the topics/projects and then once the bidding started, needs to impersonate a student to partially (at very minimal level) get the bidding process information &lt;br /&gt;
&lt;br /&gt;
[[File:Old-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
== Improvement on the Previous Work ==&lt;br /&gt;
&lt;br /&gt;
=== Change in Use Cases ===&lt;br /&gt;
&lt;br /&gt;
[[File:new-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
'''Student''': This actor is responsible for submitting and deleting bids for topics while the topic selection period is open for an assignment which uses the new lottery topic selection mechanism. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Instructor''': This actor is responsible for updating an assignment to use the new lottery topic selection as well as closing the bidding period and beginning the automatic topic selection. Instructor is also able to view the progress details of bids without having to impersonate students&lt;br /&gt;
&lt;br /&gt;
=== UI design ===&lt;br /&gt;
&lt;br /&gt;
The existing view with very limited information about the bidding process&lt;br /&gt;
&lt;br /&gt;
'''Before''':&lt;br /&gt;
&lt;br /&gt;
[[File:before-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With this proposed new view, the Instructor can gain a more complete view of the whole bidding process in one place.&lt;br /&gt;
&lt;br /&gt;
'''Proposed UI'''&lt;br /&gt;
&lt;br /&gt;
[[File:after-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
=== Change in Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
With the new flow and implementation, the Instructor now can have all (complete) information he/she needs in one place at the Topics list/details view instead of having to impersonate a student to get even some minimal, un-completed piece of information about the bidding. &lt;br /&gt;
&lt;br /&gt;
[[File:new-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Class Diagram ===&lt;br /&gt;
&lt;br /&gt;
[[File:class-diagram.png|1000px|Class diagram]]&lt;br /&gt;
&lt;br /&gt;
=== Code changes ===&lt;br /&gt;
&lt;br /&gt;
From preliminary research, we believed we would need to add and modify, refactor code from almost all layers of the features (including Controllers, Models, Views but we end up decided to focus on delivering the feature with minimum code changes and regression tests, so majority of our code changes are on Views layer. Following are the changes we made (We also added links to our Github commits for each change so that the reviewers can link directly to github for more in-depth inspection/review)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''New Files added:'''&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_total_bids.html.erb&lt;br /&gt;
&lt;br /&gt;
[[File:total-bids.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_total_1_2_bids.html.erb&lt;br /&gt;
&lt;br /&gt;
[[File:total-1-2-bids.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
'''Files changed:'''&lt;br /&gt;
&lt;br /&gt;
'''View:'''&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_actions.html.erb&lt;br /&gt;
&lt;br /&gt;
[[File:e2245-actions.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_add_signup_topics.html.erb&lt;br /&gt;
&lt;br /&gt;
[[File:add-signup-topics.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_table_header.html.erb&lt;br /&gt;
&lt;br /&gt;
[[File:table-header.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_table_line.html.erb&lt;br /&gt;
&lt;br /&gt;
[[File:table-line.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
'''Configuration:'''&lt;br /&gt;
&lt;br /&gt;
*config/locales/en_US.yml&lt;br /&gt;
&lt;br /&gt;
*config/locales/hi_IN.yml&lt;br /&gt;
&lt;br /&gt;
== Functionalities added ==&lt;br /&gt;
 &lt;br /&gt;
* The instructor should be able to see how many teams have bid for each topic without having to impersonate students&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is the screenshot of real app running that shows what the Instructor will see in Assignment &amp;gt;&amp;gt; Topic view:&lt;br /&gt;
&lt;br /&gt;
[[File:assignment-topics.png|1200px|Assignment Topics View]]&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
=== Manual UI testing for the deployed project. ===&lt;br /&gt;
&lt;br /&gt;
==== UI Testing ====&lt;br /&gt;
'''Instructor View''' &amp;lt;br&amp;gt;&lt;br /&gt;
* username: instructor6 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Student View'''  &amp;lt;br&amp;gt;&lt;br /&gt;
* username: student575 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular assignment: SELECT topic_id as topic_id, COUNT(b.topic_id) as count FROM sign_up_topics t JOIN bids b ON t.id = b.topic_id WHERE t.assignment_id = 834 GROUP BY t.id&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; SELECT topic_id as topic_id, COUNT(b.topic_id) as count FROM sign_up_topics t JOIN bids b ON t.id = b.topic_id WHERE t.assignment_id = 834 GROUP BY t.id;&lt;br /&gt;
+----------+-------+&lt;br /&gt;
| topic_id | count |&lt;br /&gt;
+----------+-------+&lt;br /&gt;
|     3918 |    29 |&lt;br /&gt;
|     3919 |    14 |&lt;br /&gt;
|     3920 |    12 |&lt;br /&gt;
|     3921 |    29 |&lt;br /&gt;
|     3922 |    19 |&lt;br /&gt;
|     3923 |    13 |&lt;br /&gt;
|     3924 |    14 |&lt;br /&gt;
|     3925 |    15 |&lt;br /&gt;
|     3926 |    11 |&lt;br /&gt;
|     3927 |    10 |&lt;br /&gt;
|     3928 |     9 |&lt;br /&gt;
|     3929 |     6 |&lt;br /&gt;
|     3930 |     7 |&lt;br /&gt;
|     3931 |     8 |&lt;br /&gt;
|     3932 |     5 |&lt;br /&gt;
|     3933 |     7 |&lt;br /&gt;
|     3934 |    17 |&lt;br /&gt;
|     3935 |    12 |&lt;br /&gt;
|     3936 |     4 |&lt;br /&gt;
|     3937 |    19 |&lt;br /&gt;
|     3938 |    10 |&lt;br /&gt;
+----------+-------+&lt;br /&gt;
21 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total of #1 bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular topic: select * from bids where priority = 1 and topic_id=3918;&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of #1 bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select count(*) from bids where priority = 1 and topic_id=3918;&lt;br /&gt;
+----------+&lt;br /&gt;
| count(*) |&lt;br /&gt;
+----------+&lt;br /&gt;
|       10 |&lt;br /&gt;
+----------+&lt;br /&gt;
1 row in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total of #2 bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular topic: select * from bids where priority = 2 and topic_id=3918;&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of # 2 bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select count(*) from bids where priority = 2 and topic_id=3921;&lt;br /&gt;
+----------+&lt;br /&gt;
| count(*) |&lt;br /&gt;
+----------+&lt;br /&gt;
|        6 |&lt;br /&gt;
+----------+&lt;br /&gt;
1 row in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
&lt;br /&gt;
Because of the time constraints, we could only implement that much of features and would like to layout some potential future works need to be done:&lt;br /&gt;
&lt;br /&gt;
# More testing for edge-cases&lt;br /&gt;
# Add automatic test for UIs&lt;br /&gt;
&lt;br /&gt;
==Team Roster ==&lt;br /&gt;
&lt;br /&gt;
Mentor: Ed Gehringer - efg@ncsu.edu&lt;br /&gt;
&lt;br /&gt;
*Duy Nguyen - dvnguye3@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Kwon HyeokJun - khyeokj@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Shawn Salekin - ssaleki@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*David Glymph - dwglymph@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
#[https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit?pli=1#heading=h.5cgh9aixuut7 Previous works]&lt;br /&gt;
#[https://github.com/dnguyenv/expertiza/tree/beta Team code repo]&lt;br /&gt;
#[https://github.com/expertiza/expertiza/tree/beta Upstream code repo]&lt;/div&gt;</summary>
		<author><name>Dvnguye3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Assignment-topics.png&amp;diff=145071</id>
		<title>File:Assignment-topics.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Assignment-topics.png&amp;diff=145071"/>
		<updated>2022-04-24T20:26:29Z</updated>

		<summary type="html">&lt;p&gt;Dvnguye3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Dvnguye3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145070</id>
		<title>CSC/ECE 517 Spring 2022 - E2245: View for results of bidding</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145070"/>
		<updated>2022-04-24T20:26:10Z</updated>

		<summary type="html">&lt;p&gt;Dvnguye3: /* Functionalities added */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''CSC/ECE 517 Spring 2022 - E2245: View for results of bidding&lt;br /&gt;
'''&lt;br /&gt;
== Problem Statement == &lt;br /&gt;
&lt;br /&gt;
When students sign up for topics, they are presented with a system to bid on their favorite topics. This process is allowed for both individual students as well as teams. As a result, many students will first sign up for topics, which can reduce the number of teams that get their first pick, and result in long waitlists. There are several bidding algorithms available to the instructors to give as many groups as possible their first choice. As this is an NP-complete problem, the algorithm has to use heuristics to guess efficiently. There needs to be a way for instructors to easily view and compare the results of the bidding algorithms to get a quantitative sense of their effectiveness.&lt;br /&gt;
&lt;br /&gt;
== Project Goal == &lt;br /&gt;
This project aims to solve this issue by giving clear and concise feedback of the algorithms in topics list in the assignment. However, since topics in the table potentially have several fields, care must be taken not to overcrowd the table with information. There are several different UI/UX approaches to display this information, and the chosen one should:&lt;br /&gt;
* Maximize useful information at a glance, while minimizing clutter&lt;br /&gt;
* Fit into the flow of the topic page&lt;br /&gt;
* Allow further information to be obtained if requested&lt;br /&gt;
* Not be visible if bidding is not used&lt;br /&gt;
&lt;br /&gt;
Some other miscellaneous goals of this project are to:&lt;br /&gt;
* Remove topic fields from view if they are not applicable&lt;br /&gt;
* Refactor code&lt;br /&gt;
* Increase test coverage&lt;br /&gt;
&lt;br /&gt;
== Previous Work == &lt;br /&gt;
&lt;br /&gt;
=== Current User Cases ===&lt;br /&gt;
&lt;br /&gt;
Below is the use case diagram that depicts the existing use cases that associated to the topics bidding features of the application. Notice that in order to check some bidding information for a topic/project, the Instructor has to impersonate a student.&lt;br /&gt;
&lt;br /&gt;
[[File:old-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Current Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
As an Instructor, the user after, being authenticated, needs to go to the Assignments &amp;gt;&amp;gt; Topics view to create the topics/projects and then once the bidding started, needs to impersonate a student to partially (at very minimal level) get the bidding process information &lt;br /&gt;
&lt;br /&gt;
[[File:Old-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
== Improvement on the Previous Work ==&lt;br /&gt;
&lt;br /&gt;
=== Change in Use Cases ===&lt;br /&gt;
&lt;br /&gt;
[[File:new-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
'''Student''': This actor is responsible for submitting and deleting bids for topics while the topic selection period is open for an assignment which uses the new lottery topic selection mechanism. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Instructor''': This actor is responsible for updating an assignment to use the new lottery topic selection as well as closing the bidding period and beginning the automatic topic selection. Instructor is also able to view the progress details of bids without having to impersonate students&lt;br /&gt;
&lt;br /&gt;
=== UI design ===&lt;br /&gt;
&lt;br /&gt;
The existing view with very limited information about the bidding process&lt;br /&gt;
&lt;br /&gt;
'''Before''':&lt;br /&gt;
&lt;br /&gt;
[[File:before-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With this proposed new view, the Instructor can gain a more complete view of the whole bidding process in one place.&lt;br /&gt;
&lt;br /&gt;
'''Proposed UI'''&lt;br /&gt;
&lt;br /&gt;
[[File:after-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
=== Change in Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
With the new flow and implementation, the Instructor now can have all (complete) information he/she needs in one place at the Topics list/details view instead of having to impersonate a student to get even some minimal, un-completed piece of information about the bidding. &lt;br /&gt;
&lt;br /&gt;
[[File:new-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Class Diagram ===&lt;br /&gt;
&lt;br /&gt;
[[File:class-diagram.png|1000px|Class diagram]]&lt;br /&gt;
&lt;br /&gt;
=== Code changes ===&lt;br /&gt;
&lt;br /&gt;
From preliminary research, we believed we would need to add and modify, refactor code from almost all layers of the features (including Controllers, Models, Views but we end up decided to focus on delivering the feature with minimum code changes and regression tests, so majority of our code changes are on Views layer. Following are the changes we made (We also added links to our Github commits for each change so that the reviewers can link directly to github for more in-depth inspection/review)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''New Files added:'''&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_total_bids.html.erb&lt;br /&gt;
&lt;br /&gt;
[[File:total-bids.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_total_1_2_bids.html.erb&lt;br /&gt;
&lt;br /&gt;
[[File:total-1-2-bids.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
'''Files changed:'''&lt;br /&gt;
&lt;br /&gt;
'''View:'''&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_actions.html.erb&lt;br /&gt;
&lt;br /&gt;
[[File:e2245-actions.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_add_signup_topics.html.erb&lt;br /&gt;
&lt;br /&gt;
[[File:add-signup-topics.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_table_header.html.erb&lt;br /&gt;
&lt;br /&gt;
[[File:table-header.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_table_line.html.erb&lt;br /&gt;
&lt;br /&gt;
[[File:table-line.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
'''Configuration:'''&lt;br /&gt;
&lt;br /&gt;
*config/locales/en_US.yml&lt;br /&gt;
&lt;br /&gt;
*config/locales/hi_IN.yml&lt;br /&gt;
&lt;br /&gt;
== Functionalities added ==&lt;br /&gt;
 &lt;br /&gt;
* The instructor should be able to see how many teams have bid for each topic without having to impersonate students&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is the screenshot of real app running that shows what the Instructor will see in Assignment &amp;gt;&amp;gt; Topic view:&lt;br /&gt;
&lt;br /&gt;
[[File:assignment-topics.png|1200px|Assignment Topics View]]&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
=== Manual UI testing for the deployed project. ===&lt;br /&gt;
&lt;br /&gt;
==== UI Testing ====&lt;br /&gt;
'''Instructor View''' &amp;lt;br&amp;gt;&lt;br /&gt;
* username: instructor6 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Student View'''  &amp;lt;br&amp;gt;&lt;br /&gt;
* username: student575 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular assignment: SELECT topic_id as topic_id, COUNT(b.topic_id) as count FROM sign_up_topics t JOIN bids b ON t.id = b.topic_id WHERE t.assignment_id = 834 GROUP BY t.id&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; SELECT topic_id as topic_id, COUNT(b.topic_id) as count FROM sign_up_topics t JOIN bids b ON t.id = b.topic_id WHERE t.assignment_id = 834 GROUP BY t.id;&lt;br /&gt;
+----------+-------+&lt;br /&gt;
| topic_id | count |&lt;br /&gt;
+----------+-------+&lt;br /&gt;
|     3918 |    29 |&lt;br /&gt;
|     3919 |    14 |&lt;br /&gt;
|     3920 |    12 |&lt;br /&gt;
|     3921 |    29 |&lt;br /&gt;
|     3922 |    19 |&lt;br /&gt;
|     3923 |    13 |&lt;br /&gt;
|     3924 |    14 |&lt;br /&gt;
|     3925 |    15 |&lt;br /&gt;
|     3926 |    11 |&lt;br /&gt;
|     3927 |    10 |&lt;br /&gt;
|     3928 |     9 |&lt;br /&gt;
|     3929 |     6 |&lt;br /&gt;
|     3930 |     7 |&lt;br /&gt;
|     3931 |     8 |&lt;br /&gt;
|     3932 |     5 |&lt;br /&gt;
|     3933 |     7 |&lt;br /&gt;
|     3934 |    17 |&lt;br /&gt;
|     3935 |    12 |&lt;br /&gt;
|     3936 |     4 |&lt;br /&gt;
|     3937 |    19 |&lt;br /&gt;
|     3938 |    10 |&lt;br /&gt;
+----------+-------+&lt;br /&gt;
21 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total of #1 bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular topic: select * from bids where priority = 1 and topic_id=3918;&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of #1 bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select count(*) from bids where priority = 1 and topic_id=3918;&lt;br /&gt;
+----------+&lt;br /&gt;
| count(*) |&lt;br /&gt;
+----------+&lt;br /&gt;
|       10 |&lt;br /&gt;
+----------+&lt;br /&gt;
1 row in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total of #2 bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular topic: select * from bids where priority = 2 and topic_id=3918;&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of # 2 bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select count(*) from bids where priority = 2 and topic_id=3921;&lt;br /&gt;
+----------+&lt;br /&gt;
| count(*) |&lt;br /&gt;
+----------+&lt;br /&gt;
|        6 |&lt;br /&gt;
+----------+&lt;br /&gt;
1 row in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
* Place holder for potential ed-cases that might get missed&lt;br /&gt;
&lt;br /&gt;
==Team Roster ==&lt;br /&gt;
&lt;br /&gt;
Mentor: Ed Gehringer - efg@ncsu.edu&lt;br /&gt;
&lt;br /&gt;
*Duy Nguyen - dvnguye3@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Kwon HyeokJun - khyeokj@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Shawn Salekin - ssaleki@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*David Glymph - dwglymph@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
#[https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit?pli=1#heading=h.5cgh9aixuut7 Previous works]&lt;br /&gt;
#[https://github.com/dnguyenv/expertiza/tree/beta Team code repo]&lt;br /&gt;
#[https://github.com/expertiza/expertiza/tree/beta Upstream code repo]&lt;/div&gt;</summary>
		<author><name>Dvnguye3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145069</id>
		<title>CSC/ECE 517 Spring 2022 - E2245: View for results of bidding</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145069"/>
		<updated>2022-04-24T20:25:03Z</updated>

		<summary type="html">&lt;p&gt;Dvnguye3: /* Functionalities added */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''CSC/ECE 517 Spring 2022 - E2245: View for results of bidding&lt;br /&gt;
'''&lt;br /&gt;
== Problem Statement == &lt;br /&gt;
&lt;br /&gt;
When students sign up for topics, they are presented with a system to bid on their favorite topics. This process is allowed for both individual students as well as teams. As a result, many students will first sign up for topics, which can reduce the number of teams that get their first pick, and result in long waitlists. There are several bidding algorithms available to the instructors to give as many groups as possible their first choice. As this is an NP-complete problem, the algorithm has to use heuristics to guess efficiently. There needs to be a way for instructors to easily view and compare the results of the bidding algorithms to get a quantitative sense of their effectiveness.&lt;br /&gt;
&lt;br /&gt;
== Project Goal == &lt;br /&gt;
This project aims to solve this issue by giving clear and concise feedback of the algorithms in topics list in the assignment. However, since topics in the table potentially have several fields, care must be taken not to overcrowd the table with information. There are several different UI/UX approaches to display this information, and the chosen one should:&lt;br /&gt;
* Maximize useful information at a glance, while minimizing clutter&lt;br /&gt;
* Fit into the flow of the topic page&lt;br /&gt;
* Allow further information to be obtained if requested&lt;br /&gt;
* Not be visible if bidding is not used&lt;br /&gt;
&lt;br /&gt;
Some other miscellaneous goals of this project are to:&lt;br /&gt;
* Remove topic fields from view if they are not applicable&lt;br /&gt;
* Refactor code&lt;br /&gt;
* Increase test coverage&lt;br /&gt;
&lt;br /&gt;
== Previous Work == &lt;br /&gt;
&lt;br /&gt;
=== Current User Cases ===&lt;br /&gt;
&lt;br /&gt;
Below is the use case diagram that depicts the existing use cases that associated to the topics bidding features of the application. Notice that in order to check some bidding information for a topic/project, the Instructor has to impersonate a student.&lt;br /&gt;
&lt;br /&gt;
[[File:old-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Current Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
As an Instructor, the user after, being authenticated, needs to go to the Assignments &amp;gt;&amp;gt; Topics view to create the topics/projects and then once the bidding started, needs to impersonate a student to partially (at very minimal level) get the bidding process information &lt;br /&gt;
&lt;br /&gt;
[[File:Old-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
== Improvement on the Previous Work ==&lt;br /&gt;
&lt;br /&gt;
=== Change in Use Cases ===&lt;br /&gt;
&lt;br /&gt;
[[File:new-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
'''Student''': This actor is responsible for submitting and deleting bids for topics while the topic selection period is open for an assignment which uses the new lottery topic selection mechanism. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Instructor''': This actor is responsible for updating an assignment to use the new lottery topic selection as well as closing the bidding period and beginning the automatic topic selection. Instructor is also able to view the progress details of bids without having to impersonate students&lt;br /&gt;
&lt;br /&gt;
=== UI design ===&lt;br /&gt;
&lt;br /&gt;
The existing view with very limited information about the bidding process&lt;br /&gt;
&lt;br /&gt;
'''Before''':&lt;br /&gt;
&lt;br /&gt;
[[File:before-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With this proposed new view, the Instructor can gain a more complete view of the whole bidding process in one place.&lt;br /&gt;
&lt;br /&gt;
'''Proposed UI'''&lt;br /&gt;
&lt;br /&gt;
[[File:after-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
=== Change in Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
With the new flow and implementation, the Instructor now can have all (complete) information he/she needs in one place at the Topics list/details view instead of having to impersonate a student to get even some minimal, un-completed piece of information about the bidding. &lt;br /&gt;
&lt;br /&gt;
[[File:new-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Class Diagram ===&lt;br /&gt;
&lt;br /&gt;
[[File:class-diagram.png|1000px|Class diagram]]&lt;br /&gt;
&lt;br /&gt;
=== Code changes ===&lt;br /&gt;
&lt;br /&gt;
From preliminary research, we believed we would need to add and modify, refactor code from almost all layers of the features (including Controllers, Models, Views but we end up decided to focus on delivering the feature with minimum code changes and regression tests, so majority of our code changes are on Views layer. Following are the changes we made (We also added links to our Github commits for each change so that the reviewers can link directly to github for more in-depth inspection/review)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''New Files added:'''&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_total_bids.html.erb&lt;br /&gt;
&lt;br /&gt;
[[File:total-bids.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_total_1_2_bids.html.erb&lt;br /&gt;
&lt;br /&gt;
[[File:total-1-2-bids.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
'''Files changed:'''&lt;br /&gt;
&lt;br /&gt;
'''View:'''&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_actions.html.erb&lt;br /&gt;
&lt;br /&gt;
[[File:e2245-actions.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_add_signup_topics.html.erb&lt;br /&gt;
&lt;br /&gt;
[[File:add-signup-topics.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_table_header.html.erb&lt;br /&gt;
&lt;br /&gt;
[[File:table-header.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_table_line.html.erb&lt;br /&gt;
&lt;br /&gt;
[[File:table-line.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
'''Configuration:'''&lt;br /&gt;
&lt;br /&gt;
*config/locales/en_US.yml&lt;br /&gt;
&lt;br /&gt;
*config/locales/hi_IN.yml&lt;br /&gt;
&lt;br /&gt;
== Functionalities added ==&lt;br /&gt;
 &lt;br /&gt;
* The instructor should be able to see how many teams have bid for each topic without having to impersonate students&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is the screenshot of real app running that shows what the Instructor will see in Assignment &amp;gt;&amp;gt; Topic view:&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
=== Manual UI testing for the deployed project. ===&lt;br /&gt;
&lt;br /&gt;
==== UI Testing ====&lt;br /&gt;
'''Instructor View''' &amp;lt;br&amp;gt;&lt;br /&gt;
* username: instructor6 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Student View'''  &amp;lt;br&amp;gt;&lt;br /&gt;
* username: student575 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular assignment: SELECT topic_id as topic_id, COUNT(b.topic_id) as count FROM sign_up_topics t JOIN bids b ON t.id = b.topic_id WHERE t.assignment_id = 834 GROUP BY t.id&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; SELECT topic_id as topic_id, COUNT(b.topic_id) as count FROM sign_up_topics t JOIN bids b ON t.id = b.topic_id WHERE t.assignment_id = 834 GROUP BY t.id;&lt;br /&gt;
+----------+-------+&lt;br /&gt;
| topic_id | count |&lt;br /&gt;
+----------+-------+&lt;br /&gt;
|     3918 |    29 |&lt;br /&gt;
|     3919 |    14 |&lt;br /&gt;
|     3920 |    12 |&lt;br /&gt;
|     3921 |    29 |&lt;br /&gt;
|     3922 |    19 |&lt;br /&gt;
|     3923 |    13 |&lt;br /&gt;
|     3924 |    14 |&lt;br /&gt;
|     3925 |    15 |&lt;br /&gt;
|     3926 |    11 |&lt;br /&gt;
|     3927 |    10 |&lt;br /&gt;
|     3928 |     9 |&lt;br /&gt;
|     3929 |     6 |&lt;br /&gt;
|     3930 |     7 |&lt;br /&gt;
|     3931 |     8 |&lt;br /&gt;
|     3932 |     5 |&lt;br /&gt;
|     3933 |     7 |&lt;br /&gt;
|     3934 |    17 |&lt;br /&gt;
|     3935 |    12 |&lt;br /&gt;
|     3936 |     4 |&lt;br /&gt;
|     3937 |    19 |&lt;br /&gt;
|     3938 |    10 |&lt;br /&gt;
+----------+-------+&lt;br /&gt;
21 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total of #1 bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular topic: select * from bids where priority = 1 and topic_id=3918;&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of #1 bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select count(*) from bids where priority = 1 and topic_id=3918;&lt;br /&gt;
+----------+&lt;br /&gt;
| count(*) |&lt;br /&gt;
+----------+&lt;br /&gt;
|       10 |&lt;br /&gt;
+----------+&lt;br /&gt;
1 row in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total of #2 bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular topic: select * from bids where priority = 2 and topic_id=3918;&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of # 2 bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select count(*) from bids where priority = 2 and topic_id=3921;&lt;br /&gt;
+----------+&lt;br /&gt;
| count(*) |&lt;br /&gt;
+----------+&lt;br /&gt;
|        6 |&lt;br /&gt;
+----------+&lt;br /&gt;
1 row in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
* Place holder for potential ed-cases that might get missed&lt;br /&gt;
&lt;br /&gt;
==Team Roster ==&lt;br /&gt;
&lt;br /&gt;
Mentor: Ed Gehringer - efg@ncsu.edu&lt;br /&gt;
&lt;br /&gt;
*Duy Nguyen - dvnguye3@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Kwon HyeokJun - khyeokj@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Shawn Salekin - ssaleki@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*David Glymph - dwglymph@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
#[https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit?pli=1#heading=h.5cgh9aixuut7 Previous works]&lt;br /&gt;
#[https://github.com/dnguyenv/expertiza/tree/beta Team code repo]&lt;br /&gt;
#[https://github.com/expertiza/expertiza/tree/beta Upstream code repo]&lt;/div&gt;</summary>
		<author><name>Dvnguye3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145068</id>
		<title>CSC/ECE 517 Spring 2022 - E2245: View for results of bidding</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145068"/>
		<updated>2022-04-24T20:22:46Z</updated>

		<summary type="html">&lt;p&gt;Dvnguye3: /* Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''CSC/ECE 517 Spring 2022 - E2245: View for results of bidding&lt;br /&gt;
'''&lt;br /&gt;
== Problem Statement == &lt;br /&gt;
&lt;br /&gt;
When students sign up for topics, they are presented with a system to bid on their favorite topics. This process is allowed for both individual students as well as teams. As a result, many students will first sign up for topics, which can reduce the number of teams that get their first pick, and result in long waitlists. There are several bidding algorithms available to the instructors to give as many groups as possible their first choice. As this is an NP-complete problem, the algorithm has to use heuristics to guess efficiently. There needs to be a way for instructors to easily view and compare the results of the bidding algorithms to get a quantitative sense of their effectiveness.&lt;br /&gt;
&lt;br /&gt;
== Project Goal == &lt;br /&gt;
This project aims to solve this issue by giving clear and concise feedback of the algorithms in topics list in the assignment. However, since topics in the table potentially have several fields, care must be taken not to overcrowd the table with information. There are several different UI/UX approaches to display this information, and the chosen one should:&lt;br /&gt;
* Maximize useful information at a glance, while minimizing clutter&lt;br /&gt;
* Fit into the flow of the topic page&lt;br /&gt;
* Allow further information to be obtained if requested&lt;br /&gt;
* Not be visible if bidding is not used&lt;br /&gt;
&lt;br /&gt;
Some other miscellaneous goals of this project are to:&lt;br /&gt;
* Remove topic fields from view if they are not applicable&lt;br /&gt;
* Refactor code&lt;br /&gt;
* Increase test coverage&lt;br /&gt;
&lt;br /&gt;
== Previous Work == &lt;br /&gt;
&lt;br /&gt;
=== Current User Cases ===&lt;br /&gt;
&lt;br /&gt;
Below is the use case diagram that depicts the existing use cases that associated to the topics bidding features of the application. Notice that in order to check some bidding information for a topic/project, the Instructor has to impersonate a student.&lt;br /&gt;
&lt;br /&gt;
[[File:old-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Current Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
As an Instructor, the user after, being authenticated, needs to go to the Assignments &amp;gt;&amp;gt; Topics view to create the topics/projects and then once the bidding started, needs to impersonate a student to partially (at very minimal level) get the bidding process information &lt;br /&gt;
&lt;br /&gt;
[[File:Old-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
== Improvement on the Previous Work ==&lt;br /&gt;
&lt;br /&gt;
=== Change in Use Cases ===&lt;br /&gt;
&lt;br /&gt;
[[File:new-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
'''Student''': This actor is responsible for submitting and deleting bids for topics while the topic selection period is open for an assignment which uses the new lottery topic selection mechanism. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Instructor''': This actor is responsible for updating an assignment to use the new lottery topic selection as well as closing the bidding period and beginning the automatic topic selection. Instructor is also able to view the progress details of bids without having to impersonate students&lt;br /&gt;
&lt;br /&gt;
=== UI design ===&lt;br /&gt;
&lt;br /&gt;
The existing view with very limited information about the bidding process&lt;br /&gt;
&lt;br /&gt;
'''Before''':&lt;br /&gt;
&lt;br /&gt;
[[File:before-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With this proposed new view, the Instructor can gain a more complete view of the whole bidding process in one place.&lt;br /&gt;
&lt;br /&gt;
'''Proposed UI'''&lt;br /&gt;
&lt;br /&gt;
[[File:after-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
=== Change in Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
With the new flow and implementation, the Instructor now can have all (complete) information he/she needs in one place at the Topics list/details view instead of having to impersonate a student to get even some minimal, un-completed piece of information about the bidding. &lt;br /&gt;
&lt;br /&gt;
[[File:new-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Class Diagram ===&lt;br /&gt;
&lt;br /&gt;
[[File:class-diagram.png|1000px|Class diagram]]&lt;br /&gt;
&lt;br /&gt;
=== Code changes ===&lt;br /&gt;
&lt;br /&gt;
From preliminary research, we believed we would need to add and modify, refactor code from almost all layers of the features (including Controllers, Models, Views but we end up decided to focus on delivering the feature with minimum code changes and regression tests, so majority of our code changes are on Views layer. Following are the changes we made (We also added links to our Github commits for each change so that the reviewers can link directly to github for more in-depth inspection/review)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''New Files added:'''&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_total_bids.html.erb&lt;br /&gt;
&lt;br /&gt;
[[File:total-bids.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_total_1_2_bids.html.erb&lt;br /&gt;
&lt;br /&gt;
[[File:total-1-2-bids.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
'''Files changed:'''&lt;br /&gt;
&lt;br /&gt;
'''View:'''&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_actions.html.erb&lt;br /&gt;
&lt;br /&gt;
[[File:e2245-actions.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_add_signup_topics.html.erb&lt;br /&gt;
&lt;br /&gt;
[[File:add-signup-topics.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_table_header.html.erb&lt;br /&gt;
&lt;br /&gt;
[[File:table-header.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_table_line.html.erb&lt;br /&gt;
&lt;br /&gt;
[[File:table-line.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
'''Configuration:'''&lt;br /&gt;
&lt;br /&gt;
*config/locales/en_US.yml&lt;br /&gt;
&lt;br /&gt;
*config/locales/hi_IN.yml&lt;br /&gt;
&lt;br /&gt;
== Functionalities added ==&lt;br /&gt;
 &lt;br /&gt;
* The instructor should be able to see how many teams have bid for each topic without having to impersonate students&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
&lt;br /&gt;
=== Manual UI testing for the deployed project. ===&lt;br /&gt;
&lt;br /&gt;
==== UI Testing ====&lt;br /&gt;
'''Instructor View''' &amp;lt;br&amp;gt;&lt;br /&gt;
* username: instructor6 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Student View'''  &amp;lt;br&amp;gt;&lt;br /&gt;
* username: student575 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular assignment: SELECT topic_id as topic_id, COUNT(b.topic_id) as count FROM sign_up_topics t JOIN bids b ON t.id = b.topic_id WHERE t.assignment_id = 834 GROUP BY t.id&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; SELECT topic_id as topic_id, COUNT(b.topic_id) as count FROM sign_up_topics t JOIN bids b ON t.id = b.topic_id WHERE t.assignment_id = 834 GROUP BY t.id;&lt;br /&gt;
+----------+-------+&lt;br /&gt;
| topic_id | count |&lt;br /&gt;
+----------+-------+&lt;br /&gt;
|     3918 |    29 |&lt;br /&gt;
|     3919 |    14 |&lt;br /&gt;
|     3920 |    12 |&lt;br /&gt;
|     3921 |    29 |&lt;br /&gt;
|     3922 |    19 |&lt;br /&gt;
|     3923 |    13 |&lt;br /&gt;
|     3924 |    14 |&lt;br /&gt;
|     3925 |    15 |&lt;br /&gt;
|     3926 |    11 |&lt;br /&gt;
|     3927 |    10 |&lt;br /&gt;
|     3928 |     9 |&lt;br /&gt;
|     3929 |     6 |&lt;br /&gt;
|     3930 |     7 |&lt;br /&gt;
|     3931 |     8 |&lt;br /&gt;
|     3932 |     5 |&lt;br /&gt;
|     3933 |     7 |&lt;br /&gt;
|     3934 |    17 |&lt;br /&gt;
|     3935 |    12 |&lt;br /&gt;
|     3936 |     4 |&lt;br /&gt;
|     3937 |    19 |&lt;br /&gt;
|     3938 |    10 |&lt;br /&gt;
+----------+-------+&lt;br /&gt;
21 rows in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total of #1 bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular topic: select * from bids where priority = 1 and topic_id=3918;&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of #1 bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select count(*) from bids where priority = 1 and topic_id=3918;&lt;br /&gt;
+----------+&lt;br /&gt;
| count(*) |&lt;br /&gt;
+----------+&lt;br /&gt;
|       10 |&lt;br /&gt;
+----------+&lt;br /&gt;
1 row in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View total of #2 bids for a topic ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Assignments &amp;gt;&amp;gt; Topics page/tab&lt;br /&gt;
# Execute this query against the application database to get the total number of bids for each topic for a particular topic: select * from bids where priority = 2 and topic_id=3918;&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details (total number of # 2 bids) for each Topic on the table&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mysql&amp;gt; select count(*) from bids where priority = 2 and topic_id=3921;&lt;br /&gt;
+----------+&lt;br /&gt;
| count(*) |&lt;br /&gt;
+----------+&lt;br /&gt;
|        6 |&lt;br /&gt;
+----------+&lt;br /&gt;
1 row in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
* Place holder for potential ed-cases that might get missed&lt;br /&gt;
&lt;br /&gt;
==Team Roster ==&lt;br /&gt;
&lt;br /&gt;
Mentor: Ed Gehringer - efg@ncsu.edu&lt;br /&gt;
&lt;br /&gt;
*Duy Nguyen - dvnguye3@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Kwon HyeokJun - khyeokj@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Shawn Salekin - ssaleki@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*David Glymph - dwglymph@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
#[https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit?pli=1#heading=h.5cgh9aixuut7 Previous works]&lt;br /&gt;
#[https://github.com/dnguyenv/expertiza/tree/beta Team code repo]&lt;br /&gt;
#[https://github.com/expertiza/expertiza/tree/beta Upstream code repo]&lt;/div&gt;</summary>
		<author><name>Dvnguye3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Total-1-2-bids.png&amp;diff=145067</id>
		<title>File:Total-1-2-bids.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Total-1-2-bids.png&amp;diff=145067"/>
		<updated>2022-04-24T20:08:02Z</updated>

		<summary type="html">&lt;p&gt;Dvnguye3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Dvnguye3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Total-bids.png&amp;diff=145066</id>
		<title>File:Total-bids.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Total-bids.png&amp;diff=145066"/>
		<updated>2022-04-24T20:07:50Z</updated>

		<summary type="html">&lt;p&gt;Dvnguye3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Dvnguye3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145065</id>
		<title>CSC/ECE 517 Spring 2022 - E2245: View for results of bidding</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145065"/>
		<updated>2022-04-24T20:07:36Z</updated>

		<summary type="html">&lt;p&gt;Dvnguye3: /* Code changes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''CSC/ECE 517 Spring 2022 - E2245: View for results of bidding&lt;br /&gt;
'''&lt;br /&gt;
== Problem Statement == &lt;br /&gt;
&lt;br /&gt;
When students sign up for topics, they are presented with a system to bid on their favorite topics. This process is allowed for both individual students as well as teams. As a result, many students will first sign up for topics, which can reduce the number of teams that get their first pick, and result in long waitlists. There are several bidding algorithms available to the instructors to give as many groups as possible their first choice. As this is an NP-complete problem, the algorithm has to use heuristics to guess efficiently. There needs to be a way for instructors to easily view and compare the results of the bidding algorithms to get a quantitative sense of their effectiveness.&lt;br /&gt;
&lt;br /&gt;
== Project Goal == &lt;br /&gt;
This project aims to solve this issue by giving clear and concise feedback of the algorithms in topics list in the assignment. However, since topics in the table potentially have several fields, care must be taken not to overcrowd the table with information. There are several different UI/UX approaches to display this information, and the chosen one should:&lt;br /&gt;
* Maximize useful information at a glance, while minimizing clutter&lt;br /&gt;
* Fit into the flow of the topic page&lt;br /&gt;
* Allow further information to be obtained if requested&lt;br /&gt;
* Not be visible if bidding is not used&lt;br /&gt;
&lt;br /&gt;
Some other miscellaneous goals of this project are to:&lt;br /&gt;
* Remove topic fields from view if they are not applicable&lt;br /&gt;
* Refactor code&lt;br /&gt;
* Increase test coverage&lt;br /&gt;
&lt;br /&gt;
== Previous Work == &lt;br /&gt;
&lt;br /&gt;
=== Current User Cases ===&lt;br /&gt;
&lt;br /&gt;
Below is the use case diagram that depicts the existing use cases that associated to the topics bidding features of the application. Notice that in order to check some bidding information for a topic/project, the Instructor has to impersonate a student.&lt;br /&gt;
&lt;br /&gt;
[[File:old-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Current Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
As an Instructor, the user after, being authenticated, needs to go to the Assignments &amp;gt;&amp;gt; Topics view to create the topics/projects and then once the bidding started, needs to impersonate a student to partially (at very minimal level) get the bidding process information &lt;br /&gt;
&lt;br /&gt;
[[File:Old-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
== Improvement on the Previous Work ==&lt;br /&gt;
&lt;br /&gt;
=== Change in Use Cases ===&lt;br /&gt;
&lt;br /&gt;
[[File:new-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
'''Student''': This actor is responsible for submitting and deleting bids for topics while the topic selection period is open for an assignment which uses the new lottery topic selection mechanism. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Instructor''': This actor is responsible for updating an assignment to use the new lottery topic selection as well as closing the bidding period and beginning the automatic topic selection. Instructor is also able to view the progress details of bids without having to impersonate students&lt;br /&gt;
&lt;br /&gt;
=== UI design ===&lt;br /&gt;
&lt;br /&gt;
The existing view with very limited information about the bidding process&lt;br /&gt;
&lt;br /&gt;
'''Before''':&lt;br /&gt;
&lt;br /&gt;
[[File:before-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With this proposed new view, the Instructor can gain a more complete view of the whole bidding process in one place.&lt;br /&gt;
&lt;br /&gt;
'''Proposed UI'''&lt;br /&gt;
&lt;br /&gt;
[[File:after-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
=== Change in Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
With the new flow and implementation, the Instructor now can have all (complete) information he/she needs in one place at the Topics list/details view instead of having to impersonate a student to get even some minimal, un-completed piece of information about the bidding. &lt;br /&gt;
&lt;br /&gt;
[[File:new-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Class Diagram ===&lt;br /&gt;
&lt;br /&gt;
[[File:class-diagram.png|1000px|Class diagram]]&lt;br /&gt;
&lt;br /&gt;
=== Code changes ===&lt;br /&gt;
&lt;br /&gt;
From preliminary research, we believed we would need to add and modify, refactor code from almost all layers of the features (including Controllers, Models, Views but we end up decided to focus on delivering the feature with minimum code changes and regression tests, so majority of our code changes are on Views layer. Following are the changes we made (We also added links to our Github commits for each change so that the reviewers can link directly to github for more in-depth inspection/review)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''New Files added:'''&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_total_bids.html.erb&lt;br /&gt;
&lt;br /&gt;
[[File:total-bids.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_total_1_2_bids.html.erb&lt;br /&gt;
&lt;br /&gt;
[[File:total-1-2-bids.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
'''Files changed:'''&lt;br /&gt;
&lt;br /&gt;
'''View:'''&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_actions.html.erb&lt;br /&gt;
&lt;br /&gt;
[[File:e2245-actions.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_add_signup_topics.html.erb&lt;br /&gt;
&lt;br /&gt;
[[File:add-signup-topics.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_table_header.html.erb&lt;br /&gt;
&lt;br /&gt;
[[File:table-header.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_table_line.html.erb&lt;br /&gt;
&lt;br /&gt;
[[File:table-line.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
'''Configuration:'''&lt;br /&gt;
&lt;br /&gt;
*config/locales/en_US.yml&lt;br /&gt;
&lt;br /&gt;
*config/locales/hi_IN.yml&lt;br /&gt;
&lt;br /&gt;
== Functionalities added ==&lt;br /&gt;
 &lt;br /&gt;
* The instructor should be able to see how many teams have bid for each topic without having to impersonate students&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
=== Run and pass all the RSpec Tests (including the existing ones - regression, and the newly added cases) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  describe '#create' do&lt;br /&gt;
    context 'when topic cannot be found' do&lt;br /&gt;
      context 'when new topic can be saved successfully' do&lt;br /&gt;
        it 'sets up a new topic and redirects to assignment#edit page' do&lt;br /&gt;
          allow(SignUpTopic).to receive(:where).with(topic_name: 'Hello world!', assignment_id: '1').and_return([nil])&lt;br /&gt;
          allow_any_instance_of(SignUpSheetController).to receive(:undo_link)&lt;br /&gt;
            .with('The topic: &amp;quot;Hello world!&amp;quot; has been created successfully. ').and_return('OK')&lt;br /&gt;
          allow(topic).to receive(:save).and_return('OK')&lt;br /&gt;
          request_params = {&lt;br /&gt;
            id: 1,&lt;br /&gt;
            topic: {&lt;br /&gt;
              topic_identifier: 1,&lt;br /&gt;
              topic_name: 'Hello world!',&lt;br /&gt;
              max_choosers: 1,&lt;br /&gt;
              category: '',&lt;br /&gt;
              micropayment: 1&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
          post :create, params: request_params&lt;br /&gt;
          expect(response).to redirect_to('/assignments/1/edit#tabs-2')&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
      context 'when new topic cannot be saved successfully' do&lt;br /&gt;
        it 'sets up a new topic and renders sign_up_sheet#new page' do&lt;br /&gt;
          allow(SignUpTopic).to receive(:where).with(topic_name: 'Hello world!', assignment_id: '1').and_return([nil])&lt;br /&gt;
          allow_any_instance_of(SignUpSheetController).to receive(:undo_link)&lt;br /&gt;
            .with('The topic: &amp;quot;Hello world!&amp;quot; has been created successfully. ').and_return('OK')&lt;br /&gt;
          allow(topic).to receive(:save).and_return('OK')&lt;br /&gt;
          request_params = {&lt;br /&gt;
            id: 1,&lt;br /&gt;
            topic: {&lt;br /&gt;
              topic_identifier: 1,&lt;br /&gt;
              topic_name: 'Hello world!',&lt;br /&gt;
              category: '',&lt;br /&gt;
              micropayment: 1&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
          post :create, params: request_params&lt;br /&gt;
          expect(response).to render_template(:new)&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    context 'when topic can be found' do&lt;br /&gt;
      it 'updates the existing topic and redirects to sign_up_sheet#add_signup_topics_staggered page' do&lt;br /&gt;
        allow(SignedUpTeam).to receive(:find_by).with(topic_id: 1).and_return(signed_up_team)&lt;br /&gt;
        allow(SignedUpTeam).to receive(:where).with(topic_id: 1, is_waitlisted: true).and_return([signed_up_team2])&lt;br /&gt;
        allow(Team).to receive(:find).with(2).and_return(team)&lt;br /&gt;
        allow(SignUpTopic).to receive(:find_waitlisted_topics).with(1, 2).and_return(nil)&lt;br /&gt;
        request_params = {&lt;br /&gt;
          id: 1,&lt;br /&gt;
          topic: {&lt;br /&gt;
            topic_identifier: 666,&lt;br /&gt;
            topic_name: 'Hello world!',&lt;br /&gt;
            max_choosers: 2,&lt;br /&gt;
            category: '666',&lt;br /&gt;
            micropayment: 1&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
        post :create, params: request_params&lt;br /&gt;
        expect(SignedUpTeam.first.is_waitlisted).to be false&lt;br /&gt;
        expect(response).to redirect_to('/sign_up_sheet/add_signup_topics_staggered?id=1')&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  describe '#destroy' do&lt;br /&gt;
    context 'when topic can be found' do&lt;br /&gt;
      it 'redirects to assignment#edit page' do&lt;br /&gt;
        allow_any_instance_of(SignUpSheetController).to receive(:undo_link)&lt;br /&gt;
          .with('The topic: &amp;quot;Hello world!&amp;quot; has been successfully deleted. ').and_return('OK')&lt;br /&gt;
        request_params = { id: 1, assignment_id: 1 }&lt;br /&gt;
        post :destroy, params: request_params&lt;br /&gt;
        expect(response).to redirect_to('/assignments/1/edit')&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    context 'when topic cannot be found' do&lt;br /&gt;
      it 'shows an error flash message and redirects to assignment#edit page' do&lt;br /&gt;
        allow(SignUpTopic).to receive(:find).with('1').and_return(nil)&lt;br /&gt;
        allow_any_instance_of(SignUpSheetController).to receive(:undo_link)&lt;br /&gt;
          .with('The topic: &amp;quot;Hello world!&amp;quot; has been successfully deleted. ').and_return('OK')&lt;br /&gt;
        request_params = { id: 1, assignment_id: 1 }&lt;br /&gt;
        post :destroy, params: request_params&lt;br /&gt;
        expect(flash[:error]).to eq('The topic could not be deleted.')&lt;br /&gt;
        expect(response).to redirect_to('/assignments/1/edit')&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test the UI for the deployed project. ===&lt;br /&gt;
&lt;br /&gt;
==== UI Testing ====&lt;br /&gt;
'''Instructor View''' &amp;lt;br&amp;gt;&lt;br /&gt;
* username: instructor6 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Student View'''  &amp;lt;br&amp;gt;&lt;br /&gt;
* username: student575 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View bidding details ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Topics page&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details for each Topic on the table&lt;br /&gt;
# Impersonate a Student to verify if the team/student was actually bidding for the Topic&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
* Place holder for potential ed-cases that might get missed&lt;br /&gt;
&lt;br /&gt;
==Team Roster ==&lt;br /&gt;
&lt;br /&gt;
Mentor: Ed Gehringer - efg@ncsu.edu&lt;br /&gt;
&lt;br /&gt;
*Duy Nguyen - dvnguye3@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Kwon HyeokJun - khyeokj@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Shawn Salekin - ssaleki@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*David Glymph - dwglymph@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
#[https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit?pli=1#heading=h.5cgh9aixuut7 Previous works]&lt;br /&gt;
#[https://github.com/dnguyenv/expertiza/tree/beta Team code repo]&lt;br /&gt;
#[https://github.com/expertiza/expertiza/tree/beta Upstream code repo]&lt;/div&gt;</summary>
		<author><name>Dvnguye3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:E2245-actions.png&amp;diff=145064</id>
		<title>File:E2245-actions.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:E2245-actions.png&amp;diff=145064"/>
		<updated>2022-04-24T20:05:21Z</updated>

		<summary type="html">&lt;p&gt;Dvnguye3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Dvnguye3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145063</id>
		<title>CSC/ECE 517 Spring 2022 - E2245: View for results of bidding</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145063"/>
		<updated>2022-04-24T20:03:46Z</updated>

		<summary type="html">&lt;p&gt;Dvnguye3: /* Code changes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''CSC/ECE 517 Spring 2022 - E2245: View for results of bidding&lt;br /&gt;
'''&lt;br /&gt;
== Problem Statement == &lt;br /&gt;
&lt;br /&gt;
When students sign up for topics, they are presented with a system to bid on their favorite topics. This process is allowed for both individual students as well as teams. As a result, many students will first sign up for topics, which can reduce the number of teams that get their first pick, and result in long waitlists. There are several bidding algorithms available to the instructors to give as many groups as possible their first choice. As this is an NP-complete problem, the algorithm has to use heuristics to guess efficiently. There needs to be a way for instructors to easily view and compare the results of the bidding algorithms to get a quantitative sense of their effectiveness.&lt;br /&gt;
&lt;br /&gt;
== Project Goal == &lt;br /&gt;
This project aims to solve this issue by giving clear and concise feedback of the algorithms in topics list in the assignment. However, since topics in the table potentially have several fields, care must be taken not to overcrowd the table with information. There are several different UI/UX approaches to display this information, and the chosen one should:&lt;br /&gt;
* Maximize useful information at a glance, while minimizing clutter&lt;br /&gt;
* Fit into the flow of the topic page&lt;br /&gt;
* Allow further information to be obtained if requested&lt;br /&gt;
* Not be visible if bidding is not used&lt;br /&gt;
&lt;br /&gt;
Some other miscellaneous goals of this project are to:&lt;br /&gt;
* Remove topic fields from view if they are not applicable&lt;br /&gt;
* Refactor code&lt;br /&gt;
* Increase test coverage&lt;br /&gt;
&lt;br /&gt;
== Previous Work == &lt;br /&gt;
&lt;br /&gt;
=== Current User Cases ===&lt;br /&gt;
&lt;br /&gt;
Below is the use case diagram that depicts the existing use cases that associated to the topics bidding features of the application. Notice that in order to check some bidding information for a topic/project, the Instructor has to impersonate a student.&lt;br /&gt;
&lt;br /&gt;
[[File:old-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Current Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
As an Instructor, the user after, being authenticated, needs to go to the Assignments &amp;gt;&amp;gt; Topics view to create the topics/projects and then once the bidding started, needs to impersonate a student to partially (at very minimal level) get the bidding process information &lt;br /&gt;
&lt;br /&gt;
[[File:Old-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
== Improvement on the Previous Work ==&lt;br /&gt;
&lt;br /&gt;
=== Change in Use Cases ===&lt;br /&gt;
&lt;br /&gt;
[[File:new-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
'''Student''': This actor is responsible for submitting and deleting bids for topics while the topic selection period is open for an assignment which uses the new lottery topic selection mechanism. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Instructor''': This actor is responsible for updating an assignment to use the new lottery topic selection as well as closing the bidding period and beginning the automatic topic selection. Instructor is also able to view the progress details of bids without having to impersonate students&lt;br /&gt;
&lt;br /&gt;
=== UI design ===&lt;br /&gt;
&lt;br /&gt;
The existing view with very limited information about the bidding process&lt;br /&gt;
&lt;br /&gt;
'''Before''':&lt;br /&gt;
&lt;br /&gt;
[[File:before-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With this proposed new view, the Instructor can gain a more complete view of the whole bidding process in one place.&lt;br /&gt;
&lt;br /&gt;
'''Proposed UI'''&lt;br /&gt;
&lt;br /&gt;
[[File:after-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
=== Change in Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
With the new flow and implementation, the Instructor now can have all (complete) information he/she needs in one place at the Topics list/details view instead of having to impersonate a student to get even some minimal, un-completed piece of information about the bidding. &lt;br /&gt;
&lt;br /&gt;
[[File:new-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Class Diagram ===&lt;br /&gt;
&lt;br /&gt;
[[File:class-diagram.png|1000px|Class diagram]]&lt;br /&gt;
&lt;br /&gt;
=== Code changes ===&lt;br /&gt;
&lt;br /&gt;
From preliminary research, we believed we would need to add and modify, refactor code from almost all layers of the features (including Controllers, Models, Views but we end up decided to focus on delivering the feature with minimum code changes and regression tests, so majority of our code changes are on Views layer. Following are the changes we made (We also added links to our Github commits for each change so that the reviewers can link directly to github for more in-depth inspection/review)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''New Files added:'''&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_total_bids.html.erb&lt;br /&gt;
*app/views/sign_up_sheet/_total_1_2_bids.html.erb&lt;br /&gt;
&lt;br /&gt;
'''Files changed:'''&lt;br /&gt;
&lt;br /&gt;
'''View:'''&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_actions.html.erb&lt;br /&gt;
&lt;br /&gt;
[[File:actions.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_add_signup_topics.html.erb&lt;br /&gt;
&lt;br /&gt;
[[File:add-signup-topics.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_table_header.html.erb&lt;br /&gt;
&lt;br /&gt;
[[File:table-header.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_table_line.html.erb&lt;br /&gt;
&lt;br /&gt;
[[File:table-line.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
'''Configuration:'''&lt;br /&gt;
&lt;br /&gt;
*config/locales/en_US.yml&lt;br /&gt;
&lt;br /&gt;
*config/locales/hi_IN.yml&lt;br /&gt;
&lt;br /&gt;
== Functionalities added ==&lt;br /&gt;
 &lt;br /&gt;
* The instructor should be able to see how many teams have bid for each topic without having to impersonate students&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
=== Run and pass all the RSpec Tests (including the existing ones - regression, and the newly added cases) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  describe '#create' do&lt;br /&gt;
    context 'when topic cannot be found' do&lt;br /&gt;
      context 'when new topic can be saved successfully' do&lt;br /&gt;
        it 'sets up a new topic and redirects to assignment#edit page' do&lt;br /&gt;
          allow(SignUpTopic).to receive(:where).with(topic_name: 'Hello world!', assignment_id: '1').and_return([nil])&lt;br /&gt;
          allow_any_instance_of(SignUpSheetController).to receive(:undo_link)&lt;br /&gt;
            .with('The topic: &amp;quot;Hello world!&amp;quot; has been created successfully. ').and_return('OK')&lt;br /&gt;
          allow(topic).to receive(:save).and_return('OK')&lt;br /&gt;
          request_params = {&lt;br /&gt;
            id: 1,&lt;br /&gt;
            topic: {&lt;br /&gt;
              topic_identifier: 1,&lt;br /&gt;
              topic_name: 'Hello world!',&lt;br /&gt;
              max_choosers: 1,&lt;br /&gt;
              category: '',&lt;br /&gt;
              micropayment: 1&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
          post :create, params: request_params&lt;br /&gt;
          expect(response).to redirect_to('/assignments/1/edit#tabs-2')&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
      context 'when new topic cannot be saved successfully' do&lt;br /&gt;
        it 'sets up a new topic and renders sign_up_sheet#new page' do&lt;br /&gt;
          allow(SignUpTopic).to receive(:where).with(topic_name: 'Hello world!', assignment_id: '1').and_return([nil])&lt;br /&gt;
          allow_any_instance_of(SignUpSheetController).to receive(:undo_link)&lt;br /&gt;
            .with('The topic: &amp;quot;Hello world!&amp;quot; has been created successfully. ').and_return('OK')&lt;br /&gt;
          allow(topic).to receive(:save).and_return('OK')&lt;br /&gt;
          request_params = {&lt;br /&gt;
            id: 1,&lt;br /&gt;
            topic: {&lt;br /&gt;
              topic_identifier: 1,&lt;br /&gt;
              topic_name: 'Hello world!',&lt;br /&gt;
              category: '',&lt;br /&gt;
              micropayment: 1&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
          post :create, params: request_params&lt;br /&gt;
          expect(response).to render_template(:new)&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    context 'when topic can be found' do&lt;br /&gt;
      it 'updates the existing topic and redirects to sign_up_sheet#add_signup_topics_staggered page' do&lt;br /&gt;
        allow(SignedUpTeam).to receive(:find_by).with(topic_id: 1).and_return(signed_up_team)&lt;br /&gt;
        allow(SignedUpTeam).to receive(:where).with(topic_id: 1, is_waitlisted: true).and_return([signed_up_team2])&lt;br /&gt;
        allow(Team).to receive(:find).with(2).and_return(team)&lt;br /&gt;
        allow(SignUpTopic).to receive(:find_waitlisted_topics).with(1, 2).and_return(nil)&lt;br /&gt;
        request_params = {&lt;br /&gt;
          id: 1,&lt;br /&gt;
          topic: {&lt;br /&gt;
            topic_identifier: 666,&lt;br /&gt;
            topic_name: 'Hello world!',&lt;br /&gt;
            max_choosers: 2,&lt;br /&gt;
            category: '666',&lt;br /&gt;
            micropayment: 1&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
        post :create, params: request_params&lt;br /&gt;
        expect(SignedUpTeam.first.is_waitlisted).to be false&lt;br /&gt;
        expect(response).to redirect_to('/sign_up_sheet/add_signup_topics_staggered?id=1')&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  describe '#destroy' do&lt;br /&gt;
    context 'when topic can be found' do&lt;br /&gt;
      it 'redirects to assignment#edit page' do&lt;br /&gt;
        allow_any_instance_of(SignUpSheetController).to receive(:undo_link)&lt;br /&gt;
          .with('The topic: &amp;quot;Hello world!&amp;quot; has been successfully deleted. ').and_return('OK')&lt;br /&gt;
        request_params = { id: 1, assignment_id: 1 }&lt;br /&gt;
        post :destroy, params: request_params&lt;br /&gt;
        expect(response).to redirect_to('/assignments/1/edit')&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    context 'when topic cannot be found' do&lt;br /&gt;
      it 'shows an error flash message and redirects to assignment#edit page' do&lt;br /&gt;
        allow(SignUpTopic).to receive(:find).with('1').and_return(nil)&lt;br /&gt;
        allow_any_instance_of(SignUpSheetController).to receive(:undo_link)&lt;br /&gt;
          .with('The topic: &amp;quot;Hello world!&amp;quot; has been successfully deleted. ').and_return('OK')&lt;br /&gt;
        request_params = { id: 1, assignment_id: 1 }&lt;br /&gt;
        post :destroy, params: request_params&lt;br /&gt;
        expect(flash[:error]).to eq('The topic could not be deleted.')&lt;br /&gt;
        expect(response).to redirect_to('/assignments/1/edit')&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test the UI for the deployed project. ===&lt;br /&gt;
&lt;br /&gt;
==== UI Testing ====&lt;br /&gt;
'''Instructor View''' &amp;lt;br&amp;gt;&lt;br /&gt;
* username: instructor6 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Student View'''  &amp;lt;br&amp;gt;&lt;br /&gt;
* username: student575 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View bidding details ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Topics page&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details for each Topic on the table&lt;br /&gt;
# Impersonate a Student to verify if the team/student was actually bidding for the Topic&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
* Place holder for potential ed-cases that might get missed&lt;br /&gt;
&lt;br /&gt;
==Team Roster ==&lt;br /&gt;
&lt;br /&gt;
Mentor: Ed Gehringer - efg@ncsu.edu&lt;br /&gt;
&lt;br /&gt;
*Duy Nguyen - dvnguye3@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Kwon HyeokJun - khyeokj@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Shawn Salekin - ssaleki@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*David Glymph - dwglymph@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
#[https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit?pli=1#heading=h.5cgh9aixuut7 Previous works]&lt;br /&gt;
#[https://github.com/dnguyenv/expertiza/tree/beta Team code repo]&lt;br /&gt;
#[https://github.com/expertiza/expertiza/tree/beta Upstream code repo]&lt;/div&gt;</summary>
		<author><name>Dvnguye3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Table-line.png&amp;diff=145062</id>
		<title>File:Table-line.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Table-line.png&amp;diff=145062"/>
		<updated>2022-04-24T20:02:50Z</updated>

		<summary type="html">&lt;p&gt;Dvnguye3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Dvnguye3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Table-header.png&amp;diff=145061</id>
		<title>File:Table-header.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Table-header.png&amp;diff=145061"/>
		<updated>2022-04-24T20:02:34Z</updated>

		<summary type="html">&lt;p&gt;Dvnguye3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Dvnguye3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145060</id>
		<title>CSC/ECE 517 Spring 2022 - E2245: View for results of bidding</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145060"/>
		<updated>2022-04-24T20:02:14Z</updated>

		<summary type="html">&lt;p&gt;Dvnguye3: /* Code changes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''CSC/ECE 517 Spring 2022 - E2245: View for results of bidding&lt;br /&gt;
'''&lt;br /&gt;
== Problem Statement == &lt;br /&gt;
&lt;br /&gt;
When students sign up for topics, they are presented with a system to bid on their favorite topics. This process is allowed for both individual students as well as teams. As a result, many students will first sign up for topics, which can reduce the number of teams that get their first pick, and result in long waitlists. There are several bidding algorithms available to the instructors to give as many groups as possible their first choice. As this is an NP-complete problem, the algorithm has to use heuristics to guess efficiently. There needs to be a way for instructors to easily view and compare the results of the bidding algorithms to get a quantitative sense of their effectiveness.&lt;br /&gt;
&lt;br /&gt;
== Project Goal == &lt;br /&gt;
This project aims to solve this issue by giving clear and concise feedback of the algorithms in topics list in the assignment. However, since topics in the table potentially have several fields, care must be taken not to overcrowd the table with information. There are several different UI/UX approaches to display this information, and the chosen one should:&lt;br /&gt;
* Maximize useful information at a glance, while minimizing clutter&lt;br /&gt;
* Fit into the flow of the topic page&lt;br /&gt;
* Allow further information to be obtained if requested&lt;br /&gt;
* Not be visible if bidding is not used&lt;br /&gt;
&lt;br /&gt;
Some other miscellaneous goals of this project are to:&lt;br /&gt;
* Remove topic fields from view if they are not applicable&lt;br /&gt;
* Refactor code&lt;br /&gt;
* Increase test coverage&lt;br /&gt;
&lt;br /&gt;
== Previous Work == &lt;br /&gt;
&lt;br /&gt;
=== Current User Cases ===&lt;br /&gt;
&lt;br /&gt;
Below is the use case diagram that depicts the existing use cases that associated to the topics bidding features of the application. Notice that in order to check some bidding information for a topic/project, the Instructor has to impersonate a student.&lt;br /&gt;
&lt;br /&gt;
[[File:old-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Current Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
As an Instructor, the user after, being authenticated, needs to go to the Assignments &amp;gt;&amp;gt; Topics view to create the topics/projects and then once the bidding started, needs to impersonate a student to partially (at very minimal level) get the bidding process information &lt;br /&gt;
&lt;br /&gt;
[[File:Old-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
== Improvement on the Previous Work ==&lt;br /&gt;
&lt;br /&gt;
=== Change in Use Cases ===&lt;br /&gt;
&lt;br /&gt;
[[File:new-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
'''Student''': This actor is responsible for submitting and deleting bids for topics while the topic selection period is open for an assignment which uses the new lottery topic selection mechanism. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Instructor''': This actor is responsible for updating an assignment to use the new lottery topic selection as well as closing the bidding period and beginning the automatic topic selection. Instructor is also able to view the progress details of bids without having to impersonate students&lt;br /&gt;
&lt;br /&gt;
=== UI design ===&lt;br /&gt;
&lt;br /&gt;
The existing view with very limited information about the bidding process&lt;br /&gt;
&lt;br /&gt;
'''Before''':&lt;br /&gt;
&lt;br /&gt;
[[File:before-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With this proposed new view, the Instructor can gain a more complete view of the whole bidding process in one place.&lt;br /&gt;
&lt;br /&gt;
'''Proposed UI'''&lt;br /&gt;
&lt;br /&gt;
[[File:after-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
=== Change in Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
With the new flow and implementation, the Instructor now can have all (complete) information he/she needs in one place at the Topics list/details view instead of having to impersonate a student to get even some minimal, un-completed piece of information about the bidding. &lt;br /&gt;
&lt;br /&gt;
[[File:new-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Class Diagram ===&lt;br /&gt;
&lt;br /&gt;
[[File:class-diagram.png|1000px|Class diagram]]&lt;br /&gt;
&lt;br /&gt;
=== Code changes ===&lt;br /&gt;
&lt;br /&gt;
From preliminary research, we believed we would need to add and modify, refactor code from almost all layers of the features (including Controllers, Models, Views but we end up decided to focus on delivering the feature with minimum code changes and regression tests, so majority of our code changes are on Views layer. Following are the changes we made (We also added links to our Github commits for each change so that the reviewers can link directly to github for more in-depth inspection/review)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''New Files added:'''&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_total_bids.html.erb&lt;br /&gt;
*app/views/sign_up_sheet/_total_1_2_bids.html.erb&lt;br /&gt;
&lt;br /&gt;
'''Files changed:'''&lt;br /&gt;
&lt;br /&gt;
'''View:'''&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_actions.html.erb&lt;br /&gt;
*app/views/sign_up_sheet/_add_signup_topics.html.erb&lt;br /&gt;
&lt;br /&gt;
[[File:add-signup-topics.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_table_header.html.erb&lt;br /&gt;
&lt;br /&gt;
[[File:table-header.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_table_line.html.erb&lt;br /&gt;
&lt;br /&gt;
[[File:table-line.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
'''Configuration:'''&lt;br /&gt;
&lt;br /&gt;
*config/locales/en_US.yml&lt;br /&gt;
&lt;br /&gt;
*config/locales/hi_IN.yml&lt;br /&gt;
&lt;br /&gt;
== Functionalities added ==&lt;br /&gt;
 &lt;br /&gt;
* The instructor should be able to see how many teams have bid for each topic without having to impersonate students&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
=== Run and pass all the RSpec Tests (including the existing ones - regression, and the newly added cases) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  describe '#create' do&lt;br /&gt;
    context 'when topic cannot be found' do&lt;br /&gt;
      context 'when new topic can be saved successfully' do&lt;br /&gt;
        it 'sets up a new topic and redirects to assignment#edit page' do&lt;br /&gt;
          allow(SignUpTopic).to receive(:where).with(topic_name: 'Hello world!', assignment_id: '1').and_return([nil])&lt;br /&gt;
          allow_any_instance_of(SignUpSheetController).to receive(:undo_link)&lt;br /&gt;
            .with('The topic: &amp;quot;Hello world!&amp;quot; has been created successfully. ').and_return('OK')&lt;br /&gt;
          allow(topic).to receive(:save).and_return('OK')&lt;br /&gt;
          request_params = {&lt;br /&gt;
            id: 1,&lt;br /&gt;
            topic: {&lt;br /&gt;
              topic_identifier: 1,&lt;br /&gt;
              topic_name: 'Hello world!',&lt;br /&gt;
              max_choosers: 1,&lt;br /&gt;
              category: '',&lt;br /&gt;
              micropayment: 1&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
          post :create, params: request_params&lt;br /&gt;
          expect(response).to redirect_to('/assignments/1/edit#tabs-2')&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
      context 'when new topic cannot be saved successfully' do&lt;br /&gt;
        it 'sets up a new topic and renders sign_up_sheet#new page' do&lt;br /&gt;
          allow(SignUpTopic).to receive(:where).with(topic_name: 'Hello world!', assignment_id: '1').and_return([nil])&lt;br /&gt;
          allow_any_instance_of(SignUpSheetController).to receive(:undo_link)&lt;br /&gt;
            .with('The topic: &amp;quot;Hello world!&amp;quot; has been created successfully. ').and_return('OK')&lt;br /&gt;
          allow(topic).to receive(:save).and_return('OK')&lt;br /&gt;
          request_params = {&lt;br /&gt;
            id: 1,&lt;br /&gt;
            topic: {&lt;br /&gt;
              topic_identifier: 1,&lt;br /&gt;
              topic_name: 'Hello world!',&lt;br /&gt;
              category: '',&lt;br /&gt;
              micropayment: 1&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
          post :create, params: request_params&lt;br /&gt;
          expect(response).to render_template(:new)&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    context 'when topic can be found' do&lt;br /&gt;
      it 'updates the existing topic and redirects to sign_up_sheet#add_signup_topics_staggered page' do&lt;br /&gt;
        allow(SignedUpTeam).to receive(:find_by).with(topic_id: 1).and_return(signed_up_team)&lt;br /&gt;
        allow(SignedUpTeam).to receive(:where).with(topic_id: 1, is_waitlisted: true).and_return([signed_up_team2])&lt;br /&gt;
        allow(Team).to receive(:find).with(2).and_return(team)&lt;br /&gt;
        allow(SignUpTopic).to receive(:find_waitlisted_topics).with(1, 2).and_return(nil)&lt;br /&gt;
        request_params = {&lt;br /&gt;
          id: 1,&lt;br /&gt;
          topic: {&lt;br /&gt;
            topic_identifier: 666,&lt;br /&gt;
            topic_name: 'Hello world!',&lt;br /&gt;
            max_choosers: 2,&lt;br /&gt;
            category: '666',&lt;br /&gt;
            micropayment: 1&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
        post :create, params: request_params&lt;br /&gt;
        expect(SignedUpTeam.first.is_waitlisted).to be false&lt;br /&gt;
        expect(response).to redirect_to('/sign_up_sheet/add_signup_topics_staggered?id=1')&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  describe '#destroy' do&lt;br /&gt;
    context 'when topic can be found' do&lt;br /&gt;
      it 'redirects to assignment#edit page' do&lt;br /&gt;
        allow_any_instance_of(SignUpSheetController).to receive(:undo_link)&lt;br /&gt;
          .with('The topic: &amp;quot;Hello world!&amp;quot; has been successfully deleted. ').and_return('OK')&lt;br /&gt;
        request_params = { id: 1, assignment_id: 1 }&lt;br /&gt;
        post :destroy, params: request_params&lt;br /&gt;
        expect(response).to redirect_to('/assignments/1/edit')&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    context 'when topic cannot be found' do&lt;br /&gt;
      it 'shows an error flash message and redirects to assignment#edit page' do&lt;br /&gt;
        allow(SignUpTopic).to receive(:find).with('1').and_return(nil)&lt;br /&gt;
        allow_any_instance_of(SignUpSheetController).to receive(:undo_link)&lt;br /&gt;
          .with('The topic: &amp;quot;Hello world!&amp;quot; has been successfully deleted. ').and_return('OK')&lt;br /&gt;
        request_params = { id: 1, assignment_id: 1 }&lt;br /&gt;
        post :destroy, params: request_params&lt;br /&gt;
        expect(flash[:error]).to eq('The topic could not be deleted.')&lt;br /&gt;
        expect(response).to redirect_to('/assignments/1/edit')&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test the UI for the deployed project. ===&lt;br /&gt;
&lt;br /&gt;
==== UI Testing ====&lt;br /&gt;
'''Instructor View''' &amp;lt;br&amp;gt;&lt;br /&gt;
* username: instructor6 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Student View'''  &amp;lt;br&amp;gt;&lt;br /&gt;
* username: student575 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View bidding details ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Topics page&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details for each Topic on the table&lt;br /&gt;
# Impersonate a Student to verify if the team/student was actually bidding for the Topic&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
* Place holder for potential ed-cases that might get missed&lt;br /&gt;
&lt;br /&gt;
==Team Roster ==&lt;br /&gt;
&lt;br /&gt;
Mentor: Ed Gehringer - efg@ncsu.edu&lt;br /&gt;
&lt;br /&gt;
*Duy Nguyen - dvnguye3@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Kwon HyeokJun - khyeokj@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Shawn Salekin - ssaleki@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*David Glymph - dwglymph@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
#[https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit?pli=1#heading=h.5cgh9aixuut7 Previous works]&lt;br /&gt;
#[https://github.com/dnguyenv/expertiza/tree/beta Team code repo]&lt;br /&gt;
#[https://github.com/expertiza/expertiza/tree/beta Upstream code repo]&lt;/div&gt;</summary>
		<author><name>Dvnguye3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145059</id>
		<title>CSC/ECE 517 Spring 2022 - E2245: View for results of bidding</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145059"/>
		<updated>2022-04-24T19:57:26Z</updated>

		<summary type="html">&lt;p&gt;Dvnguye3: /* Code changes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''CSC/ECE 517 Spring 2022 - E2245: View for results of bidding&lt;br /&gt;
'''&lt;br /&gt;
== Problem Statement == &lt;br /&gt;
&lt;br /&gt;
When students sign up for topics, they are presented with a system to bid on their favorite topics. This process is allowed for both individual students as well as teams. As a result, many students will first sign up for topics, which can reduce the number of teams that get their first pick, and result in long waitlists. There are several bidding algorithms available to the instructors to give as many groups as possible their first choice. As this is an NP-complete problem, the algorithm has to use heuristics to guess efficiently. There needs to be a way for instructors to easily view and compare the results of the bidding algorithms to get a quantitative sense of their effectiveness.&lt;br /&gt;
&lt;br /&gt;
== Project Goal == &lt;br /&gt;
This project aims to solve this issue by giving clear and concise feedback of the algorithms in topics list in the assignment. However, since topics in the table potentially have several fields, care must be taken not to overcrowd the table with information. There are several different UI/UX approaches to display this information, and the chosen one should:&lt;br /&gt;
* Maximize useful information at a glance, while minimizing clutter&lt;br /&gt;
* Fit into the flow of the topic page&lt;br /&gt;
* Allow further information to be obtained if requested&lt;br /&gt;
* Not be visible if bidding is not used&lt;br /&gt;
&lt;br /&gt;
Some other miscellaneous goals of this project are to:&lt;br /&gt;
* Remove topic fields from view if they are not applicable&lt;br /&gt;
* Refactor code&lt;br /&gt;
* Increase test coverage&lt;br /&gt;
&lt;br /&gt;
== Previous Work == &lt;br /&gt;
&lt;br /&gt;
=== Current User Cases ===&lt;br /&gt;
&lt;br /&gt;
Below is the use case diagram that depicts the existing use cases that associated to the topics bidding features of the application. Notice that in order to check some bidding information for a topic/project, the Instructor has to impersonate a student.&lt;br /&gt;
&lt;br /&gt;
[[File:old-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Current Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
As an Instructor, the user after, being authenticated, needs to go to the Assignments &amp;gt;&amp;gt; Topics view to create the topics/projects and then once the bidding started, needs to impersonate a student to partially (at very minimal level) get the bidding process information &lt;br /&gt;
&lt;br /&gt;
[[File:Old-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
== Improvement on the Previous Work ==&lt;br /&gt;
&lt;br /&gt;
=== Change in Use Cases ===&lt;br /&gt;
&lt;br /&gt;
[[File:new-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
'''Student''': This actor is responsible for submitting and deleting bids for topics while the topic selection period is open for an assignment which uses the new lottery topic selection mechanism. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Instructor''': This actor is responsible for updating an assignment to use the new lottery topic selection as well as closing the bidding period and beginning the automatic topic selection. Instructor is also able to view the progress details of bids without having to impersonate students&lt;br /&gt;
&lt;br /&gt;
=== UI design ===&lt;br /&gt;
&lt;br /&gt;
The existing view with very limited information about the bidding process&lt;br /&gt;
&lt;br /&gt;
'''Before''':&lt;br /&gt;
&lt;br /&gt;
[[File:before-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With this proposed new view, the Instructor can gain a more complete view of the whole bidding process in one place.&lt;br /&gt;
&lt;br /&gt;
'''Proposed UI'''&lt;br /&gt;
&lt;br /&gt;
[[File:after-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
=== Change in Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
With the new flow and implementation, the Instructor now can have all (complete) information he/she needs in one place at the Topics list/details view instead of having to impersonate a student to get even some minimal, un-completed piece of information about the bidding. &lt;br /&gt;
&lt;br /&gt;
[[File:new-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Class Diagram ===&lt;br /&gt;
&lt;br /&gt;
[[File:class-diagram.png|1000px|Class diagram]]&lt;br /&gt;
&lt;br /&gt;
=== Code changes ===&lt;br /&gt;
&lt;br /&gt;
From preliminary research, we believed we would need to add and modify, refactor code from almost all layers of the features (including Controllers, Models, Views but we end up decided to focus on delivering the feature with minimum code changes and regression tests, so majority of our code changes are on Views layer. Following are the changes we made (We also added links to our Github commits for each change so that the reviewers can link directly to github for more in-depth inspection/review)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''New Files added:'''&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_total_bids.html.erb&lt;br /&gt;
*app/views/sign_up_sheet/_total_1_2_bids.html.erb&lt;br /&gt;
&lt;br /&gt;
'''Files changed:'''&lt;br /&gt;
&lt;br /&gt;
'''View:'''&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_actions.html.erb&lt;br /&gt;
*app/views/sign_up_sheet/_add_signup_topics.html.erb&lt;br /&gt;
&lt;br /&gt;
[[File:add-signup-topics.png|1000px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_table_header.html.erb&lt;br /&gt;
*app/views/sign_up_sheet/_table_line.html.erb&lt;br /&gt;
&lt;br /&gt;
'''Configuration:'''&lt;br /&gt;
&lt;br /&gt;
*config/locales/en_US.yml&lt;br /&gt;
&lt;br /&gt;
*config/locales/hi_IN.yml&lt;br /&gt;
&lt;br /&gt;
== Functionalities added ==&lt;br /&gt;
 &lt;br /&gt;
* The instructor should be able to see how many teams have bid for each topic without having to impersonate students&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
=== Run and pass all the RSpec Tests (including the existing ones - regression, and the newly added cases) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  describe '#create' do&lt;br /&gt;
    context 'when topic cannot be found' do&lt;br /&gt;
      context 'when new topic can be saved successfully' do&lt;br /&gt;
        it 'sets up a new topic and redirects to assignment#edit page' do&lt;br /&gt;
          allow(SignUpTopic).to receive(:where).with(topic_name: 'Hello world!', assignment_id: '1').and_return([nil])&lt;br /&gt;
          allow_any_instance_of(SignUpSheetController).to receive(:undo_link)&lt;br /&gt;
            .with('The topic: &amp;quot;Hello world!&amp;quot; has been created successfully. ').and_return('OK')&lt;br /&gt;
          allow(topic).to receive(:save).and_return('OK')&lt;br /&gt;
          request_params = {&lt;br /&gt;
            id: 1,&lt;br /&gt;
            topic: {&lt;br /&gt;
              topic_identifier: 1,&lt;br /&gt;
              topic_name: 'Hello world!',&lt;br /&gt;
              max_choosers: 1,&lt;br /&gt;
              category: '',&lt;br /&gt;
              micropayment: 1&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
          post :create, params: request_params&lt;br /&gt;
          expect(response).to redirect_to('/assignments/1/edit#tabs-2')&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
      context 'when new topic cannot be saved successfully' do&lt;br /&gt;
        it 'sets up a new topic and renders sign_up_sheet#new page' do&lt;br /&gt;
          allow(SignUpTopic).to receive(:where).with(topic_name: 'Hello world!', assignment_id: '1').and_return([nil])&lt;br /&gt;
          allow_any_instance_of(SignUpSheetController).to receive(:undo_link)&lt;br /&gt;
            .with('The topic: &amp;quot;Hello world!&amp;quot; has been created successfully. ').and_return('OK')&lt;br /&gt;
          allow(topic).to receive(:save).and_return('OK')&lt;br /&gt;
          request_params = {&lt;br /&gt;
            id: 1,&lt;br /&gt;
            topic: {&lt;br /&gt;
              topic_identifier: 1,&lt;br /&gt;
              topic_name: 'Hello world!',&lt;br /&gt;
              category: '',&lt;br /&gt;
              micropayment: 1&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
          post :create, params: request_params&lt;br /&gt;
          expect(response).to render_template(:new)&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    context 'when topic can be found' do&lt;br /&gt;
      it 'updates the existing topic and redirects to sign_up_sheet#add_signup_topics_staggered page' do&lt;br /&gt;
        allow(SignedUpTeam).to receive(:find_by).with(topic_id: 1).and_return(signed_up_team)&lt;br /&gt;
        allow(SignedUpTeam).to receive(:where).with(topic_id: 1, is_waitlisted: true).and_return([signed_up_team2])&lt;br /&gt;
        allow(Team).to receive(:find).with(2).and_return(team)&lt;br /&gt;
        allow(SignUpTopic).to receive(:find_waitlisted_topics).with(1, 2).and_return(nil)&lt;br /&gt;
        request_params = {&lt;br /&gt;
          id: 1,&lt;br /&gt;
          topic: {&lt;br /&gt;
            topic_identifier: 666,&lt;br /&gt;
            topic_name: 'Hello world!',&lt;br /&gt;
            max_choosers: 2,&lt;br /&gt;
            category: '666',&lt;br /&gt;
            micropayment: 1&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
        post :create, params: request_params&lt;br /&gt;
        expect(SignedUpTeam.first.is_waitlisted).to be false&lt;br /&gt;
        expect(response).to redirect_to('/sign_up_sheet/add_signup_topics_staggered?id=1')&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  describe '#destroy' do&lt;br /&gt;
    context 'when topic can be found' do&lt;br /&gt;
      it 'redirects to assignment#edit page' do&lt;br /&gt;
        allow_any_instance_of(SignUpSheetController).to receive(:undo_link)&lt;br /&gt;
          .with('The topic: &amp;quot;Hello world!&amp;quot; has been successfully deleted. ').and_return('OK')&lt;br /&gt;
        request_params = { id: 1, assignment_id: 1 }&lt;br /&gt;
        post :destroy, params: request_params&lt;br /&gt;
        expect(response).to redirect_to('/assignments/1/edit')&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    context 'when topic cannot be found' do&lt;br /&gt;
      it 'shows an error flash message and redirects to assignment#edit page' do&lt;br /&gt;
        allow(SignUpTopic).to receive(:find).with('1').and_return(nil)&lt;br /&gt;
        allow_any_instance_of(SignUpSheetController).to receive(:undo_link)&lt;br /&gt;
          .with('The topic: &amp;quot;Hello world!&amp;quot; has been successfully deleted. ').and_return('OK')&lt;br /&gt;
        request_params = { id: 1, assignment_id: 1 }&lt;br /&gt;
        post :destroy, params: request_params&lt;br /&gt;
        expect(flash[:error]).to eq('The topic could not be deleted.')&lt;br /&gt;
        expect(response).to redirect_to('/assignments/1/edit')&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test the UI for the deployed project. ===&lt;br /&gt;
&lt;br /&gt;
==== UI Testing ====&lt;br /&gt;
'''Instructor View''' &amp;lt;br&amp;gt;&lt;br /&gt;
* username: instructor6 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Student View'''  &amp;lt;br&amp;gt;&lt;br /&gt;
* username: student575 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View bidding details ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Topics page&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details for each Topic on the table&lt;br /&gt;
# Impersonate a Student to verify if the team/student was actually bidding for the Topic&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
* Place holder for potential ed-cases that might get missed&lt;br /&gt;
&lt;br /&gt;
==Team Roster ==&lt;br /&gt;
&lt;br /&gt;
Mentor: Ed Gehringer - efg@ncsu.edu&lt;br /&gt;
&lt;br /&gt;
*Duy Nguyen - dvnguye3@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Kwon HyeokJun - khyeokj@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Shawn Salekin - ssaleki@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*David Glymph - dwglymph@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
#[https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit?pli=1#heading=h.5cgh9aixuut7 Previous works]&lt;br /&gt;
#[https://github.com/dnguyenv/expertiza/tree/beta Team code repo]&lt;br /&gt;
#[https://github.com/expertiza/expertiza/tree/beta Upstream code repo]&lt;/div&gt;</summary>
		<author><name>Dvnguye3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145058</id>
		<title>CSC/ECE 517 Spring 2022 - E2245: View for results of bidding</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145058"/>
		<updated>2022-04-24T19:57:11Z</updated>

		<summary type="html">&lt;p&gt;Dvnguye3: /* Code changes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''CSC/ECE 517 Spring 2022 - E2245: View for results of bidding&lt;br /&gt;
'''&lt;br /&gt;
== Problem Statement == &lt;br /&gt;
&lt;br /&gt;
When students sign up for topics, they are presented with a system to bid on their favorite topics. This process is allowed for both individual students as well as teams. As a result, many students will first sign up for topics, which can reduce the number of teams that get their first pick, and result in long waitlists. There are several bidding algorithms available to the instructors to give as many groups as possible their first choice. As this is an NP-complete problem, the algorithm has to use heuristics to guess efficiently. There needs to be a way for instructors to easily view and compare the results of the bidding algorithms to get a quantitative sense of their effectiveness.&lt;br /&gt;
&lt;br /&gt;
== Project Goal == &lt;br /&gt;
This project aims to solve this issue by giving clear and concise feedback of the algorithms in topics list in the assignment. However, since topics in the table potentially have several fields, care must be taken not to overcrowd the table with information. There are several different UI/UX approaches to display this information, and the chosen one should:&lt;br /&gt;
* Maximize useful information at a glance, while minimizing clutter&lt;br /&gt;
* Fit into the flow of the topic page&lt;br /&gt;
* Allow further information to be obtained if requested&lt;br /&gt;
* Not be visible if bidding is not used&lt;br /&gt;
&lt;br /&gt;
Some other miscellaneous goals of this project are to:&lt;br /&gt;
* Remove topic fields from view if they are not applicable&lt;br /&gt;
* Refactor code&lt;br /&gt;
* Increase test coverage&lt;br /&gt;
&lt;br /&gt;
== Previous Work == &lt;br /&gt;
&lt;br /&gt;
=== Current User Cases ===&lt;br /&gt;
&lt;br /&gt;
Below is the use case diagram that depicts the existing use cases that associated to the topics bidding features of the application. Notice that in order to check some bidding information for a topic/project, the Instructor has to impersonate a student.&lt;br /&gt;
&lt;br /&gt;
[[File:old-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Current Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
As an Instructor, the user after, being authenticated, needs to go to the Assignments &amp;gt;&amp;gt; Topics view to create the topics/projects and then once the bidding started, needs to impersonate a student to partially (at very minimal level) get the bidding process information &lt;br /&gt;
&lt;br /&gt;
[[File:Old-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
== Improvement on the Previous Work ==&lt;br /&gt;
&lt;br /&gt;
=== Change in Use Cases ===&lt;br /&gt;
&lt;br /&gt;
[[File:new-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
'''Student''': This actor is responsible for submitting and deleting bids for topics while the topic selection period is open for an assignment which uses the new lottery topic selection mechanism. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Instructor''': This actor is responsible for updating an assignment to use the new lottery topic selection as well as closing the bidding period and beginning the automatic topic selection. Instructor is also able to view the progress details of bids without having to impersonate students&lt;br /&gt;
&lt;br /&gt;
=== UI design ===&lt;br /&gt;
&lt;br /&gt;
The existing view with very limited information about the bidding process&lt;br /&gt;
&lt;br /&gt;
'''Before''':&lt;br /&gt;
&lt;br /&gt;
[[File:before-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With this proposed new view, the Instructor can gain a more complete view of the whole bidding process in one place.&lt;br /&gt;
&lt;br /&gt;
'''Proposed UI'''&lt;br /&gt;
&lt;br /&gt;
[[File:after-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
=== Change in Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
With the new flow and implementation, the Instructor now can have all (complete) information he/she needs in one place at the Topics list/details view instead of having to impersonate a student to get even some minimal, un-completed piece of information about the bidding. &lt;br /&gt;
&lt;br /&gt;
[[File:new-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Class Diagram ===&lt;br /&gt;
&lt;br /&gt;
[[File:class-diagram.png|1000px|Class diagram]]&lt;br /&gt;
&lt;br /&gt;
=== Code changes ===&lt;br /&gt;
&lt;br /&gt;
From preliminary research, we believed we would need to add and modify, refactor code from almost all layers of the features (including Controllers, Models, Views but we end up decided to focus on delivering the feature with minimum code changes and regression tests, so majority of our code changes are on Views layer. Following are the changes we made (We also added links to our Github commits for each change so that the reviewers can link directly to github for more in-depth inspection/review)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''New Files added:'''&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_total_bids.html.erb&lt;br /&gt;
*app/views/sign_up_sheet/_total_1_2_bids.html.erb&lt;br /&gt;
&lt;br /&gt;
'''Files changed:'''&lt;br /&gt;
&lt;br /&gt;
'''View:'''&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_actions.html.erb&lt;br /&gt;
*app/views/sign_up_sheet/_add_signup_topics.html.erb&lt;br /&gt;
&lt;br /&gt;
[[File:add-signup-topics.png|800px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_table_header.html.erb&lt;br /&gt;
*app/views/sign_up_sheet/_table_line.html.erb&lt;br /&gt;
&lt;br /&gt;
'''Configuration:'''&lt;br /&gt;
&lt;br /&gt;
*config/locales/en_US.yml&lt;br /&gt;
&lt;br /&gt;
*config/locales/hi_IN.yml&lt;br /&gt;
&lt;br /&gt;
== Functionalities added ==&lt;br /&gt;
 &lt;br /&gt;
* The instructor should be able to see how many teams have bid for each topic without having to impersonate students&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
=== Run and pass all the RSpec Tests (including the existing ones - regression, and the newly added cases) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  describe '#create' do&lt;br /&gt;
    context 'when topic cannot be found' do&lt;br /&gt;
      context 'when new topic can be saved successfully' do&lt;br /&gt;
        it 'sets up a new topic and redirects to assignment#edit page' do&lt;br /&gt;
          allow(SignUpTopic).to receive(:where).with(topic_name: 'Hello world!', assignment_id: '1').and_return([nil])&lt;br /&gt;
          allow_any_instance_of(SignUpSheetController).to receive(:undo_link)&lt;br /&gt;
            .with('The topic: &amp;quot;Hello world!&amp;quot; has been created successfully. ').and_return('OK')&lt;br /&gt;
          allow(topic).to receive(:save).and_return('OK')&lt;br /&gt;
          request_params = {&lt;br /&gt;
            id: 1,&lt;br /&gt;
            topic: {&lt;br /&gt;
              topic_identifier: 1,&lt;br /&gt;
              topic_name: 'Hello world!',&lt;br /&gt;
              max_choosers: 1,&lt;br /&gt;
              category: '',&lt;br /&gt;
              micropayment: 1&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
          post :create, params: request_params&lt;br /&gt;
          expect(response).to redirect_to('/assignments/1/edit#tabs-2')&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
      context 'when new topic cannot be saved successfully' do&lt;br /&gt;
        it 'sets up a new topic and renders sign_up_sheet#new page' do&lt;br /&gt;
          allow(SignUpTopic).to receive(:where).with(topic_name: 'Hello world!', assignment_id: '1').and_return([nil])&lt;br /&gt;
          allow_any_instance_of(SignUpSheetController).to receive(:undo_link)&lt;br /&gt;
            .with('The topic: &amp;quot;Hello world!&amp;quot; has been created successfully. ').and_return('OK')&lt;br /&gt;
          allow(topic).to receive(:save).and_return('OK')&lt;br /&gt;
          request_params = {&lt;br /&gt;
            id: 1,&lt;br /&gt;
            topic: {&lt;br /&gt;
              topic_identifier: 1,&lt;br /&gt;
              topic_name: 'Hello world!',&lt;br /&gt;
              category: '',&lt;br /&gt;
              micropayment: 1&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
          post :create, params: request_params&lt;br /&gt;
          expect(response).to render_template(:new)&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    context 'when topic can be found' do&lt;br /&gt;
      it 'updates the existing topic and redirects to sign_up_sheet#add_signup_topics_staggered page' do&lt;br /&gt;
        allow(SignedUpTeam).to receive(:find_by).with(topic_id: 1).and_return(signed_up_team)&lt;br /&gt;
        allow(SignedUpTeam).to receive(:where).with(topic_id: 1, is_waitlisted: true).and_return([signed_up_team2])&lt;br /&gt;
        allow(Team).to receive(:find).with(2).and_return(team)&lt;br /&gt;
        allow(SignUpTopic).to receive(:find_waitlisted_topics).with(1, 2).and_return(nil)&lt;br /&gt;
        request_params = {&lt;br /&gt;
          id: 1,&lt;br /&gt;
          topic: {&lt;br /&gt;
            topic_identifier: 666,&lt;br /&gt;
            topic_name: 'Hello world!',&lt;br /&gt;
            max_choosers: 2,&lt;br /&gt;
            category: '666',&lt;br /&gt;
            micropayment: 1&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
        post :create, params: request_params&lt;br /&gt;
        expect(SignedUpTeam.first.is_waitlisted).to be false&lt;br /&gt;
        expect(response).to redirect_to('/sign_up_sheet/add_signup_topics_staggered?id=1')&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  describe '#destroy' do&lt;br /&gt;
    context 'when topic can be found' do&lt;br /&gt;
      it 'redirects to assignment#edit page' do&lt;br /&gt;
        allow_any_instance_of(SignUpSheetController).to receive(:undo_link)&lt;br /&gt;
          .with('The topic: &amp;quot;Hello world!&amp;quot; has been successfully deleted. ').and_return('OK')&lt;br /&gt;
        request_params = { id: 1, assignment_id: 1 }&lt;br /&gt;
        post :destroy, params: request_params&lt;br /&gt;
        expect(response).to redirect_to('/assignments/1/edit')&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    context 'when topic cannot be found' do&lt;br /&gt;
      it 'shows an error flash message and redirects to assignment#edit page' do&lt;br /&gt;
        allow(SignUpTopic).to receive(:find).with('1').and_return(nil)&lt;br /&gt;
        allow_any_instance_of(SignUpSheetController).to receive(:undo_link)&lt;br /&gt;
          .with('The topic: &amp;quot;Hello world!&amp;quot; has been successfully deleted. ').and_return('OK')&lt;br /&gt;
        request_params = { id: 1, assignment_id: 1 }&lt;br /&gt;
        post :destroy, params: request_params&lt;br /&gt;
        expect(flash[:error]).to eq('The topic could not be deleted.')&lt;br /&gt;
        expect(response).to redirect_to('/assignments/1/edit')&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test the UI for the deployed project. ===&lt;br /&gt;
&lt;br /&gt;
==== UI Testing ====&lt;br /&gt;
'''Instructor View''' &amp;lt;br&amp;gt;&lt;br /&gt;
* username: instructor6 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Student View'''  &amp;lt;br&amp;gt;&lt;br /&gt;
* username: student575 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View bidding details ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Topics page&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details for each Topic on the table&lt;br /&gt;
# Impersonate a Student to verify if the team/student was actually bidding for the Topic&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
* Place holder for potential ed-cases that might get missed&lt;br /&gt;
&lt;br /&gt;
==Team Roster ==&lt;br /&gt;
&lt;br /&gt;
Mentor: Ed Gehringer - efg@ncsu.edu&lt;br /&gt;
&lt;br /&gt;
*Duy Nguyen - dvnguye3@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Kwon HyeokJun - khyeokj@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Shawn Salekin - ssaleki@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*David Glymph - dwglymph@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
#[https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit?pli=1#heading=h.5cgh9aixuut7 Previous works]&lt;br /&gt;
#[https://github.com/dnguyenv/expertiza/tree/beta Team code repo]&lt;br /&gt;
#[https://github.com/expertiza/expertiza/tree/beta Upstream code repo]&lt;/div&gt;</summary>
		<author><name>Dvnguye3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Add-signup-topics.png&amp;diff=145057</id>
		<title>File:Add-signup-topics.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Add-signup-topics.png&amp;diff=145057"/>
		<updated>2022-04-24T19:54:49Z</updated>

		<summary type="html">&lt;p&gt;Dvnguye3: Dvnguye3 uploaded a new version of File:Add-signup-topics.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Dvnguye3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Add-signup-topics.png&amp;diff=145056</id>
		<title>File:Add-signup-topics.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Add-signup-topics.png&amp;diff=145056"/>
		<updated>2022-04-24T19:53:57Z</updated>

		<summary type="html">&lt;p&gt;Dvnguye3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Dvnguye3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145055</id>
		<title>CSC/ECE 517 Spring 2022 - E2245: View for results of bidding</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145055"/>
		<updated>2022-04-24T19:53:37Z</updated>

		<summary type="html">&lt;p&gt;Dvnguye3: /* Code changes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''CSC/ECE 517 Spring 2022 - E2245: View for results of bidding&lt;br /&gt;
'''&lt;br /&gt;
== Problem Statement == &lt;br /&gt;
&lt;br /&gt;
When students sign up for topics, they are presented with a system to bid on their favorite topics. This process is allowed for both individual students as well as teams. As a result, many students will first sign up for topics, which can reduce the number of teams that get their first pick, and result in long waitlists. There are several bidding algorithms available to the instructors to give as many groups as possible their first choice. As this is an NP-complete problem, the algorithm has to use heuristics to guess efficiently. There needs to be a way for instructors to easily view and compare the results of the bidding algorithms to get a quantitative sense of their effectiveness.&lt;br /&gt;
&lt;br /&gt;
== Project Goal == &lt;br /&gt;
This project aims to solve this issue by giving clear and concise feedback of the algorithms in topics list in the assignment. However, since topics in the table potentially have several fields, care must be taken not to overcrowd the table with information. There are several different UI/UX approaches to display this information, and the chosen one should:&lt;br /&gt;
* Maximize useful information at a glance, while minimizing clutter&lt;br /&gt;
* Fit into the flow of the topic page&lt;br /&gt;
* Allow further information to be obtained if requested&lt;br /&gt;
* Not be visible if bidding is not used&lt;br /&gt;
&lt;br /&gt;
Some other miscellaneous goals of this project are to:&lt;br /&gt;
* Remove topic fields from view if they are not applicable&lt;br /&gt;
* Refactor code&lt;br /&gt;
* Increase test coverage&lt;br /&gt;
&lt;br /&gt;
== Previous Work == &lt;br /&gt;
&lt;br /&gt;
=== Current User Cases ===&lt;br /&gt;
&lt;br /&gt;
Below is the use case diagram that depicts the existing use cases that associated to the topics bidding features of the application. Notice that in order to check some bidding information for a topic/project, the Instructor has to impersonate a student.&lt;br /&gt;
&lt;br /&gt;
[[File:old-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Current Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
As an Instructor, the user after, being authenticated, needs to go to the Assignments &amp;gt;&amp;gt; Topics view to create the topics/projects and then once the bidding started, needs to impersonate a student to partially (at very minimal level) get the bidding process information &lt;br /&gt;
&lt;br /&gt;
[[File:Old-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
== Improvement on the Previous Work ==&lt;br /&gt;
&lt;br /&gt;
=== Change in Use Cases ===&lt;br /&gt;
&lt;br /&gt;
[[File:new-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
'''Student''': This actor is responsible for submitting and deleting bids for topics while the topic selection period is open for an assignment which uses the new lottery topic selection mechanism. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Instructor''': This actor is responsible for updating an assignment to use the new lottery topic selection as well as closing the bidding period and beginning the automatic topic selection. Instructor is also able to view the progress details of bids without having to impersonate students&lt;br /&gt;
&lt;br /&gt;
=== UI design ===&lt;br /&gt;
&lt;br /&gt;
The existing view with very limited information about the bidding process&lt;br /&gt;
&lt;br /&gt;
'''Before''':&lt;br /&gt;
&lt;br /&gt;
[[File:before-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With this proposed new view, the Instructor can gain a more complete view of the whole bidding process in one place.&lt;br /&gt;
&lt;br /&gt;
'''Proposed UI'''&lt;br /&gt;
&lt;br /&gt;
[[File:after-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
=== Change in Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
With the new flow and implementation, the Instructor now can have all (complete) information he/she needs in one place at the Topics list/details view instead of having to impersonate a student to get even some minimal, un-completed piece of information about the bidding. &lt;br /&gt;
&lt;br /&gt;
[[File:new-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Class Diagram ===&lt;br /&gt;
&lt;br /&gt;
[[File:class-diagram.png|1000px|Class diagram]]&lt;br /&gt;
&lt;br /&gt;
=== Code changes ===&lt;br /&gt;
&lt;br /&gt;
From preliminary research, we believed we would need to add and modify, refactor code from almost all layers of the features (including Controllers, Models, Views but we end up decided to focus on delivering the feature with minimum code changes and regression tests, so majority of our code changes are on Views layer. Following are the changes we made:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''New Files added:'''&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_total_bids.html.erb&lt;br /&gt;
*app/views/sign_up_sheet/_total_1_2_bids.html.erb&lt;br /&gt;
&lt;br /&gt;
'''Files changed:'''&lt;br /&gt;
&lt;br /&gt;
'''View:'''&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_actions.html.erb&lt;br /&gt;
*app/views/sign_up_sheet/_add_signup_topics.html.erb&lt;br /&gt;
&lt;br /&gt;
[[File:add-signup-topics.png|800px|Add Signup Topics]]&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_table_header.html.erb&lt;br /&gt;
*app/views/sign_up_sheet/_table_line.html.erb&lt;br /&gt;
&lt;br /&gt;
'''Configuration:'''&lt;br /&gt;
&lt;br /&gt;
*config/locales/en_US.yml&lt;br /&gt;
&lt;br /&gt;
*config/locales/hi_IN.yml&lt;br /&gt;
&lt;br /&gt;
== Functionalities added ==&lt;br /&gt;
 &lt;br /&gt;
* The instructor should be able to see how many teams have bid for each topic without having to impersonate students&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
=== Run and pass all the RSpec Tests (including the existing ones - regression, and the newly added cases) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  describe '#create' do&lt;br /&gt;
    context 'when topic cannot be found' do&lt;br /&gt;
      context 'when new topic can be saved successfully' do&lt;br /&gt;
        it 'sets up a new topic and redirects to assignment#edit page' do&lt;br /&gt;
          allow(SignUpTopic).to receive(:where).with(topic_name: 'Hello world!', assignment_id: '1').and_return([nil])&lt;br /&gt;
          allow_any_instance_of(SignUpSheetController).to receive(:undo_link)&lt;br /&gt;
            .with('The topic: &amp;quot;Hello world!&amp;quot; has been created successfully. ').and_return('OK')&lt;br /&gt;
          allow(topic).to receive(:save).and_return('OK')&lt;br /&gt;
          request_params = {&lt;br /&gt;
            id: 1,&lt;br /&gt;
            topic: {&lt;br /&gt;
              topic_identifier: 1,&lt;br /&gt;
              topic_name: 'Hello world!',&lt;br /&gt;
              max_choosers: 1,&lt;br /&gt;
              category: '',&lt;br /&gt;
              micropayment: 1&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
          post :create, params: request_params&lt;br /&gt;
          expect(response).to redirect_to('/assignments/1/edit#tabs-2')&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
      context 'when new topic cannot be saved successfully' do&lt;br /&gt;
        it 'sets up a new topic and renders sign_up_sheet#new page' do&lt;br /&gt;
          allow(SignUpTopic).to receive(:where).with(topic_name: 'Hello world!', assignment_id: '1').and_return([nil])&lt;br /&gt;
          allow_any_instance_of(SignUpSheetController).to receive(:undo_link)&lt;br /&gt;
            .with('The topic: &amp;quot;Hello world!&amp;quot; has been created successfully. ').and_return('OK')&lt;br /&gt;
          allow(topic).to receive(:save).and_return('OK')&lt;br /&gt;
          request_params = {&lt;br /&gt;
            id: 1,&lt;br /&gt;
            topic: {&lt;br /&gt;
              topic_identifier: 1,&lt;br /&gt;
              topic_name: 'Hello world!',&lt;br /&gt;
              category: '',&lt;br /&gt;
              micropayment: 1&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
          post :create, params: request_params&lt;br /&gt;
          expect(response).to render_template(:new)&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    context 'when topic can be found' do&lt;br /&gt;
      it 'updates the existing topic and redirects to sign_up_sheet#add_signup_topics_staggered page' do&lt;br /&gt;
        allow(SignedUpTeam).to receive(:find_by).with(topic_id: 1).and_return(signed_up_team)&lt;br /&gt;
        allow(SignedUpTeam).to receive(:where).with(topic_id: 1, is_waitlisted: true).and_return([signed_up_team2])&lt;br /&gt;
        allow(Team).to receive(:find).with(2).and_return(team)&lt;br /&gt;
        allow(SignUpTopic).to receive(:find_waitlisted_topics).with(1, 2).and_return(nil)&lt;br /&gt;
        request_params = {&lt;br /&gt;
          id: 1,&lt;br /&gt;
          topic: {&lt;br /&gt;
            topic_identifier: 666,&lt;br /&gt;
            topic_name: 'Hello world!',&lt;br /&gt;
            max_choosers: 2,&lt;br /&gt;
            category: '666',&lt;br /&gt;
            micropayment: 1&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
        post :create, params: request_params&lt;br /&gt;
        expect(SignedUpTeam.first.is_waitlisted).to be false&lt;br /&gt;
        expect(response).to redirect_to('/sign_up_sheet/add_signup_topics_staggered?id=1')&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  describe '#destroy' do&lt;br /&gt;
    context 'when topic can be found' do&lt;br /&gt;
      it 'redirects to assignment#edit page' do&lt;br /&gt;
        allow_any_instance_of(SignUpSheetController).to receive(:undo_link)&lt;br /&gt;
          .with('The topic: &amp;quot;Hello world!&amp;quot; has been successfully deleted. ').and_return('OK')&lt;br /&gt;
        request_params = { id: 1, assignment_id: 1 }&lt;br /&gt;
        post :destroy, params: request_params&lt;br /&gt;
        expect(response).to redirect_to('/assignments/1/edit')&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    context 'when topic cannot be found' do&lt;br /&gt;
      it 'shows an error flash message and redirects to assignment#edit page' do&lt;br /&gt;
        allow(SignUpTopic).to receive(:find).with('1').and_return(nil)&lt;br /&gt;
        allow_any_instance_of(SignUpSheetController).to receive(:undo_link)&lt;br /&gt;
          .with('The topic: &amp;quot;Hello world!&amp;quot; has been successfully deleted. ').and_return('OK')&lt;br /&gt;
        request_params = { id: 1, assignment_id: 1 }&lt;br /&gt;
        post :destroy, params: request_params&lt;br /&gt;
        expect(flash[:error]).to eq('The topic could not be deleted.')&lt;br /&gt;
        expect(response).to redirect_to('/assignments/1/edit')&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test the UI for the deployed project. ===&lt;br /&gt;
&lt;br /&gt;
==== UI Testing ====&lt;br /&gt;
'''Instructor View''' &amp;lt;br&amp;gt;&lt;br /&gt;
* username: instructor6 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Student View'''  &amp;lt;br&amp;gt;&lt;br /&gt;
* username: student575 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View bidding details ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Topics page&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details for each Topic on the table&lt;br /&gt;
# Impersonate a Student to verify if the team/student was actually bidding for the Topic&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
* Place holder for potential ed-cases that might get missed&lt;br /&gt;
&lt;br /&gt;
==Team Roster ==&lt;br /&gt;
&lt;br /&gt;
Mentor: Ed Gehringer - efg@ncsu.edu&lt;br /&gt;
&lt;br /&gt;
*Duy Nguyen - dvnguye3@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Kwon HyeokJun - khyeokj@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Shawn Salekin - ssaleki@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*David Glymph - dwglymph@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
#[https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit?pli=1#heading=h.5cgh9aixuut7 Previous works]&lt;br /&gt;
#[https://github.com/dnguyenv/expertiza/tree/beta Team code repo]&lt;br /&gt;
#[https://github.com/expertiza/expertiza/tree/beta Upstream code repo]&lt;/div&gt;</summary>
		<author><name>Dvnguye3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145054</id>
		<title>CSC/ECE 517 Spring 2022 - E2245: View for results of bidding</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145054"/>
		<updated>2022-04-24T19:51:17Z</updated>

		<summary type="html">&lt;p&gt;Dvnguye3: /* Code changes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''CSC/ECE 517 Spring 2022 - E2245: View for results of bidding&lt;br /&gt;
'''&lt;br /&gt;
== Problem Statement == &lt;br /&gt;
&lt;br /&gt;
When students sign up for topics, they are presented with a system to bid on their favorite topics. This process is allowed for both individual students as well as teams. As a result, many students will first sign up for topics, which can reduce the number of teams that get their first pick, and result in long waitlists. There are several bidding algorithms available to the instructors to give as many groups as possible their first choice. As this is an NP-complete problem, the algorithm has to use heuristics to guess efficiently. There needs to be a way for instructors to easily view and compare the results of the bidding algorithms to get a quantitative sense of their effectiveness.&lt;br /&gt;
&lt;br /&gt;
== Project Goal == &lt;br /&gt;
This project aims to solve this issue by giving clear and concise feedback of the algorithms in topics list in the assignment. However, since topics in the table potentially have several fields, care must be taken not to overcrowd the table with information. There are several different UI/UX approaches to display this information, and the chosen one should:&lt;br /&gt;
* Maximize useful information at a glance, while minimizing clutter&lt;br /&gt;
* Fit into the flow of the topic page&lt;br /&gt;
* Allow further information to be obtained if requested&lt;br /&gt;
* Not be visible if bidding is not used&lt;br /&gt;
&lt;br /&gt;
Some other miscellaneous goals of this project are to:&lt;br /&gt;
* Remove topic fields from view if they are not applicable&lt;br /&gt;
* Refactor code&lt;br /&gt;
* Increase test coverage&lt;br /&gt;
&lt;br /&gt;
== Previous Work == &lt;br /&gt;
&lt;br /&gt;
=== Current User Cases ===&lt;br /&gt;
&lt;br /&gt;
Below is the use case diagram that depicts the existing use cases that associated to the topics bidding features of the application. Notice that in order to check some bidding information for a topic/project, the Instructor has to impersonate a student.&lt;br /&gt;
&lt;br /&gt;
[[File:old-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Current Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
As an Instructor, the user after, being authenticated, needs to go to the Assignments &amp;gt;&amp;gt; Topics view to create the topics/projects and then once the bidding started, needs to impersonate a student to partially (at very minimal level) get the bidding process information &lt;br /&gt;
&lt;br /&gt;
[[File:Old-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
== Improvement on the Previous Work ==&lt;br /&gt;
&lt;br /&gt;
=== Change in Use Cases ===&lt;br /&gt;
&lt;br /&gt;
[[File:new-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
'''Student''': This actor is responsible for submitting and deleting bids for topics while the topic selection period is open for an assignment which uses the new lottery topic selection mechanism. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Instructor''': This actor is responsible for updating an assignment to use the new lottery topic selection as well as closing the bidding period and beginning the automatic topic selection. Instructor is also able to view the progress details of bids without having to impersonate students&lt;br /&gt;
&lt;br /&gt;
=== UI design ===&lt;br /&gt;
&lt;br /&gt;
The existing view with very limited information about the bidding process&lt;br /&gt;
&lt;br /&gt;
'''Before''':&lt;br /&gt;
&lt;br /&gt;
[[File:before-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With this proposed new view, the Instructor can gain a more complete view of the whole bidding process in one place.&lt;br /&gt;
&lt;br /&gt;
'''Proposed UI'''&lt;br /&gt;
&lt;br /&gt;
[[File:after-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
=== Change in Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
With the new flow and implementation, the Instructor now can have all (complete) information he/she needs in one place at the Topics list/details view instead of having to impersonate a student to get even some minimal, un-completed piece of information about the bidding. &lt;br /&gt;
&lt;br /&gt;
[[File:new-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Class Diagram ===&lt;br /&gt;
&lt;br /&gt;
[[File:class-diagram.png|1000px|Class diagram]]&lt;br /&gt;
&lt;br /&gt;
=== Code changes ===&lt;br /&gt;
&lt;br /&gt;
From preliminary research, we believed we would need to add and modify, refactor code from almost all layers of the features (including Controllers, Models, Views but we end up decided to focus on delivering the feature with minimum code changes and regression tests, so majority of our code changes are on Views layer. Following are the changes we made:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''New Files added:'''&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_total_bids.html.erb&lt;br /&gt;
*app/views/sign_up_sheet/_total_1_2_bids.html.erb&lt;br /&gt;
&lt;br /&gt;
'''Files changed:'''&lt;br /&gt;
&lt;br /&gt;
'''View:'''&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_actions.html.erb&lt;br /&gt;
*app/views/sign_up_sheet/_add_signup_topics.html.erb&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_table_header.html.erb&lt;br /&gt;
*app/views/sign_up_sheet/_table_line.html.erb&lt;br /&gt;
&lt;br /&gt;
'''Configuration:'''&lt;br /&gt;
&lt;br /&gt;
*config/locales/en_US.yml&lt;br /&gt;
&lt;br /&gt;
*config/locales/hi_IN.yml&lt;br /&gt;
&lt;br /&gt;
== Functionalities added ==&lt;br /&gt;
 &lt;br /&gt;
* The instructor should be able to see how many teams have bid for each topic without having to impersonate students&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
=== Run and pass all the RSpec Tests (including the existing ones - regression, and the newly added cases) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  describe '#create' do&lt;br /&gt;
    context 'when topic cannot be found' do&lt;br /&gt;
      context 'when new topic can be saved successfully' do&lt;br /&gt;
        it 'sets up a new topic and redirects to assignment#edit page' do&lt;br /&gt;
          allow(SignUpTopic).to receive(:where).with(topic_name: 'Hello world!', assignment_id: '1').and_return([nil])&lt;br /&gt;
          allow_any_instance_of(SignUpSheetController).to receive(:undo_link)&lt;br /&gt;
            .with('The topic: &amp;quot;Hello world!&amp;quot; has been created successfully. ').and_return('OK')&lt;br /&gt;
          allow(topic).to receive(:save).and_return('OK')&lt;br /&gt;
          request_params = {&lt;br /&gt;
            id: 1,&lt;br /&gt;
            topic: {&lt;br /&gt;
              topic_identifier: 1,&lt;br /&gt;
              topic_name: 'Hello world!',&lt;br /&gt;
              max_choosers: 1,&lt;br /&gt;
              category: '',&lt;br /&gt;
              micropayment: 1&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
          post :create, params: request_params&lt;br /&gt;
          expect(response).to redirect_to('/assignments/1/edit#tabs-2')&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
      context 'when new topic cannot be saved successfully' do&lt;br /&gt;
        it 'sets up a new topic and renders sign_up_sheet#new page' do&lt;br /&gt;
          allow(SignUpTopic).to receive(:where).with(topic_name: 'Hello world!', assignment_id: '1').and_return([nil])&lt;br /&gt;
          allow_any_instance_of(SignUpSheetController).to receive(:undo_link)&lt;br /&gt;
            .with('The topic: &amp;quot;Hello world!&amp;quot; has been created successfully. ').and_return('OK')&lt;br /&gt;
          allow(topic).to receive(:save).and_return('OK')&lt;br /&gt;
          request_params = {&lt;br /&gt;
            id: 1,&lt;br /&gt;
            topic: {&lt;br /&gt;
              topic_identifier: 1,&lt;br /&gt;
              topic_name: 'Hello world!',&lt;br /&gt;
              category: '',&lt;br /&gt;
              micropayment: 1&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
          post :create, params: request_params&lt;br /&gt;
          expect(response).to render_template(:new)&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    context 'when topic can be found' do&lt;br /&gt;
      it 'updates the existing topic and redirects to sign_up_sheet#add_signup_topics_staggered page' do&lt;br /&gt;
        allow(SignedUpTeam).to receive(:find_by).with(topic_id: 1).and_return(signed_up_team)&lt;br /&gt;
        allow(SignedUpTeam).to receive(:where).with(topic_id: 1, is_waitlisted: true).and_return([signed_up_team2])&lt;br /&gt;
        allow(Team).to receive(:find).with(2).and_return(team)&lt;br /&gt;
        allow(SignUpTopic).to receive(:find_waitlisted_topics).with(1, 2).and_return(nil)&lt;br /&gt;
        request_params = {&lt;br /&gt;
          id: 1,&lt;br /&gt;
          topic: {&lt;br /&gt;
            topic_identifier: 666,&lt;br /&gt;
            topic_name: 'Hello world!',&lt;br /&gt;
            max_choosers: 2,&lt;br /&gt;
            category: '666',&lt;br /&gt;
            micropayment: 1&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
        post :create, params: request_params&lt;br /&gt;
        expect(SignedUpTeam.first.is_waitlisted).to be false&lt;br /&gt;
        expect(response).to redirect_to('/sign_up_sheet/add_signup_topics_staggered?id=1')&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  describe '#destroy' do&lt;br /&gt;
    context 'when topic can be found' do&lt;br /&gt;
      it 'redirects to assignment#edit page' do&lt;br /&gt;
        allow_any_instance_of(SignUpSheetController).to receive(:undo_link)&lt;br /&gt;
          .with('The topic: &amp;quot;Hello world!&amp;quot; has been successfully deleted. ').and_return('OK')&lt;br /&gt;
        request_params = { id: 1, assignment_id: 1 }&lt;br /&gt;
        post :destroy, params: request_params&lt;br /&gt;
        expect(response).to redirect_to('/assignments/1/edit')&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    context 'when topic cannot be found' do&lt;br /&gt;
      it 'shows an error flash message and redirects to assignment#edit page' do&lt;br /&gt;
        allow(SignUpTopic).to receive(:find).with('1').and_return(nil)&lt;br /&gt;
        allow_any_instance_of(SignUpSheetController).to receive(:undo_link)&lt;br /&gt;
          .with('The topic: &amp;quot;Hello world!&amp;quot; has been successfully deleted. ').and_return('OK')&lt;br /&gt;
        request_params = { id: 1, assignment_id: 1 }&lt;br /&gt;
        post :destroy, params: request_params&lt;br /&gt;
        expect(flash[:error]).to eq('The topic could not be deleted.')&lt;br /&gt;
        expect(response).to redirect_to('/assignments/1/edit')&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test the UI for the deployed project. ===&lt;br /&gt;
&lt;br /&gt;
==== UI Testing ====&lt;br /&gt;
'''Instructor View''' &amp;lt;br&amp;gt;&lt;br /&gt;
* username: instructor6 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Student View'''  &amp;lt;br&amp;gt;&lt;br /&gt;
* username: student575 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View bidding details ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Topics page&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details for each Topic on the table&lt;br /&gt;
# Impersonate a Student to verify if the team/student was actually bidding for the Topic&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
* Place holder for potential ed-cases that might get missed&lt;br /&gt;
&lt;br /&gt;
==Team Roster ==&lt;br /&gt;
&lt;br /&gt;
Mentor: Ed Gehringer - efg@ncsu.edu&lt;br /&gt;
&lt;br /&gt;
*Duy Nguyen - dvnguye3@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Kwon HyeokJun - khyeokj@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Shawn Salekin - ssaleki@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*David Glymph - dwglymph@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
#[https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit?pli=1#heading=h.5cgh9aixuut7 Previous works]&lt;br /&gt;
#[https://github.com/dnguyenv/expertiza/tree/beta Team code repo]&lt;br /&gt;
#[https://github.com/expertiza/expertiza/tree/beta Upstream code repo]&lt;/div&gt;</summary>
		<author><name>Dvnguye3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145053</id>
		<title>CSC/ECE 517 Spring 2022 - E2245: View for results of bidding</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145053"/>
		<updated>2022-04-24T19:36:56Z</updated>

		<summary type="html">&lt;p&gt;Dvnguye3: /* Code changes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''CSC/ECE 517 Spring 2022 - E2245: View for results of bidding&lt;br /&gt;
'''&lt;br /&gt;
== Problem Statement == &lt;br /&gt;
&lt;br /&gt;
When students sign up for topics, they are presented with a system to bid on their favorite topics. This process is allowed for both individual students as well as teams. As a result, many students will first sign up for topics, which can reduce the number of teams that get their first pick, and result in long waitlists. There are several bidding algorithms available to the instructors to give as many groups as possible their first choice. As this is an NP-complete problem, the algorithm has to use heuristics to guess efficiently. There needs to be a way for instructors to easily view and compare the results of the bidding algorithms to get a quantitative sense of their effectiveness.&lt;br /&gt;
&lt;br /&gt;
== Project Goal == &lt;br /&gt;
This project aims to solve this issue by giving clear and concise feedback of the algorithms in topics list in the assignment. However, since topics in the table potentially have several fields, care must be taken not to overcrowd the table with information. There are several different UI/UX approaches to display this information, and the chosen one should:&lt;br /&gt;
* Maximize useful information at a glance, while minimizing clutter&lt;br /&gt;
* Fit into the flow of the topic page&lt;br /&gt;
* Allow further information to be obtained if requested&lt;br /&gt;
* Not be visible if bidding is not used&lt;br /&gt;
&lt;br /&gt;
Some other miscellaneous goals of this project are to:&lt;br /&gt;
* Remove topic fields from view if they are not applicable&lt;br /&gt;
* Refactor code&lt;br /&gt;
* Increase test coverage&lt;br /&gt;
&lt;br /&gt;
== Previous Work == &lt;br /&gt;
&lt;br /&gt;
=== Current User Cases ===&lt;br /&gt;
&lt;br /&gt;
Below is the use case diagram that depicts the existing use cases that associated to the topics bidding features of the application. Notice that in order to check some bidding information for a topic/project, the Instructor has to impersonate a student.&lt;br /&gt;
&lt;br /&gt;
[[File:old-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Current Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
As an Instructor, the user after, being authenticated, needs to go to the Assignments &amp;gt;&amp;gt; Topics view to create the topics/projects and then once the bidding started, needs to impersonate a student to partially (at very minimal level) get the bidding process information &lt;br /&gt;
&lt;br /&gt;
[[File:Old-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
== Improvement on the Previous Work ==&lt;br /&gt;
&lt;br /&gt;
=== Change in Use Cases ===&lt;br /&gt;
&lt;br /&gt;
[[File:new-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
'''Student''': This actor is responsible for submitting and deleting bids for topics while the topic selection period is open for an assignment which uses the new lottery topic selection mechanism. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Instructor''': This actor is responsible for updating an assignment to use the new lottery topic selection as well as closing the bidding period and beginning the automatic topic selection. Instructor is also able to view the progress details of bids without having to impersonate students&lt;br /&gt;
&lt;br /&gt;
=== UI design ===&lt;br /&gt;
&lt;br /&gt;
The existing view with very limited information about the bidding process&lt;br /&gt;
&lt;br /&gt;
'''Before''':&lt;br /&gt;
&lt;br /&gt;
[[File:before-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With this proposed new view, the Instructor can gain a more complete view of the whole bidding process in one place.&lt;br /&gt;
&lt;br /&gt;
'''Proposed UI'''&lt;br /&gt;
&lt;br /&gt;
[[File:after-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
=== Change in Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
With the new flow and implementation, the Instructor now can have all (complete) information he/she needs in one place at the Topics list/details view instead of having to impersonate a student to get even some minimal, un-completed piece of information about the bidding. &lt;br /&gt;
&lt;br /&gt;
[[File:new-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Class Diagram ===&lt;br /&gt;
&lt;br /&gt;
[[File:class-diagram.png|1000px|Class diagram]]&lt;br /&gt;
&lt;br /&gt;
=== Code changes ===&lt;br /&gt;
&lt;br /&gt;
From preliminary research, we believed we would need to add and modify, refactor code from almost all layers of the features (including Controllers, Models, Views but we end up decided to focus on delivering the feature with minimum code changes and regression tests, so majority of our code changes are on Views layer. Following are the changes we made:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''New Files added:'''&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_total_bids.html.erb&lt;br /&gt;
*app/views/sign_up_sheet/_total_1_2_bids.html.erb&lt;br /&gt;
&lt;br /&gt;
'''Files changed:'''&lt;br /&gt;
&lt;br /&gt;
'''View:'''&lt;br /&gt;
&lt;br /&gt;
*app/views/sign_up_sheet/_actions.html.erb&lt;br /&gt;
*app/views/sign_up_sheet/_add_signup_topics.html.erb&lt;br /&gt;
*app/views/sign_up_sheet/_table_header.html.erb&lt;br /&gt;
*app/views/sign_up_sheet/_table_line.html.erb&lt;br /&gt;
&lt;br /&gt;
'''Configuration:'''&lt;br /&gt;
&lt;br /&gt;
*config/locales/en_US.yml&lt;br /&gt;
*config/locales/hi_IN.yml&lt;br /&gt;
&lt;br /&gt;
== Functionalities added ==&lt;br /&gt;
 &lt;br /&gt;
* The instructor should be able to see how many teams have bid for each topic without having to impersonate students&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
=== Run and pass all the RSpec Tests (including the existing ones - regression, and the newly added cases) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  describe '#create' do&lt;br /&gt;
    context 'when topic cannot be found' do&lt;br /&gt;
      context 'when new topic can be saved successfully' do&lt;br /&gt;
        it 'sets up a new topic and redirects to assignment#edit page' do&lt;br /&gt;
          allow(SignUpTopic).to receive(:where).with(topic_name: 'Hello world!', assignment_id: '1').and_return([nil])&lt;br /&gt;
          allow_any_instance_of(SignUpSheetController).to receive(:undo_link)&lt;br /&gt;
            .with('The topic: &amp;quot;Hello world!&amp;quot; has been created successfully. ').and_return('OK')&lt;br /&gt;
          allow(topic).to receive(:save).and_return('OK')&lt;br /&gt;
          request_params = {&lt;br /&gt;
            id: 1,&lt;br /&gt;
            topic: {&lt;br /&gt;
              topic_identifier: 1,&lt;br /&gt;
              topic_name: 'Hello world!',&lt;br /&gt;
              max_choosers: 1,&lt;br /&gt;
              category: '',&lt;br /&gt;
              micropayment: 1&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
          post :create, params: request_params&lt;br /&gt;
          expect(response).to redirect_to('/assignments/1/edit#tabs-2')&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
      context 'when new topic cannot be saved successfully' do&lt;br /&gt;
        it 'sets up a new topic and renders sign_up_sheet#new page' do&lt;br /&gt;
          allow(SignUpTopic).to receive(:where).with(topic_name: 'Hello world!', assignment_id: '1').and_return([nil])&lt;br /&gt;
          allow_any_instance_of(SignUpSheetController).to receive(:undo_link)&lt;br /&gt;
            .with('The topic: &amp;quot;Hello world!&amp;quot; has been created successfully. ').and_return('OK')&lt;br /&gt;
          allow(topic).to receive(:save).and_return('OK')&lt;br /&gt;
          request_params = {&lt;br /&gt;
            id: 1,&lt;br /&gt;
            topic: {&lt;br /&gt;
              topic_identifier: 1,&lt;br /&gt;
              topic_name: 'Hello world!',&lt;br /&gt;
              category: '',&lt;br /&gt;
              micropayment: 1&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
          post :create, params: request_params&lt;br /&gt;
          expect(response).to render_template(:new)&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    context 'when topic can be found' do&lt;br /&gt;
      it 'updates the existing topic and redirects to sign_up_sheet#add_signup_topics_staggered page' do&lt;br /&gt;
        allow(SignedUpTeam).to receive(:find_by).with(topic_id: 1).and_return(signed_up_team)&lt;br /&gt;
        allow(SignedUpTeam).to receive(:where).with(topic_id: 1, is_waitlisted: true).and_return([signed_up_team2])&lt;br /&gt;
        allow(Team).to receive(:find).with(2).and_return(team)&lt;br /&gt;
        allow(SignUpTopic).to receive(:find_waitlisted_topics).with(1, 2).and_return(nil)&lt;br /&gt;
        request_params = {&lt;br /&gt;
          id: 1,&lt;br /&gt;
          topic: {&lt;br /&gt;
            topic_identifier: 666,&lt;br /&gt;
            topic_name: 'Hello world!',&lt;br /&gt;
            max_choosers: 2,&lt;br /&gt;
            category: '666',&lt;br /&gt;
            micropayment: 1&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
        post :create, params: request_params&lt;br /&gt;
        expect(SignedUpTeam.first.is_waitlisted).to be false&lt;br /&gt;
        expect(response).to redirect_to('/sign_up_sheet/add_signup_topics_staggered?id=1')&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  describe '#destroy' do&lt;br /&gt;
    context 'when topic can be found' do&lt;br /&gt;
      it 'redirects to assignment#edit page' do&lt;br /&gt;
        allow_any_instance_of(SignUpSheetController).to receive(:undo_link)&lt;br /&gt;
          .with('The topic: &amp;quot;Hello world!&amp;quot; has been successfully deleted. ').and_return('OK')&lt;br /&gt;
        request_params = { id: 1, assignment_id: 1 }&lt;br /&gt;
        post :destroy, params: request_params&lt;br /&gt;
        expect(response).to redirect_to('/assignments/1/edit')&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    context 'when topic cannot be found' do&lt;br /&gt;
      it 'shows an error flash message and redirects to assignment#edit page' do&lt;br /&gt;
        allow(SignUpTopic).to receive(:find).with('1').and_return(nil)&lt;br /&gt;
        allow_any_instance_of(SignUpSheetController).to receive(:undo_link)&lt;br /&gt;
          .with('The topic: &amp;quot;Hello world!&amp;quot; has been successfully deleted. ').and_return('OK')&lt;br /&gt;
        request_params = { id: 1, assignment_id: 1 }&lt;br /&gt;
        post :destroy, params: request_params&lt;br /&gt;
        expect(flash[:error]).to eq('The topic could not be deleted.')&lt;br /&gt;
        expect(response).to redirect_to('/assignments/1/edit')&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test the UI for the deployed project. ===&lt;br /&gt;
&lt;br /&gt;
==== UI Testing ====&lt;br /&gt;
'''Instructor View''' &amp;lt;br&amp;gt;&lt;br /&gt;
* username: instructor6 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Student View'''  &amp;lt;br&amp;gt;&lt;br /&gt;
* username: student575 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View bidding details ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Topics page&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details for each Topic on the table&lt;br /&gt;
# Impersonate a Student to verify if the team/student was actually bidding for the Topic&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
* Place holder for potential ed-cases that might get missed&lt;br /&gt;
&lt;br /&gt;
==Team Roster ==&lt;br /&gt;
&lt;br /&gt;
Mentor: Ed Gehringer - efg@ncsu.edu&lt;br /&gt;
&lt;br /&gt;
*Duy Nguyen - dvnguye3@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Kwon HyeokJun - khyeokj@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Shawn Salekin - ssaleki@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*David Glymph - dwglymph@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
#[https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit?pli=1#heading=h.5cgh9aixuut7 Previous works]&lt;br /&gt;
#[https://github.com/dnguyenv/expertiza/tree/beta Team code repo]&lt;br /&gt;
#[https://github.com/expertiza/expertiza/tree/beta Upstream code repo]&lt;/div&gt;</summary>
		<author><name>Dvnguye3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145042</id>
		<title>CSC/ECE 517 Spring 2022 - E2245: View for results of bidding</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145042"/>
		<updated>2022-04-22T17:55:44Z</updated>

		<summary type="html">&lt;p&gt;Dvnguye3: /* Class Diagram */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''CSC/ECE 517 Spring 2022 - E2245: View for results of bidding&lt;br /&gt;
'''&lt;br /&gt;
== Problem Statement == &lt;br /&gt;
&lt;br /&gt;
When students sign up for topics, they are presented with a system to bid on their favorite topics. This process is allowed for both individual students as well as teams. As a result, many students will first sign up for topics, which can reduce the number of teams that get their first pick, and result in long waitlists. There are several bidding algorithms available to the instructors to give as many groups as possible their first choice. As this is an NP-complete problem, the algorithm has to use heuristics to guess efficiently. There needs to be a way for instructors to easily view and compare the results of the bidding algorithms to get a quantitative sense of their effectiveness.&lt;br /&gt;
&lt;br /&gt;
== Project Goal == &lt;br /&gt;
This project aims to solve this issue by giving clear and concise feedback of the algorithms in topics list in the assignment. However, since topics in the table potentially have several fields, care must be taken not to overcrowd the table with information. There are several different UI/UX approaches to display this information, and the chosen one should:&lt;br /&gt;
* Maximize useful information at a glance, while minimizing clutter&lt;br /&gt;
* Fit into the flow of the topic page&lt;br /&gt;
* Allow further information to be obtained if requested&lt;br /&gt;
* Not be visible if bidding is not used&lt;br /&gt;
&lt;br /&gt;
Some other miscellaneous goals of this project are to:&lt;br /&gt;
* Remove topic fields from view if they are not applicable&lt;br /&gt;
* Refactor code&lt;br /&gt;
* Increase test coverage&lt;br /&gt;
&lt;br /&gt;
== Previous Work == &lt;br /&gt;
&lt;br /&gt;
=== Current User Cases ===&lt;br /&gt;
&lt;br /&gt;
Below is the use case diagram that depicts the existing use cases that associated to the topics bidding features of the application. Notice that in order to check some bidding information for a topic/project, the Instructor has to impersonate a student.&lt;br /&gt;
&lt;br /&gt;
[[File:old-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Current Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
As an Instructor, the user after, being authenticated, needs to go to the Assignments &amp;gt;&amp;gt; Topics view to create the topics/projects and then once the bidding started, needs to impersonate a student to partially (at very minimal level) get the bidding process information &lt;br /&gt;
&lt;br /&gt;
[[File:Old-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
== Improvement on the Previous Work ==&lt;br /&gt;
&lt;br /&gt;
=== Change in Use Cases ===&lt;br /&gt;
&lt;br /&gt;
[[File:new-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
'''Student''': This actor is responsible for submitting and deleting bids for topics while the topic selection period is open for an assignment which uses the new lottery topic selection mechanism. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Instructor''': This actor is responsible for updating an assignment to use the new lottery topic selection as well as closing the bidding period and beginning the automatic topic selection. Instructor is also able to view the progress details of bids without having to impersonate students&lt;br /&gt;
&lt;br /&gt;
=== UI design ===&lt;br /&gt;
&lt;br /&gt;
The existing view with very limited information about the bidding process&lt;br /&gt;
&lt;br /&gt;
'''Before''':&lt;br /&gt;
&lt;br /&gt;
[[File:before-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With this proposed new view, the Instructor can gain a more complete view of the whole bidding process in one place.&lt;br /&gt;
&lt;br /&gt;
'''Proposed UI'''&lt;br /&gt;
&lt;br /&gt;
[[File:after-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
=== Change in Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
With the new flow and implementation, the Instructor now can have all (complete) information he/she needs in one place at the Topics list/details view instead of having to impersonate a student to get even some minimal, un-completed piece of information about the bidding. &lt;br /&gt;
&lt;br /&gt;
[[File:new-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Class Diagram ===&lt;br /&gt;
&lt;br /&gt;
[[File:class-diagram.png|1000px|Class diagram]]&lt;br /&gt;
&lt;br /&gt;
=== Code changes ===&lt;br /&gt;
&lt;br /&gt;
The following files will be changed to fulfill the requirements&lt;br /&gt;
&lt;br /&gt;
'''Controllers''':&lt;br /&gt;
*app/controllers/sign_up_sheet_controller.rb&lt;br /&gt;
*app/controllers/review_bids_controller.rb&lt;br /&gt;
*app/controllers/lottery_controller.rb &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Models''':&lt;br /&gt;
*app/models/bid.rb&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Views''':&lt;br /&gt;
*app/views/sign_up_sheet/list.html.erb&lt;br /&gt;
*app/views/assigments/edit/_topics.html.erb&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rspec''':&lt;br /&gt;
*spec/controllers/sign_up_sheet_controller_spec.rb&lt;br /&gt;
*spec/controllers/big_spec.rb&lt;br /&gt;
*spec/controllers/review_bids_controller_spec.rb&lt;br /&gt;
*spec/controllers/lottery_controller_spec.rb&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Refactor Code to follow good coding practices''' &amp;lt;br&amp;gt;&lt;br /&gt;
Example:&amp;lt;br&amp;gt;&lt;br /&gt;
# Rename method names more meaningfully and intuitive.&lt;br /&gt;
&lt;br /&gt;
== Functionalities added ==&lt;br /&gt;
 &lt;br /&gt;
* The instructor should be able to see how many teams have bid for each topic without having to impersonate students&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
=== Run and pass all the RSpec Tests (including the existing ones - regression, and the newly added cases) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  describe '#create' do&lt;br /&gt;
    context 'when topic cannot be found' do&lt;br /&gt;
      context 'when new topic can be saved successfully' do&lt;br /&gt;
        it 'sets up a new topic and redirects to assignment#edit page' do&lt;br /&gt;
          allow(SignUpTopic).to receive(:where).with(topic_name: 'Hello world!', assignment_id: '1').and_return([nil])&lt;br /&gt;
          allow_any_instance_of(SignUpSheetController).to receive(:undo_link)&lt;br /&gt;
            .with('The topic: &amp;quot;Hello world!&amp;quot; has been created successfully. ').and_return('OK')&lt;br /&gt;
          allow(topic).to receive(:save).and_return('OK')&lt;br /&gt;
          request_params = {&lt;br /&gt;
            id: 1,&lt;br /&gt;
            topic: {&lt;br /&gt;
              topic_identifier: 1,&lt;br /&gt;
              topic_name: 'Hello world!',&lt;br /&gt;
              max_choosers: 1,&lt;br /&gt;
              category: '',&lt;br /&gt;
              micropayment: 1&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
          post :create, params: request_params&lt;br /&gt;
          expect(response).to redirect_to('/assignments/1/edit#tabs-2')&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
      context 'when new topic cannot be saved successfully' do&lt;br /&gt;
        it 'sets up a new topic and renders sign_up_sheet#new page' do&lt;br /&gt;
          allow(SignUpTopic).to receive(:where).with(topic_name: 'Hello world!', assignment_id: '1').and_return([nil])&lt;br /&gt;
          allow_any_instance_of(SignUpSheetController).to receive(:undo_link)&lt;br /&gt;
            .with('The topic: &amp;quot;Hello world!&amp;quot; has been created successfully. ').and_return('OK')&lt;br /&gt;
          allow(topic).to receive(:save).and_return('OK')&lt;br /&gt;
          request_params = {&lt;br /&gt;
            id: 1,&lt;br /&gt;
            topic: {&lt;br /&gt;
              topic_identifier: 1,&lt;br /&gt;
              topic_name: 'Hello world!',&lt;br /&gt;
              category: '',&lt;br /&gt;
              micropayment: 1&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
          post :create, params: request_params&lt;br /&gt;
          expect(response).to render_template(:new)&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    context 'when topic can be found' do&lt;br /&gt;
      it 'updates the existing topic and redirects to sign_up_sheet#add_signup_topics_staggered page' do&lt;br /&gt;
        allow(SignedUpTeam).to receive(:find_by).with(topic_id: 1).and_return(signed_up_team)&lt;br /&gt;
        allow(SignedUpTeam).to receive(:where).with(topic_id: 1, is_waitlisted: true).and_return([signed_up_team2])&lt;br /&gt;
        allow(Team).to receive(:find).with(2).and_return(team)&lt;br /&gt;
        allow(SignUpTopic).to receive(:find_waitlisted_topics).with(1, 2).and_return(nil)&lt;br /&gt;
        request_params = {&lt;br /&gt;
          id: 1,&lt;br /&gt;
          topic: {&lt;br /&gt;
            topic_identifier: 666,&lt;br /&gt;
            topic_name: 'Hello world!',&lt;br /&gt;
            max_choosers: 2,&lt;br /&gt;
            category: '666',&lt;br /&gt;
            micropayment: 1&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
        post :create, params: request_params&lt;br /&gt;
        expect(SignedUpTeam.first.is_waitlisted).to be false&lt;br /&gt;
        expect(response).to redirect_to('/sign_up_sheet/add_signup_topics_staggered?id=1')&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  describe '#destroy' do&lt;br /&gt;
    context 'when topic can be found' do&lt;br /&gt;
      it 'redirects to assignment#edit page' do&lt;br /&gt;
        allow_any_instance_of(SignUpSheetController).to receive(:undo_link)&lt;br /&gt;
          .with('The topic: &amp;quot;Hello world!&amp;quot; has been successfully deleted. ').and_return('OK')&lt;br /&gt;
        request_params = { id: 1, assignment_id: 1 }&lt;br /&gt;
        post :destroy, params: request_params&lt;br /&gt;
        expect(response).to redirect_to('/assignments/1/edit')&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    context 'when topic cannot be found' do&lt;br /&gt;
      it 'shows an error flash message and redirects to assignment#edit page' do&lt;br /&gt;
        allow(SignUpTopic).to receive(:find).with('1').and_return(nil)&lt;br /&gt;
        allow_any_instance_of(SignUpSheetController).to receive(:undo_link)&lt;br /&gt;
          .with('The topic: &amp;quot;Hello world!&amp;quot; has been successfully deleted. ').and_return('OK')&lt;br /&gt;
        request_params = { id: 1, assignment_id: 1 }&lt;br /&gt;
        post :destroy, params: request_params&lt;br /&gt;
        expect(flash[:error]).to eq('The topic could not be deleted.')&lt;br /&gt;
        expect(response).to redirect_to('/assignments/1/edit')&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test the UI for the deployed project. ===&lt;br /&gt;
&lt;br /&gt;
==== UI Testing ====&lt;br /&gt;
'''Instructor View''' &amp;lt;br&amp;gt;&lt;br /&gt;
* username: instructor6 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Student View'''  &amp;lt;br&amp;gt;&lt;br /&gt;
* username: student575 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View bidding details ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Topics page&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details for each Topic on the table&lt;br /&gt;
# Impersonate a Student to verify if the team/student was actually bidding for the Topic&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
* Place holder for potential ed-cases that might get missed&lt;br /&gt;
&lt;br /&gt;
==Team Roster ==&lt;br /&gt;
&lt;br /&gt;
Mentor: Ed Gehringer - efg@ncsu.edu&lt;br /&gt;
&lt;br /&gt;
*Duy Nguyen - dvnguye3@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Kwon HyeokJun - khyeokj@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Shawn Salekin - ssaleki@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*David Glymph - dwglymph@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
#[https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit?pli=1#heading=h.5cgh9aixuut7 Previous works]&lt;br /&gt;
#[https://github.com/dnguyenv/expertiza/tree/beta Team code repo]&lt;br /&gt;
#[https://github.com/expertiza/expertiza/tree/beta Upstream code repo]&lt;/div&gt;</summary>
		<author><name>Dvnguye3</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145041</id>
		<title>CSC/ECE 517 Spring 2022 - E2245: View for results of bidding</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2022_-_E2245:_View_for_results_of_bidding&amp;diff=145041"/>
		<updated>2022-04-22T17:55:29Z</updated>

		<summary type="html">&lt;p&gt;Dvnguye3: /* Change in Work Flow Diagram */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''CSC/ECE 517 Spring 2022 - E2245: View for results of bidding&lt;br /&gt;
'''&lt;br /&gt;
== Problem Statement == &lt;br /&gt;
&lt;br /&gt;
When students sign up for topics, they are presented with a system to bid on their favorite topics. This process is allowed for both individual students as well as teams. As a result, many students will first sign up for topics, which can reduce the number of teams that get their first pick, and result in long waitlists. There are several bidding algorithms available to the instructors to give as many groups as possible their first choice. As this is an NP-complete problem, the algorithm has to use heuristics to guess efficiently. There needs to be a way for instructors to easily view and compare the results of the bidding algorithms to get a quantitative sense of their effectiveness.&lt;br /&gt;
&lt;br /&gt;
== Project Goal == &lt;br /&gt;
This project aims to solve this issue by giving clear and concise feedback of the algorithms in topics list in the assignment. However, since topics in the table potentially have several fields, care must be taken not to overcrowd the table with information. There are several different UI/UX approaches to display this information, and the chosen one should:&lt;br /&gt;
* Maximize useful information at a glance, while minimizing clutter&lt;br /&gt;
* Fit into the flow of the topic page&lt;br /&gt;
* Allow further information to be obtained if requested&lt;br /&gt;
* Not be visible if bidding is not used&lt;br /&gt;
&lt;br /&gt;
Some other miscellaneous goals of this project are to:&lt;br /&gt;
* Remove topic fields from view if they are not applicable&lt;br /&gt;
* Refactor code&lt;br /&gt;
* Increase test coverage&lt;br /&gt;
&lt;br /&gt;
== Previous Work == &lt;br /&gt;
&lt;br /&gt;
=== Current User Cases ===&lt;br /&gt;
&lt;br /&gt;
Below is the use case diagram that depicts the existing use cases that associated to the topics bidding features of the application. Notice that in order to check some bidding information for a topic/project, the Instructor has to impersonate a student.&lt;br /&gt;
&lt;br /&gt;
[[File:old-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Current Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
As an Instructor, the user after, being authenticated, needs to go to the Assignments &amp;gt;&amp;gt; Topics view to create the topics/projects and then once the bidding started, needs to impersonate a student to partially (at very minimal level) get the bidding process information &lt;br /&gt;
&lt;br /&gt;
[[File:Old-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
== Improvement on the Previous Work ==&lt;br /&gt;
&lt;br /&gt;
=== Change in Use Cases ===&lt;br /&gt;
&lt;br /&gt;
[[File:new-usecases.png|800px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
'''Student''': This actor is responsible for submitting and deleting bids for topics while the topic selection period is open for an assignment which uses the new lottery topic selection mechanism. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Instructor''': This actor is responsible for updating an assignment to use the new lottery topic selection as well as closing the bidding period and beginning the automatic topic selection. Instructor is also able to view the progress details of bids without having to impersonate students&lt;br /&gt;
&lt;br /&gt;
=== UI design ===&lt;br /&gt;
&lt;br /&gt;
The existing view with very limited information about the bidding process&lt;br /&gt;
&lt;br /&gt;
'''Before''':&lt;br /&gt;
&lt;br /&gt;
[[File:before-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With this proposed new view, the Instructor can gain a more complete view of the whole bidding process in one place.&lt;br /&gt;
&lt;br /&gt;
'''Proposed UI'''&lt;br /&gt;
&lt;br /&gt;
[[File:after-bidding.png|1200px|Popup prototype]]&lt;br /&gt;
&lt;br /&gt;
=== Change in Work Flow Diagram ===&lt;br /&gt;
&lt;br /&gt;
With the new flow and implementation, the Instructor now can have all (complete) information he/she needs in one place at the Topics list/details view instead of having to impersonate a student to get even some minimal, un-completed piece of information about the bidding. &lt;br /&gt;
&lt;br /&gt;
[[File:new-flow.png|600px|Old user cases]]&lt;br /&gt;
&lt;br /&gt;
=== Class Diagram ===&lt;br /&gt;
&lt;br /&gt;
[[File:class-diagram.png|1200px|Class diagram]]&lt;br /&gt;
&lt;br /&gt;
=== Code changes ===&lt;br /&gt;
&lt;br /&gt;
The following files will be changed to fulfill the requirements&lt;br /&gt;
&lt;br /&gt;
'''Controllers''':&lt;br /&gt;
*app/controllers/sign_up_sheet_controller.rb&lt;br /&gt;
*app/controllers/review_bids_controller.rb&lt;br /&gt;
*app/controllers/lottery_controller.rb &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Models''':&lt;br /&gt;
*app/models/bid.rb&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Views''':&lt;br /&gt;
*app/views/sign_up_sheet/list.html.erb&lt;br /&gt;
*app/views/assigments/edit/_topics.html.erb&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rspec''':&lt;br /&gt;
*spec/controllers/sign_up_sheet_controller_spec.rb&lt;br /&gt;
*spec/controllers/big_spec.rb&lt;br /&gt;
*spec/controllers/review_bids_controller_spec.rb&lt;br /&gt;
*spec/controllers/lottery_controller_spec.rb&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Refactor Code to follow good coding practices''' &amp;lt;br&amp;gt;&lt;br /&gt;
Example:&amp;lt;br&amp;gt;&lt;br /&gt;
# Rename method names more meaningfully and intuitive.&lt;br /&gt;
&lt;br /&gt;
== Functionalities added ==&lt;br /&gt;
 &lt;br /&gt;
* The instructor should be able to see how many teams have bid for each topic without having to impersonate students&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
=== Run and pass all the RSpec Tests (including the existing ones - regression, and the newly added cases) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  describe '#create' do&lt;br /&gt;
    context 'when topic cannot be found' do&lt;br /&gt;
      context 'when new topic can be saved successfully' do&lt;br /&gt;
        it 'sets up a new topic and redirects to assignment#edit page' do&lt;br /&gt;
          allow(SignUpTopic).to receive(:where).with(topic_name: 'Hello world!', assignment_id: '1').and_return([nil])&lt;br /&gt;
          allow_any_instance_of(SignUpSheetController).to receive(:undo_link)&lt;br /&gt;
            .with('The topic: &amp;quot;Hello world!&amp;quot; has been created successfully. ').and_return('OK')&lt;br /&gt;
          allow(topic).to receive(:save).and_return('OK')&lt;br /&gt;
          request_params = {&lt;br /&gt;
            id: 1,&lt;br /&gt;
            topic: {&lt;br /&gt;
              topic_identifier: 1,&lt;br /&gt;
              topic_name: 'Hello world!',&lt;br /&gt;
              max_choosers: 1,&lt;br /&gt;
              category: '',&lt;br /&gt;
              micropayment: 1&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
          post :create, params: request_params&lt;br /&gt;
          expect(response).to redirect_to('/assignments/1/edit#tabs-2')&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
      context 'when new topic cannot be saved successfully' do&lt;br /&gt;
        it 'sets up a new topic and renders sign_up_sheet#new page' do&lt;br /&gt;
          allow(SignUpTopic).to receive(:where).with(topic_name: 'Hello world!', assignment_id: '1').and_return([nil])&lt;br /&gt;
          allow_any_instance_of(SignUpSheetController).to receive(:undo_link)&lt;br /&gt;
            .with('The topic: &amp;quot;Hello world!&amp;quot; has been created successfully. ').and_return('OK')&lt;br /&gt;
          allow(topic).to receive(:save).and_return('OK')&lt;br /&gt;
          request_params = {&lt;br /&gt;
            id: 1,&lt;br /&gt;
            topic: {&lt;br /&gt;
              topic_identifier: 1,&lt;br /&gt;
              topic_name: 'Hello world!',&lt;br /&gt;
              category: '',&lt;br /&gt;
              micropayment: 1&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
          post :create, params: request_params&lt;br /&gt;
          expect(response).to render_template(:new)&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    context 'when topic can be found' do&lt;br /&gt;
      it 'updates the existing topic and redirects to sign_up_sheet#add_signup_topics_staggered page' do&lt;br /&gt;
        allow(SignedUpTeam).to receive(:find_by).with(topic_id: 1).and_return(signed_up_team)&lt;br /&gt;
        allow(SignedUpTeam).to receive(:where).with(topic_id: 1, is_waitlisted: true).and_return([signed_up_team2])&lt;br /&gt;
        allow(Team).to receive(:find).with(2).and_return(team)&lt;br /&gt;
        allow(SignUpTopic).to receive(:find_waitlisted_topics).with(1, 2).and_return(nil)&lt;br /&gt;
        request_params = {&lt;br /&gt;
          id: 1,&lt;br /&gt;
          topic: {&lt;br /&gt;
            topic_identifier: 666,&lt;br /&gt;
            topic_name: 'Hello world!',&lt;br /&gt;
            max_choosers: 2,&lt;br /&gt;
            category: '666',&lt;br /&gt;
            micropayment: 1&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
        post :create, params: request_params&lt;br /&gt;
        expect(SignedUpTeam.first.is_waitlisted).to be false&lt;br /&gt;
        expect(response).to redirect_to('/sign_up_sheet/add_signup_topics_staggered?id=1')&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  describe '#destroy' do&lt;br /&gt;
    context 'when topic can be found' do&lt;br /&gt;
      it 'redirects to assignment#edit page' do&lt;br /&gt;
        allow_any_instance_of(SignUpSheetController).to receive(:undo_link)&lt;br /&gt;
          .with('The topic: &amp;quot;Hello world!&amp;quot; has been successfully deleted. ').and_return('OK')&lt;br /&gt;
        request_params = { id: 1, assignment_id: 1 }&lt;br /&gt;
        post :destroy, params: request_params&lt;br /&gt;
        expect(response).to redirect_to('/assignments/1/edit')&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    context 'when topic cannot be found' do&lt;br /&gt;
      it 'shows an error flash message and redirects to assignment#edit page' do&lt;br /&gt;
        allow(SignUpTopic).to receive(:find).with('1').and_return(nil)&lt;br /&gt;
        allow_any_instance_of(SignUpSheetController).to receive(:undo_link)&lt;br /&gt;
          .with('The topic: &amp;quot;Hello world!&amp;quot; has been successfully deleted. ').and_return('OK')&lt;br /&gt;
        request_params = { id: 1, assignment_id: 1 }&lt;br /&gt;
        post :destroy, params: request_params&lt;br /&gt;
        expect(flash[:error]).to eq('The topic could not be deleted.')&lt;br /&gt;
        expect(response).to redirect_to('/assignments/1/edit')&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test the UI for the deployed project. ===&lt;br /&gt;
&lt;br /&gt;
==== UI Testing ====&lt;br /&gt;
'''Instructor View''' &amp;lt;br&amp;gt;&lt;br /&gt;
* username: instructor6 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Student View'''  &amp;lt;br&amp;gt;&lt;br /&gt;
* username: student575 &amp;lt;br&amp;gt;&lt;br /&gt;
* password: password &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== View bidding details ====&lt;br /&gt;
# Log into expertiza as Instructor &lt;br /&gt;
# Go to Topics page&lt;br /&gt;
# Once the Topics page shows up, verify the bidding details for each Topic on the table&lt;br /&gt;
# Impersonate a Student to verify if the team/student was actually bidding for the Topic&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
* Place holder for potential ed-cases that might get missed&lt;br /&gt;
&lt;br /&gt;
==Team Roster ==&lt;br /&gt;
&lt;br /&gt;
Mentor: Ed Gehringer - efg@ncsu.edu&lt;br /&gt;
&lt;br /&gt;
*Duy Nguyen - dvnguye3@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Kwon HyeokJun - khyeokj@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*Shawn Salekin - ssaleki@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
*David Glymph - dwglymph@ncsu.edu &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
#[https://docs.google.com/document/d/1tyWX8njxDLvYpN7wJf5hjA6lnWbzQRP9vUKGxxRjRzo/edit?pli=1#heading=h.5cgh9aixuut7 Previous works]&lt;br /&gt;
#[https://github.com/dnguyenv/expertiza/tree/beta Team code repo]&lt;br /&gt;
#[https://github.com/expertiza/expertiza/tree/beta Upstream code repo]&lt;/div&gt;</summary>
		<author><name>Dvnguye3</name></author>
	</entry>
</feed>