<?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=Ahubber</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=Ahubber"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Ahubber"/>
	<updated>2026-08-20T13:27:32Z</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_2020_-_E2018_sort_instructor_reports_by_name_ID_score_etc&amp;diff=134441</id>
		<title>CSC/ECE 517 Spring 2020 - E2018 sort instructor reports by name ID score etc</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_-_E2018_sort_instructor_reports_by_name_ID_score_etc&amp;diff=134441"/>
		<updated>2020-05-05T01:24:51Z</updated>

		<summary type="html">&lt;p&gt;Ahubber: /* Add Header to View Reports */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
&lt;br /&gt;
Expertiza is an open source web application project developed using Ruby on Rails framework. Let us list some of the functionalities that Expertiza allows us to do under different roles:&lt;br /&gt;
&lt;br /&gt;
As an Instructor:&lt;br /&gt;
We can create new assignments, edit the existing assignments, copy the assignments and also delete the assignment. The instructor can also add participants, reviewers to a particular assignment.&lt;br /&gt;
&lt;br /&gt;
As a Student:&lt;br /&gt;
They can form teams to work on various projects and also bid for the projects they would like to work on. They can also review other student's work and can give feedback on them. They can also submit various types of documents including the URLs and wiki pages for their project or assignment submission.&lt;br /&gt;
&lt;br /&gt;
== '''Problem Statement''' ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Expertiza allows instructors to view kinds of reports of assignments in their courses such as submissions, scores, and review reports. To improve the report views, some table columns such as team name, score, average should be made sortable by using the same existing sort library. &lt;br /&gt;
&lt;br /&gt;
=== '''What needs to be done''' ===&lt;br /&gt;
&lt;br /&gt;
==== '''Sort Headers in View Review Report''' ====&lt;br /&gt;
&lt;br /&gt;
For the &amp;quot;View Review Report&amp;quot; table, the columns &amp;quot;Reviewer&amp;quot; and &amp;quot;Metric&amp;quot; are sortable. Our goal is to make the remaining columns sortable.&amp;quot;Reviews done&amp;quot; should be sorted by the first number and then the second number, &amp;quot;Team Reviewed&amp;quot; should be sorted alphabetically and &amp;quot;Score awarded / Average Score&amp;quot; should be sorted in both ascending and design manner. Another issue with the current sorting method is that the sort buttons should be visible in all browsers.&lt;br /&gt;
&lt;br /&gt;
==== '''Sort/Modify Headers in Author Feedback report''' ====&lt;br /&gt;
&lt;br /&gt;
For the &amp;quot;Author Feedback report&amp;quot; table, the header names &amp;quot;Review response rejoined&amp;quot; and &amp;quot;Last rejoined to&amp;quot; should be changed to &amp;quot;Review responded to&amp;quot; and &amp;quot;Last responded at&amp;quot; respectively. Then all the columns in the table should be made sortable. Columns &amp;quot;Rejoinder&amp;quot; and &amp;quot;Review responded to&amp;quot; should be sorted as strings, &amp;quot;# author feedbacks done&amp;quot; as first number and second number and &amp;quot;Last responded at&amp;quot; as date.&lt;br /&gt;
&lt;br /&gt;
==== '''Sort Teammate Review report''' ====&lt;br /&gt;
&lt;br /&gt;
For the &amp;quot;Teammate Review report&amp;quot; table, the first 3 columns should be sorted as strings and the last column as date.&lt;br /&gt;
&lt;br /&gt;
==== '''Add Header to View Reports''' ====&lt;br /&gt;
&lt;br /&gt;
When a user clicks on &amp;quot;View Reports&amp;quot; for a particular assignment a page appears with a dropdown, however the page does not say what assignments reports are being viewed. We should add a header indicating the assignment name at the top.&lt;br /&gt;
&lt;br /&gt;
==== '''Fix formatting in Author Feedback Reports''' ====&lt;br /&gt;
&lt;br /&gt;
For &amp;quot;Author feedback reports&amp;quot; table when no feedback has been submitted, the names of students appear in a strange horizontal format. This formatting should be fixed.&lt;br /&gt;
&lt;br /&gt;
==== '''Verify dropdown performance in dropdown''' ====&lt;br /&gt;
&lt;br /&gt;
In Chrome on Windows 10, the dropdown has a tendency to freeze up especially after one report has been viewed. This issue needs to be reproduced and fixed&lt;br /&gt;
&lt;br /&gt;
== '''Design''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Files Requiring Modification'''===&lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_review_report.html.erb (issue 1)&lt;br /&gt;
&lt;br /&gt;
This file contains the code which generates the review reports table. We will add a script which makes the columns in the table sortable. &lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_feedback_report.html.erb (issue 2)&lt;br /&gt;
&lt;br /&gt;
This file contains the code which generates the Feedback reports table. This gives us access to the column names which require change. Making the columns sortable will be done in this file.&lt;br /&gt;
&lt;br /&gt;
* app/helpers/review_mapping_helper.rb (issue 2)&lt;br /&gt;
&lt;br /&gt;
This file has code which generates the instance variables used by the Feedback reports table and it also creates the headers used by the reports table. Changes may be needed to the header to make the columns sortable.&lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_teammate_review_report.html.erb (issue 3)&lt;br /&gt;
&lt;br /&gt;
This file contains the code which generates the Teammates review reports table. We will add a script which makes the columns in the table sortable. &lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_review_report.html.erb (issue 4)&lt;br /&gt;
&lt;br /&gt;
This issue requires the assignment name to be displayed for the particular review report. We will use the set instance variables to display the assignment name.&lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_feedback_report.html.erb(issue 5)&lt;br /&gt;
&lt;br /&gt;
This file contains the code which generates the Feedback reports table. We will inspect the code to check what is causing the formatting issues.&lt;br /&gt;
&lt;br /&gt;
Issue 6 has to be reproduced and the point of error is yet to be determined&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Design Patterns aren't applicable to our project since all it involves is to make columns sortable and some isolated issues.&lt;br /&gt;
&lt;br /&gt;
== '''UML Design''' ==&lt;br /&gt;
[[File:Sort_UML.png]]&lt;br /&gt;
&lt;br /&gt;
== '''Solution''' ==&lt;br /&gt;
&lt;br /&gt;
We will be using tablesorter jQuery to sort the table. For table columns which have constraints on them for sorting, we will be creating custom scripts which tablesorter library supports to sort those columns. According to the problem type, we are supposed to perform three kinds of sorting. All these have one thing in common. Adding up the tablesorter script in the body before using them. After including the script, we are supposed to do some modifications in the table tag by including the class. Three types of scenario may arise:&lt;br /&gt;
&lt;br /&gt;
1) Sorting by columns alphabetically - To sort the columns alphabetically, the table-head attribute must include sorter-true class with it to enable the sorting alphabetically.&lt;br /&gt;
&lt;br /&gt;
2) Sorting by date - It includes adding of a date default format in the script to denote the sorter type that must be used to sort the column of the date.&lt;br /&gt;
&lt;br /&gt;
3) Sorting by the first number followed by the second number - It will require splitting up of the data into two parts separated by '/' and then sorting the first part, followed by the second part.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''jQuery tablesorter 2.0'''===&lt;br /&gt;
&lt;br /&gt;
* Multi-column sorting&lt;br /&gt;
* Multi-tbody sorting&lt;br /&gt;
* Parsers for sorting text, URIs, integers, currency, floats, IP addresses, dates (ISO, long and short formats), time. Add your own easily&lt;br /&gt;
* Support secondary &amp;quot;hidden&amp;quot; sorting (e.g., maintain alphabetical sort when sorting on other criteria)&lt;br /&gt;
* Extensibility via widget system&lt;br /&gt;
* Cross-browser: IE 6.0+, FF 2+, Safari 2.0+, Opera 9.0+&lt;br /&gt;
* Small code size&lt;br /&gt;
&lt;br /&gt;
== '''Solution Implemented''' ==&lt;br /&gt;
=== '''Sort Headers in View Review Report''' ===&lt;br /&gt;
All changes for this issue were made in the files:&lt;br /&gt;
&lt;br /&gt;
* /views/reports/review_report.html.erb&lt;br /&gt;
* /views/reports/_team_score_score_awarded.html.erb&lt;br /&gt;
&lt;br /&gt;
The changes required for the Review Report table were:&lt;br /&gt;
&lt;br /&gt;
* Make the &amp;quot;Reviews Done&amp;quot;, &amp;quot;Team Reviewed&amp;quot;, and &amp;quot;Score Awarded/Average Score&amp;quot; columns sortable.&lt;br /&gt;
&lt;br /&gt;
In most cases, the only real changes that needed to be made was modifying the class associated with some of the table headers in order to provide the respective column with sorting functionality, as displayed in the following code (added to review_report.html.erb:&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;th rowspan =&amp;quot;2&amp;quot; width=&amp;quot;16%&amp;quot; class=&amp;quot;sorter-true&amp;quot;&amp;gt;Reviewer &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th width=&amp;quot;10%&amp;quot; class=&amp;quot;sorter-false&amp;quot;&amp;gt;Reviews done&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th rowspan =&amp;quot;2&amp;quot; width=&amp;quot;10%&amp;quot; class=&amp;quot;sorter-true&amp;quot;&amp;gt;Reviews done&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th width=&amp;quot;24%&amp;quot; class=&amp;quot;sorter-false&amp;quot;&amp;gt;Team reviewed &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th rowspan =&amp;quot;2&amp;quot; width=&amp;quot;24%&amp;quot; class=&amp;quot;sorter-true&amp;quot;&amp;gt;Team reviewed &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th width=&amp;quot;6%&amp;quot; colspan=  &amp;quot;2&amp;quot; class=&amp;quot;sorter-false&amp;quot;&amp;gt;Scores&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th width=&amp;quot;13%&amp;quot; class=&amp;quot;sorter-true&amp;quot;&amp;gt;Metrics &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th rowspan =&amp;quot;2&amp;quot; width=&amp;quot;14%&amp;quot; class=&amp;quot;sorter-true&amp;quot;&amp;gt;Metrics &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th class=&amp;quot;sorter-false&amp;quot;&amp;gt;Assign grade and write comments &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th rowspan =&amp;quot;2&amp;quot; class=&amp;quot;sorter-false&amp;quot;&amp;gt;Assign grade and write comments &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr bgcolor='#CCCCCC'&amp;gt;&lt;br /&gt;
   &amp;lt;th width=&amp;quot;6%&amp;quot; class=&amp;quot;sorter-true&amp;quot;&amp;gt; Score Awarded &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&gt;
   &amp;lt;th width=&amp;quot;6%&amp;quot; class=&amp;quot;sorter-true&amp;quot;&amp;gt; AVG Score &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Implementing the sort on the score columns was a bit more involved, however, requiring some reworking of the HTML in order to have each bisection of the column sorted separately. The code added appears as follows:&lt;br /&gt;
&lt;br /&gt;
review_report.html.erb&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;!--Score awarded--&amp;gt;&lt;br /&gt;
          &amp;lt;td align='left'&amp;gt;&lt;br /&gt;
            &amp;lt;% @response_maps.each_with_index do |ri, index| %&amp;gt;&lt;br /&gt;
              &amp;lt;% if Team.where(id: ri.reviewee_id).length &amp;gt; 0 %&amp;gt;&lt;br /&gt;
                &amp;lt;% @team = Team.find(ri.reviewee_id) %&amp;gt;&lt;br /&gt;
                &amp;lt;%= render partial: 'team_score_score_awarded', locals: {bgcolor: @bgcolor, team_id: @team.id, reviewer_id: r.id} %&amp;gt;&lt;br /&gt;
              &amp;lt;% end %&amp;gt;&lt;br /&gt;
            &amp;lt;% end %&amp;gt;&lt;br /&gt;
          &amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;!--Avg. score--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
_team_score_score_awarded.html.erb&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;% if !@assignment.varying_rubrics_by_round? %&amp;gt;&lt;br /&gt;
      &amp;lt;\!--Score awarded--&amp;gt;&lt;br /&gt;
      &amp;lt;\div&amp;gt;&lt;br /&gt;
      &amp;lt;% if @review_scores[reviewer_id][team_id] != -1%&amp;gt;&lt;br /&gt;
          &amp;lt;%= @review_scores[reviewer_id][team_id].inspect %&amp;gt;%&lt;br /&gt;
      &amp;lt;% else %&amp;gt;&lt;br /&gt;
        --&lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &amp;lt;%else%&amp;gt;&lt;br /&gt;
      &amp;lt;\!--Assignments have vary_rubric_by_rounds--&amp;gt;&lt;br /&gt;
      &amp;lt;\!--Score awarded--&amp;gt;&lt;br /&gt;
      &amp;lt;% get_awarded_review_score(reviewer_id, team_id) %&amp;gt;&lt;br /&gt;
      &amp;lt;\div&amp;gt;&lt;br /&gt;
      &amp;lt;% (1..@assignment.num_review_rounds).each do |round| %&amp;gt;&lt;br /&gt;
          &amp;lt;% get_review_metrics(round, team_id) %&amp;gt;&lt;br /&gt;
              &amp;lt;%= @score_awarded = instance_variable_get(&amp;quot;@score_awarded_round_&amp;quot; + round.to_s) %&amp;gt;&lt;br /&gt;
              &amp;lt;%=  @score_awarded.tr('%','').to_i  %&amp;gt;&lt;br /&gt;
      &amp;lt;%end%&amp;gt;&lt;br /&gt;
      &amp;lt;\/div&amp;gt;&lt;br /&gt;
  &amp;lt;%end%&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Backslashes were added in order to keep the editor from parsing the HTML tags as actual tags)&lt;br /&gt;
&lt;br /&gt;
=== '''Sort/Modify Headers in Author Feedback report''' ===&lt;br /&gt;
&lt;br /&gt;
All changes for this issue were make in the file  /views/reports/_feedback_report.html.erb&lt;br /&gt;
&lt;br /&gt;
The changes required for Author Feedback table were - &lt;br /&gt;
&lt;br /&gt;
* Changing the header name “Review response rejoined” to “Review responded to” and “Last rejoined at” to “Last responded at”.&lt;br /&gt;
&lt;br /&gt;
This was easily fixed by renaming the Headers in the Authors Feedback Table.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;lt;thead&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;!-- class value decides whether the column should be sortable or not  --&amp;gt;&lt;br /&gt;
      &amp;lt;th width=&amp;quot;16%&amp;quot; class=&amp;quot;sorter-true&amp;quot;&amp;gt;Rejoinder &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th width=&amp;quot;14%&amp;quot; class=&amp;quot;sorter-true&amp;quot;&amp;gt;# author feedbacks done&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th width=&amp;quot;20%&amp;quot; class=&amp;quot;sorter-true&amp;quot;&amp;gt;Review responded to &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th width=&amp;quot;20%&amp;quot; class=&amp;quot;sorter-true&amp;quot;&amp;gt;Last responded at&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;/thead&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*  Sort “Rejoinder” and “Review responded to” as string (alphabetically), sort “#author feedbacks done” by the first number then the second number, and sort “Last responded at” as a date.&lt;br /&gt;
&lt;br /&gt;
As mentioned above, sorting tables was done using the table sorter plugin. In order to sort the columns 'Rejoinder', 'Review responded to' and 'Last responded at' no manual manual modification was required since tablesorter automatically detects strings and dates. For the column  '#author feedbacks done' we used a manual sorting function, which splits the string into two numbers and compares them for sort. The following script was added for the custom sort - &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        $(&amp;quot;#feedbackReportTable&amp;quot;).tablesorter({&lt;br /&gt;
            textSorter: {&lt;br /&gt;
                      1: function (a, b) {&lt;br /&gt;
                    // Checks for comparison when input is empty (no feedback has been given)&lt;br /&gt;
                    if (a.length == 0 &amp;amp;&amp;amp; b.length == 0){&lt;br /&gt;
                        return 0;&lt;br /&gt;
                    }&lt;br /&gt;
                    if (a.length == 0){&lt;br /&gt;
                        return -1;&lt;br /&gt;
                    }&lt;br /&gt;
                    if (b.length == 0){&lt;br /&gt;
                        return 1;&lt;br /&gt;
                    }&lt;br /&gt;
                     if (a === b) {&lt;br /&gt;
                         return 0;&lt;br /&gt;
                     }&lt;br /&gt;
                     //E1877: values split by &amp;quot;/&amp;quot;, to get the digits before and after it.&lt;br /&gt;
                     var res1 = a.split(&amp;quot;/&amp;quot;);&lt;br /&gt;
                     var res2 = b.split(&amp;quot;/&amp;quot;);&lt;br /&gt;
                     res1[1] = res1[1].split(&amp;quot; &amp;quot;)[0];&lt;br /&gt;
                     res2[1] = res2[1].split(&amp;quot; &amp;quot;)[0];&lt;br /&gt;
                     //E1877: comparison of int values&lt;br /&gt;
                     if(parseInt(res1[0])&amp;gt;parseInt(res2[0])){&lt;br /&gt;
                         return 1;&lt;br /&gt;
                     }&lt;br /&gt;
                     else if(parseInt(res1[0])&amp;lt;parseInt(res2[0])){&lt;br /&gt;
                         return -1;&lt;br /&gt;
                     }&lt;br /&gt;
                     else{&lt;br /&gt;
                         if(parseInt(res1[1])&amp;gt;parseInt(res2[1])){&lt;br /&gt;
                             return 1;&lt;br /&gt;
                         }&lt;br /&gt;
                         else if(parseInt(res1[1])&amp;lt;parseInt(res2[1])){&lt;br /&gt;
                             return -1;&lt;br /&gt;
                         }&lt;br /&gt;
                         else{&lt;br /&gt;
                             return 0;&lt;br /&gt;
                         }&lt;br /&gt;
                     }&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
         });&lt;br /&gt;
     });&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Even after the above changes, for some tables, the sort function did not work on any off the columns. This was because tablesorter by default is not compatible with rowspan (Having more than one element in a cell), which is the case for many tables. To solve this issue we made all the rows within a row the children rows of the first row. In this manner tablesorter only looks at the first value in a row when sorting a column. An example of this is presented below - &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
              &amp;lt;!--Last responded at--&amp;gt;&lt;br /&gt;
              &amp;lt;td bgcolor=&amp;lt;%= @bgcolor %&amp;gt; style=&amp;quot;color:#A90201&amp;quot; align = 'left'&amp;gt;No&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;tr class=&amp;quot;tablesorter-childRow&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the above snippet 'Last responded at' is the last column in the table, and after filling that column we open a new row to accommodate more values if present. We have made that new row a child row so that table sorter does not use that row in its sorting logic.&lt;br /&gt;
&lt;br /&gt;
=== '''Sort Teammate Review report''' ===&lt;br /&gt;
&lt;br /&gt;
All changes for this issue were made in the file /views/reports/_teammate_review_report.html.erb&lt;br /&gt;
&lt;br /&gt;
Changes needed for these issue were - &lt;br /&gt;
&lt;br /&gt;
* We have to sort the first 3 columns as a string and sort the last column as a date in the “Teammate Reviews” table&lt;br /&gt;
&lt;br /&gt;
Teamsorter is used to make the table sortable. Since it automatically detects dats and strings, no manual code was required.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    $(function () {&lt;br /&gt;
      /*Function for sorting the table */&lt;br /&gt;
      $(&amp;quot;#teammateReviewTable&amp;quot;).tablesorter({&lt;br /&gt;
&lt;br /&gt;
         dateFormat : &amp;quot;mmddyyyy&amp;quot;, // set the default date format&lt;br /&gt;
        sortList: [[0,0]] //  sort First Column by default when page loads&lt;br /&gt;
      });&lt;br /&gt;
    });&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As seen in author feedbacks table, even after the above changes, for some tables, the sort function did not work on any off the columns. This was because tablesorter by default is not compatible with rowspan (Having more than one element in a cell), which is the case for many tables. To solve this issue we made all the rows within a row the children rows of the first row. In this manner tablesorter only looks at the first value in a row when sorting a column. An example of this is presented below -&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
              &amp;lt;!--Last reviewed at--&amp;gt;&lt;br /&gt;
              &amp;lt;td bgcolor=&amp;lt;%= @bgcolor %&amp;gt; style=&amp;quot;color:#DD3300&amp;quot; align = 'left'&amp;gt;No&amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt;&amp;lt;tr class=&amp;quot;tablesorter-childRow&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the above snippet 'Last reviewed at' is the last column in the table, and after filling that column we open a new row to accommodate more values if present. We have made that new row a child row so that table sorter does not use that row in its sorting logic.&lt;br /&gt;
&lt;br /&gt;
=== '''Add Header to View Reports''' ===&lt;br /&gt;
All changes for this issue were made in the file /views/reports/response_report.html.haml&lt;br /&gt;
&lt;br /&gt;
Changes needed for this issue were:&lt;br /&gt;
* Add a header to the top of the &amp;quot;View Reports&amp;quot; page for each assignment&lt;br /&gt;
&lt;br /&gt;
This issue was trivial to resolve. It came down to adding the following three lines of haml to the top of the aforementioned file:&lt;br /&gt;
&lt;br /&gt;
  %h1&lt;br /&gt;
  Reports for&lt;br /&gt;
  = @assignment.name&lt;br /&gt;
&lt;br /&gt;
This added a header to the top of the &amp;quot;View Reports&amp;quot; page reading &amp;quot;Reports for &amp;lt;name of assignment&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== '''Fix formatting in Author Feedback Reports''' ===&lt;br /&gt;
&lt;br /&gt;
All changes for this issue were make in the file  /views/reports/_feedback_report.html.erb&lt;br /&gt;
&lt;br /&gt;
The issues presented were - &lt;br /&gt;
* For &amp;quot;Author feedback reports&amp;quot; table when no feedback has been submitted, the names of students appear in a strange horizontal format. This formatting should be fixed.&lt;br /&gt;
&lt;br /&gt;
We found that this problem arose from the fact that when users haven't submitted any feedback, they have their rowspan set to 0. This makes them all appear in a horizontal fashion. To fix this issue we added a condition where if the rowspan is seen to 0 then we manually set it to 1 so that it takes up its own row. This is shown in the following code.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
          &amp;lt;!--Rejoinder--&amp;gt;&lt;br /&gt;
         &amp;lt;% ['one', 'two', 'three'].each do |round| %&amp;gt;&lt;br /&gt;
      &amp;lt;% if @first_col_identifier == true %&amp;gt;&lt;br /&gt;
        &amp;lt;% @reviewer_name = r.user.fullname(session[:ip]) %&amp;gt;&lt;br /&gt;
        &amp;lt;%row_span = @assignment.varying_rubrics_by_round? ? (@rspan_round_one + @rspan_round_two + @rspan_round_three) : @rspan %&amp;gt;&lt;br /&gt;
        &amp;lt;%if row_span == 0 %&amp;gt;&lt;br /&gt;
          &amp;lt;tr&amp;gt;&amp;lt;td rowspan = &amp;lt;% 1 %&amp;gt;&amp;gt;&lt;br /&gt;
            &amp;lt;%= link_to @reviewer_name, :controller =&amp;gt; 'popup', :action =&amp;gt; 'reviewer_details_popup', :id =&amp;gt; r.id, :assignment_id =&amp;gt; @id %&amp;gt;&lt;br /&gt;
          &amp;lt;/td&amp;gt;&lt;br /&gt;
	  &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;%else %&amp;gt;&lt;br /&gt;
            &amp;lt;tr&amp;gt;&amp;lt;td rowspan= &amp;lt;%= @assignment.varying_rubrics_by_round? ? (@rspan_round_one + @rspan_round_two + @rspan_round_three) : @rspan %&amp;gt;&amp;gt;&lt;br /&gt;
              &amp;lt;%= link_to @reviewer_name, :controller =&amp;gt; 'popup', :action =&amp;gt; 'reviewer_details_popup', :id =&amp;gt; r.id, :assignment_id =&amp;gt; @id %&amp;gt;&lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;%end %&amp;gt;&lt;br /&gt;
          &amp;lt;% @first_col_identifier = false %&amp;gt;&lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Verify dropdown performance in dropdown''' ===&lt;br /&gt;
No changes were made for this issue.&lt;br /&gt;
&lt;br /&gt;
The issues presented were:&lt;br /&gt;
* In Chrome on Windows 10, the dropdown has a tendency to freeze up especially after one report has been viewed. This issue needs to be reproduced and fixed &lt;br /&gt;
&lt;br /&gt;
The &amp;quot;freezing dropdown&amp;quot; bug described in this issue was unable to be reproduced as described. Supposedly, there existed an issue with the &amp;quot;View Reports&amp;quot; page's dropdown menu freezing when accessing it from a Chrome browser on Windows 10; however, all attempts to achieve this same behavior were met with failure, and only the expected, normal behavior was observed. For the sake of thoroughness, attempts to reproduce the bug were carried out on three different machines all running Chrome on Windows 10, and on each machine, the environment was created in two different ways: First by running the Expertiza server from a local VM using VirtualBox, and then by running it from an NCSU VCL instance. In none of the described cases did the dropdown ever freeze or otherwise malfunction; therefore, it has been decided that this bug will be dismissed.&lt;br /&gt;
&lt;br /&gt;
== '''Test Plan''' ==&lt;br /&gt;
=== '''Functional Testing''' ===&lt;br /&gt;
&lt;br /&gt;
==== '''Sort Headers in View Review Report''' ====&lt;br /&gt;
&lt;br /&gt;
# Login as a instructor.&lt;br /&gt;
# Click Assignments tab next to Courses&lt;br /&gt;
# Select the &amp;quot;View reports&amp;quot; icon for the assignment for which you want to see the report of&lt;br /&gt;
# Select &amp;quot;Review Report&amp;quot;  from the dropdown&lt;br /&gt;
# Sort the table by clicking on headers, ensure all headers are sorted properly.&lt;br /&gt;
&lt;br /&gt;
==== '''Sort/Modify Headers in Author Feedback report''' ====&lt;br /&gt;
&lt;br /&gt;
# Login as a instructor.&lt;br /&gt;
# Click Assignments tab next to Courses&lt;br /&gt;
# Select the &amp;quot;View Reports&amp;quot; icon for the assignment for which you want to see the report of&lt;br /&gt;
# Select &amp;quot;Author Feedback Report&amp;quot; from the dropdown&lt;br /&gt;
# Sort the table by clicking on headers, ensure all headers are sorted properly and header names have been changed to appropriate values.&lt;br /&gt;
&lt;br /&gt;
==== '''Sort Teammate Review report''' ====&lt;br /&gt;
&lt;br /&gt;
# Login as a instructor.&lt;br /&gt;
# Click Assignments tab next to Courses&lt;br /&gt;
# Select the &amp;quot;View Reports&amp;quot; icon for the assignment for which you want to see the report of&lt;br /&gt;
# Select &amp;quot;Teammate Review Report&amp;quot; from the dropdown&lt;br /&gt;
# Sort the table by clicking on headers, ensure all headers are sorted properly.&lt;br /&gt;
&lt;br /&gt;
==== '''Add Header to View Reports''' ====&lt;br /&gt;
&lt;br /&gt;
# Login as a instructor.&lt;br /&gt;
# Click Assignments tab next to Courses&lt;br /&gt;
# Select the &amp;quot;View Reports&amp;quot; icon for the assignment for which you want to see the report of&lt;br /&gt;
# Ensure the header is present on the page for the assignment name.&lt;br /&gt;
&lt;br /&gt;
==== '''Fix formatting in Author Feedback Reports''' ====&lt;br /&gt;
&lt;br /&gt;
# Login as a instructor.&lt;br /&gt;
# Click Assignments tab next to Courses&lt;br /&gt;
# Select the &amp;quot;View Reports&amp;quot; icon for the assignment for which you want to see the report of&lt;br /&gt;
# Select &amp;quot;Author feedback reports&amp;quot; from the dropdown&lt;br /&gt;
# Verify format for student names when no feedback has been submitted.&lt;br /&gt;
&lt;br /&gt;
==== '''Verify dropdown performance in dropdown''' ====&lt;br /&gt;
&lt;br /&gt;
# Login as a instructor.&lt;br /&gt;
# Click Assignments tab next to Courses&lt;br /&gt;
# Select the &amp;quot;View Reports&amp;quot; icon for the assignment for which you want to see the report of&lt;br /&gt;
# Verify drop down does not freeze up in any scenario.&lt;br /&gt;
&lt;br /&gt;
== '''Team Information''' ==&lt;br /&gt;
Jamie Gachie&lt;br /&gt;
&lt;br /&gt;
Juan Martinez&lt;br /&gt;
&lt;br /&gt;
Koushik Shankar&lt;br /&gt;
&lt;br /&gt;
Anfernee Hubbert&lt;br /&gt;
&lt;br /&gt;
== '''References''' ==&lt;/div&gt;</summary>
		<author><name>Ahubber</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_-_E2018_sort_instructor_reports_by_name_ID_score_etc&amp;diff=134440</id>
		<title>CSC/ECE 517 Spring 2020 - E2018 sort instructor reports by name ID score etc</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_-_E2018_sort_instructor_reports_by_name_ID_score_etc&amp;diff=134440"/>
		<updated>2020-05-05T01:24:38Z</updated>

		<summary type="html">&lt;p&gt;Ahubber: /* Problem Statement */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
&lt;br /&gt;
Expertiza is an open source web application project developed using Ruby on Rails framework. Let us list some of the functionalities that Expertiza allows us to do under different roles:&lt;br /&gt;
&lt;br /&gt;
As an Instructor:&lt;br /&gt;
We can create new assignments, edit the existing assignments, copy the assignments and also delete the assignment. The instructor can also add participants, reviewers to a particular assignment.&lt;br /&gt;
&lt;br /&gt;
As a Student:&lt;br /&gt;
They can form teams to work on various projects and also bid for the projects they would like to work on. They can also review other student's work and can give feedback on them. They can also submit various types of documents including the URLs and wiki pages for their project or assignment submission.&lt;br /&gt;
&lt;br /&gt;
== '''Problem Statement''' ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Expertiza allows instructors to view kinds of reports of assignments in their courses such as submissions, scores, and review reports. To improve the report views, some table columns such as team name, score, average should be made sortable by using the same existing sort library. &lt;br /&gt;
&lt;br /&gt;
=== '''What needs to be done''' ===&lt;br /&gt;
&lt;br /&gt;
==== '''Sort Headers in View Review Report''' ====&lt;br /&gt;
&lt;br /&gt;
For the &amp;quot;View Review Report&amp;quot; table, the columns &amp;quot;Reviewer&amp;quot; and &amp;quot;Metric&amp;quot; are sortable. Our goal is to make the remaining columns sortable.&amp;quot;Reviews done&amp;quot; should be sorted by the first number and then the second number, &amp;quot;Team Reviewed&amp;quot; should be sorted alphabetically and &amp;quot;Score awarded / Average Score&amp;quot; should be sorted in both ascending and design manner. Another issue with the current sorting method is that the sort buttons should be visible in all browsers.&lt;br /&gt;
&lt;br /&gt;
==== '''Sort/Modify Headers in Author Feedback report''' ====&lt;br /&gt;
&lt;br /&gt;
For the &amp;quot;Author Feedback report&amp;quot; table, the header names &amp;quot;Review response rejoined&amp;quot; and &amp;quot;Last rejoined to&amp;quot; should be changed to &amp;quot;Review responded to&amp;quot; and &amp;quot;Last responded at&amp;quot; respectively. Then all the columns in the table should be made sortable. Columns &amp;quot;Rejoinder&amp;quot; and &amp;quot;Review responded to&amp;quot; should be sorted as strings, &amp;quot;# author feedbacks done&amp;quot; as first number and second number and &amp;quot;Last responded at&amp;quot; as date.&lt;br /&gt;
&lt;br /&gt;
==== '''Sort Teammate Review report''' ====&lt;br /&gt;
&lt;br /&gt;
For the &amp;quot;Teammate Review report&amp;quot; table, the first 3 columns should be sorted as strings and the last column as date.&lt;br /&gt;
&lt;br /&gt;
==== '''Add Header to View Reports''' ====&lt;br /&gt;
&lt;br /&gt;
When a user clicks on &amp;quot;View Reports&amp;quot; for a particular assignment a page appears with a dropdown, however the page does not say what assignments reports are being viewed. We should add a header indicating the assignment name at the top.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== '''Fix formatting in Author Feedback Reports''' ====&lt;br /&gt;
&lt;br /&gt;
For &amp;quot;Author feedback reports&amp;quot; table when no feedback has been submitted, the names of students appear in a strange horizontal format. This formatting should be fixed.&lt;br /&gt;
&lt;br /&gt;
==== '''Verify dropdown performance in dropdown''' ====&lt;br /&gt;
&lt;br /&gt;
In Chrome on Windows 10, the dropdown has a tendency to freeze up especially after one report has been viewed. This issue needs to be reproduced and fixed&lt;br /&gt;
&lt;br /&gt;
== '''Design''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Files Requiring Modification'''===&lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_review_report.html.erb (issue 1)&lt;br /&gt;
&lt;br /&gt;
This file contains the code which generates the review reports table. We will add a script which makes the columns in the table sortable. &lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_feedback_report.html.erb (issue 2)&lt;br /&gt;
&lt;br /&gt;
This file contains the code which generates the Feedback reports table. This gives us access to the column names which require change. Making the columns sortable will be done in this file.&lt;br /&gt;
&lt;br /&gt;
* app/helpers/review_mapping_helper.rb (issue 2)&lt;br /&gt;
&lt;br /&gt;
This file has code which generates the instance variables used by the Feedback reports table and it also creates the headers used by the reports table. Changes may be needed to the header to make the columns sortable.&lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_teammate_review_report.html.erb (issue 3)&lt;br /&gt;
&lt;br /&gt;
This file contains the code which generates the Teammates review reports table. We will add a script which makes the columns in the table sortable. &lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_review_report.html.erb (issue 4)&lt;br /&gt;
&lt;br /&gt;
This issue requires the assignment name to be displayed for the particular review report. We will use the set instance variables to display the assignment name.&lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_feedback_report.html.erb(issue 5)&lt;br /&gt;
&lt;br /&gt;
This file contains the code which generates the Feedback reports table. We will inspect the code to check what is causing the formatting issues.&lt;br /&gt;
&lt;br /&gt;
Issue 6 has to be reproduced and the point of error is yet to be determined&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Design Patterns aren't applicable to our project since all it involves is to make columns sortable and some isolated issues.&lt;br /&gt;
&lt;br /&gt;
== '''UML Design''' ==&lt;br /&gt;
[[File:Sort_UML.png]]&lt;br /&gt;
&lt;br /&gt;
== '''Solution''' ==&lt;br /&gt;
&lt;br /&gt;
We will be using tablesorter jQuery to sort the table. For table columns which have constraints on them for sorting, we will be creating custom scripts which tablesorter library supports to sort those columns. According to the problem type, we are supposed to perform three kinds of sorting. All these have one thing in common. Adding up the tablesorter script in the body before using them. After including the script, we are supposed to do some modifications in the table tag by including the class. Three types of scenario may arise:&lt;br /&gt;
&lt;br /&gt;
1) Sorting by columns alphabetically - To sort the columns alphabetically, the table-head attribute must include sorter-true class with it to enable the sorting alphabetically.&lt;br /&gt;
&lt;br /&gt;
2) Sorting by date - It includes adding of a date default format in the script to denote the sorter type that must be used to sort the column of the date.&lt;br /&gt;
&lt;br /&gt;
3) Sorting by the first number followed by the second number - It will require splitting up of the data into two parts separated by '/' and then sorting the first part, followed by the second part.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''jQuery tablesorter 2.0'''===&lt;br /&gt;
&lt;br /&gt;
* Multi-column sorting&lt;br /&gt;
* Multi-tbody sorting&lt;br /&gt;
* Parsers for sorting text, URIs, integers, currency, floats, IP addresses, dates (ISO, long and short formats), time. Add your own easily&lt;br /&gt;
* Support secondary &amp;quot;hidden&amp;quot; sorting (e.g., maintain alphabetical sort when sorting on other criteria)&lt;br /&gt;
* Extensibility via widget system&lt;br /&gt;
* Cross-browser: IE 6.0+, FF 2+, Safari 2.0+, Opera 9.0+&lt;br /&gt;
* Small code size&lt;br /&gt;
&lt;br /&gt;
== '''Solution Implemented''' ==&lt;br /&gt;
=== '''Sort Headers in View Review Report''' ===&lt;br /&gt;
All changes for this issue were made in the files:&lt;br /&gt;
&lt;br /&gt;
* /views/reports/review_report.html.erb&lt;br /&gt;
* /views/reports/_team_score_score_awarded.html.erb&lt;br /&gt;
&lt;br /&gt;
The changes required for the Review Report table were:&lt;br /&gt;
&lt;br /&gt;
* Make the &amp;quot;Reviews Done&amp;quot;, &amp;quot;Team Reviewed&amp;quot;, and &amp;quot;Score Awarded/Average Score&amp;quot; columns sortable.&lt;br /&gt;
&lt;br /&gt;
In most cases, the only real changes that needed to be made was modifying the class associated with some of the table headers in order to provide the respective column with sorting functionality, as displayed in the following code (added to review_report.html.erb:&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;th rowspan =&amp;quot;2&amp;quot; width=&amp;quot;16%&amp;quot; class=&amp;quot;sorter-true&amp;quot;&amp;gt;Reviewer &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th width=&amp;quot;10%&amp;quot; class=&amp;quot;sorter-false&amp;quot;&amp;gt;Reviews done&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th rowspan =&amp;quot;2&amp;quot; width=&amp;quot;10%&amp;quot; class=&amp;quot;sorter-true&amp;quot;&amp;gt;Reviews done&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th width=&amp;quot;24%&amp;quot; class=&amp;quot;sorter-false&amp;quot;&amp;gt;Team reviewed &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th rowspan =&amp;quot;2&amp;quot; width=&amp;quot;24%&amp;quot; class=&amp;quot;sorter-true&amp;quot;&amp;gt;Team reviewed &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th width=&amp;quot;6%&amp;quot; colspan=  &amp;quot;2&amp;quot; class=&amp;quot;sorter-false&amp;quot;&amp;gt;Scores&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th width=&amp;quot;13%&amp;quot; class=&amp;quot;sorter-true&amp;quot;&amp;gt;Metrics &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th rowspan =&amp;quot;2&amp;quot; width=&amp;quot;14%&amp;quot; class=&amp;quot;sorter-true&amp;quot;&amp;gt;Metrics &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th class=&amp;quot;sorter-false&amp;quot;&amp;gt;Assign grade and write comments &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th rowspan =&amp;quot;2&amp;quot; class=&amp;quot;sorter-false&amp;quot;&amp;gt;Assign grade and write comments &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr bgcolor='#CCCCCC'&amp;gt;&lt;br /&gt;
   &amp;lt;th width=&amp;quot;6%&amp;quot; class=&amp;quot;sorter-true&amp;quot;&amp;gt; Score Awarded &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&gt;
   &amp;lt;th width=&amp;quot;6%&amp;quot; class=&amp;quot;sorter-true&amp;quot;&amp;gt; AVG Score &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Implementing the sort on the score columns was a bit more involved, however, requiring some reworking of the HTML in order to have each bisection of the column sorted separately. The code added appears as follows:&lt;br /&gt;
&lt;br /&gt;
review_report.html.erb&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;!--Score awarded--&amp;gt;&lt;br /&gt;
          &amp;lt;td align='left'&amp;gt;&lt;br /&gt;
            &amp;lt;% @response_maps.each_with_index do |ri, index| %&amp;gt;&lt;br /&gt;
              &amp;lt;% if Team.where(id: ri.reviewee_id).length &amp;gt; 0 %&amp;gt;&lt;br /&gt;
                &amp;lt;% @team = Team.find(ri.reviewee_id) %&amp;gt;&lt;br /&gt;
                &amp;lt;%= render partial: 'team_score_score_awarded', locals: {bgcolor: @bgcolor, team_id: @team.id, reviewer_id: r.id} %&amp;gt;&lt;br /&gt;
              &amp;lt;% end %&amp;gt;&lt;br /&gt;
            &amp;lt;% end %&amp;gt;&lt;br /&gt;
          &amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;!--Avg. score--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
_team_score_score_awarded.html.erb&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;% if !@assignment.varying_rubrics_by_round? %&amp;gt;&lt;br /&gt;
      &amp;lt;\!--Score awarded--&amp;gt;&lt;br /&gt;
      &amp;lt;\div&amp;gt;&lt;br /&gt;
      &amp;lt;% if @review_scores[reviewer_id][team_id] != -1%&amp;gt;&lt;br /&gt;
          &amp;lt;%= @review_scores[reviewer_id][team_id].inspect %&amp;gt;%&lt;br /&gt;
      &amp;lt;% else %&amp;gt;&lt;br /&gt;
        --&lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &amp;lt;%else%&amp;gt;&lt;br /&gt;
      &amp;lt;\!--Assignments have vary_rubric_by_rounds--&amp;gt;&lt;br /&gt;
      &amp;lt;\!--Score awarded--&amp;gt;&lt;br /&gt;
      &amp;lt;% get_awarded_review_score(reviewer_id, team_id) %&amp;gt;&lt;br /&gt;
      &amp;lt;\div&amp;gt;&lt;br /&gt;
      &amp;lt;% (1..@assignment.num_review_rounds).each do |round| %&amp;gt;&lt;br /&gt;
          &amp;lt;% get_review_metrics(round, team_id) %&amp;gt;&lt;br /&gt;
              &amp;lt;%= @score_awarded = instance_variable_get(&amp;quot;@score_awarded_round_&amp;quot; + round.to_s) %&amp;gt;&lt;br /&gt;
              &amp;lt;%=  @score_awarded.tr('%','').to_i  %&amp;gt;&lt;br /&gt;
      &amp;lt;%end%&amp;gt;&lt;br /&gt;
      &amp;lt;\/div&amp;gt;&lt;br /&gt;
  &amp;lt;%end%&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Backslashes were added in order to keep the editor from parsing the HTML tags as actual tags)&lt;br /&gt;
&lt;br /&gt;
=== '''Sort/Modify Headers in Author Feedback report''' ===&lt;br /&gt;
&lt;br /&gt;
All changes for this issue were make in the file  /views/reports/_feedback_report.html.erb&lt;br /&gt;
&lt;br /&gt;
The changes required for Author Feedback table were - &lt;br /&gt;
&lt;br /&gt;
* Changing the header name “Review response rejoined” to “Review responded to” and “Last rejoined at” to “Last responded at”.&lt;br /&gt;
&lt;br /&gt;
This was easily fixed by renaming the Headers in the Authors Feedback Table.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;lt;thead&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;!-- class value decides whether the column should be sortable or not  --&amp;gt;&lt;br /&gt;
      &amp;lt;th width=&amp;quot;16%&amp;quot; class=&amp;quot;sorter-true&amp;quot;&amp;gt;Rejoinder &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th width=&amp;quot;14%&amp;quot; class=&amp;quot;sorter-true&amp;quot;&amp;gt;# author feedbacks done&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th width=&amp;quot;20%&amp;quot; class=&amp;quot;sorter-true&amp;quot;&amp;gt;Review responded to &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th width=&amp;quot;20%&amp;quot; class=&amp;quot;sorter-true&amp;quot;&amp;gt;Last responded at&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;/thead&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*  Sort “Rejoinder” and “Review responded to” as string (alphabetically), sort “#author feedbacks done” by the first number then the second number, and sort “Last responded at” as a date.&lt;br /&gt;
&lt;br /&gt;
As mentioned above, sorting tables was done using the table sorter plugin. In order to sort the columns 'Rejoinder', 'Review responded to' and 'Last responded at' no manual manual modification was required since tablesorter automatically detects strings and dates. For the column  '#author feedbacks done' we used a manual sorting function, which splits the string into two numbers and compares them for sort. The following script was added for the custom sort - &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        $(&amp;quot;#feedbackReportTable&amp;quot;).tablesorter({&lt;br /&gt;
            textSorter: {&lt;br /&gt;
                      1: function (a, b) {&lt;br /&gt;
                    // Checks for comparison when input is empty (no feedback has been given)&lt;br /&gt;
                    if (a.length == 0 &amp;amp;&amp;amp; b.length == 0){&lt;br /&gt;
                        return 0;&lt;br /&gt;
                    }&lt;br /&gt;
                    if (a.length == 0){&lt;br /&gt;
                        return -1;&lt;br /&gt;
                    }&lt;br /&gt;
                    if (b.length == 0){&lt;br /&gt;
                        return 1;&lt;br /&gt;
                    }&lt;br /&gt;
                     if (a === b) {&lt;br /&gt;
                         return 0;&lt;br /&gt;
                     }&lt;br /&gt;
                     //E1877: values split by &amp;quot;/&amp;quot;, to get the digits before and after it.&lt;br /&gt;
                     var res1 = a.split(&amp;quot;/&amp;quot;);&lt;br /&gt;
                     var res2 = b.split(&amp;quot;/&amp;quot;);&lt;br /&gt;
                     res1[1] = res1[1].split(&amp;quot; &amp;quot;)[0];&lt;br /&gt;
                     res2[1] = res2[1].split(&amp;quot; &amp;quot;)[0];&lt;br /&gt;
                     //E1877: comparison of int values&lt;br /&gt;
                     if(parseInt(res1[0])&amp;gt;parseInt(res2[0])){&lt;br /&gt;
                         return 1;&lt;br /&gt;
                     }&lt;br /&gt;
                     else if(parseInt(res1[0])&amp;lt;parseInt(res2[0])){&lt;br /&gt;
                         return -1;&lt;br /&gt;
                     }&lt;br /&gt;
                     else{&lt;br /&gt;
                         if(parseInt(res1[1])&amp;gt;parseInt(res2[1])){&lt;br /&gt;
                             return 1;&lt;br /&gt;
                         }&lt;br /&gt;
                         else if(parseInt(res1[1])&amp;lt;parseInt(res2[1])){&lt;br /&gt;
                             return -1;&lt;br /&gt;
                         }&lt;br /&gt;
                         else{&lt;br /&gt;
                             return 0;&lt;br /&gt;
                         }&lt;br /&gt;
                     }&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
         });&lt;br /&gt;
     });&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Even after the above changes, for some tables, the sort function did not work on any off the columns. This was because tablesorter by default is not compatible with rowspan (Having more than one element in a cell), which is the case for many tables. To solve this issue we made all the rows within a row the children rows of the first row. In this manner tablesorter only looks at the first value in a row when sorting a column. An example of this is presented below - &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
              &amp;lt;!--Last responded at--&amp;gt;&lt;br /&gt;
              &amp;lt;td bgcolor=&amp;lt;%= @bgcolor %&amp;gt; style=&amp;quot;color:#A90201&amp;quot; align = 'left'&amp;gt;No&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;tr class=&amp;quot;tablesorter-childRow&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the above snippet 'Last responded at' is the last column in the table, and after filling that column we open a new row to accommodate more values if present. We have made that new row a child row so that table sorter does not use that row in its sorting logic.&lt;br /&gt;
&lt;br /&gt;
=== '''Sort Teammate Review report''' ===&lt;br /&gt;
&lt;br /&gt;
All changes for this issue were made in the file /views/reports/_teammate_review_report.html.erb&lt;br /&gt;
&lt;br /&gt;
Changes needed for these issue were - &lt;br /&gt;
&lt;br /&gt;
* We have to sort the first 3 columns as a string and sort the last column as a date in the “Teammate Reviews” table&lt;br /&gt;
&lt;br /&gt;
Teamsorter is used to make the table sortable. Since it automatically detects dats and strings, no manual code was required.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    $(function () {&lt;br /&gt;
      /*Function for sorting the table */&lt;br /&gt;
      $(&amp;quot;#teammateReviewTable&amp;quot;).tablesorter({&lt;br /&gt;
&lt;br /&gt;
         dateFormat : &amp;quot;mmddyyyy&amp;quot;, // set the default date format&lt;br /&gt;
        sortList: [[0,0]] //  sort First Column by default when page loads&lt;br /&gt;
      });&lt;br /&gt;
    });&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As seen in author feedbacks table, even after the above changes, for some tables, the sort function did not work on any off the columns. This was because tablesorter by default is not compatible with rowspan (Having more than one element in a cell), which is the case for many tables. To solve this issue we made all the rows within a row the children rows of the first row. In this manner tablesorter only looks at the first value in a row when sorting a column. An example of this is presented below -&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
              &amp;lt;!--Last reviewed at--&amp;gt;&lt;br /&gt;
              &amp;lt;td bgcolor=&amp;lt;%= @bgcolor %&amp;gt; style=&amp;quot;color:#DD3300&amp;quot; align = 'left'&amp;gt;No&amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt;&amp;lt;tr class=&amp;quot;tablesorter-childRow&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the above snippet 'Last reviewed at' is the last column in the table, and after filling that column we open a new row to accommodate more values if present. We have made that new row a child row so that table sorter does not use that row in its sorting logic.&lt;br /&gt;
&lt;br /&gt;
=== '''Add Header to View Reports''' ===&lt;br /&gt;
All changes for this issue were made in the file /views/reports/response_report.html.haml&lt;br /&gt;
&lt;br /&gt;
Changes needed for this issue were:&lt;br /&gt;
* Add a header to the top of the &amp;quot;View Reports&amp;quot; page for each assignment&lt;br /&gt;
&lt;br /&gt;
This issue was trivial to resolve. It came down to adding the following three lines of haml to the top of the aforementioned file:&lt;br /&gt;
&lt;br /&gt;
  %h1&lt;br /&gt;
  Reports for&lt;br /&gt;
  = @assignment.name&lt;br /&gt;
&lt;br /&gt;
This added a header to the top of the &amp;quot;View Reports&amp;quot; page reading &amp;quot;Reports for &amp;lt;name of assignment&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== '''Fix formatting in Author Feedback Reports''' ===&lt;br /&gt;
&lt;br /&gt;
All changes for this issue were make in the file  /views/reports/_feedback_report.html.erb&lt;br /&gt;
&lt;br /&gt;
The issues presented were - &lt;br /&gt;
* For &amp;quot;Author feedback reports&amp;quot; table when no feedback has been submitted, the names of students appear in a strange horizontal format. This formatting should be fixed.&lt;br /&gt;
&lt;br /&gt;
We found that this problem arose from the fact that when users haven't submitted any feedback, they have their rowspan set to 0. This makes them all appear in a horizontal fashion. To fix this issue we added a condition where if the rowspan is seen to 0 then we manually set it to 1 so that it takes up its own row. This is shown in the following code.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
          &amp;lt;!--Rejoinder--&amp;gt;&lt;br /&gt;
         &amp;lt;% ['one', 'two', 'three'].each do |round| %&amp;gt;&lt;br /&gt;
      &amp;lt;% if @first_col_identifier == true %&amp;gt;&lt;br /&gt;
        &amp;lt;% @reviewer_name = r.user.fullname(session[:ip]) %&amp;gt;&lt;br /&gt;
        &amp;lt;%row_span = @assignment.varying_rubrics_by_round? ? (@rspan_round_one + @rspan_round_two + @rspan_round_three) : @rspan %&amp;gt;&lt;br /&gt;
        &amp;lt;%if row_span == 0 %&amp;gt;&lt;br /&gt;
          &amp;lt;tr&amp;gt;&amp;lt;td rowspan = &amp;lt;% 1 %&amp;gt;&amp;gt;&lt;br /&gt;
            &amp;lt;%= link_to @reviewer_name, :controller =&amp;gt; 'popup', :action =&amp;gt; 'reviewer_details_popup', :id =&amp;gt; r.id, :assignment_id =&amp;gt; @id %&amp;gt;&lt;br /&gt;
          &amp;lt;/td&amp;gt;&lt;br /&gt;
	  &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;%else %&amp;gt;&lt;br /&gt;
            &amp;lt;tr&amp;gt;&amp;lt;td rowspan= &amp;lt;%= @assignment.varying_rubrics_by_round? ? (@rspan_round_one + @rspan_round_two + @rspan_round_three) : @rspan %&amp;gt;&amp;gt;&lt;br /&gt;
              &amp;lt;%= link_to @reviewer_name, :controller =&amp;gt; 'popup', :action =&amp;gt; 'reviewer_details_popup', :id =&amp;gt; r.id, :assignment_id =&amp;gt; @id %&amp;gt;&lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;%end %&amp;gt;&lt;br /&gt;
          &amp;lt;% @first_col_identifier = false %&amp;gt;&lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Verify dropdown performance in dropdown''' ===&lt;br /&gt;
No changes were made for this issue.&lt;br /&gt;
&lt;br /&gt;
The issues presented were:&lt;br /&gt;
* In Chrome on Windows 10, the dropdown has a tendency to freeze up especially after one report has been viewed. This issue needs to be reproduced and fixed &lt;br /&gt;
&lt;br /&gt;
The &amp;quot;freezing dropdown&amp;quot; bug described in this issue was unable to be reproduced as described. Supposedly, there existed an issue with the &amp;quot;View Reports&amp;quot; page's dropdown menu freezing when accessing it from a Chrome browser on Windows 10; however, all attempts to achieve this same behavior were met with failure, and only the expected, normal behavior was observed. For the sake of thoroughness, attempts to reproduce the bug were carried out on three different machines all running Chrome on Windows 10, and on each machine, the environment was created in two different ways: First by running the Expertiza server from a local VM using VirtualBox, and then by running it from an NCSU VCL instance. In none of the described cases did the dropdown ever freeze or otherwise malfunction; therefore, it has been decided that this bug will be dismissed.&lt;br /&gt;
&lt;br /&gt;
== '''Test Plan''' ==&lt;br /&gt;
=== '''Functional Testing''' ===&lt;br /&gt;
&lt;br /&gt;
==== '''Sort Headers in View Review Report''' ====&lt;br /&gt;
&lt;br /&gt;
# Login as a instructor.&lt;br /&gt;
# Click Assignments tab next to Courses&lt;br /&gt;
# Select the &amp;quot;View reports&amp;quot; icon for the assignment for which you want to see the report of&lt;br /&gt;
# Select &amp;quot;Review Report&amp;quot;  from the dropdown&lt;br /&gt;
# Sort the table by clicking on headers, ensure all headers are sorted properly.&lt;br /&gt;
&lt;br /&gt;
==== '''Sort/Modify Headers in Author Feedback report''' ====&lt;br /&gt;
&lt;br /&gt;
# Login as a instructor.&lt;br /&gt;
# Click Assignments tab next to Courses&lt;br /&gt;
# Select the &amp;quot;View Reports&amp;quot; icon for the assignment for which you want to see the report of&lt;br /&gt;
# Select &amp;quot;Author Feedback Report&amp;quot; from the dropdown&lt;br /&gt;
# Sort the table by clicking on headers, ensure all headers are sorted properly and header names have been changed to appropriate values.&lt;br /&gt;
&lt;br /&gt;
==== '''Sort Teammate Review report''' ====&lt;br /&gt;
&lt;br /&gt;
# Login as a instructor.&lt;br /&gt;
# Click Assignments tab next to Courses&lt;br /&gt;
# Select the &amp;quot;View Reports&amp;quot; icon for the assignment for which you want to see the report of&lt;br /&gt;
# Select &amp;quot;Teammate Review Report&amp;quot; from the dropdown&lt;br /&gt;
# Sort the table by clicking on headers, ensure all headers are sorted properly.&lt;br /&gt;
&lt;br /&gt;
==== '''Add Header to View Reports''' ====&lt;br /&gt;
&lt;br /&gt;
# Login as a instructor.&lt;br /&gt;
# Click Assignments tab next to Courses&lt;br /&gt;
# Select the &amp;quot;View Reports&amp;quot; icon for the assignment for which you want to see the report of&lt;br /&gt;
# Ensure the header is present on the page for the assignment name.&lt;br /&gt;
&lt;br /&gt;
==== '''Fix formatting in Author Feedback Reports''' ====&lt;br /&gt;
&lt;br /&gt;
# Login as a instructor.&lt;br /&gt;
# Click Assignments tab next to Courses&lt;br /&gt;
# Select the &amp;quot;View Reports&amp;quot; icon for the assignment for which you want to see the report of&lt;br /&gt;
# Select &amp;quot;Author feedback reports&amp;quot; from the dropdown&lt;br /&gt;
# Verify format for student names when no feedback has been submitted.&lt;br /&gt;
&lt;br /&gt;
==== '''Verify dropdown performance in dropdown''' ====&lt;br /&gt;
&lt;br /&gt;
# Login as a instructor.&lt;br /&gt;
# Click Assignments tab next to Courses&lt;br /&gt;
# Select the &amp;quot;View Reports&amp;quot; icon for the assignment for which you want to see the report of&lt;br /&gt;
# Verify drop down does not freeze up in any scenario.&lt;br /&gt;
&lt;br /&gt;
== '''Team Information''' ==&lt;br /&gt;
Jamie Gachie&lt;br /&gt;
&lt;br /&gt;
Juan Martinez&lt;br /&gt;
&lt;br /&gt;
Koushik Shankar&lt;br /&gt;
&lt;br /&gt;
Anfernee Hubbert&lt;br /&gt;
&lt;br /&gt;
== '''References''' ==&lt;/div&gt;</summary>
		<author><name>Ahubber</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_-_E2018_sort_instructor_reports_by_name_ID_score_etc&amp;diff=134439</id>
		<title>CSC/ECE 517 Spring 2020 - E2018 sort instructor reports by name ID score etc</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_-_E2018_sort_instructor_reports_by_name_ID_score_etc&amp;diff=134439"/>
		<updated>2020-05-05T01:24:13Z</updated>

		<summary type="html">&lt;p&gt;Ahubber: /* Functional Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
&lt;br /&gt;
Expertiza is an open source web application project developed using Ruby on Rails framework. Let us list some of the functionalities that Expertiza allows us to do under different roles:&lt;br /&gt;
&lt;br /&gt;
As an Instructor:&lt;br /&gt;
We can create new assignments, edit the existing assignments, copy the assignments and also delete the assignment. The instructor can also add participants, reviewers to a particular assignment.&lt;br /&gt;
&lt;br /&gt;
As a Student:&lt;br /&gt;
They can form teams to work on various projects and also bid for the projects they would like to work on. They can also review other student's work and can give feedback on them. They can also submit various types of documents including the URLs and wiki pages for their project or assignment submission.&lt;br /&gt;
&lt;br /&gt;
== '''Problem Statement''' ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Expertiza allows instructors to view kinds of reports of assignments in their courses such as submissions, scores, and review reports. To improve the report views, some table columns such as team name, score, average should be made sortable by using the same existing sort library. &lt;br /&gt;
&lt;br /&gt;
=== '''What needs to be done''' ===&lt;br /&gt;
&lt;br /&gt;
==== '''Sort Headers in View Review Report''' ====&lt;br /&gt;
&lt;br /&gt;
For the &amp;quot;View Review Report&amp;quot; table, the columns &amp;quot;Reviewer&amp;quot; and &amp;quot;Metric&amp;quot; are sortable. Our goal is to make the remaining columns sortable.&amp;quot;Reviews done&amp;quot; should be sorted by the first number and then the second number, &amp;quot;Team Reviewed&amp;quot; should be sorted alphabetically and &amp;quot;Score awarded / Average Score&amp;quot; should be sorted in both ascending and design manner. Another issue with the current sorting method is that the sort buttons should be visible in all browsers.&lt;br /&gt;
&lt;br /&gt;
==== '''Sort/Modify Headers in Author Feedback report''' ====&lt;br /&gt;
&lt;br /&gt;
For the &amp;quot;Author Feedback report&amp;quot; table, the header names &amp;quot;Review response rejoined&amp;quot; and &amp;quot;Last rejoined to&amp;quot; should be changed to &amp;quot;Review responded to&amp;quot; and &amp;quot;Last responded at&amp;quot; respectively. Then all the columns in the table should be made sortable. Columns &amp;quot;Rejoinder&amp;quot; and &amp;quot;Review responded to&amp;quot; should be sorted as strings, &amp;quot;# author feedbacks done&amp;quot; as first number and second number and &amp;quot;Last responded at&amp;quot; as date.&lt;br /&gt;
&lt;br /&gt;
==== '''Sort Teammate Review report''' ====&lt;br /&gt;
&lt;br /&gt;
For the &amp;quot;Teammate Review report&amp;quot; table, the first 3 columns should be sorted as strings and the last column as date.&lt;br /&gt;
&lt;br /&gt;
==== '''Add Header to View Reports''' ====&lt;br /&gt;
&lt;br /&gt;
When a user clicks on &amp;quot;View Reports&amp;quot; for a particular assignment a page appears with a dropdown, however the page does not say what assignments reports are being viewed. We should add a header indicating the assignment name at the top.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== '''Fix formatting in Author Feedback Reports''' ====&lt;br /&gt;
&lt;br /&gt;
For &amp;quot;Author feedback reports&amp;quot; table when no feedback has been submitted, the names of students appear in a strange horizontal format. This formatting should be fixed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== '''Verify dropdown performance in dropdown''' ====&lt;br /&gt;
&lt;br /&gt;
In Chrome on Windows 10, the dropdown has a tendency to freeze up especially after one report has been viewed. This issue needs to be reproduced and fixed&lt;br /&gt;
&lt;br /&gt;
== '''Design''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Files Requiring Modification'''===&lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_review_report.html.erb (issue 1)&lt;br /&gt;
&lt;br /&gt;
This file contains the code which generates the review reports table. We will add a script which makes the columns in the table sortable. &lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_feedback_report.html.erb (issue 2)&lt;br /&gt;
&lt;br /&gt;
This file contains the code which generates the Feedback reports table. This gives us access to the column names which require change. Making the columns sortable will be done in this file.&lt;br /&gt;
&lt;br /&gt;
* app/helpers/review_mapping_helper.rb (issue 2)&lt;br /&gt;
&lt;br /&gt;
This file has code which generates the instance variables used by the Feedback reports table and it also creates the headers used by the reports table. Changes may be needed to the header to make the columns sortable.&lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_teammate_review_report.html.erb (issue 3)&lt;br /&gt;
&lt;br /&gt;
This file contains the code which generates the Teammates review reports table. We will add a script which makes the columns in the table sortable. &lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_review_report.html.erb (issue 4)&lt;br /&gt;
&lt;br /&gt;
This issue requires the assignment name to be displayed for the particular review report. We will use the set instance variables to display the assignment name.&lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_feedback_report.html.erb(issue 5)&lt;br /&gt;
&lt;br /&gt;
This file contains the code which generates the Feedback reports table. We will inspect the code to check what is causing the formatting issues.&lt;br /&gt;
&lt;br /&gt;
Issue 6 has to be reproduced and the point of error is yet to be determined&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Design Patterns aren't applicable to our project since all it involves is to make columns sortable and some isolated issues.&lt;br /&gt;
&lt;br /&gt;
== '''UML Design''' ==&lt;br /&gt;
[[File:Sort_UML.png]]&lt;br /&gt;
&lt;br /&gt;
== '''Solution''' ==&lt;br /&gt;
&lt;br /&gt;
We will be using tablesorter jQuery to sort the table. For table columns which have constraints on them for sorting, we will be creating custom scripts which tablesorter library supports to sort those columns. According to the problem type, we are supposed to perform three kinds of sorting. All these have one thing in common. Adding up the tablesorter script in the body before using them. After including the script, we are supposed to do some modifications in the table tag by including the class. Three types of scenario may arise:&lt;br /&gt;
&lt;br /&gt;
1) Sorting by columns alphabetically - To sort the columns alphabetically, the table-head attribute must include sorter-true class with it to enable the sorting alphabetically.&lt;br /&gt;
&lt;br /&gt;
2) Sorting by date - It includes adding of a date default format in the script to denote the sorter type that must be used to sort the column of the date.&lt;br /&gt;
&lt;br /&gt;
3) Sorting by the first number followed by the second number - It will require splitting up of the data into two parts separated by '/' and then sorting the first part, followed by the second part.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''jQuery tablesorter 2.0'''===&lt;br /&gt;
&lt;br /&gt;
* Multi-column sorting&lt;br /&gt;
* Multi-tbody sorting&lt;br /&gt;
* Parsers for sorting text, URIs, integers, currency, floats, IP addresses, dates (ISO, long and short formats), time. Add your own easily&lt;br /&gt;
* Support secondary &amp;quot;hidden&amp;quot; sorting (e.g., maintain alphabetical sort when sorting on other criteria)&lt;br /&gt;
* Extensibility via widget system&lt;br /&gt;
* Cross-browser: IE 6.0+, FF 2+, Safari 2.0+, Opera 9.0+&lt;br /&gt;
* Small code size&lt;br /&gt;
&lt;br /&gt;
== '''Solution Implemented''' ==&lt;br /&gt;
=== '''Sort Headers in View Review Report''' ===&lt;br /&gt;
All changes for this issue were made in the files:&lt;br /&gt;
&lt;br /&gt;
* /views/reports/review_report.html.erb&lt;br /&gt;
* /views/reports/_team_score_score_awarded.html.erb&lt;br /&gt;
&lt;br /&gt;
The changes required for the Review Report table were:&lt;br /&gt;
&lt;br /&gt;
* Make the &amp;quot;Reviews Done&amp;quot;, &amp;quot;Team Reviewed&amp;quot;, and &amp;quot;Score Awarded/Average Score&amp;quot; columns sortable.&lt;br /&gt;
&lt;br /&gt;
In most cases, the only real changes that needed to be made was modifying the class associated with some of the table headers in order to provide the respective column with sorting functionality, as displayed in the following code (added to review_report.html.erb:&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;th rowspan =&amp;quot;2&amp;quot; width=&amp;quot;16%&amp;quot; class=&amp;quot;sorter-true&amp;quot;&amp;gt;Reviewer &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th width=&amp;quot;10%&amp;quot; class=&amp;quot;sorter-false&amp;quot;&amp;gt;Reviews done&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th rowspan =&amp;quot;2&amp;quot; width=&amp;quot;10%&amp;quot; class=&amp;quot;sorter-true&amp;quot;&amp;gt;Reviews done&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th width=&amp;quot;24%&amp;quot; class=&amp;quot;sorter-false&amp;quot;&amp;gt;Team reviewed &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th rowspan =&amp;quot;2&amp;quot; width=&amp;quot;24%&amp;quot; class=&amp;quot;sorter-true&amp;quot;&amp;gt;Team reviewed &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th width=&amp;quot;6%&amp;quot; colspan=  &amp;quot;2&amp;quot; class=&amp;quot;sorter-false&amp;quot;&amp;gt;Scores&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th width=&amp;quot;13%&amp;quot; class=&amp;quot;sorter-true&amp;quot;&amp;gt;Metrics &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th rowspan =&amp;quot;2&amp;quot; width=&amp;quot;14%&amp;quot; class=&amp;quot;sorter-true&amp;quot;&amp;gt;Metrics &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th class=&amp;quot;sorter-false&amp;quot;&amp;gt;Assign grade and write comments &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th rowspan =&amp;quot;2&amp;quot; class=&amp;quot;sorter-false&amp;quot;&amp;gt;Assign grade and write comments &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr bgcolor='#CCCCCC'&amp;gt;&lt;br /&gt;
   &amp;lt;th width=&amp;quot;6%&amp;quot; class=&amp;quot;sorter-true&amp;quot;&amp;gt; Score Awarded &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&gt;
   &amp;lt;th width=&amp;quot;6%&amp;quot; class=&amp;quot;sorter-true&amp;quot;&amp;gt; AVG Score &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Implementing the sort on the score columns was a bit more involved, however, requiring some reworking of the HTML in order to have each bisection of the column sorted separately. The code added appears as follows:&lt;br /&gt;
&lt;br /&gt;
review_report.html.erb&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;!--Score awarded--&amp;gt;&lt;br /&gt;
          &amp;lt;td align='left'&amp;gt;&lt;br /&gt;
            &amp;lt;% @response_maps.each_with_index do |ri, index| %&amp;gt;&lt;br /&gt;
              &amp;lt;% if Team.where(id: ri.reviewee_id).length &amp;gt; 0 %&amp;gt;&lt;br /&gt;
                &amp;lt;% @team = Team.find(ri.reviewee_id) %&amp;gt;&lt;br /&gt;
                &amp;lt;%= render partial: 'team_score_score_awarded', locals: {bgcolor: @bgcolor, team_id: @team.id, reviewer_id: r.id} %&amp;gt;&lt;br /&gt;
              &amp;lt;% end %&amp;gt;&lt;br /&gt;
            &amp;lt;% end %&amp;gt;&lt;br /&gt;
          &amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;!--Avg. score--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
_team_score_score_awarded.html.erb&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;% if !@assignment.varying_rubrics_by_round? %&amp;gt;&lt;br /&gt;
      &amp;lt;\!--Score awarded--&amp;gt;&lt;br /&gt;
      &amp;lt;\div&amp;gt;&lt;br /&gt;
      &amp;lt;% if @review_scores[reviewer_id][team_id] != -1%&amp;gt;&lt;br /&gt;
          &amp;lt;%= @review_scores[reviewer_id][team_id].inspect %&amp;gt;%&lt;br /&gt;
      &amp;lt;% else %&amp;gt;&lt;br /&gt;
        --&lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &amp;lt;%else%&amp;gt;&lt;br /&gt;
      &amp;lt;\!--Assignments have vary_rubric_by_rounds--&amp;gt;&lt;br /&gt;
      &amp;lt;\!--Score awarded--&amp;gt;&lt;br /&gt;
      &amp;lt;% get_awarded_review_score(reviewer_id, team_id) %&amp;gt;&lt;br /&gt;
      &amp;lt;\div&amp;gt;&lt;br /&gt;
      &amp;lt;% (1..@assignment.num_review_rounds).each do |round| %&amp;gt;&lt;br /&gt;
          &amp;lt;% get_review_metrics(round, team_id) %&amp;gt;&lt;br /&gt;
              &amp;lt;%= @score_awarded = instance_variable_get(&amp;quot;@score_awarded_round_&amp;quot; + round.to_s) %&amp;gt;&lt;br /&gt;
              &amp;lt;%=  @score_awarded.tr('%','').to_i  %&amp;gt;&lt;br /&gt;
      &amp;lt;%end%&amp;gt;&lt;br /&gt;
      &amp;lt;\/div&amp;gt;&lt;br /&gt;
  &amp;lt;%end%&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Backslashes were added in order to keep the editor from parsing the HTML tags as actual tags)&lt;br /&gt;
&lt;br /&gt;
=== '''Sort/Modify Headers in Author Feedback report''' ===&lt;br /&gt;
&lt;br /&gt;
All changes for this issue were make in the file  /views/reports/_feedback_report.html.erb&lt;br /&gt;
&lt;br /&gt;
The changes required for Author Feedback table were - &lt;br /&gt;
&lt;br /&gt;
* Changing the header name “Review response rejoined” to “Review responded to” and “Last rejoined at” to “Last responded at”.&lt;br /&gt;
&lt;br /&gt;
This was easily fixed by renaming the Headers in the Authors Feedback Table.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;lt;thead&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;!-- class value decides whether the column should be sortable or not  --&amp;gt;&lt;br /&gt;
      &amp;lt;th width=&amp;quot;16%&amp;quot; class=&amp;quot;sorter-true&amp;quot;&amp;gt;Rejoinder &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th width=&amp;quot;14%&amp;quot; class=&amp;quot;sorter-true&amp;quot;&amp;gt;# author feedbacks done&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th width=&amp;quot;20%&amp;quot; class=&amp;quot;sorter-true&amp;quot;&amp;gt;Review responded to &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th width=&amp;quot;20%&amp;quot; class=&amp;quot;sorter-true&amp;quot;&amp;gt;Last responded at&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;/thead&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*  Sort “Rejoinder” and “Review responded to” as string (alphabetically), sort “#author feedbacks done” by the first number then the second number, and sort “Last responded at” as a date.&lt;br /&gt;
&lt;br /&gt;
As mentioned above, sorting tables was done using the table sorter plugin. In order to sort the columns 'Rejoinder', 'Review responded to' and 'Last responded at' no manual manual modification was required since tablesorter automatically detects strings and dates. For the column  '#author feedbacks done' we used a manual sorting function, which splits the string into two numbers and compares them for sort. The following script was added for the custom sort - &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        $(&amp;quot;#feedbackReportTable&amp;quot;).tablesorter({&lt;br /&gt;
            textSorter: {&lt;br /&gt;
                      1: function (a, b) {&lt;br /&gt;
                    // Checks for comparison when input is empty (no feedback has been given)&lt;br /&gt;
                    if (a.length == 0 &amp;amp;&amp;amp; b.length == 0){&lt;br /&gt;
                        return 0;&lt;br /&gt;
                    }&lt;br /&gt;
                    if (a.length == 0){&lt;br /&gt;
                        return -1;&lt;br /&gt;
                    }&lt;br /&gt;
                    if (b.length == 0){&lt;br /&gt;
                        return 1;&lt;br /&gt;
                    }&lt;br /&gt;
                     if (a === b) {&lt;br /&gt;
                         return 0;&lt;br /&gt;
                     }&lt;br /&gt;
                     //E1877: values split by &amp;quot;/&amp;quot;, to get the digits before and after it.&lt;br /&gt;
                     var res1 = a.split(&amp;quot;/&amp;quot;);&lt;br /&gt;
                     var res2 = b.split(&amp;quot;/&amp;quot;);&lt;br /&gt;
                     res1[1] = res1[1].split(&amp;quot; &amp;quot;)[0];&lt;br /&gt;
                     res2[1] = res2[1].split(&amp;quot; &amp;quot;)[0];&lt;br /&gt;
                     //E1877: comparison of int values&lt;br /&gt;
                     if(parseInt(res1[0])&amp;gt;parseInt(res2[0])){&lt;br /&gt;
                         return 1;&lt;br /&gt;
                     }&lt;br /&gt;
                     else if(parseInt(res1[0])&amp;lt;parseInt(res2[0])){&lt;br /&gt;
                         return -1;&lt;br /&gt;
                     }&lt;br /&gt;
                     else{&lt;br /&gt;
                         if(parseInt(res1[1])&amp;gt;parseInt(res2[1])){&lt;br /&gt;
                             return 1;&lt;br /&gt;
                         }&lt;br /&gt;
                         else if(parseInt(res1[1])&amp;lt;parseInt(res2[1])){&lt;br /&gt;
                             return -1;&lt;br /&gt;
                         }&lt;br /&gt;
                         else{&lt;br /&gt;
                             return 0;&lt;br /&gt;
                         }&lt;br /&gt;
                     }&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
         });&lt;br /&gt;
     });&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Even after the above changes, for some tables, the sort function did not work on any off the columns. This was because tablesorter by default is not compatible with rowspan (Having more than one element in a cell), which is the case for many tables. To solve this issue we made all the rows within a row the children rows of the first row. In this manner tablesorter only looks at the first value in a row when sorting a column. An example of this is presented below - &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
              &amp;lt;!--Last responded at--&amp;gt;&lt;br /&gt;
              &amp;lt;td bgcolor=&amp;lt;%= @bgcolor %&amp;gt; style=&amp;quot;color:#A90201&amp;quot; align = 'left'&amp;gt;No&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;tr class=&amp;quot;tablesorter-childRow&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the above snippet 'Last responded at' is the last column in the table, and after filling that column we open a new row to accommodate more values if present. We have made that new row a child row so that table sorter does not use that row in its sorting logic.&lt;br /&gt;
&lt;br /&gt;
=== '''Sort Teammate Review report''' ===&lt;br /&gt;
&lt;br /&gt;
All changes for this issue were made in the file /views/reports/_teammate_review_report.html.erb&lt;br /&gt;
&lt;br /&gt;
Changes needed for these issue were - &lt;br /&gt;
&lt;br /&gt;
* We have to sort the first 3 columns as a string and sort the last column as a date in the “Teammate Reviews” table&lt;br /&gt;
&lt;br /&gt;
Teamsorter is used to make the table sortable. Since it automatically detects dats and strings, no manual code was required.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    $(function () {&lt;br /&gt;
      /*Function for sorting the table */&lt;br /&gt;
      $(&amp;quot;#teammateReviewTable&amp;quot;).tablesorter({&lt;br /&gt;
&lt;br /&gt;
         dateFormat : &amp;quot;mmddyyyy&amp;quot;, // set the default date format&lt;br /&gt;
        sortList: [[0,0]] //  sort First Column by default when page loads&lt;br /&gt;
      });&lt;br /&gt;
    });&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As seen in author feedbacks table, even after the above changes, for some tables, the sort function did not work on any off the columns. This was because tablesorter by default is not compatible with rowspan (Having more than one element in a cell), which is the case for many tables. To solve this issue we made all the rows within a row the children rows of the first row. In this manner tablesorter only looks at the first value in a row when sorting a column. An example of this is presented below -&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
              &amp;lt;!--Last reviewed at--&amp;gt;&lt;br /&gt;
              &amp;lt;td bgcolor=&amp;lt;%= @bgcolor %&amp;gt; style=&amp;quot;color:#DD3300&amp;quot; align = 'left'&amp;gt;No&amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt;&amp;lt;tr class=&amp;quot;tablesorter-childRow&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the above snippet 'Last reviewed at' is the last column in the table, and after filling that column we open a new row to accommodate more values if present. We have made that new row a child row so that table sorter does not use that row in its sorting logic.&lt;br /&gt;
&lt;br /&gt;
=== '''Add Header to View Reports''' ===&lt;br /&gt;
All changes for this issue were made in the file /views/reports/response_report.html.haml&lt;br /&gt;
&lt;br /&gt;
Changes needed for this issue were:&lt;br /&gt;
* Add a header to the top of the &amp;quot;View Reports&amp;quot; page for each assignment&lt;br /&gt;
&lt;br /&gt;
This issue was trivial to resolve. It came down to adding the following three lines of haml to the top of the aforementioned file:&lt;br /&gt;
&lt;br /&gt;
  %h1&lt;br /&gt;
  Reports for&lt;br /&gt;
  = @assignment.name&lt;br /&gt;
&lt;br /&gt;
This added a header to the top of the &amp;quot;View Reports&amp;quot; page reading &amp;quot;Reports for &amp;lt;name of assignment&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== '''Fix formatting in Author Feedback Reports''' ===&lt;br /&gt;
&lt;br /&gt;
All changes for this issue were make in the file  /views/reports/_feedback_report.html.erb&lt;br /&gt;
&lt;br /&gt;
The issues presented were - &lt;br /&gt;
* For &amp;quot;Author feedback reports&amp;quot; table when no feedback has been submitted, the names of students appear in a strange horizontal format. This formatting should be fixed.&lt;br /&gt;
&lt;br /&gt;
We found that this problem arose from the fact that when users haven't submitted any feedback, they have their rowspan set to 0. This makes them all appear in a horizontal fashion. To fix this issue we added a condition where if the rowspan is seen to 0 then we manually set it to 1 so that it takes up its own row. This is shown in the following code.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
          &amp;lt;!--Rejoinder--&amp;gt;&lt;br /&gt;
         &amp;lt;% ['one', 'two', 'three'].each do |round| %&amp;gt;&lt;br /&gt;
      &amp;lt;% if @first_col_identifier == true %&amp;gt;&lt;br /&gt;
        &amp;lt;% @reviewer_name = r.user.fullname(session[:ip]) %&amp;gt;&lt;br /&gt;
        &amp;lt;%row_span = @assignment.varying_rubrics_by_round? ? (@rspan_round_one + @rspan_round_two + @rspan_round_three) : @rspan %&amp;gt;&lt;br /&gt;
        &amp;lt;%if row_span == 0 %&amp;gt;&lt;br /&gt;
          &amp;lt;tr&amp;gt;&amp;lt;td rowspan = &amp;lt;% 1 %&amp;gt;&amp;gt;&lt;br /&gt;
            &amp;lt;%= link_to @reviewer_name, :controller =&amp;gt; 'popup', :action =&amp;gt; 'reviewer_details_popup', :id =&amp;gt; r.id, :assignment_id =&amp;gt; @id %&amp;gt;&lt;br /&gt;
          &amp;lt;/td&amp;gt;&lt;br /&gt;
	  &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;%else %&amp;gt;&lt;br /&gt;
            &amp;lt;tr&amp;gt;&amp;lt;td rowspan= &amp;lt;%= @assignment.varying_rubrics_by_round? ? (@rspan_round_one + @rspan_round_two + @rspan_round_three) : @rspan %&amp;gt;&amp;gt;&lt;br /&gt;
              &amp;lt;%= link_to @reviewer_name, :controller =&amp;gt; 'popup', :action =&amp;gt; 'reviewer_details_popup', :id =&amp;gt; r.id, :assignment_id =&amp;gt; @id %&amp;gt;&lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;%end %&amp;gt;&lt;br /&gt;
          &amp;lt;% @first_col_identifier = false %&amp;gt;&lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Verify dropdown performance in dropdown''' ===&lt;br /&gt;
No changes were made for this issue.&lt;br /&gt;
&lt;br /&gt;
The issues presented were:&lt;br /&gt;
* In Chrome on Windows 10, the dropdown has a tendency to freeze up especially after one report has been viewed. This issue needs to be reproduced and fixed &lt;br /&gt;
&lt;br /&gt;
The &amp;quot;freezing dropdown&amp;quot; bug described in this issue was unable to be reproduced as described. Supposedly, there existed an issue with the &amp;quot;View Reports&amp;quot; page's dropdown menu freezing when accessing it from a Chrome browser on Windows 10; however, all attempts to achieve this same behavior were met with failure, and only the expected, normal behavior was observed. For the sake of thoroughness, attempts to reproduce the bug were carried out on three different machines all running Chrome on Windows 10, and on each machine, the environment was created in two different ways: First by running the Expertiza server from a local VM using VirtualBox, and then by running it from an NCSU VCL instance. In none of the described cases did the dropdown ever freeze or otherwise malfunction; therefore, it has been decided that this bug will be dismissed.&lt;br /&gt;
&lt;br /&gt;
== '''Test Plan''' ==&lt;br /&gt;
=== '''Functional Testing''' ===&lt;br /&gt;
&lt;br /&gt;
==== '''Sort Headers in View Review Report''' ====&lt;br /&gt;
&lt;br /&gt;
# Login as a instructor.&lt;br /&gt;
# Click Assignments tab next to Courses&lt;br /&gt;
# Select the &amp;quot;View reports&amp;quot; icon for the assignment for which you want to see the report of&lt;br /&gt;
# Select &amp;quot;Review Report&amp;quot;  from the dropdown&lt;br /&gt;
# Sort the table by clicking on headers, ensure all headers are sorted properly.&lt;br /&gt;
&lt;br /&gt;
==== '''Sort/Modify Headers in Author Feedback report''' ====&lt;br /&gt;
&lt;br /&gt;
# Login as a instructor.&lt;br /&gt;
# Click Assignments tab next to Courses&lt;br /&gt;
# Select the &amp;quot;View Reports&amp;quot; icon for the assignment for which you want to see the report of&lt;br /&gt;
# Select &amp;quot;Author Feedback Report&amp;quot; from the dropdown&lt;br /&gt;
# Sort the table by clicking on headers, ensure all headers are sorted properly and header names have been changed to appropriate values.&lt;br /&gt;
&lt;br /&gt;
==== '''Sort Teammate Review report''' ====&lt;br /&gt;
&lt;br /&gt;
# Login as a instructor.&lt;br /&gt;
# Click Assignments tab next to Courses&lt;br /&gt;
# Select the &amp;quot;View Reports&amp;quot; icon for the assignment for which you want to see the report of&lt;br /&gt;
# Select &amp;quot;Teammate Review Report&amp;quot; from the dropdown&lt;br /&gt;
# Sort the table by clicking on headers, ensure all headers are sorted properly.&lt;br /&gt;
&lt;br /&gt;
==== '''Add Header to View Reports''' ====&lt;br /&gt;
&lt;br /&gt;
# Login as a instructor.&lt;br /&gt;
# Click Assignments tab next to Courses&lt;br /&gt;
# Select the &amp;quot;View Reports&amp;quot; icon for the assignment for which you want to see the report of&lt;br /&gt;
# Ensure the header is present on the page for the assignment name.&lt;br /&gt;
&lt;br /&gt;
==== '''Fix formatting in Author Feedback Reports''' ====&lt;br /&gt;
&lt;br /&gt;
# Login as a instructor.&lt;br /&gt;
# Click Assignments tab next to Courses&lt;br /&gt;
# Select the &amp;quot;View Reports&amp;quot; icon for the assignment for which you want to see the report of&lt;br /&gt;
# Select &amp;quot;Author feedback reports&amp;quot; from the dropdown&lt;br /&gt;
# Verify format for student names when no feedback has been submitted.&lt;br /&gt;
&lt;br /&gt;
==== '''Verify dropdown performance in dropdown''' ====&lt;br /&gt;
&lt;br /&gt;
# Login as a instructor.&lt;br /&gt;
# Click Assignments tab next to Courses&lt;br /&gt;
# Select the &amp;quot;View Reports&amp;quot; icon for the assignment for which you want to see the report of&lt;br /&gt;
# Verify drop down does not freeze up in any scenario.&lt;br /&gt;
&lt;br /&gt;
== '''Team Information''' ==&lt;br /&gt;
Jamie Gachie&lt;br /&gt;
&lt;br /&gt;
Juan Martinez&lt;br /&gt;
&lt;br /&gt;
Koushik Shankar&lt;br /&gt;
&lt;br /&gt;
Anfernee Hubbert&lt;br /&gt;
&lt;br /&gt;
== '''References''' ==&lt;/div&gt;</summary>
		<author><name>Ahubber</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_-_E2018_sort_instructor_reports_by_name_ID_score_etc&amp;diff=134438</id>
		<title>CSC/ECE 517 Spring 2020 - E2018 sort instructor reports by name ID score etc</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_-_E2018_sort_instructor_reports_by_name_ID_score_etc&amp;diff=134438"/>
		<updated>2020-05-05T01:23:14Z</updated>

		<summary type="html">&lt;p&gt;Ahubber: /* Solution Implemented */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
&lt;br /&gt;
Expertiza is an open source web application project developed using Ruby on Rails framework. Let us list some of the functionalities that Expertiza allows us to do under different roles:&lt;br /&gt;
&lt;br /&gt;
As an Instructor:&lt;br /&gt;
We can create new assignments, edit the existing assignments, copy the assignments and also delete the assignment. The instructor can also add participants, reviewers to a particular assignment.&lt;br /&gt;
&lt;br /&gt;
As a Student:&lt;br /&gt;
They can form teams to work on various projects and also bid for the projects they would like to work on. They can also review other student's work and can give feedback on them. They can also submit various types of documents including the URLs and wiki pages for their project or assignment submission.&lt;br /&gt;
&lt;br /&gt;
== '''Problem Statement''' ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Expertiza allows instructors to view kinds of reports of assignments in their courses such as submissions, scores, and review reports. To improve the report views, some table columns such as team name, score, average should be made sortable by using the same existing sort library. &lt;br /&gt;
&lt;br /&gt;
=== '''What needs to be done''' ===&lt;br /&gt;
&lt;br /&gt;
==== '''Sort Headers in View Review Report''' ====&lt;br /&gt;
&lt;br /&gt;
For the &amp;quot;View Review Report&amp;quot; table, the columns &amp;quot;Reviewer&amp;quot; and &amp;quot;Metric&amp;quot; are sortable. Our goal is to make the remaining columns sortable.&amp;quot;Reviews done&amp;quot; should be sorted by the first number and then the second number, &amp;quot;Team Reviewed&amp;quot; should be sorted alphabetically and &amp;quot;Score awarded / Average Score&amp;quot; should be sorted in both ascending and design manner. Another issue with the current sorting method is that the sort buttons should be visible in all browsers.&lt;br /&gt;
&lt;br /&gt;
==== '''Sort/Modify Headers in Author Feedback report''' ====&lt;br /&gt;
&lt;br /&gt;
For the &amp;quot;Author Feedback report&amp;quot; table, the header names &amp;quot;Review response rejoined&amp;quot; and &amp;quot;Last rejoined to&amp;quot; should be changed to &amp;quot;Review responded to&amp;quot; and &amp;quot;Last responded at&amp;quot; respectively. Then all the columns in the table should be made sortable. Columns &amp;quot;Rejoinder&amp;quot; and &amp;quot;Review responded to&amp;quot; should be sorted as strings, &amp;quot;# author feedbacks done&amp;quot; as first number and second number and &amp;quot;Last responded at&amp;quot; as date.&lt;br /&gt;
&lt;br /&gt;
==== '''Sort Teammate Review report''' ====&lt;br /&gt;
&lt;br /&gt;
For the &amp;quot;Teammate Review report&amp;quot; table, the first 3 columns should be sorted as strings and the last column as date.&lt;br /&gt;
&lt;br /&gt;
==== '''Add Header to View Reports''' ====&lt;br /&gt;
&lt;br /&gt;
When a user clicks on &amp;quot;View Reports&amp;quot; for a particular assignment a page appears with a dropdown, however the page does not say what assignments reports are being viewed. We should add a header indicating the assignment name at the top.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== '''Fix formatting in Author Feedback Reports''' ====&lt;br /&gt;
&lt;br /&gt;
For &amp;quot;Author feedback reports&amp;quot; table when no feedback has been submitted, the names of students appear in a strange horizontal format. This formatting should be fixed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== '''Verify dropdown performance in dropdown''' ====&lt;br /&gt;
&lt;br /&gt;
In Chrome on Windows 10, the dropdown has a tendency to freeze up especially after one report has been viewed. This issue needs to be reproduced and fixed&lt;br /&gt;
&lt;br /&gt;
== '''Design''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Files Requiring Modification'''===&lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_review_report.html.erb (issue 1)&lt;br /&gt;
&lt;br /&gt;
This file contains the code which generates the review reports table. We will add a script which makes the columns in the table sortable. &lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_feedback_report.html.erb (issue 2)&lt;br /&gt;
&lt;br /&gt;
This file contains the code which generates the Feedback reports table. This gives us access to the column names which require change. Making the columns sortable will be done in this file.&lt;br /&gt;
&lt;br /&gt;
* app/helpers/review_mapping_helper.rb (issue 2)&lt;br /&gt;
&lt;br /&gt;
This file has code which generates the instance variables used by the Feedback reports table and it also creates the headers used by the reports table. Changes may be needed to the header to make the columns sortable.&lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_teammate_review_report.html.erb (issue 3)&lt;br /&gt;
&lt;br /&gt;
This file contains the code which generates the Teammates review reports table. We will add a script which makes the columns in the table sortable. &lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_review_report.html.erb (issue 4)&lt;br /&gt;
&lt;br /&gt;
This issue requires the assignment name to be displayed for the particular review report. We will use the set instance variables to display the assignment name.&lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_feedback_report.html.erb(issue 5)&lt;br /&gt;
&lt;br /&gt;
This file contains the code which generates the Feedback reports table. We will inspect the code to check what is causing the formatting issues.&lt;br /&gt;
&lt;br /&gt;
Issue 6 has to be reproduced and the point of error is yet to be determined&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Design Patterns aren't applicable to our project since all it involves is to make columns sortable and some isolated issues.&lt;br /&gt;
&lt;br /&gt;
== '''UML Design''' ==&lt;br /&gt;
[[File:Sort_UML.png]]&lt;br /&gt;
&lt;br /&gt;
== '''Solution''' ==&lt;br /&gt;
&lt;br /&gt;
We will be using tablesorter jQuery to sort the table. For table columns which have constraints on them for sorting, we will be creating custom scripts which tablesorter library supports to sort those columns. According to the problem type, we are supposed to perform three kinds of sorting. All these have one thing in common. Adding up the tablesorter script in the body before using them. After including the script, we are supposed to do some modifications in the table tag by including the class. Three types of scenario may arise:&lt;br /&gt;
&lt;br /&gt;
1) Sorting by columns alphabetically - To sort the columns alphabetically, the table-head attribute must include sorter-true class with it to enable the sorting alphabetically.&lt;br /&gt;
&lt;br /&gt;
2) Sorting by date - It includes adding of a date default format in the script to denote the sorter type that must be used to sort the column of the date.&lt;br /&gt;
&lt;br /&gt;
3) Sorting by the first number followed by the second number - It will require splitting up of the data into two parts separated by '/' and then sorting the first part, followed by the second part.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''jQuery tablesorter 2.0'''===&lt;br /&gt;
&lt;br /&gt;
* Multi-column sorting&lt;br /&gt;
* Multi-tbody sorting&lt;br /&gt;
* Parsers for sorting text, URIs, integers, currency, floats, IP addresses, dates (ISO, long and short formats), time. Add your own easily&lt;br /&gt;
* Support secondary &amp;quot;hidden&amp;quot; sorting (e.g., maintain alphabetical sort when sorting on other criteria)&lt;br /&gt;
* Extensibility via widget system&lt;br /&gt;
* Cross-browser: IE 6.0+, FF 2+, Safari 2.0+, Opera 9.0+&lt;br /&gt;
* Small code size&lt;br /&gt;
&lt;br /&gt;
== '''Solution Implemented''' ==&lt;br /&gt;
=== '''Sort Headers in View Review Report''' ===&lt;br /&gt;
All changes for this issue were made in the files:&lt;br /&gt;
&lt;br /&gt;
* /views/reports/review_report.html.erb&lt;br /&gt;
* /views/reports/_team_score_score_awarded.html.erb&lt;br /&gt;
&lt;br /&gt;
The changes required for the Review Report table were:&lt;br /&gt;
&lt;br /&gt;
* Make the &amp;quot;Reviews Done&amp;quot;, &amp;quot;Team Reviewed&amp;quot;, and &amp;quot;Score Awarded/Average Score&amp;quot; columns sortable.&lt;br /&gt;
&lt;br /&gt;
In most cases, the only real changes that needed to be made was modifying the class associated with some of the table headers in order to provide the respective column with sorting functionality, as displayed in the following code (added to review_report.html.erb:&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;th rowspan =&amp;quot;2&amp;quot; width=&amp;quot;16%&amp;quot; class=&amp;quot;sorter-true&amp;quot;&amp;gt;Reviewer &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th width=&amp;quot;10%&amp;quot; class=&amp;quot;sorter-false&amp;quot;&amp;gt;Reviews done&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th rowspan =&amp;quot;2&amp;quot; width=&amp;quot;10%&amp;quot; class=&amp;quot;sorter-true&amp;quot;&amp;gt;Reviews done&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th width=&amp;quot;24%&amp;quot; class=&amp;quot;sorter-false&amp;quot;&amp;gt;Team reviewed &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th rowspan =&amp;quot;2&amp;quot; width=&amp;quot;24%&amp;quot; class=&amp;quot;sorter-true&amp;quot;&amp;gt;Team reviewed &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th width=&amp;quot;6%&amp;quot; colspan=  &amp;quot;2&amp;quot; class=&amp;quot;sorter-false&amp;quot;&amp;gt;Scores&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th width=&amp;quot;13%&amp;quot; class=&amp;quot;sorter-true&amp;quot;&amp;gt;Metrics &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th rowspan =&amp;quot;2&amp;quot; width=&amp;quot;14%&amp;quot; class=&amp;quot;sorter-true&amp;quot;&amp;gt;Metrics &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th class=&amp;quot;sorter-false&amp;quot;&amp;gt;Assign grade and write comments &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th rowspan =&amp;quot;2&amp;quot; class=&amp;quot;sorter-false&amp;quot;&amp;gt;Assign grade and write comments &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr bgcolor='#CCCCCC'&amp;gt;&lt;br /&gt;
   &amp;lt;th width=&amp;quot;6%&amp;quot; class=&amp;quot;sorter-true&amp;quot;&amp;gt; Score Awarded &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&gt;
   &amp;lt;th width=&amp;quot;6%&amp;quot; class=&amp;quot;sorter-true&amp;quot;&amp;gt; AVG Score &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Implementing the sort on the score columns was a bit more involved, however, requiring some reworking of the HTML in order to have each bisection of the column sorted separately. The code added appears as follows:&lt;br /&gt;
&lt;br /&gt;
review_report.html.erb&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;!--Score awarded--&amp;gt;&lt;br /&gt;
          &amp;lt;td align='left'&amp;gt;&lt;br /&gt;
            &amp;lt;% @response_maps.each_with_index do |ri, index| %&amp;gt;&lt;br /&gt;
              &amp;lt;% if Team.where(id: ri.reviewee_id).length &amp;gt; 0 %&amp;gt;&lt;br /&gt;
                &amp;lt;% @team = Team.find(ri.reviewee_id) %&amp;gt;&lt;br /&gt;
                &amp;lt;%= render partial: 'team_score_score_awarded', locals: {bgcolor: @bgcolor, team_id: @team.id, reviewer_id: r.id} %&amp;gt;&lt;br /&gt;
              &amp;lt;% end %&amp;gt;&lt;br /&gt;
            &amp;lt;% end %&amp;gt;&lt;br /&gt;
          &amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;!--Avg. score--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
_team_score_score_awarded.html.erb&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;% if !@assignment.varying_rubrics_by_round? %&amp;gt;&lt;br /&gt;
      &amp;lt;\!--Score awarded--&amp;gt;&lt;br /&gt;
      &amp;lt;\div&amp;gt;&lt;br /&gt;
      &amp;lt;% if @review_scores[reviewer_id][team_id] != -1%&amp;gt;&lt;br /&gt;
          &amp;lt;%= @review_scores[reviewer_id][team_id].inspect %&amp;gt;%&lt;br /&gt;
      &amp;lt;% else %&amp;gt;&lt;br /&gt;
        --&lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &amp;lt;%else%&amp;gt;&lt;br /&gt;
      &amp;lt;\!--Assignments have vary_rubric_by_rounds--&amp;gt;&lt;br /&gt;
      &amp;lt;\!--Score awarded--&amp;gt;&lt;br /&gt;
      &amp;lt;% get_awarded_review_score(reviewer_id, team_id) %&amp;gt;&lt;br /&gt;
      &amp;lt;\div&amp;gt;&lt;br /&gt;
      &amp;lt;% (1..@assignment.num_review_rounds).each do |round| %&amp;gt;&lt;br /&gt;
          &amp;lt;% get_review_metrics(round, team_id) %&amp;gt;&lt;br /&gt;
              &amp;lt;%= @score_awarded = instance_variable_get(&amp;quot;@score_awarded_round_&amp;quot; + round.to_s) %&amp;gt;&lt;br /&gt;
              &amp;lt;%=  @score_awarded.tr('%','').to_i  %&amp;gt;&lt;br /&gt;
      &amp;lt;%end%&amp;gt;&lt;br /&gt;
      &amp;lt;\/div&amp;gt;&lt;br /&gt;
  &amp;lt;%end%&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Backslashes were added in order to keep the editor from parsing the HTML tags as actual tags)&lt;br /&gt;
&lt;br /&gt;
=== '''Sort/Modify Headers in Author Feedback report''' ===&lt;br /&gt;
&lt;br /&gt;
All changes for this issue were make in the file  /views/reports/_feedback_report.html.erb&lt;br /&gt;
&lt;br /&gt;
The changes required for Author Feedback table were - &lt;br /&gt;
&lt;br /&gt;
* Changing the header name “Review response rejoined” to “Review responded to” and “Last rejoined at” to “Last responded at”.&lt;br /&gt;
&lt;br /&gt;
This was easily fixed by renaming the Headers in the Authors Feedback Table.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;lt;thead&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;!-- class value decides whether the column should be sortable or not  --&amp;gt;&lt;br /&gt;
      &amp;lt;th width=&amp;quot;16%&amp;quot; class=&amp;quot;sorter-true&amp;quot;&amp;gt;Rejoinder &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th width=&amp;quot;14%&amp;quot; class=&amp;quot;sorter-true&amp;quot;&amp;gt;# author feedbacks done&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th width=&amp;quot;20%&amp;quot; class=&amp;quot;sorter-true&amp;quot;&amp;gt;Review responded to &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th width=&amp;quot;20%&amp;quot; class=&amp;quot;sorter-true&amp;quot;&amp;gt;Last responded at&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;/thead&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*  Sort “Rejoinder” and “Review responded to” as string (alphabetically), sort “#author feedbacks done” by the first number then the second number, and sort “Last responded at” as a date.&lt;br /&gt;
&lt;br /&gt;
As mentioned above, sorting tables was done using the table sorter plugin. In order to sort the columns 'Rejoinder', 'Review responded to' and 'Last responded at' no manual manual modification was required since tablesorter automatically detects strings and dates. For the column  '#author feedbacks done' we used a manual sorting function, which splits the string into two numbers and compares them for sort. The following script was added for the custom sort - &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        $(&amp;quot;#feedbackReportTable&amp;quot;).tablesorter({&lt;br /&gt;
            textSorter: {&lt;br /&gt;
                      1: function (a, b) {&lt;br /&gt;
                    // Checks for comparison when input is empty (no feedback has been given)&lt;br /&gt;
                    if (a.length == 0 &amp;amp;&amp;amp; b.length == 0){&lt;br /&gt;
                        return 0;&lt;br /&gt;
                    }&lt;br /&gt;
                    if (a.length == 0){&lt;br /&gt;
                        return -1;&lt;br /&gt;
                    }&lt;br /&gt;
                    if (b.length == 0){&lt;br /&gt;
                        return 1;&lt;br /&gt;
                    }&lt;br /&gt;
                     if (a === b) {&lt;br /&gt;
                         return 0;&lt;br /&gt;
                     }&lt;br /&gt;
                     //E1877: values split by &amp;quot;/&amp;quot;, to get the digits before and after it.&lt;br /&gt;
                     var res1 = a.split(&amp;quot;/&amp;quot;);&lt;br /&gt;
                     var res2 = b.split(&amp;quot;/&amp;quot;);&lt;br /&gt;
                     res1[1] = res1[1].split(&amp;quot; &amp;quot;)[0];&lt;br /&gt;
                     res2[1] = res2[1].split(&amp;quot; &amp;quot;)[0];&lt;br /&gt;
                     //E1877: comparison of int values&lt;br /&gt;
                     if(parseInt(res1[0])&amp;gt;parseInt(res2[0])){&lt;br /&gt;
                         return 1;&lt;br /&gt;
                     }&lt;br /&gt;
                     else if(parseInt(res1[0])&amp;lt;parseInt(res2[0])){&lt;br /&gt;
                         return -1;&lt;br /&gt;
                     }&lt;br /&gt;
                     else{&lt;br /&gt;
                         if(parseInt(res1[1])&amp;gt;parseInt(res2[1])){&lt;br /&gt;
                             return 1;&lt;br /&gt;
                         }&lt;br /&gt;
                         else if(parseInt(res1[1])&amp;lt;parseInt(res2[1])){&lt;br /&gt;
                             return -1;&lt;br /&gt;
                         }&lt;br /&gt;
                         else{&lt;br /&gt;
                             return 0;&lt;br /&gt;
                         }&lt;br /&gt;
                     }&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
         });&lt;br /&gt;
     });&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Even after the above changes, for some tables, the sort function did not work on any off the columns. This was because tablesorter by default is not compatible with rowspan (Having more than one element in a cell), which is the case for many tables. To solve this issue we made all the rows within a row the children rows of the first row. In this manner tablesorter only looks at the first value in a row when sorting a column. An example of this is presented below - &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
              &amp;lt;!--Last responded at--&amp;gt;&lt;br /&gt;
              &amp;lt;td bgcolor=&amp;lt;%= @bgcolor %&amp;gt; style=&amp;quot;color:#A90201&amp;quot; align = 'left'&amp;gt;No&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;tr class=&amp;quot;tablesorter-childRow&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the above snippet 'Last responded at' is the last column in the table, and after filling that column we open a new row to accommodate more values if present. We have made that new row a child row so that table sorter does not use that row in its sorting logic.&lt;br /&gt;
&lt;br /&gt;
=== '''Sort Teammate Review report''' ===&lt;br /&gt;
&lt;br /&gt;
All changes for this issue were made in the file /views/reports/_teammate_review_report.html.erb&lt;br /&gt;
&lt;br /&gt;
Changes needed for these issue were - &lt;br /&gt;
&lt;br /&gt;
* We have to sort the first 3 columns as a string and sort the last column as a date in the “Teammate Reviews” table&lt;br /&gt;
&lt;br /&gt;
Teamsorter is used to make the table sortable. Since it automatically detects dats and strings, no manual code was required.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    $(function () {&lt;br /&gt;
      /*Function for sorting the table */&lt;br /&gt;
      $(&amp;quot;#teammateReviewTable&amp;quot;).tablesorter({&lt;br /&gt;
&lt;br /&gt;
         dateFormat : &amp;quot;mmddyyyy&amp;quot;, // set the default date format&lt;br /&gt;
        sortList: [[0,0]] //  sort First Column by default when page loads&lt;br /&gt;
      });&lt;br /&gt;
    });&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As seen in author feedbacks table, even after the above changes, for some tables, the sort function did not work on any off the columns. This was because tablesorter by default is not compatible with rowspan (Having more than one element in a cell), which is the case for many tables. To solve this issue we made all the rows within a row the children rows of the first row. In this manner tablesorter only looks at the first value in a row when sorting a column. An example of this is presented below -&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
              &amp;lt;!--Last reviewed at--&amp;gt;&lt;br /&gt;
              &amp;lt;td bgcolor=&amp;lt;%= @bgcolor %&amp;gt; style=&amp;quot;color:#DD3300&amp;quot; align = 'left'&amp;gt;No&amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt;&amp;lt;tr class=&amp;quot;tablesorter-childRow&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the above snippet 'Last reviewed at' is the last column in the table, and after filling that column we open a new row to accommodate more values if present. We have made that new row a child row so that table sorter does not use that row in its sorting logic.&lt;br /&gt;
&lt;br /&gt;
=== '''Add Header to View Reports''' ===&lt;br /&gt;
All changes for this issue were made in the file /views/reports/response_report.html.haml&lt;br /&gt;
&lt;br /&gt;
Changes needed for this issue were:&lt;br /&gt;
* Add a header to the top of the &amp;quot;View Reports&amp;quot; page for each assignment&lt;br /&gt;
&lt;br /&gt;
This issue was trivial to resolve. It came down to adding the following three lines of haml to the top of the aforementioned file:&lt;br /&gt;
&lt;br /&gt;
  %h1&lt;br /&gt;
  Reports for&lt;br /&gt;
  = @assignment.name&lt;br /&gt;
&lt;br /&gt;
This added a header to the top of the &amp;quot;View Reports&amp;quot; page reading &amp;quot;Reports for &amp;lt;name of assignment&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== '''Fix formatting in Author Feedback Reports''' ===&lt;br /&gt;
&lt;br /&gt;
All changes for this issue were make in the file  /views/reports/_feedback_report.html.erb&lt;br /&gt;
&lt;br /&gt;
The issues presented were - &lt;br /&gt;
* For &amp;quot;Author feedback reports&amp;quot; table when no feedback has been submitted, the names of students appear in a strange horizontal format. This formatting should be fixed.&lt;br /&gt;
&lt;br /&gt;
We found that this problem arose from the fact that when users haven't submitted any feedback, they have their rowspan set to 0. This makes them all appear in a horizontal fashion. To fix this issue we added a condition where if the rowspan is seen to 0 then we manually set it to 1 so that it takes up its own row. This is shown in the following code.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
          &amp;lt;!--Rejoinder--&amp;gt;&lt;br /&gt;
         &amp;lt;% ['one', 'two', 'three'].each do |round| %&amp;gt;&lt;br /&gt;
      &amp;lt;% if @first_col_identifier == true %&amp;gt;&lt;br /&gt;
        &amp;lt;% @reviewer_name = r.user.fullname(session[:ip]) %&amp;gt;&lt;br /&gt;
        &amp;lt;%row_span = @assignment.varying_rubrics_by_round? ? (@rspan_round_one + @rspan_round_two + @rspan_round_three) : @rspan %&amp;gt;&lt;br /&gt;
        &amp;lt;%if row_span == 0 %&amp;gt;&lt;br /&gt;
          &amp;lt;tr&amp;gt;&amp;lt;td rowspan = &amp;lt;% 1 %&amp;gt;&amp;gt;&lt;br /&gt;
            &amp;lt;%= link_to @reviewer_name, :controller =&amp;gt; 'popup', :action =&amp;gt; 'reviewer_details_popup', :id =&amp;gt; r.id, :assignment_id =&amp;gt; @id %&amp;gt;&lt;br /&gt;
          &amp;lt;/td&amp;gt;&lt;br /&gt;
	  &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;%else %&amp;gt;&lt;br /&gt;
            &amp;lt;tr&amp;gt;&amp;lt;td rowspan= &amp;lt;%= @assignment.varying_rubrics_by_round? ? (@rspan_round_one + @rspan_round_two + @rspan_round_three) : @rspan %&amp;gt;&amp;gt;&lt;br /&gt;
              &amp;lt;%= link_to @reviewer_name, :controller =&amp;gt; 'popup', :action =&amp;gt; 'reviewer_details_popup', :id =&amp;gt; r.id, :assignment_id =&amp;gt; @id %&amp;gt;&lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;%end %&amp;gt;&lt;br /&gt;
          &amp;lt;% @first_col_identifier = false %&amp;gt;&lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Verify dropdown performance in dropdown''' ===&lt;br /&gt;
No changes were made for this issue.&lt;br /&gt;
&lt;br /&gt;
The issues presented were:&lt;br /&gt;
* In Chrome on Windows 10, the dropdown has a tendency to freeze up especially after one report has been viewed. This issue needs to be reproduced and fixed &lt;br /&gt;
&lt;br /&gt;
The &amp;quot;freezing dropdown&amp;quot; bug described in this issue was unable to be reproduced as described. Supposedly, there existed an issue with the &amp;quot;View Reports&amp;quot; page's dropdown menu freezing when accessing it from a Chrome browser on Windows 10; however, all attempts to achieve this same behavior were met with failure, and only the expected, normal behavior was observed. For the sake of thoroughness, attempts to reproduce the bug were carried out on three different machines all running Chrome on Windows 10, and on each machine, the environment was created in two different ways: First by running the Expertiza server from a local VM using VirtualBox, and then by running it from an NCSU VCL instance. In none of the described cases did the dropdown ever freeze or otherwise malfunction; therefore, it has been decided that this bug will be dismissed.&lt;br /&gt;
&lt;br /&gt;
== '''Test Plan''' ==&lt;br /&gt;
=== '''Functional Testing''' ===&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 1''' ====&lt;br /&gt;
&lt;br /&gt;
# Login as a instructor.&lt;br /&gt;
# Click Assignments tab next to Courses&lt;br /&gt;
# Select the &amp;quot;View reports&amp;quot; icon for the assignment for which you want to see the report of&lt;br /&gt;
# Select &amp;quot;Review Report&amp;quot;  from the dropdown&lt;br /&gt;
# Sort the table by clicking on headers, ensure all headers are sorted properly.&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 2''' ====&lt;br /&gt;
&lt;br /&gt;
# Login as a instructor.&lt;br /&gt;
# Click Assignments tab next to Courses&lt;br /&gt;
# Select the &amp;quot;View Reports&amp;quot; icon for the assignment for which you want to see the report of&lt;br /&gt;
# Select &amp;quot;Author Feedback Report&amp;quot; from the dropdown&lt;br /&gt;
# Sort the table by clicking on headers, ensure all headers are sorted properly and header names have been changed to appropriate values.&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 3''' ====&lt;br /&gt;
&lt;br /&gt;
# Login as a instructor.&lt;br /&gt;
# Click Assignments tab next to Courses&lt;br /&gt;
# Select the &amp;quot;View Reports&amp;quot; icon for the assignment for which you want to see the report of&lt;br /&gt;
# Select &amp;quot;Teammate Review Report&amp;quot; from the dropdown&lt;br /&gt;
# Sort the table by clicking on headers, ensure all headers are sorted properly.&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 4''' ====&lt;br /&gt;
&lt;br /&gt;
# Login as a instructor.&lt;br /&gt;
# Click Assignments tab next to Courses&lt;br /&gt;
# Select the &amp;quot;View Reports&amp;quot; icon for the assignment for which you want to see the report of&lt;br /&gt;
# Ensure the header is present on the page for the assignment name.&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 5''' ====&lt;br /&gt;
&lt;br /&gt;
# Login as a instructor.&lt;br /&gt;
# Click Assignments tab next to Courses&lt;br /&gt;
# Select the &amp;quot;View Reports&amp;quot; icon for the assignment for which you want to see the report of&lt;br /&gt;
# Select &amp;quot;Author feedback reports&amp;quot; from the dropdown&lt;br /&gt;
# Verify format for student names when no feedback has been submitted.&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 6''' ====&lt;br /&gt;
&lt;br /&gt;
# Login as a instructor.&lt;br /&gt;
# Click Assignments tab next to Courses&lt;br /&gt;
# Select the &amp;quot;View Reports&amp;quot; icon for the assignment for which you want to see the report of&lt;br /&gt;
# Verify drop down does not freeze up in any scenario.&lt;br /&gt;
&lt;br /&gt;
== '''Team Information''' ==&lt;br /&gt;
Jamie Gachie&lt;br /&gt;
&lt;br /&gt;
Juan Martinez&lt;br /&gt;
&lt;br /&gt;
Koushik Shankar&lt;br /&gt;
&lt;br /&gt;
Anfernee Hubbert&lt;br /&gt;
&lt;br /&gt;
== '''References''' ==&lt;/div&gt;</summary>
		<author><name>Ahubber</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_-_E2018_sort_instructor_reports_by_name_ID_score_etc&amp;diff=134426</id>
		<title>CSC/ECE 517 Spring 2020 - E2018 sort instructor reports by name ID score etc</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_-_E2018_sort_instructor_reports_by_name_ID_score_etc&amp;diff=134426"/>
		<updated>2020-05-04T18:58:42Z</updated>

		<summary type="html">&lt;p&gt;Ahubber: /* What needs to be done */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
&lt;br /&gt;
Expertiza is an open source web application project developed using Ruby on Rails framework. Let us list some of the functionalities that Expertiza allows us to do under different roles:&lt;br /&gt;
&lt;br /&gt;
As an Instructor:&lt;br /&gt;
We can create new assignments, edit the existing assignments, copy the assignments and also delete the assignment. The instructor can also add participants, reviewers to a particular assignment.&lt;br /&gt;
&lt;br /&gt;
As a Student:&lt;br /&gt;
They can form teams to work on various projects and also bid for the projects they would like to work on. They can also review other student's work and can give feedback on them. They can also submit various types of documents including the URLs and wiki pages for their project or assignment submission.&lt;br /&gt;
&lt;br /&gt;
== '''Problem Statement''' ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Expertiza allows instructors to view kinds of reports of assignments in their courses such as submissions, scores, and review reports. To improve the report views, some table columns such as team name, score, average should be made sortable by using the same existing sort library. &lt;br /&gt;
&lt;br /&gt;
=== '''What needs to be done''' ===&lt;br /&gt;
&lt;br /&gt;
==== '''Sort Headers in View Review Report''' ====&lt;br /&gt;
&lt;br /&gt;
For the &amp;quot;View Review Report&amp;quot; table, the columns &amp;quot;Reviewer&amp;quot; and &amp;quot;Metric&amp;quot; are sortable. Our goal is to make the remaining columns sortable.&amp;quot;Reviews done&amp;quot; should be sorted by the first number and then the second number, &amp;quot;Team Reviewed&amp;quot; should be sorted alphabetically and &amp;quot;Score awarded / Average Score&amp;quot; should be sorted in both ascending and design manner. Another issue with the current sorting method is that the sort buttons should be visible in all browsers.&lt;br /&gt;
&lt;br /&gt;
==== '''Sort/Modify Headers in Author Feedback report''' ====&lt;br /&gt;
&lt;br /&gt;
For the &amp;quot;Author Feedback report&amp;quot; table, the header names &amp;quot;Review response rejoined&amp;quot; and &amp;quot;Last rejoined to&amp;quot; should be changed to &amp;quot;Review responded to&amp;quot; and &amp;quot;Last responded at&amp;quot; respectively. Then all the columns in the table should be made sortable. Columns &amp;quot;Rejoinder&amp;quot; and &amp;quot;Review responded to&amp;quot; should be sorted as strings, &amp;quot;# author feedbacks done&amp;quot; as first number and second number and &amp;quot;Last responded at&amp;quot; as date.&lt;br /&gt;
&lt;br /&gt;
==== '''Sort Teammate Review report''' ====&lt;br /&gt;
&lt;br /&gt;
For the &amp;quot;Teammate Review report&amp;quot; table, the first 3 columns should be sorted as strings and the last column as date.&lt;br /&gt;
&lt;br /&gt;
==== '''Add Header to View Reports''' ====&lt;br /&gt;
&lt;br /&gt;
When a user clicks on &amp;quot;View Reports&amp;quot; for a particular assignment a page appears with a dropdown, however the page does not say what assignments reports are being viewed. We should add a header indicating the assignment name at the top.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== '''Fix formatting in Author Feedback Reports''' ====&lt;br /&gt;
&lt;br /&gt;
For &amp;quot;Author feedback reports&amp;quot; table when no feedback has been submitted, the names of students appear in a strange horizontal format. This formatting should be fixed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== '''Verify dropdown performance in dropdown''' ====&lt;br /&gt;
&lt;br /&gt;
In Chrome on Windows 10, the dropdown has a tendency to freeze up especially after one report has been viewed. This issue needs to be reproduced and fixed&lt;br /&gt;
&lt;br /&gt;
== '''Design''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Files Requiring Modification'''===&lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_review_report.html.erb (issue 1)&lt;br /&gt;
&lt;br /&gt;
This file contains the code which generates the review reports table. We will add a script which makes the columns in the table sortable. &lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_feedback_report.html.erb (issue 2)&lt;br /&gt;
&lt;br /&gt;
This file contains the code which generates the Feedback reports table. This gives us access to the column names which require change. Making the columns sortable will be done in this file.&lt;br /&gt;
&lt;br /&gt;
* app/helpers/review_mapping_helper.rb (issue 2)&lt;br /&gt;
&lt;br /&gt;
This file has code which generates the instance variables used by the Feedback reports table and it also creates the headers used by the reports table. Changes may be needed to the header to make the columns sortable.&lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_teammate_review_report.html.erb (issue 3)&lt;br /&gt;
&lt;br /&gt;
This file contains the code which generates the Teammates review reports table. We will add a script which makes the columns in the table sortable. &lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_review_report.html.erb (issue 4)&lt;br /&gt;
&lt;br /&gt;
This issue requires the assignment name to be displayed for the particular review report. We will use the set instance variables to display the assignment name.&lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_feedback_report.html.erb(issue 5)&lt;br /&gt;
&lt;br /&gt;
This file contains the code which generates the Feedback reports table. We will inspect the code to check what is causing the formatting issues.&lt;br /&gt;
&lt;br /&gt;
Issue 6 has to be reproduced and the point of error is yet to be determined&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Design Patterns aren't applicable to our project since all it involves is to make columns sortable and some isolated issues.&lt;br /&gt;
&lt;br /&gt;
== '''UML Design''' ==&lt;br /&gt;
[[File:Sort_UML.png]]&lt;br /&gt;
&lt;br /&gt;
== '''Solution''' ==&lt;br /&gt;
&lt;br /&gt;
We will be using tablesorter jQuery to sort the table. For table columns which have constraints on them for sorting, we will be creating custom scripts which tablesorter library supports to sort those columns. According to the problem type, we are supposed to perform three kinds of sorting. All these have one thing in common. Adding up the tablesorter script in the body before using them. After including the script, we are supposed to do some modifications in the table tag by including the class. Three types of scenario may arise:&lt;br /&gt;
&lt;br /&gt;
1) Sorting by columns alphabetically - To sort the columns alphabetically, the table-head attribute must include sorter-true class with it to enable the sorting alphabetically.&lt;br /&gt;
&lt;br /&gt;
2) Sorting by date - It includes adding of a date default format in the script to denote the sorter type that must be used to sort the column of the date.&lt;br /&gt;
&lt;br /&gt;
3) Sorting by the first number followed by the second number - It will require splitting up of the data into two parts separated by '/' and then sorting the first part, followed by the second part.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''jQuery tablesorter 2.0'''===&lt;br /&gt;
&lt;br /&gt;
* Multi-column sorting&lt;br /&gt;
* Multi-tbody sorting&lt;br /&gt;
* Parsers for sorting text, URIs, integers, currency, floats, IP addresses, dates (ISO, long and short formats), time. Add your own easily&lt;br /&gt;
* Support secondary &amp;quot;hidden&amp;quot; sorting (e.g., maintain alphabetical sort when sorting on other criteria)&lt;br /&gt;
* Extensibility via widget system&lt;br /&gt;
* Cross-browser: IE 6.0+, FF 2+, Safari 2.0+, Opera 9.0+&lt;br /&gt;
* Small code size&lt;br /&gt;
&lt;br /&gt;
== '''Solution Implemented''' ==&lt;br /&gt;
=== '''Issue 1''' ===&lt;br /&gt;
All changes for this issue were made in the files:&lt;br /&gt;
&lt;br /&gt;
* /views/reports/review_report.html.erb&lt;br /&gt;
* /views/reports/_team_score_score_awarded.html.erb&lt;br /&gt;
&lt;br /&gt;
The changes required for the Review Report table were:&lt;br /&gt;
&lt;br /&gt;
* Make the &amp;quot;Reviews Done&amp;quot;, &amp;quot;Team Reviewed&amp;quot;, and &amp;quot;Score Awarded/Average Score&amp;quot; columns sortable.&lt;br /&gt;
&lt;br /&gt;
In most cases, the only real changes that needed to be made was modifying the class associated with some of the table headers in order to provide the respective column with sorting functionality, as displayed in the following code (added to review_report.html.erb:&lt;br /&gt;
&lt;br /&gt;
      &amp;lt;th rowspan =&amp;quot;2&amp;quot; width=&amp;quot;16%&amp;quot; class=&amp;quot;sorter-true&amp;quot;&amp;gt;Reviewer &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th width=&amp;quot;10%&amp;quot; class=&amp;quot;sorter-false&amp;quot;&amp;gt;Reviews done&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th rowspan =&amp;quot;2&amp;quot; width=&amp;quot;10%&amp;quot; class=&amp;quot;sorter-true&amp;quot;&amp;gt;Reviews done&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th width=&amp;quot;24%&amp;quot; class=&amp;quot;sorter-false&amp;quot;&amp;gt;Team reviewed &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th rowspan =&amp;quot;2&amp;quot; width=&amp;quot;24%&amp;quot; class=&amp;quot;sorter-true&amp;quot;&amp;gt;Team reviewed &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th width=&amp;quot;6%&amp;quot; colspan=  &amp;quot;2&amp;quot; class=&amp;quot;sorter-false&amp;quot;&amp;gt;Scores&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th width=&amp;quot;13%&amp;quot; class=&amp;quot;sorter-true&amp;quot;&amp;gt;Metrics &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th rowspan =&amp;quot;2&amp;quot; width=&amp;quot;14%&amp;quot; class=&amp;quot;sorter-true&amp;quot;&amp;gt;Metrics &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th class=&amp;quot;sorter-false&amp;quot;&amp;gt;Assign grade and write comments &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th rowspan =&amp;quot;2&amp;quot; class=&amp;quot;sorter-false&amp;quot;&amp;gt;Assign grade and write comments &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;tr bgcolor='#CCCCCC'&amp;gt;&lt;br /&gt;
   &amp;lt;th width=&amp;quot;6%&amp;quot; class=&amp;quot;sorter-true&amp;quot;&amp;gt; Score Awarded &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt; &lt;br /&gt;
   &amp;lt;th width=&amp;quot;6%&amp;quot; class=&amp;quot;sorter-true&amp;quot;&amp;gt; AVG Score &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Implementing the sort on the score columns was a bit more involved, however, requiring some reworking of the HTML in order to have each bisection of the column sorted separately. The code added appears as follows:&lt;br /&gt;
&lt;br /&gt;
review_report.html.erb&lt;br /&gt;
&lt;br /&gt;
          &amp;lt;!--Score awarded--&amp;gt;&lt;br /&gt;
          &amp;lt;td align='left'&amp;gt;&lt;br /&gt;
            &amp;lt;% @response_maps.each_with_index do |ri, index| %&amp;gt;&lt;br /&gt;
              &amp;lt;% if Team.where(id: ri.reviewee_id).length &amp;gt; 0 %&amp;gt;&lt;br /&gt;
                &amp;lt;% @team = Team.find(ri.reviewee_id) %&amp;gt;&lt;br /&gt;
                &amp;lt;%= render partial: 'team_score_score_awarded', locals: {bgcolor: @bgcolor, team_id: @team.id, reviewer_id: r.id} %&amp;gt;&lt;br /&gt;
              &amp;lt;% end %&amp;gt;&lt;br /&gt;
            &amp;lt;% end %&amp;gt;&lt;br /&gt;
          &amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;!--Avg. score--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
_team_score_score_awarded.html.erb&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;% if !@assignment.varying_rubrics_by_round? %&amp;gt;&lt;br /&gt;
      &amp;lt;\!--Score awarded--&amp;gt;&lt;br /&gt;
      &amp;lt;\div&amp;gt;&lt;br /&gt;
      &amp;lt;% if @review_scores[reviewer_id][team_id] != -1%&amp;gt;&lt;br /&gt;
          &amp;lt;%= @review_scores[reviewer_id][team_id].inspect %&amp;gt;%&lt;br /&gt;
      &amp;lt;% else %&amp;gt;&lt;br /&gt;
        --&lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
  &amp;lt;%else%&amp;gt;&lt;br /&gt;
      &amp;lt;\!--Assignments have vary_rubric_by_rounds--&amp;gt;&lt;br /&gt;
      &amp;lt;\!--Score awarded--&amp;gt;&lt;br /&gt;
      &amp;lt;% get_awarded_review_score(reviewer_id, team_id) %&amp;gt;&lt;br /&gt;
      &amp;lt;\div&amp;gt;&lt;br /&gt;
      &amp;lt;% (1..@assignment.num_review_rounds).each do |round| %&amp;gt;&lt;br /&gt;
          &amp;lt;% get_review_metrics(round, team_id) %&amp;gt;&lt;br /&gt;
              &amp;lt;%= @score_awarded = instance_variable_get(&amp;quot;@score_awarded_round_&amp;quot; + round.to_s) %&amp;gt;&lt;br /&gt;
              &amp;lt;%=  @score_awarded.tr('%','').to_i  %&amp;gt;&lt;br /&gt;
      &amp;lt;%end%&amp;gt;&lt;br /&gt;
      &amp;lt;\/div&amp;gt;&lt;br /&gt;
  &amp;lt;%end%&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Backslashes were added in order to keep the editor from parsing the HTML tags as actual tags)&lt;br /&gt;
&lt;br /&gt;
=== '''Issue 2''' ===&lt;br /&gt;
&lt;br /&gt;
All changes for this issue were make in the file  /views/reports/_feedback_report.html.erb&lt;br /&gt;
&lt;br /&gt;
The changes required for Author Feedback table were - &lt;br /&gt;
&lt;br /&gt;
* Changing the header name “Review response rejoined” to “Review responded to” and “Last rejoined at” to “Last responded at”.&lt;br /&gt;
&lt;br /&gt;
This was easily fixed by renaming the Headers in the Authors Feedback Table.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;lt;thead&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;!-- class value decides whether the column should be sortable or not  --&amp;gt;&lt;br /&gt;
      &amp;lt;th width=&amp;quot;16%&amp;quot; class=&amp;quot;sorter-true&amp;quot;&amp;gt;Rejoinder &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th width=&amp;quot;14%&amp;quot; class=&amp;quot;sorter-true&amp;quot;&amp;gt;# author feedbacks done&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th width=&amp;quot;20%&amp;quot; class=&amp;quot;sorter-true&amp;quot;&amp;gt;Review responded to &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;th width=&amp;quot;20%&amp;quot; class=&amp;quot;sorter-true&amp;quot;&amp;gt;Last responded at&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;/thead&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*  Sort “Rejoinder” and “Review responded to” as string (alphabetically), sort “#author feedbacks done” by the first number then the second number, and sort “Last responded at” as a date.&lt;br /&gt;
&lt;br /&gt;
As mentioned above, sorting tables was done using the table sorter plugin. In order to sort the columns 'Rejoinder', 'Review responded to' and 'Last responded at' no manual manual modification was required since tablesorter automatically detects strings and dates. For the column  '#author feedbacks done' we used a manual sorting function, which splits the string into two numbers and compares them for sort. The following script was added for the custom sort - &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        $(&amp;quot;#feedbackReportTable&amp;quot;).tablesorter({&lt;br /&gt;
            textSorter: {&lt;br /&gt;
                      1: function (a, b) {&lt;br /&gt;
                    // Checks for comparison when input is empty (no feedback has been given)&lt;br /&gt;
                    if (a.length == 0 &amp;amp;&amp;amp; b.length == 0){&lt;br /&gt;
                        return 0;&lt;br /&gt;
                    }&lt;br /&gt;
                    if (a.length == 0){&lt;br /&gt;
                        return -1;&lt;br /&gt;
                    }&lt;br /&gt;
                    if (b.length == 0){&lt;br /&gt;
                        return 1;&lt;br /&gt;
                    }&lt;br /&gt;
                     if (a === b) {&lt;br /&gt;
                         return 0;&lt;br /&gt;
                     }&lt;br /&gt;
                     //E1877: values split by &amp;quot;/&amp;quot;, to get the digits before and after it.&lt;br /&gt;
                     var res1 = a.split(&amp;quot;/&amp;quot;);&lt;br /&gt;
                     var res2 = b.split(&amp;quot;/&amp;quot;);&lt;br /&gt;
                     res1[1] = res1[1].split(&amp;quot; &amp;quot;)[0];&lt;br /&gt;
                     res2[1] = res2[1].split(&amp;quot; &amp;quot;)[0];&lt;br /&gt;
                     //E1877: comparison of int values&lt;br /&gt;
                     if(parseInt(res1[0])&amp;gt;parseInt(res2[0])){&lt;br /&gt;
                         return 1;&lt;br /&gt;
                     }&lt;br /&gt;
                     else if(parseInt(res1[0])&amp;lt;parseInt(res2[0])){&lt;br /&gt;
                         return -1;&lt;br /&gt;
                     }&lt;br /&gt;
                     else{&lt;br /&gt;
                         if(parseInt(res1[1])&amp;gt;parseInt(res2[1])){&lt;br /&gt;
                             return 1;&lt;br /&gt;
                         }&lt;br /&gt;
                         else if(parseInt(res1[1])&amp;lt;parseInt(res2[1])){&lt;br /&gt;
                             return -1;&lt;br /&gt;
                         }&lt;br /&gt;
                         else{&lt;br /&gt;
                             return 0;&lt;br /&gt;
                         }&lt;br /&gt;
                     }&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
         });&lt;br /&gt;
     });&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Even after the above changes, for some tables, the sort function did not work on any off the columns. This was because tablesorter by default is not compatible with rowspan (Having more than one element in a cell), which is the case for many tables. To solve this issue we made all the rows within a row the children rows of the first row. In this manner tablesorter only looks at the first value in a row when sorting a column. An example of this is presented below - &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
              &amp;lt;!--Last responded at--&amp;gt;&lt;br /&gt;
              &amp;lt;td bgcolor=&amp;lt;%= @bgcolor %&amp;gt; style=&amp;quot;color:#A90201&amp;quot; align = 'left'&amp;gt;No&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;tr class=&amp;quot;tablesorter-childRow&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the above snippet 'Last responded at' is the last column in the table, and after filling that column we open a new row to accommodate more values if present. We have made that new row a child row so that table sorter does not use that row in its sorting logic.&lt;br /&gt;
&lt;br /&gt;
=== '''Issue 3''' ===&lt;br /&gt;
&lt;br /&gt;
All changes for this issue were made in the file /views/reports/_teammate_review_report.html.erb&lt;br /&gt;
&lt;br /&gt;
Changes needed for these issue were - &lt;br /&gt;
&lt;br /&gt;
* We have to sort the first 3 columns as a string and sort the last column as a date in the “Teammate Reviews” table&lt;br /&gt;
&lt;br /&gt;
Teamsorter is used to make the table sortable. Since it automatically detects dats and strings, no manual code was required.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    $(function () {&lt;br /&gt;
      /*Function for sorting the table */&lt;br /&gt;
      $(&amp;quot;#teammateReviewTable&amp;quot;).tablesorter({&lt;br /&gt;
&lt;br /&gt;
         dateFormat : &amp;quot;mmddyyyy&amp;quot;, // set the default date format&lt;br /&gt;
        sortList: [[0,0]] //  sort First Column by default when page loads&lt;br /&gt;
      });&lt;br /&gt;
    });&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As seen in author feedbacks table, even after the above changes, for some tables, the sort function did not work on any off the columns. This was because tablesorter by default is not compatible with rowspan (Having more than one element in a cell), which is the case for many tables. To solve this issue we made all the rows within a row the children rows of the first row. In this manner tablesorter only looks at the first value in a row when sorting a column. An example of this is presented below -&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
              &amp;lt;!--Last reviewed at--&amp;gt;&lt;br /&gt;
              &amp;lt;td bgcolor=&amp;lt;%= @bgcolor %&amp;gt; style=&amp;quot;color:#DD3300&amp;quot; align = 'left'&amp;gt;No&amp;lt;/td&amp;gt; &amp;lt;/tr&amp;gt;&amp;lt;tr class=&amp;quot;tablesorter-childRow&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the above snippet 'Last reviewed at' is the last column in the table, and after filling that column we open a new row to accommodate more values if present. We have made that new row a child row so that table sorter does not use that row in its sorting logic.&lt;br /&gt;
&lt;br /&gt;
=== '''Issue 4''' ===&lt;br /&gt;
All changes for this issue were made in the file /views/reports/response_report.html.haml&lt;br /&gt;
&lt;br /&gt;
Changes needed for this issue were:&lt;br /&gt;
* Add a header to the top of the &amp;quot;View Reports&amp;quot; page for each assignment&lt;br /&gt;
&lt;br /&gt;
This issue was trivial to resolve. It came down to adding the following three lines of haml to the top of the aforementioned file:&lt;br /&gt;
&lt;br /&gt;
  %h1&lt;br /&gt;
  Reports for&lt;br /&gt;
  = @assignment.name&lt;br /&gt;
&lt;br /&gt;
This added a header to the top of the &amp;quot;View Reports&amp;quot; page reading &amp;quot;Reports for &amp;lt;name of assignment&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== '''Issue 5''' ===&lt;br /&gt;
&lt;br /&gt;
All changes for this issue were make in the file  /views/reports/_feedback_report.html.erb&lt;br /&gt;
&lt;br /&gt;
The issues presented were - &lt;br /&gt;
* For &amp;quot;Author feedback reports&amp;quot; table when no feedback has been submitted, the names of students appear in a strange horizontal format. This formatting should be fixed.&lt;br /&gt;
&lt;br /&gt;
We found that this problem arose from the fact that when users haven't submitted any feedback, they have their rowspan set to 0. This makes them all appear in a horizontal fashion. To fix this issue we added a condition where if the rowspan is seen to 0 then we manually set it to 1 so that it takes up its own row. This is shown in the following code.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
          &amp;lt;!--Rejoinder--&amp;gt;&lt;br /&gt;
         &amp;lt;% ['one', 'two', 'three'].each do |round| %&amp;gt;&lt;br /&gt;
      &amp;lt;% if @first_col_identifier == true %&amp;gt;&lt;br /&gt;
        &amp;lt;% @reviewer_name = r.user.fullname(session[:ip]) %&amp;gt;&lt;br /&gt;
        &amp;lt;%row_span = @assignment.varying_rubrics_by_round? ? (@rspan_round_one + @rspan_round_two + @rspan_round_three) : @rspan %&amp;gt;&lt;br /&gt;
        &amp;lt;%if row_span == 0 %&amp;gt;&lt;br /&gt;
          &amp;lt;tr&amp;gt;&amp;lt;td rowspan = &amp;lt;% 1 %&amp;gt;&amp;gt;&lt;br /&gt;
            &amp;lt;%= link_to @reviewer_name, :controller =&amp;gt; 'popup', :action =&amp;gt; 'reviewer_details_popup', :id =&amp;gt; r.id, :assignment_id =&amp;gt; @id %&amp;gt;&lt;br /&gt;
          &amp;lt;/td&amp;gt;&lt;br /&gt;
	  &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;%else %&amp;gt;&lt;br /&gt;
            &amp;lt;tr&amp;gt;&amp;lt;td rowspan= &amp;lt;%= @assignment.varying_rubrics_by_round? ? (@rspan_round_one + @rspan_round_two + @rspan_round_three) : @rspan %&amp;gt;&amp;gt;&lt;br /&gt;
              &amp;lt;%= link_to @reviewer_name, :controller =&amp;gt; 'popup', :action =&amp;gt; 'reviewer_details_popup', :id =&amp;gt; r.id, :assignment_id =&amp;gt; @id %&amp;gt;&lt;br /&gt;
            &amp;lt;/td&amp;gt;&lt;br /&gt;
          &amp;lt;%end %&amp;gt;&lt;br /&gt;
          &amp;lt;% @first_col_identifier = false %&amp;gt;&lt;br /&gt;
      &amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Issue 6''' ===&lt;br /&gt;
No changes were made for this issue.&lt;br /&gt;
&lt;br /&gt;
The issues presented were:&lt;br /&gt;
* In Chrome on Windows 10, the dropdown has a tendency to freeze up especially after one report has been viewed. This issue needs to be reproduced and fixed &lt;br /&gt;
&lt;br /&gt;
The &amp;quot;freezing dropdown&amp;quot; bug described in this issue was unable to be reproduced as described. Supposedly, there existed an issue with the &amp;quot;View Reports&amp;quot; page's dropdown menu freezing when accessing it from a Chrome browser on Windows 10; however, all attempts to achieve this same behavior were met with failure, and only the expected, normal behavior was observed. For the sake of thoroughness, attempts to reproduce the bug were carried out on three different machines all running Chrome on Windows 10, and on each machine, the environment was created in two different ways: First by running the Expertiza server from a local VM using VirtualBox, and then by running it from an NCSU VCL instance. In none of the described cases did the dropdown ever freeze or otherwise malfunction; therefore, it has been decided that this bug will be dismissed.&lt;br /&gt;
&lt;br /&gt;
== '''Test Plan''' ==&lt;br /&gt;
=== '''Functional Testing''' ===&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 1''' ====&lt;br /&gt;
&lt;br /&gt;
# Login as a instructor.&lt;br /&gt;
# Click Assignments tab next to Courses&lt;br /&gt;
# Select the &amp;quot;View reports&amp;quot; icon for the assignment for which you want to see the report of&lt;br /&gt;
# Select &amp;quot;Review Report&amp;quot;  from the dropdown&lt;br /&gt;
# Sort the table by clicking on headers, ensure all headers are sorted properly.&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 2''' ====&lt;br /&gt;
&lt;br /&gt;
# Login as a instructor.&lt;br /&gt;
# Click Assignments tab next to Courses&lt;br /&gt;
# Select the &amp;quot;View Reports&amp;quot; icon for the assignment for which you want to see the report of&lt;br /&gt;
# Select &amp;quot;Author Feedback Report&amp;quot; from the dropdown&lt;br /&gt;
# Sort the table by clicking on headers, ensure all headers are sorted properly and header names have been changed to appropriate values.&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 3''' ====&lt;br /&gt;
&lt;br /&gt;
# Login as a instructor.&lt;br /&gt;
# Click Assignments tab next to Courses&lt;br /&gt;
# Select the &amp;quot;View Reports&amp;quot; icon for the assignment for which you want to see the report of&lt;br /&gt;
# Select &amp;quot;Teammate Review Report&amp;quot; from the dropdown&lt;br /&gt;
# Sort the table by clicking on headers, ensure all headers are sorted properly.&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 4''' ====&lt;br /&gt;
&lt;br /&gt;
# Login as a instructor.&lt;br /&gt;
# Click Assignments tab next to Courses&lt;br /&gt;
# Select the &amp;quot;View Reports&amp;quot; icon for the assignment for which you want to see the report of&lt;br /&gt;
# Ensure the header is present on the page for the assignment name.&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 5''' ====&lt;br /&gt;
&lt;br /&gt;
# Login as a instructor.&lt;br /&gt;
# Click Assignments tab next to Courses&lt;br /&gt;
# Select the &amp;quot;View Reports&amp;quot; icon for the assignment for which you want to see the report of&lt;br /&gt;
# Select &amp;quot;Author feedback reports&amp;quot; from the dropdown&lt;br /&gt;
# Verify format for student names when no feedback has been submitted.&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 6''' ====&lt;br /&gt;
&lt;br /&gt;
# Login as a instructor.&lt;br /&gt;
# Click Assignments tab next to Courses&lt;br /&gt;
# Select the &amp;quot;View Reports&amp;quot; icon for the assignment for which you want to see the report of&lt;br /&gt;
# Verify drop down does not freeze up in any scenario.&lt;br /&gt;
&lt;br /&gt;
== '''Team Information''' ==&lt;br /&gt;
Jamie Gachie&lt;br /&gt;
&lt;br /&gt;
Juan Martinez&lt;br /&gt;
&lt;br /&gt;
Koushik Shankar&lt;br /&gt;
&lt;br /&gt;
Anfernee Hubbert&lt;br /&gt;
&lt;br /&gt;
== '''References''' ==&lt;/div&gt;</summary>
		<author><name>Ahubber</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_-_E2018_sort_instructor_reports_by_name_ID_score_etc&amp;diff=133837</id>
		<title>CSC/ECE 517 Spring 2020 - E2018 sort instructor reports by name ID score etc</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_-_E2018_sort_instructor_reports_by_name_ID_score_etc&amp;diff=133837"/>
		<updated>2020-04-24T16:07:32Z</updated>

		<summary type="html">&lt;p&gt;Ahubber: /* Test Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
&lt;br /&gt;
Expertiza is an open source web application project developed using Ruby on Rails framework. Let us list some of the functionalities that Expertiza allows us to do under different roles:&lt;br /&gt;
&lt;br /&gt;
As an Instructor:&lt;br /&gt;
We can create new assignments, edit the existing assignments, copy the assignments and also delete the assignment. The instructor can also add participants, reviewers to a particular assignment.&lt;br /&gt;
&lt;br /&gt;
As a Student:&lt;br /&gt;
They can form teams to work on various projects and also bid for the projects they would like to work on. They can also review other student's work and can give feedback on them. They can also submit various types of documents including the URLs and wiki pages for their project or assignment submission.&lt;br /&gt;
&lt;br /&gt;
== '''Problem Statement''' ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Expertiza allows instructors to view kinds of reports of assignments in their courses such as submissions, scores, and review reports. To improve the report views, some table columns such as team name, score, average should be made sortable by using the same existing sort library. &lt;br /&gt;
&lt;br /&gt;
=== '''What needs to be done''' ===&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 1''' ====&lt;br /&gt;
&lt;br /&gt;
For the &amp;quot;View Review Report&amp;quot; table, the columns &amp;quot;Reviewer&amp;quot; and &amp;quot;Metric&amp;quot; are sortable. Our goal is to make the remaining columns sortable.&amp;quot;Reviews done&amp;quot; should be sorted by the first number and then the second number, &amp;quot;Team Reviewed&amp;quot; should be sorted alphabetically and &amp;quot;Score awarded / Average Score&amp;quot; should be sorted in both ascending and design manner. Another issue with the current sorting method is that the sort buttons should be visible in all browsers.&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 2''' ====&lt;br /&gt;
&lt;br /&gt;
For the &amp;quot;Author Feedback report&amp;quot; table, the header names &amp;quot;Review response rejoined&amp;quot; and &amp;quot;Last rejoined to&amp;quot; should be changed to &amp;quot;Review responded to&amp;quot; and &amp;quot;Last responded at&amp;quot; respectively. Then all the columns in the table should be made sortable. Columns &amp;quot;Rejoinder&amp;quot; and &amp;quot;Review responded to&amp;quot; should be sorted as strings, &amp;quot;# author feedbacks done&amp;quot; as first number and second number and &amp;quot;Last responded at&amp;quot; as date.&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 3''' ====&lt;br /&gt;
&lt;br /&gt;
For the &amp;quot;Teammate Review report&amp;quot; table, the first 3 columns should be sorted as strings and the last column as date.&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 4''' ====&lt;br /&gt;
&lt;br /&gt;
When a user clicks on &amp;quot;View Reports&amp;quot; for a particular assignment a page appears with a dropdown however the page does not say what assignments reports are being viewed. We should add a header indicating the assignment name at the top.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 5''' ====&lt;br /&gt;
&lt;br /&gt;
For &amp;quot;Author feedback reports&amp;quot; table when no feedback has been submitted, the names of students appear in a strange horizontal format. This formatting should be fixed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 6''' ====&lt;br /&gt;
&lt;br /&gt;
In Chrome on Windows 10, the dropdown has a tendency to freeze up especially after one report has been viewed. This issue needs to be reproduced and fixed&lt;br /&gt;
&lt;br /&gt;
== '''Design''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Files Requiring Modification'''===&lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_review_report.html.erb (issue 1)&lt;br /&gt;
&lt;br /&gt;
This file contains the code which generates the review reports table. We will add a script which makes the columns in the table sortable. &lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_feedback_report.html.erb (issue 2)&lt;br /&gt;
&lt;br /&gt;
This file contains the code which generates the Feedback reports table. This gives us access to the column names which require change. Making the columns sortable will be done in this file.&lt;br /&gt;
&lt;br /&gt;
* app/helpers/review_mapping_helper.rb (issue 2)&lt;br /&gt;
&lt;br /&gt;
This file has code which generates the instance variables used by the Feedback reports table and it also creates the headers used by the reports table. Changes may be needed to the header to make the columns sortable.&lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_teammate_review_report.html.erb (issue 3)&lt;br /&gt;
&lt;br /&gt;
This file contains the code which generates the Teammates review reports table. We will add a script which makes the columns in the table sortable. &lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_review_report.html.erb (issue 4)&lt;br /&gt;
&lt;br /&gt;
This issue requires the assignment name to be displayed for the particular review report. We will use the set instance variables to display the assignment name.&lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_feedback_report.html.erb(issue 5)&lt;br /&gt;
&lt;br /&gt;
This file contains the code which generates the Feedback reports table. We will inspect the code to check what is causing the formatting issues.&lt;br /&gt;
&lt;br /&gt;
Issue 6 has to be reproduced and the point of error is yet to be determined&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Design Patterns aren't applicable to our project since all it involves is to make columns sortable and some isolated issues.&lt;br /&gt;
&lt;br /&gt;
== '''UML Design''' ==&lt;br /&gt;
[[File:Sort_UML.png]]&lt;br /&gt;
&lt;br /&gt;
== '''Test Plan''' ==&lt;br /&gt;
=== '''Automated Testing'''===&lt;br /&gt;
&lt;br /&gt;
For this project, we will be using [http://rspec.info/ RSpec] to handle automated testing where relevant. [http://rspec.info/ RSpec] is a behaviour-driven development framework written in Ruby to test Ruby code. In this project, we will use [http://rspec.info/ RSpec] to create unit tests and verify any new methods that are committed to Expertiza from this contribution.&lt;br /&gt;
&lt;br /&gt;
=== '''Functional Testing''' ===&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 1''' ====&lt;br /&gt;
&lt;br /&gt;
# Login as a instructor.&lt;br /&gt;
# Click Assignments tab next to Courses&lt;br /&gt;
# Select the &amp;quot;View review report&amp;quot; icon for the assignment for which you want to see the report of&lt;br /&gt;
# Sort the table by clicking on headers, ensure all headers are sorted properly.&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 2''' ====&lt;br /&gt;
&lt;br /&gt;
# Login as a instructor.&lt;br /&gt;
# Click Assignments tab next to Courses&lt;br /&gt;
# Select the &amp;quot;Author Feedback report&amp;quot; icon for the assignment for which you want to see the report of&lt;br /&gt;
# Sort the table by clicking on headers, ensure all headers are sorted properly and header names have been changed to appropriate values.&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 3''' ====&lt;br /&gt;
&lt;br /&gt;
# Login as a instructor.&lt;br /&gt;
# Click Assignments tab next to Courses&lt;br /&gt;
# Select the &amp;quot;Teammate Review report&amp;quot; icon for the assignment for which you want to see the report of&lt;br /&gt;
# Sort the table by clicking on headers, ensure all headers are sorted properly.&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 4''' ====&lt;br /&gt;
&lt;br /&gt;
# Login as a instructor.&lt;br /&gt;
# Click Assignments tab next to Courses&lt;br /&gt;
# Select the &amp;quot;View Reports&amp;quot; icon for the assignment for which you want to see the report of&lt;br /&gt;
# Ensure the header is present on the page for the assignment name.&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 5''' ====&lt;br /&gt;
&lt;br /&gt;
# Login as a instructor.&lt;br /&gt;
# Click Assignments tab next to Courses&lt;br /&gt;
# Select the &amp;quot;Author feedback reports&amp;quot; icon for the assignment for which you want to see the report of&lt;br /&gt;
# Verify format for student names when no feedback has been submitted.&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 6''' ====&lt;br /&gt;
&lt;br /&gt;
# Login as a instructor.&lt;br /&gt;
# Click Assignments tab next to Courses&lt;br /&gt;
# Select the &amp;quot;View Reports&amp;quot; icon for the assignment for which you want to see the report of&lt;br /&gt;
# Verify drop down does not freeze up in any scenario.&lt;br /&gt;
&lt;br /&gt;
== '''Team Information''' ==&lt;br /&gt;
Jamie Gachie&lt;br /&gt;
&lt;br /&gt;
Juan Martinez&lt;br /&gt;
&lt;br /&gt;
Koushik Shankar&lt;br /&gt;
&lt;br /&gt;
Anfernee Hubbert&lt;br /&gt;
&lt;br /&gt;
== '''References''' ==&lt;/div&gt;</summary>
		<author><name>Ahubber</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_-_E2018_sort_instructor_reports_by_name_ID_score_etc&amp;diff=133836</id>
		<title>CSC/ECE 517 Spring 2020 - E2018 sort instructor reports by name ID score etc</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_-_E2018_sort_instructor_reports_by_name_ID_score_etc&amp;diff=133836"/>
		<updated>2020-04-24T16:07:11Z</updated>

		<summary type="html">&lt;p&gt;Ahubber: /* Issue 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
&lt;br /&gt;
Expertiza is an open source web application project developed using Ruby on Rails framework. Let us list some of the functionalities that Expertiza allows us to do under different roles:&lt;br /&gt;
&lt;br /&gt;
As an Instructor:&lt;br /&gt;
We can create new assignments, edit the existing assignments, copy the assignments and also delete the assignment. The instructor can also add participants, reviewers to a particular assignment.&lt;br /&gt;
&lt;br /&gt;
As a Student:&lt;br /&gt;
They can form teams to work on various projects and also bid for the projects they would like to work on. They can also review other student's work and can give feedback on them. They can also submit various types of documents including the URLs and wiki pages for their project or assignment submission.&lt;br /&gt;
&lt;br /&gt;
== '''Problem Statement''' ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Expertiza allows instructors to view kinds of reports of assignments in their courses such as submissions, scores, and review reports. To improve the report views, some table columns such as team name, score, average should be made sortable by using the same existing sort library. &lt;br /&gt;
&lt;br /&gt;
=== '''What needs to be done''' ===&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 1''' ====&lt;br /&gt;
&lt;br /&gt;
For the &amp;quot;View Review Report&amp;quot; table, the columns &amp;quot;Reviewer&amp;quot; and &amp;quot;Metric&amp;quot; are sortable. Our goal is to make the remaining columns sortable.&amp;quot;Reviews done&amp;quot; should be sorted by the first number and then the second number, &amp;quot;Team Reviewed&amp;quot; should be sorted alphabetically and &amp;quot;Score awarded / Average Score&amp;quot; should be sorted in both ascending and design manner. Another issue with the current sorting method is that the sort buttons should be visible in all browsers.&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 2''' ====&lt;br /&gt;
&lt;br /&gt;
For the &amp;quot;Author Feedback report&amp;quot; table, the header names &amp;quot;Review response rejoined&amp;quot; and &amp;quot;Last rejoined to&amp;quot; should be changed to &amp;quot;Review responded to&amp;quot; and &amp;quot;Last responded at&amp;quot; respectively. Then all the columns in the table should be made sortable. Columns &amp;quot;Rejoinder&amp;quot; and &amp;quot;Review responded to&amp;quot; should be sorted as strings, &amp;quot;# author feedbacks done&amp;quot; as first number and second number and &amp;quot;Last responded at&amp;quot; as date.&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 3''' ====&lt;br /&gt;
&lt;br /&gt;
For the &amp;quot;Teammate Review report&amp;quot; table, the first 3 columns should be sorted as strings and the last column as date.&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 4''' ====&lt;br /&gt;
&lt;br /&gt;
When a user clicks on &amp;quot;View Reports&amp;quot; for a particular assignment a page appears with a dropdown however the page does not say what assignments reports are being viewed. We should add a header indicating the assignment name at the top.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 5''' ====&lt;br /&gt;
&lt;br /&gt;
For &amp;quot;Author feedback reports&amp;quot; table when no feedback has been submitted, the names of students appear in a strange horizontal format. This formatting should be fixed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 6''' ====&lt;br /&gt;
&lt;br /&gt;
In Chrome on Windows 10, the dropdown has a tendency to freeze up especially after one report has been viewed. This issue needs to be reproduced and fixed&lt;br /&gt;
&lt;br /&gt;
== '''Design''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Files Requiring Modification'''===&lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_review_report.html.erb (issue 1)&lt;br /&gt;
&lt;br /&gt;
This file contains the code which generates the review reports table. We will add a script which makes the columns in the table sortable. &lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_feedback_report.html.erb (issue 2)&lt;br /&gt;
&lt;br /&gt;
This file contains the code which generates the Feedback reports table. This gives us access to the column names which require change. Making the columns sortable will be done in this file.&lt;br /&gt;
&lt;br /&gt;
* app/helpers/review_mapping_helper.rb (issue 2)&lt;br /&gt;
&lt;br /&gt;
This file has code which generates the instance variables used by the Feedback reports table and it also creates the headers used by the reports table. Changes may be needed to the header to make the columns sortable.&lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_teammate_review_report.html.erb (issue 3)&lt;br /&gt;
&lt;br /&gt;
This file contains the code which generates the Teammates review reports table. We will add a script which makes the columns in the table sortable. &lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_review_report.html.erb (issue 4)&lt;br /&gt;
&lt;br /&gt;
This issue requires the assignment name to be displayed for the particular review report. We will use the set instance variables to display the assignment name.&lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_feedback_report.html.erb(issue 5)&lt;br /&gt;
&lt;br /&gt;
This file contains the code which generates the Feedback reports table. We will inspect the code to check what is causing the formatting issues.&lt;br /&gt;
&lt;br /&gt;
Issue 6 has to be reproduced and the point of error is yet to be determined&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Design Patterns aren't applicable to our project since all it involves is to make columns sortable and some isolated issues.&lt;br /&gt;
&lt;br /&gt;
== '''UML Design''' ==&lt;br /&gt;
[[File:Sort_UML.png]]&lt;br /&gt;
&lt;br /&gt;
== '''Test Plan''' ==&lt;br /&gt;
=== '''Automated Testing'''===&lt;br /&gt;
&lt;br /&gt;
For this project, we will be using [http://rspec.info/ RSpec] to handle automated testing where relevant. [http://rspec.info/ RSpec] is a behaviour-driven development framework written in Ruby to test Ruby code. In this project, we will use [http://rspec.info/ RSpec] to create unit tests and verify any new methods that are committed to Expertiza from this contribution.&lt;br /&gt;
&lt;br /&gt;
=== '''Functional Testing''' ===&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 1''' ====&lt;br /&gt;
&lt;br /&gt;
# Login as a instructor.&lt;br /&gt;
# Click Assignments tab next to Courses&lt;br /&gt;
# Select the &amp;quot;View review report&amp;quot; icon for the assignment for which you want to see the report of&lt;br /&gt;
# Sort the table by clicking on headers, ensure all headers are sorted properly.&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 2''' ====&lt;br /&gt;
&lt;br /&gt;
# Login as a super_admininstrator2.&lt;br /&gt;
# Click Assignments tab next to Courses&lt;br /&gt;
# Select the &amp;quot;Author Feedback report&amp;quot; icon for the assignment for which you want to see the report of&lt;br /&gt;
# Sort the table by clicking on headers, ensure all headers are sorted properly and header names have been changed to appropriate values.&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 3''' ====&lt;br /&gt;
&lt;br /&gt;
# Login as a super_admininstrator2.&lt;br /&gt;
# Click Assignments tab next to Courses&lt;br /&gt;
# Select the &amp;quot;Teammate Review report&amp;quot; icon for the assignment for which you want to see the report of&lt;br /&gt;
# Sort the table by clicking on headers, ensure all headers are sorted properly.&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 4''' ====&lt;br /&gt;
&lt;br /&gt;
# Login as a super_admininstrator2.&lt;br /&gt;
# Click Assignments tab next to Courses&lt;br /&gt;
# Select the &amp;quot;View Reports&amp;quot; icon for the assignment for which you want to see the report of&lt;br /&gt;
# Ensure the header is present on the page for the assignment name.&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 5''' ====&lt;br /&gt;
&lt;br /&gt;
# Login as a super_admininstrator2.&lt;br /&gt;
# Click Assignments tab next to Courses&lt;br /&gt;
# Select the &amp;quot;Author feedback reports&amp;quot; icon for the assignment for which you want to see the report of&lt;br /&gt;
# Verify format for student names when no feedback has been submitted.&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 6''' ====&lt;br /&gt;
&lt;br /&gt;
# Login as a super_admininstrator2.&lt;br /&gt;
# Click Assignments tab next to Courses&lt;br /&gt;
# Select the &amp;quot;View Reports&amp;quot; icon for the assignment for which you want to see the report of&lt;br /&gt;
# Verify dropdown does not freeze up in any scenario.&lt;br /&gt;
&lt;br /&gt;
== '''Team Information''' ==&lt;br /&gt;
Jamie Gachie&lt;br /&gt;
&lt;br /&gt;
Juan Martinez&lt;br /&gt;
&lt;br /&gt;
Koushik Shankar&lt;br /&gt;
&lt;br /&gt;
Anfernee Hubbert&lt;br /&gt;
&lt;br /&gt;
== '''References''' ==&lt;/div&gt;</summary>
		<author><name>Ahubber</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_-_E2018_sort_instructor_reports_by_name_ID_score_etc&amp;diff=133239</id>
		<title>CSC/ECE 517 Spring 2020 - E2018 sort instructor reports by name ID score etc</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_-_E2018_sort_instructor_reports_by_name_ID_score_etc&amp;diff=133239"/>
		<updated>2020-04-13T19:03:25Z</updated>

		<summary type="html">&lt;p&gt;Ahubber: /* Functional Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
&lt;br /&gt;
Expertiza is an open source web application project developed using Ruby on Rails framework. Let us list some of the functionalities that Expertiza allows us to do under different roles:&lt;br /&gt;
&lt;br /&gt;
As an Instructor:&lt;br /&gt;
We can create new assignments, edit the existing assignments, copy the assignments and also delete the assignment. The instructor can also add participants, reviewers to a particular assignment.&lt;br /&gt;
&lt;br /&gt;
As a Student:&lt;br /&gt;
They can form teams to work on various projects and also bid for the projects they would like to work on. They can also review other student's work and can give feedback on them. They can also submit various types of documents including the URLs and wiki pages for their project or assignment submission.&lt;br /&gt;
&lt;br /&gt;
== '''Problem Statement''' ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Expertiza allows instructors to view kinds of reports of assignments in their courses such as submissions, scores, and review reports. To improve the report views, some table columns such as team name, score, average should be made sortable by using the same existing sort library. &lt;br /&gt;
&lt;br /&gt;
=== '''What needs to be done''' ===&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 1''' ====&lt;br /&gt;
&lt;br /&gt;
For the &amp;quot;View Review Report&amp;quot; table, the columns &amp;quot;Reviewer&amp;quot; and &amp;quot;Metric&amp;quot; are sortable. Our goal is to make the remaining columns sortable.&amp;quot;Reviews done&amp;quot; should be sorted by the first number and then the second number, &amp;quot;Team Reviewed&amp;quot; should be sorted alphabetically and &amp;quot;Score awarded / Average Score&amp;quot; should be sorted in both ascending and design manner. Another issue with the current sorting method is that the sort buttons should be visible in all browsers.&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 2''' ====&lt;br /&gt;
&lt;br /&gt;
For the &amp;quot;Author Feedback report&amp;quot; table, the header names &amp;quot;Review response rejoined&amp;quot; and &amp;quot;Last rejoined to&amp;quot; should be changed to &amp;quot;Review responded to&amp;quot; and &amp;quot;Last responded at&amp;quot; respectively. Then all the columns in the table should be made sortable. Columns &amp;quot;Rejoinder&amp;quot; and &amp;quot;Review responded to&amp;quot; should be sorted as strings, &amp;quot;# author feedbacks done&amp;quot; as first number and second number and &amp;quot;Last responded at&amp;quot; as date.&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 3''' ====&lt;br /&gt;
&lt;br /&gt;
 For the &amp;quot;Teammate Review report&amp;quot; table, the first 3 columns should be sorted as strings and the last column as date.&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 4''' ====&lt;br /&gt;
&lt;br /&gt;
When a user clicks on &amp;quot;View Reports&amp;quot; for a particular assignment a page appears with a dropdown however the page does not say what assignments reports are being viewed. We should add a header indicating the assignment name at the top.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 5''' ====&lt;br /&gt;
&lt;br /&gt;
For &amp;quot;Author feedback reports&amp;quot; table when no feedback has been submitted, the names of students appear in a strange horizontal format. This formatting should be fixed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 6''' ====&lt;br /&gt;
&lt;br /&gt;
In Chrome on Windows 10, the dropdown has a tendency to freeze up especially after one report has been viewed. This issue needs to be reproduced and fixed&lt;br /&gt;
&lt;br /&gt;
== '''Design''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Files Requiring Modification'''===&lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_review_report.html.erb (issue 1)&lt;br /&gt;
&lt;br /&gt;
This file contains the code which generates the review reports table. We will add a script which makes the columns in the table sortable. &lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_feedback_report.html.erb (issue 2)&lt;br /&gt;
&lt;br /&gt;
This file contains the code which generates the Feedback reports table. This gives us access to the column names which require change. Making the columns sortable will be done in this file.&lt;br /&gt;
&lt;br /&gt;
* app/helpers/review_mapping_helper.rb (issue 2)&lt;br /&gt;
&lt;br /&gt;
This file has code which generates the instance variables used by the Feedback reports table. This file most probably will not require any change.&lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_teammate_review_report.html.erb (issue 3)&lt;br /&gt;
&lt;br /&gt;
This file contains the code which generates the Teammates review reports table. We will add a script which makes the columns in the table sortable. &lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_review_report.html.erb (issue 4)&lt;br /&gt;
&lt;br /&gt;
This issue requires the assignment name to be displayed for the particular review report. We will use the set instance variables to display the assignment name.&lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_feedback_report.html.erb(issue 5)&lt;br /&gt;
&lt;br /&gt;
This file contains the code which generates the Feedback reports table. We will inspect the code to check what is causing the formatting issues.&lt;br /&gt;
&lt;br /&gt;
Issue 6 has to be reproduced and the point of error is yet to be determined&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Design Patterns aren't applicable to our project since all it involves is to make columns sortable and some isolated issues.&lt;br /&gt;
&lt;br /&gt;
== '''UML Design''' ==&lt;br /&gt;
[[File:Sort_UML.png]]&lt;br /&gt;
&lt;br /&gt;
== '''Test Plan''' ==&lt;br /&gt;
&lt;br /&gt;
=== '''Functional Testing''' ===&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 1''' ====&lt;br /&gt;
&lt;br /&gt;
# Login as a super_admininstrator2.&lt;br /&gt;
# Click Assignments tab next to Courses&lt;br /&gt;
# Select the &amp;quot;View review report&amp;quot; icon for the assignment for which you want to see the report of&lt;br /&gt;
# Sort the table by clicking on headers, ensure all headers are sorted properly.&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 2''' ====&lt;br /&gt;
&lt;br /&gt;
# Login as a super_admininstrator2.&lt;br /&gt;
# Click Assignments tab next to Courses&lt;br /&gt;
# Select the &amp;quot;Author Feedback report&amp;quot; icon for the assignment for which you want to see the report of&lt;br /&gt;
# Sort the table by clicking on headers, ensure all headers are sorted properly and header names have been changed to appropriate values.&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 3''' ====&lt;br /&gt;
&lt;br /&gt;
# Login as a super_admininstrator2.&lt;br /&gt;
# Click Assignments tab next to Courses&lt;br /&gt;
# Select the &amp;quot;Teammate Review report&amp;quot; icon for the assignment for which you want to see the report of&lt;br /&gt;
# Sort the table by clicking on headers, ensure all headers are sorted properly.&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 4''' ====&lt;br /&gt;
&lt;br /&gt;
# Login as a super_admininstrator2.&lt;br /&gt;
# Click Assignments tab next to Courses&lt;br /&gt;
# Select the &amp;quot;View Reports&amp;quot; icon for the assignment for which you want to see the report of&lt;br /&gt;
# Ensure the header is present on the page for the assignment name.&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 5''' ====&lt;br /&gt;
&lt;br /&gt;
# Login as a super_admininstrator2.&lt;br /&gt;
# Click Assignments tab next to Courses&lt;br /&gt;
# Select the &amp;quot;Author feedback reports&amp;quot; icon for the assignment for which you want to see the report of&lt;br /&gt;
# Verify format for student names when no feedback has been submitted.&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 6''' ====&lt;br /&gt;
&lt;br /&gt;
# Login as a super_admininstrator2.&lt;br /&gt;
# Click Assignments tab next to Courses&lt;br /&gt;
# Select the &amp;quot;View Reports&amp;quot; icon for the assignment for which you want to see the report of&lt;br /&gt;
# Verify dropdown does not freeze up in any scenario.&lt;br /&gt;
&lt;br /&gt;
== '''Team Information''' ==&lt;br /&gt;
&lt;br /&gt;
== '''References''' ==&lt;/div&gt;</summary>
		<author><name>Ahubber</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_-_E2018_sort_instructor_reports_by_name_ID_score_etc&amp;diff=133236</id>
		<title>CSC/ECE 517 Spring 2020 - E2018 sort instructor reports by name ID score etc</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_-_E2018_sort_instructor_reports_by_name_ID_score_etc&amp;diff=133236"/>
		<updated>2020-04-13T18:58:03Z</updated>

		<summary type="html">&lt;p&gt;Ahubber: /* Functional Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
&lt;br /&gt;
Expertiza is an open source web application project developed using Ruby on Rails framework. Let us list some of the functionalities that Expertiza allows us to do under different roles:&lt;br /&gt;
&lt;br /&gt;
As an Instructor:&lt;br /&gt;
We can create new assignments, edit the existing assignments, copy the assignments and also delete the assignment. The instructor can also add participants, reviewers to a particular assignment.&lt;br /&gt;
&lt;br /&gt;
As a Student:&lt;br /&gt;
They can form teams to work on various projects and also bid for the projects they would like to work on. They can also review other student's work and can give feedback on them. They can also submit various types of documents including the URLs and wiki pages for their project or assignment submission.&lt;br /&gt;
&lt;br /&gt;
== '''Problem Statement''' ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Expertiza allows instructors to view kinds of reports of assignments in their courses such as submissions, scores, and review reports. To improve the report views, some table columns such as team name, score, average should be made sortable by using the same existing sort library. &lt;br /&gt;
&lt;br /&gt;
=== '''What needs to be done''' ===&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 1''' ====&lt;br /&gt;
&lt;br /&gt;
For the &amp;quot;View Review Report&amp;quot; table, the columns &amp;quot;Reviewer&amp;quot; and &amp;quot;Metric&amp;quot; are sortable. Our goal is to make the remaining columns sortable.&amp;quot;Reviews done&amp;quot; should be sorted by the first number and then the second number, &amp;quot;Team Reviewed&amp;quot; should be sorted alphabetically and &amp;quot;Score awarded / Average Score&amp;quot; should be sorted in both ascending and design manner. Another issue with the current sorting method is that the sort buttons should be visible in all browsers.&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 2''' ====&lt;br /&gt;
&lt;br /&gt;
For the &amp;quot;Author Feedback report&amp;quot; table, the header names &amp;quot;Review response rejoined&amp;quot; and &amp;quot;Last rejoined to&amp;quot; should be changed to &amp;quot;Review responded to&amp;quot; and &amp;quot;Last responded at&amp;quot; respectively. Then all the columns in the table should be made sortable. Columns &amp;quot;Rejoinder&amp;quot; and &amp;quot;Review responded to&amp;quot; should be sorted as strings, &amp;quot;# author feedbacks done&amp;quot; as first number and second number and &amp;quot;Last responded at&amp;quot; as date.&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 3''' ====&lt;br /&gt;
&lt;br /&gt;
 For the &amp;quot;Teammate Review report&amp;quot; table, the first 3 columns should be sorted as strings and the last column as date.&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 4''' ====&lt;br /&gt;
&lt;br /&gt;
When a user clicks on &amp;quot;View Reports&amp;quot; for a particular assignment a page appears with a dropdown however the page does not say what assignments reports are being viewed. We should add a header indicating the assignment name at the top.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 5''' ====&lt;br /&gt;
&lt;br /&gt;
For &amp;quot;Author feedback reports&amp;quot; table when no feedback has been submitted, the names of students appear in a strange horizontal format. This formatting should be fixed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 6''' ====&lt;br /&gt;
&lt;br /&gt;
In Chrome on Windows 10, the dropdown has a tendency to freeze up especially after one report has been viewed. This issue needs to be reproduced and fixed&lt;br /&gt;
&lt;br /&gt;
== '''Design''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Files Requiring Modification'''===&lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_review_report.html.erb (issue 1)&lt;br /&gt;
&lt;br /&gt;
This file contains the code which generates the review reports table. We will add a script which makes the columns in the table sortable. &lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_feedback_report.html.erb (issue 2)&lt;br /&gt;
&lt;br /&gt;
This file contains the code which generates the Feedback reports table. This gives us access to the column names which require change. Making the columns sortable will be done in this file.&lt;br /&gt;
&lt;br /&gt;
* app/helpers/review_mapping_helper.rb (issue 2)&lt;br /&gt;
&lt;br /&gt;
This file has code which generates the instance variables used by the Feedback reports table. This file most probably will not require any change.&lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_teammate_review_report.html.erb (issue 3)&lt;br /&gt;
&lt;br /&gt;
This file contains the code which generates the Teammates review reports table. We will add a script which makes the columns in the table sortable. &lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_review_report.html.erb (issue 4)&lt;br /&gt;
&lt;br /&gt;
This issue requires the assignment name to be displayed for the particular review report. We will use the set instance variables to display the assignment name.&lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_feedback_report.html.erb(issue 5)&lt;br /&gt;
&lt;br /&gt;
This file contains the code which generates the Feedback reports table. We will inspect the code to check what is causing the formatting issues.&lt;br /&gt;
&lt;br /&gt;
Issue 6 has to be reproduced and the point of error is yet to be determined&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Design Patterns aren't applicable to our project since all it involves is to make columns sortable and some isolated issues.&lt;br /&gt;
&lt;br /&gt;
== '''UML Design''' ==&lt;br /&gt;
[[File:Sort_UML.png]]&lt;br /&gt;
&lt;br /&gt;
== '''Test Plan''' ==&lt;br /&gt;
&lt;br /&gt;
=== '''Functional Testing''' ===&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 1''' ====&lt;br /&gt;
&lt;br /&gt;
# Login as a super_admininstrator2.&lt;br /&gt;
# Click Assignments tab next to Courses&lt;br /&gt;
# Select the &amp;quot;View review report&amp;quot; icon for the assignment for which you want to see the report of&lt;br /&gt;
# Sort the table by clicking on headers, ensure all headers are sorted properly.&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 2''' ====&lt;br /&gt;
&lt;br /&gt;
# Login as a super_admininstrator2.&lt;br /&gt;
# Click Assignments tab next to Courses&lt;br /&gt;
# Select the &amp;quot;Author Feedback report&amp;quot; icon for the assignment for which you want to see the report of&lt;br /&gt;
# Sort the table by clicking on headers, ensure all headers are sorted properly and header names have been changed to appropriate values.&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 3''' ====&lt;br /&gt;
&lt;br /&gt;
# Login as a super_admininstrator2.&lt;br /&gt;
# Click Assignments tab next to Courses&lt;br /&gt;
# Select the &amp;quot;Teammate Review report&amp;quot; icon for the assignment for which you want to see the report of&lt;br /&gt;
# Sort the table by clicking on headers, ensure all headers are sorted properly.&lt;br /&gt;
&lt;br /&gt;
== '''Team Information''' ==&lt;br /&gt;
&lt;br /&gt;
== '''References''' ==&lt;/div&gt;</summary>
		<author><name>Ahubber</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_-_E2018_sort_instructor_reports_by_name_ID_score_etc&amp;diff=133235</id>
		<title>CSC/ECE 517 Spring 2020 - E2018 sort instructor reports by name ID score etc</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_-_E2018_sort_instructor_reports_by_name_ID_score_etc&amp;diff=133235"/>
		<updated>2020-04-13T18:56:30Z</updated>

		<summary type="html">&lt;p&gt;Ahubber: /* Functional Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
&lt;br /&gt;
Expertiza is an open source web application project developed using Ruby on Rails framework. Let us list some of the functionalities that Expertiza allows us to do under different roles:&lt;br /&gt;
&lt;br /&gt;
As an Instructor:&lt;br /&gt;
We can create new assignments, edit the existing assignments, copy the assignments and also delete the assignment. The instructor can also add participants, reviewers to a particular assignment.&lt;br /&gt;
&lt;br /&gt;
As a Student:&lt;br /&gt;
They can form teams to work on various projects and also bid for the projects they would like to work on. They can also review other student's work and can give feedback on them. They can also submit various types of documents including the URLs and wiki pages for their project or assignment submission.&lt;br /&gt;
&lt;br /&gt;
== '''Problem Statement''' ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Expertiza allows instructors to view kinds of reports of assignments in their courses such as submissions, scores, and review reports. To improve the report views, some table columns such as team name, score, average should be made sortable by using the same existing sort library. &lt;br /&gt;
&lt;br /&gt;
=== '''What needs to be done''' ===&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 1''' ====&lt;br /&gt;
&lt;br /&gt;
For the &amp;quot;View Review Report&amp;quot; table, the columns &amp;quot;Reviewer&amp;quot; and &amp;quot;Metric&amp;quot; are sortable. Our goal is to make the remaining columns sortable.&amp;quot;Reviews done&amp;quot; should be sorted by the first number and then the second number, &amp;quot;Team Reviewed&amp;quot; should be sorted alphabetically and &amp;quot;Score awarded / Average Score&amp;quot; should be sorted in both ascending and design manner. Another issue with the current sorting method is that the sort buttons should be visible in all browsers.&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 2''' ====&lt;br /&gt;
&lt;br /&gt;
For the &amp;quot;Author Feedback report&amp;quot; table, the header names &amp;quot;Review response rejoined&amp;quot; and &amp;quot;Last rejoined to&amp;quot; should be changed to &amp;quot;Review responded to&amp;quot; and &amp;quot;Last responded at&amp;quot; respectively. Then all the columns in the table should be made sortable. Columns &amp;quot;Rejoinder&amp;quot; and &amp;quot;Review responded to&amp;quot; should be sorted as strings, &amp;quot;# author feedbacks done&amp;quot; as first number and second number and &amp;quot;Last responded at&amp;quot; as date.&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 3''' ====&lt;br /&gt;
&lt;br /&gt;
 For the &amp;quot;Teammate Review report&amp;quot; table, the first 3 columns should be sorted as strings and the last column as date.&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 4''' ====&lt;br /&gt;
&lt;br /&gt;
When a user clicks on &amp;quot;View Reports&amp;quot; for a particular assignment a page appears with a dropdown however the page does not say what assignments reports are being viewed. We should add a header indicating the assignment name at the top.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 5''' ====&lt;br /&gt;
&lt;br /&gt;
For &amp;quot;Author feedback reports&amp;quot; table when no feedback has been submitted, the names of students appear in a strange horizontal format. This formatting should be fixed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 6''' ====&lt;br /&gt;
&lt;br /&gt;
In Chrome on Windows 10, the dropdown has a tendency to freeze up especially after one report has been viewed. This issue needs to be reproduced and fixed&lt;br /&gt;
&lt;br /&gt;
== '''Design''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Files Requiring Modification'''===&lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_review_report.html.erb (issue 1)&lt;br /&gt;
&lt;br /&gt;
This file contains the code which generates the review reports table. We will add a script which makes the columns in the table sortable. &lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_feedback_report.html.erb (issue 2)&lt;br /&gt;
&lt;br /&gt;
This file contains the code which generates the Feedback reports table. This gives us access to the column names which require change. Making the columns sortable will be done in this file.&lt;br /&gt;
&lt;br /&gt;
* app/helpers/review_mapping_helper.rb (issue 2)&lt;br /&gt;
&lt;br /&gt;
This file has code which generates the instance variables used by the Feedback reports table. This file most probably will not require any change.&lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_teammate_review_report.html.erb (issue 3)&lt;br /&gt;
&lt;br /&gt;
This file contains the code which generates the Teammates review reports table. We will add a script which makes the columns in the table sortable. &lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_review_report.html.erb (issue 4)&lt;br /&gt;
&lt;br /&gt;
This issue requires the assignment name to be displayed for the particular review report. We will use the set instance variables to display the assignment name.&lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_feedback_report.html.erb(issue 5)&lt;br /&gt;
&lt;br /&gt;
This file contains the code which generates the Feedback reports table. We will inspect the code to check what is causing the formatting issues.&lt;br /&gt;
&lt;br /&gt;
Issue 6 has to be reproduced and the point of error is yet to be determined&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Design Patterns aren't applicable to our project since all it involves is to make columns sortable and some isolated issues.&lt;br /&gt;
&lt;br /&gt;
== '''UML Design''' ==&lt;br /&gt;
[[File:Sort_UML.png]]&lt;br /&gt;
&lt;br /&gt;
== '''Test Plan''' ==&lt;br /&gt;
&lt;br /&gt;
=== '''Functional Testing''' ===&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 1''' ====&lt;br /&gt;
&lt;br /&gt;
# Login as a super_admininstrator2.&lt;br /&gt;
# Click Assignments tab next to Courses&lt;br /&gt;
# Select the &amp;quot;View review report&amp;quot; icon for the assignment for which you want to see the report of&lt;br /&gt;
# Sort the table by clicking on headers, ensure all headers are sorted properly.&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 2''' ====&lt;br /&gt;
&lt;br /&gt;
# Login as a super_admininstrator2.&lt;br /&gt;
# Click Assignments tab next to Courses&lt;br /&gt;
# Select the &amp;quot;Author Feedback report&amp;quot; icon for the assignment for which you want to see the report of&lt;br /&gt;
# Sort the table by clicking on headers, ensure all headers are sorted properly and header names have been changed to appropriate values.&lt;br /&gt;
&lt;br /&gt;
== '''Team Information''' ==&lt;br /&gt;
&lt;br /&gt;
== '''References''' ==&lt;/div&gt;</summary>
		<author><name>Ahubber</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_-_E2018_sort_instructor_reports_by_name_ID_score_etc&amp;diff=133234</id>
		<title>CSC/ECE 517 Spring 2020 - E2018 sort instructor reports by name ID score etc</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_-_E2018_sort_instructor_reports_by_name_ID_score_etc&amp;diff=133234"/>
		<updated>2020-04-13T18:54:32Z</updated>

		<summary type="html">&lt;p&gt;Ahubber: /* Functional Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
&lt;br /&gt;
Expertiza is an open source web application project developed using Ruby on Rails framework. Let us list some of the functionalities that Expertiza allows us to do under different roles:&lt;br /&gt;
&lt;br /&gt;
As an Instructor:&lt;br /&gt;
We can create new assignments, edit the existing assignments, copy the assignments and also delete the assignment. The instructor can also add participants, reviewers to a particular assignment.&lt;br /&gt;
&lt;br /&gt;
As a Student:&lt;br /&gt;
They can form teams to work on various projects and also bid for the projects they would like to work on. They can also review other student's work and can give feedback on them. They can also submit various types of documents including the URLs and wiki pages for their project or assignment submission.&lt;br /&gt;
&lt;br /&gt;
== '''Problem Statement''' ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Expertiza allows instructors to view kinds of reports of assignments in their courses such as submissions, scores, and review reports. To improve the report views, some table columns such as team name, score, average should be made sortable by using the same existing sort library. &lt;br /&gt;
&lt;br /&gt;
=== '''What needs to be done''' ===&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 1''' ====&lt;br /&gt;
&lt;br /&gt;
For the &amp;quot;View Review Report&amp;quot; table, the columns &amp;quot;Reviewer&amp;quot; and &amp;quot;Metric&amp;quot; are sortable. Our goal is to make the remaining columns sortable.&amp;quot;Reviews done&amp;quot; should be sorted by the first number and then the second number, &amp;quot;Team Reviewed&amp;quot; should be sorted alphabetically and &amp;quot;Score awarded / Average Score&amp;quot; should be sorted in both ascending and design manner. Another issue with the current sorting method is that the sort buttons should be visible in all browsers.&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 2''' ====&lt;br /&gt;
&lt;br /&gt;
For the &amp;quot;Author Feedback report&amp;quot; table, the header names &amp;quot;Review response rejoined&amp;quot; and &amp;quot;Last rejoined to&amp;quot; should be changed to &amp;quot;Review responded to&amp;quot; and &amp;quot;Last responded at&amp;quot; respectively. Then all the columns in the table should be made sortable. Columns &amp;quot;Rejoinder&amp;quot; and &amp;quot;Review responded to&amp;quot; should be sorted as strings, &amp;quot;# author feedbacks done&amp;quot; as first number and second number and &amp;quot;Last responded at&amp;quot; as date.&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 3''' ====&lt;br /&gt;
&lt;br /&gt;
 For the &amp;quot;Teammate Review report&amp;quot; table, the first 3 columns should be sorted as strings and the last column as date.&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 4''' ====&lt;br /&gt;
&lt;br /&gt;
When a user clicks on &amp;quot;View Reports&amp;quot; for a particular assignment a page appears with a dropdown however the page does not say what assignments reports are being viewed. We should add a header indicating the assignment name at the top.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 5''' ====&lt;br /&gt;
&lt;br /&gt;
For &amp;quot;Author feedback reports&amp;quot; table when no feedback has been submitted, the names of students appear in a strange horizontal format. This formatting should be fixed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 6''' ====&lt;br /&gt;
&lt;br /&gt;
In Chrome on Windows 10, the dropdown has a tendency to freeze up especially after one report has been viewed. This issue needs to be reproduced and fixed&lt;br /&gt;
&lt;br /&gt;
== '''Design''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Files Requiring Modification'''===&lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_review_report.html.erb (issue 1)&lt;br /&gt;
&lt;br /&gt;
This file contains the code which generates the review reports table. We will add a script which makes the columns in the table sortable. &lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_feedback_report.html.erb (issue 2)&lt;br /&gt;
&lt;br /&gt;
This file contains the code which generates the Feedback reports table. This gives us access to the column names which require change. Making the columns sortable will be done in this file.&lt;br /&gt;
&lt;br /&gt;
* app/helpers/review_mapping_helper.rb (issue 2)&lt;br /&gt;
&lt;br /&gt;
This file has code which generates the instance variables used by the Feedback reports table. This file most probably will not require any change.&lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_teammate_review_report.html.erb (issue 3)&lt;br /&gt;
&lt;br /&gt;
This file contains the code which generates the Teammates review reports table. We will add a script which makes the columns in the table sortable. &lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_review_report.html.erb (issue 4)&lt;br /&gt;
&lt;br /&gt;
This issue requires the assignment name to be displayed for the particular review report. We will use the set instance variables to display the assignment name.&lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_feedback_report.html.erb(issue 5)&lt;br /&gt;
&lt;br /&gt;
This file contains the code which generates the Feedback reports table. We will inspect the code to check what is causing the formatting issues.&lt;br /&gt;
&lt;br /&gt;
Issue 6 has to be reproduced and the point of error is yet to be determined&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Design Patterns aren't applicable to our project since all it involves is to make columns sortable and some isolated issues.&lt;br /&gt;
&lt;br /&gt;
== '''UML Design''' ==&lt;br /&gt;
[[File:Sort_UML.png]]&lt;br /&gt;
&lt;br /&gt;
== '''Test Plan''' ==&lt;br /&gt;
&lt;br /&gt;
=== '''Functional Testing''' ===&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 1''' ====&lt;br /&gt;
&lt;br /&gt;
# Login as a super_admininstrator2.&lt;br /&gt;
# Click Assignments tab next to Courses&lt;br /&gt;
# Select the &amp;quot;View review report&amp;quot; icon for the assignment for which you want to see the report of&lt;br /&gt;
# Sort the table by clicking on headers, ensure all headers are sorted properly.&lt;br /&gt;
&lt;br /&gt;
== '''Team Information''' ==&lt;br /&gt;
&lt;br /&gt;
== '''References''' ==&lt;/div&gt;</summary>
		<author><name>Ahubber</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_-_E2018_sort_instructor_reports_by_name_ID_score_etc&amp;diff=133233</id>
		<title>CSC/ECE 517 Spring 2020 - E2018 sort instructor reports by name ID score etc</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_-_E2018_sort_instructor_reports_by_name_ID_score_etc&amp;diff=133233"/>
		<updated>2020-04-13T18:53:53Z</updated>

		<summary type="html">&lt;p&gt;Ahubber: /* Issue 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
&lt;br /&gt;
Expertiza is an open source web application project developed using Ruby on Rails framework. Let us list some of the functionalities that Expertiza allows us to do under different roles:&lt;br /&gt;
&lt;br /&gt;
As an Instructor:&lt;br /&gt;
We can create new assignments, edit the existing assignments, copy the assignments and also delete the assignment. The instructor can also add participants, reviewers to a particular assignment.&lt;br /&gt;
&lt;br /&gt;
As a Student:&lt;br /&gt;
They can form teams to work on various projects and also bid for the projects they would like to work on. They can also review other student's work and can give feedback on them. They can also submit various types of documents including the URLs and wiki pages for their project or assignment submission.&lt;br /&gt;
&lt;br /&gt;
== '''Problem Statement''' ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Expertiza allows instructors to view kinds of reports of assignments in their courses such as submissions, scores, and review reports. To improve the report views, some table columns such as team name, score, average should be made sortable by using the same existing sort library. &lt;br /&gt;
&lt;br /&gt;
=== '''What needs to be done''' ===&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 1''' ====&lt;br /&gt;
&lt;br /&gt;
For the &amp;quot;View Review Report&amp;quot; table, the columns &amp;quot;Reviewer&amp;quot; and &amp;quot;Metric&amp;quot; are sortable. Our goal is to make the remaining columns sortable.&amp;quot;Reviews done&amp;quot; should be sorted by the first number and then the second number, &amp;quot;Team Reviewed&amp;quot; should be sorted alphabetically and &amp;quot;Score awarded / Average Score&amp;quot; should be sorted in both ascending and design manner. Another issue with the current sorting method is that the sort buttons should be visible in all browsers.&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 2''' ====&lt;br /&gt;
&lt;br /&gt;
For the &amp;quot;Author Feedback report&amp;quot; table, the header names &amp;quot;Review response rejoined&amp;quot; and &amp;quot;Last rejoined to&amp;quot; should be changed to &amp;quot;Review responded to&amp;quot; and &amp;quot;Last responded at&amp;quot; respectively. Then all the columns in the table should be made sortable. Columns &amp;quot;Rejoinder&amp;quot; and &amp;quot;Review responded to&amp;quot; should be sorted as strings, &amp;quot;# author feedbacks done&amp;quot; as first number and second number and &amp;quot;Last responded at&amp;quot; as date.&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 3''' ====&lt;br /&gt;
&lt;br /&gt;
 For the &amp;quot;Teammate Review report&amp;quot; table, the first 3 columns should be sorted as strings and the last column as date.&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 4''' ====&lt;br /&gt;
&lt;br /&gt;
When a user clicks on &amp;quot;View Reports&amp;quot; for a particular assignment a page appears with a dropdown however the page does not say what assignments reports are being viewed. We should add a header indicating the assignment name at the top.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 5''' ====&lt;br /&gt;
&lt;br /&gt;
For &amp;quot;Author feedback reports&amp;quot; table when no feedback has been submitted, the names of students appear in a strange horizontal format. This formatting should be fixed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 6''' ====&lt;br /&gt;
&lt;br /&gt;
In Chrome on Windows 10, the dropdown has a tendency to freeze up especially after one report has been viewed. This issue needs to be reproduced and fixed&lt;br /&gt;
&lt;br /&gt;
== '''Design''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Files Requiring Modification'''===&lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_review_report.html.erb (issue 1)&lt;br /&gt;
&lt;br /&gt;
This file contains the code which generates the review reports table. We will add a script which makes the columns in the table sortable. &lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_feedback_report.html.erb (issue 2)&lt;br /&gt;
&lt;br /&gt;
This file contains the code which generates the Feedback reports table. This gives us access to the column names which require change. Making the columns sortable will be done in this file.&lt;br /&gt;
&lt;br /&gt;
* app/helpers/review_mapping_helper.rb (issue 2)&lt;br /&gt;
&lt;br /&gt;
This file has code which generates the instance variables used by the Feedback reports table. This file most probably will not require any change.&lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_teammate_review_report.html.erb (issue 3)&lt;br /&gt;
&lt;br /&gt;
This file contains the code which generates the Teammates review reports table. We will add a script which makes the columns in the table sortable. &lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_review_report.html.erb (issue 4)&lt;br /&gt;
&lt;br /&gt;
This issue requires the assignment name to be displayed for the particular review report. We will use the set instance variables to display the assignment name.&lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_feedback_report.html.erb(issue 5)&lt;br /&gt;
&lt;br /&gt;
This file contains the code which generates the Feedback reports table. We will inspect the code to check what is causing the formatting issues.&lt;br /&gt;
&lt;br /&gt;
Issue 6 has to be reproduced and the point of error is yet to be determined&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Design Patterns aren't applicable to our project since all it involves is to make columns sortable and some isolated issues.&lt;br /&gt;
&lt;br /&gt;
== '''UML Design''' ==&lt;br /&gt;
[[File:Sort_UML.png]]&lt;br /&gt;
&lt;br /&gt;
== '''Test Plan''' ==&lt;br /&gt;
&lt;br /&gt;
=== '''Functional Testing''' ===&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 1''' ====&lt;br /&gt;
&lt;br /&gt;
1.) Login as a super_admininstrator2.&lt;br /&gt;
2.) Click Assignments tab next to Courses&lt;br /&gt;
3.) Select the &amp;quot;View review report&amp;quot; icon for the assignment for which you want to see the report of&lt;br /&gt;
4.) Sort the table by clicking on headers, ensure all headers are sorted properly.&lt;br /&gt;
&lt;br /&gt;
== '''Team Information''' ==&lt;br /&gt;
&lt;br /&gt;
== '''References''' ==&lt;/div&gt;</summary>
		<author><name>Ahubber</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_-_E2018_sort_instructor_reports_by_name_ID_score_etc&amp;diff=133232</id>
		<title>CSC/ECE 517 Spring 2020 - E2018 sort instructor reports by name ID score etc</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_-_E2018_sort_instructor_reports_by_name_ID_score_etc&amp;diff=133232"/>
		<updated>2020-04-13T18:49:14Z</updated>

		<summary type="html">&lt;p&gt;Ahubber: /* Test Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
&lt;br /&gt;
Expertiza is an open source web application project developed using Ruby on Rails framework. Let us list some of the functionalities that Expertiza allows us to do under different roles:&lt;br /&gt;
&lt;br /&gt;
As an Instructor:&lt;br /&gt;
We can create new assignments, edit the existing assignments, copy the assignments and also delete the assignment. The instructor can also add participants, reviewers to a particular assignment.&lt;br /&gt;
&lt;br /&gt;
As a Student:&lt;br /&gt;
They can form teams to work on various projects and also bid for the projects they would like to work on. They can also review other student's work and can give feedback on them. They can also submit various types of documents including the URLs and wiki pages for their project or assignment submission.&lt;br /&gt;
&lt;br /&gt;
== '''Problem Statement''' ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Expertiza allows instructors to view kinds of reports of assignments in their courses such as submissions, scores, and review reports. To improve the report views, some table columns such as team name, score, average should be made sortable by using the same existing sort library. &lt;br /&gt;
&lt;br /&gt;
=== '''What needs to be done''' ===&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 1''' ====&lt;br /&gt;
&lt;br /&gt;
For the &amp;quot;View Review Report&amp;quot; table, the columns &amp;quot;Reviewer&amp;quot; and &amp;quot;Metric&amp;quot; are sortable. Our goal is to make the remaining columns sortable.&amp;quot;Reviews done&amp;quot; should be sorted by the first number and then the second number, &amp;quot;Team Reviewed&amp;quot; should be sorted alphabetically and &amp;quot;Score awarded / Average Score&amp;quot; should be sorted in both ascending and design manner. Another issue with the current sorting method is that the sort buttons should be visible in all browsers.&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 2''' ====&lt;br /&gt;
&lt;br /&gt;
For the &amp;quot;Author Feedback report&amp;quot; table, the header names &amp;quot;Review response rejoined&amp;quot; and &amp;quot;Last rejoined to&amp;quot; should be changed to &amp;quot;Review responded to&amp;quot; and &amp;quot;Last responded at&amp;quot; respectively. Then all the columns in the table should be made sortable. Columns &amp;quot;Rejoinder&amp;quot; and &amp;quot;Review responded to&amp;quot; should be sorted as strings, &amp;quot;# author feedbacks done&amp;quot; as first number and second number and &amp;quot;Last responded at&amp;quot; as date.&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 3''' ====&lt;br /&gt;
&lt;br /&gt;
 For the &amp;quot;Teammate Review report&amp;quot; table, the first 3 columns should be sorted as strings and the last column as date.&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 4''' ====&lt;br /&gt;
&lt;br /&gt;
When a user clicks on &amp;quot;View Reports&amp;quot; for a particular assignment a page appears with a dropdown however the page does not say what assignments reports are being viewed. We should add a header indicating the assignment name at the top.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 5''' ====&lt;br /&gt;
&lt;br /&gt;
For &amp;quot;Author feedback reports&amp;quot; table when no feedback has been submitted, the names of students appear in a strange horizontal format. This formatting should be fixed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 6''' ====&lt;br /&gt;
&lt;br /&gt;
In Chrome on Windows 10, the dropdown has a tendency to freeze up especially after one report has been viewed. This issue needs to be reproduced and fixed&lt;br /&gt;
&lt;br /&gt;
== '''Design''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Files Requiring Modification'''===&lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_review_report.html.erb (issue 1)&lt;br /&gt;
&lt;br /&gt;
This file contains the code which generates the review reports table. We will add a script which makes the columns in the table sortable. &lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_feedback_report.html.erb (issue 2)&lt;br /&gt;
&lt;br /&gt;
This file contains the code which generates the Feedback reports table. This gives us access to the column names which require change. Making the columns sortable will be done in this file.&lt;br /&gt;
&lt;br /&gt;
* app/helpers/review_mapping_helper.rb (issue 2)&lt;br /&gt;
&lt;br /&gt;
This file has code which generates the instance variables used by the Feedback reports table. This file most probably will not require any change.&lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_teammate_review_report.html.erb (issue 3)&lt;br /&gt;
&lt;br /&gt;
This file contains the code which generates the Teammates review reports table. We will add a script which makes the columns in the table sortable. &lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_review_report.html.erb (issue 4)&lt;br /&gt;
&lt;br /&gt;
This issue requires the assignment name to be displayed for the particular review report. We will use the set instance variables to display the assignment name.&lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_feedback_report.html.erb(issue 5)&lt;br /&gt;
&lt;br /&gt;
This file contains the code which generates the Feedback reports table. We will inspect the code to check what is causing the formatting issues.&lt;br /&gt;
&lt;br /&gt;
Issue 6 has to be reproduced and the point of error is yet to be determined&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Design Patterns aren't applicable to our project since all it involves is to make columns sortable and some isolated issues.&lt;br /&gt;
&lt;br /&gt;
== '''UML Design''' ==&lt;br /&gt;
[[File:Sort_UML.png]]&lt;br /&gt;
&lt;br /&gt;
== '''Test Plan''' ==&lt;br /&gt;
&lt;br /&gt;
=== '''Functional Testing''' ===&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 1''' ====&lt;br /&gt;
&lt;br /&gt;
== '''Team Information''' ==&lt;br /&gt;
&lt;br /&gt;
== '''References''' ==&lt;/div&gt;</summary>
		<author><name>Ahubber</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_-_E2018_sort_instructor_reports_by_name_ID_score_etc&amp;diff=133231</id>
		<title>CSC/ECE 517 Spring 2020 - E2018 sort instructor reports by name ID score etc</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_-_E2018_sort_instructor_reports_by_name_ID_score_etc&amp;diff=133231"/>
		<updated>2020-04-13T18:48:41Z</updated>

		<summary type="html">&lt;p&gt;Ahubber: /* Test Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Introduction''' ==&lt;br /&gt;
&lt;br /&gt;
Expertiza is an open source web application project developed using Ruby on Rails framework. Let us list some of the functionalities that Expertiza allows us to do under different roles:&lt;br /&gt;
&lt;br /&gt;
As an Instructor:&lt;br /&gt;
We can create new assignments, edit the existing assignments, copy the assignments and also delete the assignment. The instructor can also add participants, reviewers to a particular assignment.&lt;br /&gt;
&lt;br /&gt;
As a Student:&lt;br /&gt;
They can form teams to work on various projects and also bid for the projects they would like to work on. They can also review other student's work and can give feedback on them. They can also submit various types of documents including the URLs and wiki pages for their project or assignment submission.&lt;br /&gt;
&lt;br /&gt;
== '''Problem Statement''' ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Expertiza allows instructors to view kinds of reports of assignments in their courses such as submissions, scores, and review reports. To improve the report views, some table columns such as team name, score, average should be made sortable by using the same existing sort library. &lt;br /&gt;
&lt;br /&gt;
=== '''What needs to be done''' ===&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 1''' ====&lt;br /&gt;
&lt;br /&gt;
For the &amp;quot;View Review Report&amp;quot; table, the columns &amp;quot;Reviewer&amp;quot; and &amp;quot;Metric&amp;quot; are sortable. Our goal is to make the remaining columns sortable.&amp;quot;Reviews done&amp;quot; should be sorted by the first number and then the second number, &amp;quot;Team Reviewed&amp;quot; should be sorted alphabetically and &amp;quot;Score awarded / Average Score&amp;quot; should be sorted in both ascending and design manner. Another issue with the current sorting method is that the sort buttons should be visible in all browsers.&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 2''' ====&lt;br /&gt;
&lt;br /&gt;
For the &amp;quot;Author Feedback report&amp;quot; table, the header names &amp;quot;Review response rejoined&amp;quot; and &amp;quot;Last rejoined to&amp;quot; should be changed to &amp;quot;Review responded to&amp;quot; and &amp;quot;Last responded at&amp;quot; respectively. Then all the columns in the table should be made sortable. Columns &amp;quot;Rejoinder&amp;quot; and &amp;quot;Review responded to&amp;quot; should be sorted as strings, &amp;quot;# author feedbacks done&amp;quot; as first number and second number and &amp;quot;Last responded at&amp;quot; as date.&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 3''' ====&lt;br /&gt;
&lt;br /&gt;
 For the &amp;quot;Teammate Review report&amp;quot; table, the first 3 columns should be sorted as strings and the last column as date.&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 4''' ====&lt;br /&gt;
&lt;br /&gt;
When a user clicks on &amp;quot;View Reports&amp;quot; for a particular assignment a page appears with a dropdown however the page does not say what assignments reports are being viewed. We should add a header indicating the assignment name at the top.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 5''' ====&lt;br /&gt;
&lt;br /&gt;
For &amp;quot;Author feedback reports&amp;quot; table when no feedback has been submitted, the names of students appear in a strange horizontal format. This formatting should be fixed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== '''Issue 6''' ====&lt;br /&gt;
&lt;br /&gt;
In Chrome on Windows 10, the dropdown has a tendency to freeze up especially after one report has been viewed. This issue needs to be reproduced and fixed&lt;br /&gt;
&lt;br /&gt;
== '''Design''' ==&lt;br /&gt;
&lt;br /&gt;
==='''Files Requiring Modification'''===&lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_review_report.html.erb (issue 1)&lt;br /&gt;
&lt;br /&gt;
This file contains the code which generates the review reports table. We will add a script which makes the columns in the table sortable. &lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_feedback_report.html.erb (issue 2)&lt;br /&gt;
&lt;br /&gt;
This file contains the code which generates the Feedback reports table. This gives us access to the column names which require change. Making the columns sortable will be done in this file.&lt;br /&gt;
&lt;br /&gt;
* app/helpers/review_mapping_helper.rb (issue 2)&lt;br /&gt;
&lt;br /&gt;
This file has code which generates the instance variables used by the Feedback reports table. This file most probably will not require any change.&lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_teammate_review_report.html.erb (issue 3)&lt;br /&gt;
&lt;br /&gt;
This file contains the code which generates the Teammates review reports table. We will add a script which makes the columns in the table sortable. &lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_review_report.html.erb (issue 4)&lt;br /&gt;
&lt;br /&gt;
This issue requires the assignment name to be displayed for the particular review report. We will use the set instance variables to display the assignment name.&lt;br /&gt;
&lt;br /&gt;
* app/views/reports/_feedback_report.html.erb(issue 5)&lt;br /&gt;
&lt;br /&gt;
This file contains the code which generates the Feedback reports table. We will inspect the code to check what is causing the formatting issues.&lt;br /&gt;
&lt;br /&gt;
Issue 6 has to be reproduced and the point of error is yet to be determined&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Design Patterns aren't applicable to our project since all it involves is to make columns sortable and some isolated issues.&lt;br /&gt;
&lt;br /&gt;
== '''UML Design''' ==&lt;br /&gt;
[[File:Sort_UML.png]]&lt;br /&gt;
&lt;br /&gt;
== '''Test Plan''' ==&lt;br /&gt;
&lt;br /&gt;
Functional testing:&lt;br /&gt;
&lt;br /&gt;
Issue 1:&lt;br /&gt;
&lt;br /&gt;
== '''Team Information''' ==&lt;br /&gt;
&lt;br /&gt;
== '''References''' ==&lt;/div&gt;</summary>
		<author><name>Ahubber</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_Refactor_assignment.rb&amp;diff=132577</id>
		<title>CSC/ECE 517 Spring 2020 Refactor assignment.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_Refactor_assignment.rb&amp;diff=132577"/>
		<updated>2020-04-01T00:59:36Z</updated>

		<summary type="html">&lt;p&gt;Ahubber: /* Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== [[Abstract]] ==&lt;br /&gt;
&lt;br /&gt;
Expertiza is a web application using Ruby on Rails framework. The creation and maintenance of this application is handled by NCSU students and faculty. The basic functionalities allow the instructor to create and edit, both new and existing assignments. Also it allows the publishing of surveys and peer reviews, while allowing students the opportunity to sign up for topics, teams, submit assignments and peer reviews.&lt;br /&gt;
&lt;br /&gt;
== [[Problem Statement]] ==&lt;br /&gt;
&lt;br /&gt;
Assignment.rb is a large file, that has dozens of methods and fields. Some methods seem redundant, and some fields and string literals are repeated multiple times throughout the file. Ie. 'Finished'. Each method in the file is essential and provides different data, so the goal for my team was to rename and merge code where we could, while not affecting the end functionality.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Problem Solution]] ==&lt;br /&gt;
&lt;br /&gt;
Due to the fragile nature of the methods in Assignment.rb, our team decided to focus on redundancy in the code and anywhere we could merge redundant code into common methods. Also there were quite a few strings that were used constantly in the file, ie. 'Finished' that we decided to make constants, to reduce complexity if the values ever changed.&lt;br /&gt;
&lt;br /&gt;
== [[Refactors]] ==&lt;br /&gt;
&lt;br /&gt;
- One of the main issues I saw in the code was the reuse of string literals in comparisons. These would cause hige efforts to change later if there are hundreds of places where these strings are used. Instead I replaced all instances of these strings in the file with constants, to lower complexity.&lt;br /&gt;
&lt;br /&gt;
Added these constants to file:&lt;br /&gt;
&lt;br /&gt;
  # Constants for common fields, to reduce complexity if change is needed&lt;br /&gt;
  FINISHED_CONST = 'Finished'.freeze&lt;br /&gt;
  UNKNOWN_CONST = 'Unknown'.freeze&lt;br /&gt;
&lt;br /&gt;
Removed references to string literals and made constant values&lt;br /&gt;
&lt;br /&gt;
  due_date == FINISHED_CONST&lt;br /&gt;
  return (topic_id.nil? ? UNKNOWN_CONST : get_current_stage(topic_id))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- The next issue I found was in multiple places where the code was making the same boolean checks. Instead rewtiting tge checks each time I made a method to return True/False for the check.&lt;br /&gt;
&lt;br /&gt;
 # Function to check if topic id is null when its a staggered assignment, to prevent redundancy&lt;br /&gt;
  def topic_missing?(topic_id = nil)&lt;br /&gt;
    topic_id.nil? and self.staggered_deadline?&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
== [[Testing]] ==&lt;br /&gt;
&lt;br /&gt;
For testing, assignment.rb was already tested pretty well. According to Code Climate it had a B grade for test coverage. Thus the testing effort for this project was not heavy, but we did want to be sure that none of our changes broke any existing tests, and all of our additional methods were tested. Also there was a method response_map_to_metareview which was not being tested in case of an error, so I added a test case to be sure the exception was raised. For example, one new method we added was:&lt;br /&gt;
&lt;br /&gt;
 # New function to check if the assignment is finished&lt;br /&gt;
  def finished?(topic_id = nil)&lt;br /&gt;
    next_due_date(topic_id).nil?&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
For this method we added a few tests to validate the method was returning the values we expect. &lt;br /&gt;
&lt;br /&gt;
  describe '#finished?' do&lt;br /&gt;
    context 'when assignment next due date is nil' do&lt;br /&gt;
      it 'returns True' do&lt;br /&gt;
        allow(DueDate).to receive(:get_next_due_date).with(1, 123).and_return(nil)&lt;br /&gt;
        expect(assignment.finished?(123)).to eq(true)&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    context 'when there is a next due date' do&lt;br /&gt;
      it 'returns False' do&lt;br /&gt;
        allow(DueDate).to receive(:get_next_due_date).with(1, 123).and_return('2021-11-11 11:11:11')&lt;br /&gt;
        expect(assignment.finished?(123)).to eq(false)&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;/div&gt;</summary>
		<author><name>Ahubber</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_Refactor_assignment.rb&amp;diff=132562</id>
		<title>CSC/ECE 517 Spring 2020 Refactor assignment.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_Refactor_assignment.rb&amp;diff=132562"/>
		<updated>2020-04-01T00:25:45Z</updated>

		<summary type="html">&lt;p&gt;Ahubber: /* Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== [[Abstract]] ==&lt;br /&gt;
&lt;br /&gt;
Expertiza is a web application using Ruby on Rails framework. The creation and maintenance of this application is handled by NCSU students and faculty. The basic functionalities allow the instructor to create and edit, both new and existing assignments. Also it allows the publishing of surveys and peer reviews, while allowing students the opportunity to sign up for topics, teams, submit assignments and peer reviews.&lt;br /&gt;
&lt;br /&gt;
== [[Problem Statement]] ==&lt;br /&gt;
&lt;br /&gt;
Assignment.rb is a large file, that has dozens of methods and fields. Some methods seem redundant, and some fields and string literals are repeated multiple times throughout the file. Ie. 'Finished'. Each method in the file is essential and provides different data, so the goal for my team was to rename and merge code where we could, while not affecting the end functionality.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Problem Solution]] ==&lt;br /&gt;
&lt;br /&gt;
Due to the fragile nature of the methods in Assignment.rb, our team decided to focus on redundancy in the code and anywhere we could merge redundant code into common methods. Also there were quite a few strings that were used constantly in the file, ie. 'Finished' that we decided to make constants, to reduce complexity if the values ever changed.&lt;br /&gt;
&lt;br /&gt;
== [[Refactors]] ==&lt;br /&gt;
&lt;br /&gt;
- One of the main issues I saw in the code was the reuse of string literals in comparisons. These would cause hige efforts to change later if there are hundreds of places where these strings are used. Instead I replaced all instances of these strings in the file with constants, to lower complexity.&lt;br /&gt;
&lt;br /&gt;
Added these constants to file:&lt;br /&gt;
&lt;br /&gt;
  # Constants for common fields, to reduce complexity if change is needed&lt;br /&gt;
  FINISHED_CONST = 'Finished'.freeze&lt;br /&gt;
  UNKNOWN_CONST = 'Unknown'.freeze&lt;br /&gt;
&lt;br /&gt;
Removed references to string literals and made constant values&lt;br /&gt;
&lt;br /&gt;
  due_date == FINISHED_CONST&lt;br /&gt;
  return (topic_id.nil? ? UNKNOWN_CONST : get_current_stage(topic_id))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- The next issue I found was in multiple places where the code was making the same boolean checks. Instead rewtiting tge checks each time I made a method to return True/False for the check.&lt;br /&gt;
&lt;br /&gt;
 # Function to check if topic id is null when its a staggered assignment, to prevent redundancy&lt;br /&gt;
  def topic_missing?(topic_id = nil)&lt;br /&gt;
    topic_id.nil? and self.staggered_deadline?&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
== [[Testing]] ==&lt;br /&gt;
&lt;br /&gt;
For testing, assignment.rb was already tested pretty well. According to Code Climate it had a B grade for test coverage. Thus the testing effort for this project was not heavy, but we did want to be sure that none of our changes broke any existing tests, and all of our additional methods were tested. For example, one new method we added was:&lt;br /&gt;
&lt;br /&gt;
 # New function to check if the assignment is finished&lt;br /&gt;
  def finished?(topic_id = nil)&lt;br /&gt;
    next_due_date(topic_id).nil?&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
For this method we added a few tests to validate the method was returning the values we expect. &lt;br /&gt;
&lt;br /&gt;
  describe '#finished?' do&lt;br /&gt;
    context 'when assignment next due date is nil' do&lt;br /&gt;
      it 'returns True' do&lt;br /&gt;
        allow(DueDate).to receive(:get_next_due_date).with(1, 123).and_return(nil)&lt;br /&gt;
        expect(assignment.finished?(123)).to eq(true)&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    context 'when there is a next due date' do&lt;br /&gt;
      it 'returns False' do&lt;br /&gt;
        allow(DueDate).to receive(:get_next_due_date).with(1, 123).and_return('2021-11-11 11:11:11')&lt;br /&gt;
        expect(assignment.finished?(123)).to eq(false)&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
Also there was a method response_map_to_metareview which was not being tested in case of an error, so I added a test case to be sure the exception was raised.&lt;/div&gt;</summary>
		<author><name>Ahubber</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_Refactor_assignment.rb&amp;diff=132327</id>
		<title>CSC/ECE 517 Spring 2020 Refactor assignment.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_Refactor_assignment.rb&amp;diff=132327"/>
		<updated>2020-03-31T16:28:57Z</updated>

		<summary type="html">&lt;p&gt;Ahubber: /* Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== [[Abstract]] ==&lt;br /&gt;
&lt;br /&gt;
Expertiza is a web application using Ruby on Rails framework. The creation and maintenance of this application is handled by NCSU students and faculty. The basic functionalities allow the instructor to create and edit, both new and existing assignments. Also it allows the publishing of surveys and peer reviews, while allowing students the opportunity to sign up for topics, teams, submit assignments and peer reviews.&lt;br /&gt;
&lt;br /&gt;
== [[Problem Statement]] ==&lt;br /&gt;
&lt;br /&gt;
Assignment.rb is a large file, that has dozens of methods and fields. Some methods seem redundant, and some fields and string literals are repeated multiple times throughout the file. Ie. 'Finished'. Each method in the file is essential and provides different data, so the goal for my team was to rename and merge code where we could, while not affecting the end functionality.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Problem Solution]] ==&lt;br /&gt;
&lt;br /&gt;
Due to the fragile nature of the methods in Assignment.rb, our team decided to focus on redundancy in the code and anywhere we could merge redundant code into common methods. Also there were quite a few strings that were used constantly in the file, ie. 'Finished' that we decided to make constants, to reduce complexity if the values ever changed.&lt;br /&gt;
&lt;br /&gt;
== [[Refactors]] ==&lt;br /&gt;
&lt;br /&gt;
- One of the main issues I saw in the code was the reuse of string literals in comparisons. These would cause hige efforts to change later if there are hundreds of places where these strings are used. Instead I replaced all instances of these strings in the file with constants, to lower complexity.&lt;br /&gt;
&lt;br /&gt;
Added these constants to file:&lt;br /&gt;
&lt;br /&gt;
  # Constants for common fields, to reduce complexity if change is needed&lt;br /&gt;
  FINISHED_CONST = 'Finished'.freeze&lt;br /&gt;
  UNKNOWN_CONST = 'Unknown'.freeze&lt;br /&gt;
&lt;br /&gt;
Removed references to string literals and made constant values&lt;br /&gt;
&lt;br /&gt;
  due_date == FINISHED_CONST&lt;br /&gt;
  return (topic_id.nil? ? UNKNOWN_CONST : get_current_stage(topic_id))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- The next issue I found was in multiple places where the code was making the same boolean checks. Instead rewtiting tge checks each time I made a method to return True/False for the check.&lt;br /&gt;
&lt;br /&gt;
 # Function to check if topic id is null when its a staggered assignment, to prevent redundancy&lt;br /&gt;
  def topic_missing?(topic_id = nil)&lt;br /&gt;
    topic_id.nil? and self.staggered_deadline?&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
== [[Testing]] ==&lt;br /&gt;
&lt;br /&gt;
For testing, assignment.rb was already tested pretty well. According to Code Climate it had a B grade for test coverage. Thus the testing effort for this project was not heavy, but we did want to be sure that none of our changes broke any existing tests, and all of our additional methods were tested. For example, one new method we added was:&lt;br /&gt;
&lt;br /&gt;
 # New function to check if the assignment is finished&lt;br /&gt;
  def finished?(topic_id = nil)&lt;br /&gt;
    next_due_date(topic_id).nil?&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
For this method we addes a few tests to validate the method was returning the values we expect. &lt;br /&gt;
&lt;br /&gt;
  describe '#finished?' do&lt;br /&gt;
    context 'when assignment next due date is nil' do&lt;br /&gt;
      it 'returns True' do&lt;br /&gt;
        allow(DueDate).to receive(:get_next_due_date).with(1, 123).and_return(nil)&lt;br /&gt;
        expect(assignment.finished?(123)).to eq(true)&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    context 'when there is a next due date' do&lt;br /&gt;
      it 'returns False' do&lt;br /&gt;
        allow(DueDate).to receive(:get_next_due_date).with(1, 123).and_return('2021-11-11 11:11:11')&lt;br /&gt;
        expect(assignment.finished?(123)).to eq(false)&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;/div&gt;</summary>
		<author><name>Ahubber</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_Refactor_assignment.rb&amp;diff=132326</id>
		<title>CSC/ECE 517 Spring 2020 Refactor assignment.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_Refactor_assignment.rb&amp;diff=132326"/>
		<updated>2020-03-31T16:28:27Z</updated>

		<summary type="html">&lt;p&gt;Ahubber: /* Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== [[Abstract]] ==&lt;br /&gt;
&lt;br /&gt;
Expertiza is a web application using Ruby on Rails framework. The creation and maintenance of this application is handled by NCSU students and faculty. The basic functionalities allow the instructor to create and edit, both new and existing assignments. Also it allows the publishing of surveys and peer reviews, while allowing students the opportunity to sign up for topics, teams, submit assignments and peer reviews.&lt;br /&gt;
&lt;br /&gt;
== [[Problem Statement]] ==&lt;br /&gt;
&lt;br /&gt;
Assignment.rb is a large file, that has dozens of methods and fields. Some methods seem redundant, and some fields and string literals are repeated multiple times throughout the file. Ie. 'Finished'. Each method in the file is essential and provides different data, so the goal for my team was to rename and merge code where we could, while not affecting the end functionality.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Problem Solution]] ==&lt;br /&gt;
&lt;br /&gt;
Due to the fragile nature of the methods in Assignment.rb, our team decided to focus on redundancy in the code and anywhere we could merge redundant code into common methods. Also there were quite a few strings that were used constantly in the file, ie. 'Finished' that we decided to make constants, to reduce complexity if the values ever changed.&lt;br /&gt;
&lt;br /&gt;
== [[Refactors]] ==&lt;br /&gt;
&lt;br /&gt;
- One of the main issues I saw in the code was the reuse of string literals in comparisons. These would cause hige efforts to change later if there are hundreds of places where these strings are used. Instead I replaced all instances of these strings in the file with constants, to lower complexity.&lt;br /&gt;
&lt;br /&gt;
Added these constants to file:&lt;br /&gt;
&lt;br /&gt;
  # Constants for common fields, to reduce complexity if change is needed&lt;br /&gt;
  FINISHED_CONST = 'Finished'.freeze&lt;br /&gt;
  UNKNOWN_CONST = 'Unknown'.freeze&lt;br /&gt;
&lt;br /&gt;
Removed references to string literals and made constant values&lt;br /&gt;
&lt;br /&gt;
  due_date == FINISHED_CONST&lt;br /&gt;
  return (topic_id.nil? ? UNKNOWN_CONST : get_current_stage(topic_id))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- The next issue I found was in multiple places where the code was making the same boolean checks. Instead rewtiting tge checks each time I made a method to return True/False for the check.&lt;br /&gt;
&lt;br /&gt;
 # Function to check if topic id is null when its a staggered assignment, to prevent redundancy&lt;br /&gt;
  def topic_missing?(topic_id = nil)&lt;br /&gt;
    topic_id.nil? and self.staggered_deadline?&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
== [[Testing]] ==&lt;br /&gt;
&lt;br /&gt;
For testing, assignment.rb was already tested pretty well. According to Code Climate it had a B grade for test coverage. Thus the testing effort for this project was not heavy, but we did want to be sure that none of our changes broke any existing tests, and all of our additional methods were tested. For example, one new method we added was:&lt;br /&gt;
&lt;br /&gt;
 # New function to check if the assignment is finished&lt;br /&gt;
  def finished?(topic_id = nil)&lt;br /&gt;
    next_due_date(topic_id).nil?&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
For this method we addes a few tests to validate the method was returning the values we expect. &lt;br /&gt;
&lt;br /&gt;
describe '#finished?' do&lt;br /&gt;
    context 'when assignment next due date is nil' do&lt;br /&gt;
      it 'returns True' do&lt;br /&gt;
        allow(DueDate).to receive(:get_next_due_date).with(1, 123).and_return(nil)&lt;br /&gt;
        expect(assignment.finished?(123)).to eq(true)&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    context 'when there is a next due date' do&lt;br /&gt;
      it 'returns False' do&lt;br /&gt;
        allow(DueDate).to receive(:get_next_due_date).with(1, 123).and_return('2021-11-11 11:11:11')&lt;br /&gt;
        expect(assignment.finished?(123)).to eq(false)&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;/div&gt;</summary>
		<author><name>Ahubber</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_Refactor_assignment.rb&amp;diff=132273</id>
		<title>CSC/ECE 517 Spring 2020 Refactor assignment.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_Refactor_assignment.rb&amp;diff=132273"/>
		<updated>2020-03-30T22:19:54Z</updated>

		<summary type="html">&lt;p&gt;Ahubber: /* Refactors */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== [[Abstract]] ==&lt;br /&gt;
&lt;br /&gt;
Expertiza is a web application using Ruby on Rails framework. The creation and maintenance of this application is handled by NCSU students and faculty. The basic functionalities allow the instructor to create and edit, both new and existing assignments. Also it allows the publishing of surveys and peer reviews, while allowing students the opportunity to sign up for topics, teams, submit assignments and peer reviews.&lt;br /&gt;
&lt;br /&gt;
== [[Problem Statement]] ==&lt;br /&gt;
&lt;br /&gt;
Assignment.rb is a large file, that has dozens of methods and fields. Some methods seem redundant, and some fields and string literals are repeated multiple times throughout the file. Ie. 'Finished'. Each method in the file is essential and provides different data, so the goal for my team was to rename and merge code where we could, while not affecting the end functionality.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Problem Solution]] ==&lt;br /&gt;
&lt;br /&gt;
Due to the fragile nature of the methods in Assignment.rb, our team decided to focus on redundancy in the code and anywhere we could merge redundant code into common methods. Also there were quite a few strings that were used constantly in the file, ie. 'Finished' that we decided to make constants, to reduce complexity if the values ever changed.&lt;br /&gt;
&lt;br /&gt;
== [[Refactors]] ==&lt;br /&gt;
&lt;br /&gt;
- One of the main issues I saw in the code was the reuse of string literals in comparisons. These would cause hige efforts to change later if there are hundreds of places where these strings are used. Instead I replaced all instances of these strings in the file with constants, to lower complexity.&lt;br /&gt;
&lt;br /&gt;
Added these constants to file:&lt;br /&gt;
&lt;br /&gt;
  # Constants for common fields, to reduce complexity if change is needed&lt;br /&gt;
  FINISHED_CONST = 'Finished'.freeze&lt;br /&gt;
  UNKNOWN_CONST = 'Unknown'.freeze&lt;br /&gt;
&lt;br /&gt;
Removed references to string literals and made constant values&lt;br /&gt;
&lt;br /&gt;
  due_date == FINISHED_CONST&lt;br /&gt;
  return (topic_id.nil? ? UNKNOWN_CONST : get_current_stage(topic_id))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- The next issue I found was in multiple places where the code was making the same boolean checks. Instead rewtiting tge checks each time I made a method to return True/False for the check.&lt;br /&gt;
&lt;br /&gt;
 # Function to check if topic id is null when its a staggered assignment, to prevent redundancy&lt;br /&gt;
  def topic_missing?(topic_id = nil)&lt;br /&gt;
    topic_id.nil? and self.staggered_deadline?&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
== [[Testing]] ==&lt;/div&gt;</summary>
		<author><name>Ahubber</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_Refactor_assignment.rb&amp;diff=132272</id>
		<title>CSC/ECE 517 Spring 2020 Refactor assignment.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_Refactor_assignment.rb&amp;diff=132272"/>
		<updated>2020-03-30T22:17:14Z</updated>

		<summary type="html">&lt;p&gt;Ahubber: /* Refactors */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== [[Abstract]] ==&lt;br /&gt;
&lt;br /&gt;
Expertiza is a web application using Ruby on Rails framework. The creation and maintenance of this application is handled by NCSU students and faculty. The basic functionalities allow the instructor to create and edit, both new and existing assignments. Also it allows the publishing of surveys and peer reviews, while allowing students the opportunity to sign up for topics, teams, submit assignments and peer reviews.&lt;br /&gt;
&lt;br /&gt;
== [[Problem Statement]] ==&lt;br /&gt;
&lt;br /&gt;
Assignment.rb is a large file, that has dozens of methods and fields. Some methods seem redundant, and some fields and string literals are repeated multiple times throughout the file. Ie. 'Finished'. Each method in the file is essential and provides different data, so the goal for my team was to rename and merge code where we could, while not affecting the end functionality.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Problem Solution]] ==&lt;br /&gt;
&lt;br /&gt;
Due to the fragile nature of the methods in Assignment.rb, our team decided to focus on redundancy in the code and anywhere we could merge redundant code into common methods. Also there were quite a few strings that were used constantly in the file, ie. 'Finished' that we decided to make constants, to reduce complexity if the values ever changed.&lt;br /&gt;
&lt;br /&gt;
== [[Refactors]] ==&lt;br /&gt;
&lt;br /&gt;
One of the main issues I saw in the code was the reuse of string literals in comparisons. These would cause hige efforts to change later if there are hundreds of places where these strings are used. Instead I replaced all instances of these strings in the file with constants, to lower complexity.&lt;br /&gt;
&lt;br /&gt;
Added these constants to file:&lt;br /&gt;
&lt;br /&gt;
  # Constants for common fields, to reduce complexity if change is needed&lt;br /&gt;
  FINISHED_CONST = 'Finished'.freeze&lt;br /&gt;
  UNKNOWN_CONST = 'Unknown'.freeze&lt;br /&gt;
&lt;br /&gt;
Removed references to string literals and made constant values&lt;br /&gt;
&lt;br /&gt;
  due_date == FINISHED_CONST&lt;br /&gt;
  return (topic_id.nil? ? UNKNOWN_CONST : get_current_stage(topic_id))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The next issue I found was in multiple places where the code was making the same boolean checks. Instead rewtiting tge checks each time I made a method to return True/False for the check.&lt;br /&gt;
&lt;br /&gt;
 # Function to check if topic id is null when its a staggered assignment, to prevent redundancy&lt;br /&gt;
  def topic_missing?(topic_id = nil)&lt;br /&gt;
    topic_id.nil? and self.staggered_deadline?&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
== [[Testing]] ==&lt;/div&gt;</summary>
		<author><name>Ahubber</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_Refactor_assignment.rb&amp;diff=132270</id>
		<title>CSC/ECE 517 Spring 2020 Refactor assignment.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_Refactor_assignment.rb&amp;diff=132270"/>
		<updated>2020-03-30T22:16:06Z</updated>

		<summary type="html">&lt;p&gt;Ahubber: /* Refactors */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== [[Abstract]] ==&lt;br /&gt;
&lt;br /&gt;
Expertiza is a web application using Ruby on Rails framework. The creation and maintenance of this application is handled by NCSU students and faculty. The basic functionalities allow the instructor to create and edit, both new and existing assignments. Also it allows the publishing of surveys and peer reviews, while allowing students the opportunity to sign up for topics, teams, submit assignments and peer reviews.&lt;br /&gt;
&lt;br /&gt;
== [[Problem Statement]] ==&lt;br /&gt;
&lt;br /&gt;
Assignment.rb is a large file, that has dozens of methods and fields. Some methods seem redundant, and some fields and string literals are repeated multiple times throughout the file. Ie. 'Finished'. Each method in the file is essential and provides different data, so the goal for my team was to rename and merge code where we could, while not affecting the end functionality.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Problem Solution]] ==&lt;br /&gt;
&lt;br /&gt;
Due to the fragile nature of the methods in Assignment.rb, our team decided to focus on redundancy in the code and anywhere we could merge redundant code into common methods. Also there were quite a few strings that were used constantly in the file, ie. 'Finished' that we decided to make constants, to reduce complexity if the values ever changed.&lt;br /&gt;
&lt;br /&gt;
== [[Refactors]] ==&lt;br /&gt;
&lt;br /&gt;
One of the main issues I saw in the code was the reuse of string literals in comparisons. These would cause hige efforts to change later if there are hundreds of places where these strings are used. Instead I replaced all instances of these strings in the file with constants, to lower complexity.&lt;br /&gt;
&lt;br /&gt;
Added these constants to file:&lt;br /&gt;
&lt;br /&gt;
  # Constants for common fields, to reduce complexity if change is needed&lt;br /&gt;
  FINISHED_CONST = 'Finished'.freeze&lt;br /&gt;
  UNKNOWN_CONST = 'Unknown'.freeze&lt;br /&gt;
&lt;br /&gt;
Removed references to string literals and made constant values&lt;br /&gt;
&lt;br /&gt;
  due_date == FINISHED_CONST&lt;br /&gt;
  return (topic_id.nil? ? UNKNOWN_CONST : get_current_stage(topic_id))&lt;br /&gt;
&lt;br /&gt;
== [[Testing]] ==&lt;/div&gt;</summary>
		<author><name>Ahubber</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_Refactor_assignment.rb&amp;diff=132269</id>
		<title>CSC/ECE 517 Spring 2020 Refactor assignment.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_Refactor_assignment.rb&amp;diff=132269"/>
		<updated>2020-03-30T22:14:22Z</updated>

		<summary type="html">&lt;p&gt;Ahubber: /* Problem Solution */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== [[Abstract]] ==&lt;br /&gt;
&lt;br /&gt;
Expertiza is a web application using Ruby on Rails framework. The creation and maintenance of this application is handled by NCSU students and faculty. The basic functionalities allow the instructor to create and edit, both new and existing assignments. Also it allows the publishing of surveys and peer reviews, while allowing students the opportunity to sign up for topics, teams, submit assignments and peer reviews.&lt;br /&gt;
&lt;br /&gt;
== [[Problem Statement]] ==&lt;br /&gt;
&lt;br /&gt;
Assignment.rb is a large file, that has dozens of methods and fields. Some methods seem redundant, and some fields and string literals are repeated multiple times throughout the file. Ie. 'Finished'. Each method in the file is essential and provides different data, so the goal for my team was to rename and merge code where we could, while not affecting the end functionality.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Problem Solution]] ==&lt;br /&gt;
&lt;br /&gt;
Due to the fragile nature of the methods in Assignment.rb, our team decided to focus on redundancy in the code and anywhere we could merge redundant code into common methods. Also there were quite a few strings that were used constantly in the file, ie. 'Finished' that we decided to make constants, to reduce complexity if the values ever changed.&lt;br /&gt;
&lt;br /&gt;
== [[Refactors]] ==&lt;br /&gt;
&lt;br /&gt;
Added these constants to file:&lt;br /&gt;
&lt;br /&gt;
  # Constants for common fields, to reduce complexity if change is needed&lt;br /&gt;
  FINISHED_CONST = 'Finished'.freeze&lt;br /&gt;
  UNKNOWN_CONST = 'Unknown'.freeze&lt;br /&gt;
&lt;br /&gt;
Removed references to string literals and made constant values&lt;br /&gt;
&lt;br /&gt;
  due_date == FINISHED_CONST&lt;br /&gt;
  return (topic_id.nil? ? UNKNOWN_CONST : get_current_stage(topic_id))&lt;br /&gt;
&lt;br /&gt;
== [[Testing]] ==&lt;/div&gt;</summary>
		<author><name>Ahubber</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_Refactor_assignment.rb&amp;diff=132253</id>
		<title>CSC/ECE 517 Spring 2020 Refactor assignment.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_Refactor_assignment.rb&amp;diff=132253"/>
		<updated>2020-03-30T21:05:09Z</updated>

		<summary type="html">&lt;p&gt;Ahubber: /* Refactors */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== [[Abstract]] ==&lt;br /&gt;
&lt;br /&gt;
Expertiza is a web application using Ruby on Rails framework. The creation and maintenance of this application is handled by NCSU students and faculty. The basic functionalities allow the instructor to create and edit, both new and existing assignments. Also it allows the publishing of surveys and peer reviews, while allowing students the opportunity to sign up for topics, teams, submit assignments and peer reviews.&lt;br /&gt;
&lt;br /&gt;
== [[Problem Statement]] ==&lt;br /&gt;
&lt;br /&gt;
Assignment.rb is a large file, that has dozens of methods and fields. Some methods seem redundant, and some fields and string literals are repeated multiple times throughout the file. Ie. 'Finished'. Each method in the file is essential and provides different data, so the goal for my team was to rename and merge code where we could, while not affecting the end functionality.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Problem Solution]] ==&lt;br /&gt;
&lt;br /&gt;
Due to the fragile nature of the methods in Assignment.rb, our team decided to focus on redundancy in the code and anywhere we could merge redundant code into common methods. Also there were quite a few strings that were used constantly in the file, ie. 'Finished' that we decided to make constants, to reduce complexity if the values ever changed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Refactors]] ==&lt;br /&gt;
&lt;br /&gt;
Added these constants to file:&lt;br /&gt;
&lt;br /&gt;
  # Constants for common fields, to reduce complexity if change is needed&lt;br /&gt;
  FINISHED_CONST = 'Finished'.freeze&lt;br /&gt;
  UNKNOWN_CONST = 'Unknown'.freeze&lt;br /&gt;
&lt;br /&gt;
Removed references to string literals and made constant values&lt;br /&gt;
&lt;br /&gt;
  due_date == FINISHED_CONST&lt;br /&gt;
  return (topic_id.nil? ? UNKNOWN_CONST : get_current_stage(topic_id))&lt;br /&gt;
&lt;br /&gt;
== [[Testing]] ==&lt;/div&gt;</summary>
		<author><name>Ahubber</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_Refactor_assignment.rb&amp;diff=132252</id>
		<title>CSC/ECE 517 Spring 2020 Refactor assignment.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_Refactor_assignment.rb&amp;diff=132252"/>
		<updated>2020-03-30T21:04:20Z</updated>

		<summary type="html">&lt;p&gt;Ahubber: /* Refactors */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== [[Abstract]] ==&lt;br /&gt;
&lt;br /&gt;
Expertiza is a web application using Ruby on Rails framework. The creation and maintenance of this application is handled by NCSU students and faculty. The basic functionalities allow the instructor to create and edit, both new and existing assignments. Also it allows the publishing of surveys and peer reviews, while allowing students the opportunity to sign up for topics, teams, submit assignments and peer reviews.&lt;br /&gt;
&lt;br /&gt;
== [[Problem Statement]] ==&lt;br /&gt;
&lt;br /&gt;
Assignment.rb is a large file, that has dozens of methods and fields. Some methods seem redundant, and some fields and string literals are repeated multiple times throughout the file. Ie. 'Finished'. Each method in the file is essential and provides different data, so the goal for my team was to rename and merge code where we could, while not affecting the end functionality.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Problem Solution]] ==&lt;br /&gt;
&lt;br /&gt;
Due to the fragile nature of the methods in Assignment.rb, our team decided to focus on redundancy in the code and anywhere we could merge redundant code into common methods. Also there were quite a few strings that were used constantly in the file, ie. 'Finished' that we decided to make constants, to reduce complexity if the values ever changed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Refactors]] ==&lt;br /&gt;
&lt;br /&gt;
Added these constants to file:&lt;br /&gt;
&lt;br /&gt;
  # Constants for common fields, to reduce complexity if change is needed&lt;br /&gt;
  FINISHED_CONST = 'Finished'.freeze&lt;br /&gt;
  UNKNOWN_CONST = 'Unknown'.freeze&lt;br /&gt;
&lt;br /&gt;
  due_date == FINISHED_CONST&lt;br /&gt;
  return (topic_id.nil? ? UNKNOWN_CONST : get_current_stage(topic_id))&lt;br /&gt;
&lt;br /&gt;
== [[Testing]] ==&lt;/div&gt;</summary>
		<author><name>Ahubber</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_Refactor_assignment.rb&amp;diff=132247</id>
		<title>CSC/ECE 517 Spring 2020 Refactor assignment.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_Refactor_assignment.rb&amp;diff=132247"/>
		<updated>2020-03-30T19:29:15Z</updated>

		<summary type="html">&lt;p&gt;Ahubber: /* Refactors */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== [[Abstract]] ==&lt;br /&gt;
&lt;br /&gt;
Expertiza is a web application using Ruby on Rails framework. The creation and maintenance of this application is handled by NCSU students and faculty. The basic functionalities allow the instructor to create and edit, both new and existing assignments. Also it allows the publishing of surveys and peer reviews, while allowing students the opportunity to sign up for topics, teams, submit assignments and peer reviews.&lt;br /&gt;
&lt;br /&gt;
== [[Problem Statement]] ==&lt;br /&gt;
&lt;br /&gt;
Assignment.rb is a large file, that has dozens of methods and fields. Some methods seem redundant, and some fields and string literals are repeated multiple times throughout the file. Ie. 'Finished'. Each method in the file is essential and provides different data, so the goal for my team was to rename and merge code where we could, while not affecting the end functionality.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Problem Solution]] ==&lt;br /&gt;
&lt;br /&gt;
Due to the fragile nature of the methods in Assignment.rb, our team decided to focus on redundancy in the code and anywhere we could merge redundant code into common methods. Also there were quite a few strings that were used constantly in the file, ie. 'Finished' that we decided to make constants, to reduce complexity if the values ever changed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Refactors]] ==&lt;br /&gt;
&lt;br /&gt;
Added these constants to file:&lt;br /&gt;
&lt;br /&gt;
  # Constants for common fields, to reduce complexity if change is needed&lt;br /&gt;
  FINISHED_CONST = 'Finished'.freeze&lt;br /&gt;
  UNKNOWN_CONST = 'Unknown'.freeze&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(topic_id.nil? ? UNKNOWN_CONST : get_current_stage(topic_id))&lt;br /&gt;
due_date == FINISHED_CONST&lt;br /&gt;
&lt;br /&gt;
== [[Testing]] ==&lt;/div&gt;</summary>
		<author><name>Ahubber</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_Refactor_assignment.rb&amp;diff=132246</id>
		<title>CSC/ECE 517 Spring 2020 Refactor assignment.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_Refactor_assignment.rb&amp;diff=132246"/>
		<updated>2020-03-30T19:18:09Z</updated>

		<summary type="html">&lt;p&gt;Ahubber: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== [[Abstract]] ==&lt;br /&gt;
&lt;br /&gt;
Expertiza is a web application using Ruby on Rails framework. The creation and maintenance of this application is handled by NCSU students and faculty. The basic functionalities allow the instructor to create and edit, both new and existing assignments. Also it allows the publishing of surveys and peer reviews, while allowing students the opportunity to sign up for topics, teams, submit assignments and peer reviews.&lt;br /&gt;
&lt;br /&gt;
== [[Problem Statement]] ==&lt;br /&gt;
&lt;br /&gt;
Assignment.rb is a large file, that has dozens of methods and fields. Some methods seem redundant, and some fields and string literals are repeated multiple times throughout the file. Ie. 'Finished'. Each method in the file is essential and provides different data, so the goal for my team was to rename and merge code where we could, while not affecting the end functionality.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Problem Solution]] ==&lt;br /&gt;
&lt;br /&gt;
Due to the fragile nature of the methods in Assignment.rb, our team decided to focus on redundancy in the code and anywhere we could merge redundant code into common methods. Also there were quite a few strings that were used constantly in the file, ie. 'Finished' that we decided to make constants, to reduce complexity if the values ever changed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Refactors]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Testing]] ==&lt;/div&gt;</summary>
		<author><name>Ahubber</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_Refactor_assignment.rb&amp;diff=132245</id>
		<title>CSC/ECE 517 Spring 2020 Refactor assignment.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_Refactor_assignment.rb&amp;diff=132245"/>
		<updated>2020-03-30T19:17:48Z</updated>

		<summary type="html">&lt;p&gt;Ahubber: /* Problem Solution */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== [[Abstract]] ==&lt;br /&gt;
&lt;br /&gt;
Expertiza is a web application using Ruby on Rails framework. The creation and maintenance of this application is handled by NCSU students and faculty. The basic functionalities allow the instructor to create and edit, both new and existing assignments. Also it allows the publishing of surveys and peer reviews, while allowing students the opportunity to sign up for topics, teams, submit assignments and peer reviews.&lt;br /&gt;
&lt;br /&gt;
== [[Problem Statement]] ==&lt;br /&gt;
&lt;br /&gt;
Assignment.rb is a large file, that has dozens of methods and fields. Some methods seem redundant, and some fields and string literals are repeated multiple times throughout the file. Ie. 'Finished'. Each method in the file is essential and provides different data, so the goal for my team was to rename and merge code where we could, while not affecting the end functionality.&lt;br /&gt;
&lt;br /&gt;
== [[Problem Solution]] ==&lt;br /&gt;
&lt;br /&gt;
Due to the fragile nature of the methods in Assignment.rb, our team decided to focus on redundancy in the code and anywhere we could merge redundant code into common methods. Also there were quite a few strings that were used constantly in the file, ie. 'Finished' that we decided to make constants, to reduce complexity if the values ever changed.&lt;br /&gt;
&lt;br /&gt;
== [[Process]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Refactors]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Testing]] ==&lt;/div&gt;</summary>
		<author><name>Ahubber</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_Refactor_assignment.rb&amp;diff=132244</id>
		<title>CSC/ECE 517 Spring 2020 Refactor assignment.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_Refactor_assignment.rb&amp;diff=132244"/>
		<updated>2020-03-30T19:10:48Z</updated>

		<summary type="html">&lt;p&gt;Ahubber: /* Abstract */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== [[Abstract]] ==&lt;br /&gt;
&lt;br /&gt;
Expertiza is a web application using Ruby on Rails framework. The creation and maintenance of this application is handled by NCSU students and faculty. The basic functionalities allow the instructor to create and edit, both new and existing assignments. Also it allows the publishing of surveys and peer reviews, while allowing students the opportunity to sign up for topics, teams, submit assignments and peer reviews.&lt;br /&gt;
&lt;br /&gt;
== [[Problem Statement]] ==&lt;br /&gt;
&lt;br /&gt;
Assignment.rb is a large file, that has dozens of methods and fields. Some methods seem redundant, and some fields and string literals are repeated multiple times throughout the file. Ie. 'Finished'. Each method in the file is essential and provides different data, so the goal for my team was to rename and merge code where we could, while not affecting the end functionality.&lt;br /&gt;
&lt;br /&gt;
== [[Problem Solution]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Process]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Refactors]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Testing]] ==&lt;/div&gt;</summary>
		<author><name>Ahubber</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_Refactor_assignment.rb&amp;diff=132243</id>
		<title>CSC/ECE 517 Spring 2020 Refactor assignment.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_Refactor_assignment.rb&amp;diff=132243"/>
		<updated>2020-03-30T18:59:04Z</updated>

		<summary type="html">&lt;p&gt;Ahubber: /* Problem Statement */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== [[Abstract]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Problem Statement]] ==&lt;br /&gt;
&lt;br /&gt;
Assignment.rb is a large file, that has dozens of methods and fields. Some methods seem redundant, and some fields and string literals are repeated multiple times throughout the file. Ie. 'Finished'. Each method in the file is essential and provides different data, so the goal for my team was to rename and merge code where we could, while not affecting the end functionality.&lt;br /&gt;
&lt;br /&gt;
== [[Problem Solution]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Process]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Refactors]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Testing]] ==&lt;/div&gt;</summary>
		<author><name>Ahubber</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_Refactor_assignment.rb&amp;diff=132242</id>
		<title>CSC/ECE 517 Spring 2020 Refactor assignment.rb</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2020_Refactor_assignment.rb&amp;diff=132242"/>
		<updated>2020-03-30T18:54:13Z</updated>

		<summary type="html">&lt;p&gt;Ahubber: Created page with &amp;quot; == Abstract ==   == Problem Statement ==   == Problem Solution ==   == Process ==   == Refactors ==   == Testing ==&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== [[Abstract]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Problem Statement]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Problem Solution]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Process]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Refactors]] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Testing]] ==&lt;/div&gt;</summary>
		<author><name>Ahubber</name></author>
	</entry>
</feed>