<?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=Rsinha2</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=Rsinha2"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Rsinha2"/>
	<updated>2026-07-02T13:12:15Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=105570</id>
		<title>CSC/ECE 517 Fall 2016/E1698. Instructor/student control of anonymity + group-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=105570"/>
		<updated>2016-11-14T04:22:55Z</updated>

		<summary type="html">&lt;p&gt;Rsinha2: /* Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction=&lt;br /&gt;
==Purpose==&lt;br /&gt;
'''Scenario:'''  An instructor using Expertiza wants to do an experiment comparing anonymous review with identified (non-anonymous) review.  And in general, there is quite a bit of research interest in the implications of anonymity in student interactions.  In this experiment, &lt;br /&gt;
&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews in small groups (4-5 students/group). The groups will stay the same for both rounds. The students in the groups should be able to see who they are reviewing and who is reviewing them.&lt;br /&gt;
For the non-anonymous groups, I'd like the students to be able to request group members, so I would want to be able to have some control, perhaps with an option to use random assignment to groups if they had no preference for group members.&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews anonymously (using the normal method we used this fall)&lt;br /&gt;
&lt;br /&gt;
'''What needs to be done''':  The Review Strategy tab of assignment creation needs have a new checkbox for anonymous reviews, which would be checked by default.  If it is checked, student views would be the same as at present.  If it is not checked, students would see their reviewers and grades in the same way as the instructor now sees them; thus, instead of seeing “Reviewer 1”, “Reviewer 2”, the student might see, “Anthony Adams”, “Bessie Brown”, etc.&lt;br /&gt;
&lt;br /&gt;
The code for displaying names obviously already exists, because it is used in the instructor views.  Implement the changes in an elegant way; for example, instead of checking multiple times in the view to determine whether the reviewer’s (or author’s) real name is to be displayed, try to send a message to a model class that will “do the right thing.”  This may involve creating separate model classes for anonymous and identified review, so that messages could be sent polymorphically.  It’s hard for me to know, without studying the code, whether this would simplify the code or clutter it, but please give some thought to what is the clearest and most robust way to code both anonymous &amp;amp; identified reviews, from the student’s and the instructor’s perspective.&lt;br /&gt;
&lt;br /&gt;
The other piece of the project is to enable review within groups, which means that every student in a group will review every other student in the group (but no students outside the group).  This can be configured on the Review Strategy tab when the review strategy is set to “Instructor-Selected”.  Under the “Set number of reviews done by each student” box, there could be another one, “Review done in groups of [ ] students”, where “[ ]” is a small text box.  There should also be an information button describing how group-based review works.&lt;br /&gt;
&lt;br /&gt;
==Scope==&lt;br /&gt;
The project provides instructor a functionality to make assignment reviews to be anonymous or non-anonymous. In addition, instructors have authority to create and assign review groups (students assigned same review group will review each others work) randomly.This scenario will be valid for individual assignments only. Also, anonymity is taken care from the perspective of reviewer as well as the reviewee. In case of non-anonymous groups, students may have the option to invite other students to join their group provided group size is not exceeding the maximum limit.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a peer review system which provides incremental learning from the class. This project has been developed together by faculty and students using [http://rubyonrails.org/ Ruby on Rails] framework. Expertiza allows the instructor to create, edit and delete assignments, create new assignment topics, assign them to a particular class or selected students, have students work on teams and then review each other's assignments at the end. For the students, they can signup for topics, form teams, and submit their projects and assignments. &lt;br /&gt;
Students then review the work done by other students and give suggestions to improve. Teams after reviews are allotted scores and they can refer to the peer comments to further improve their work. It also supports submission of different file types as well as URLs for assignments.&lt;br /&gt;
&lt;br /&gt;
=Design=&lt;br /&gt;
&lt;br /&gt;
'''Assignment Creation:'''&lt;br /&gt;
&lt;br /&gt;
Providing a checkbox in &amp;quot;review strategy tab&amp;quot; to mark an assignment to have anonymous or non-anonymous reviews. By default, every assignment will be having anonymous reviews but an instructor can change it by unchecking the checkbox (Anonymous would be boolean field present in the group model).&lt;br /&gt;
&lt;br /&gt;
'''Group Formation:'''&lt;br /&gt;
&lt;br /&gt;
The instructor has the authority to create and assign groups randomly. In this case, students can not drop the group they have been assigned and only an instructor can change their group if needed. &lt;br /&gt;
In case, a group has not been assigned by an instructor, students will have the functionality to invite other students to join their group. This functionality is analogous to the invite members to join their team. &lt;br /&gt;
Students in the same group can review work of their group members only.&lt;br /&gt;
&lt;br /&gt;
For this, we will be creating a separate model for groups and will store all the group information into the corresponding database table. In order to follow the DRY principle, we will try to integrate the group code with the code written for teams. &lt;br /&gt;
&lt;br /&gt;
[[File:UML-1.png]]&lt;br /&gt;
&lt;br /&gt;
'''Non Anonymous Reviews'''&lt;br /&gt;
&lt;br /&gt;
In the case of non-anonymous reviews, students will be able to see the names of all the group members who have graded their individual work. In addition, students can also see whose work they are going to grade so that the non-anonymity is maintained from both sides.&lt;br /&gt;
&lt;br /&gt;
*This is the view of the review strategy tab where the checkbox for anonymity has to be added &lt;br /&gt;
&lt;br /&gt;
[[File:viewToBeChanged1.png]]&lt;br /&gt;
&lt;br /&gt;
*This is the view where names would be visible to ensure non anonymity of reviews&lt;br /&gt;
&lt;br /&gt;
[[File:New1234.png]]&lt;br /&gt;
&lt;br /&gt;
===Experimental Use===&lt;br /&gt;
&lt;br /&gt;
This project is part of an experiment to test whether anonymity makes a difference in reviews of students, thus to implement it one assignment would be made as anonymous and another as anonymous and the quality and the review scores would be tested to say if there is a change in quality and values of control and test&lt;br /&gt;
&lt;br /&gt;
= UI Testing =&lt;br /&gt;
The project can be tested by doing the following:&lt;br /&gt;
&lt;br /&gt;
 Log in as Instructor using instructor6&lt;br /&gt;
 use password as password&lt;br /&gt;
 click on manage assignments&lt;br /&gt;
 Go to any assignment and edit&lt;br /&gt;
 click on the review strategy tab&lt;br /&gt;
 uncheck anonymity to disable anonymous reviews&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On the student side&lt;br /&gt;
 log in as student&lt;br /&gt;
 click on assignments&lt;br /&gt;
 select your scores&lt;br /&gt;
 select view reviews &lt;br /&gt;
&lt;br /&gt;
when you check your scores for each review when you log in as a student&lt;br /&gt;
you should see the name of the reviewer&lt;br /&gt;
appended to review 1&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
=Files to be Considered=&lt;br /&gt;
*controller/reveiw_mapping_controller.rb&lt;br /&gt;
&lt;br /&gt;
*controller/teams_controller.rb&lt;br /&gt;
&lt;br /&gt;
*model/team.rb&lt;br /&gt;
&lt;br /&gt;
*views/assignments/edit/_review_strategy.html.erb&lt;br /&gt;
&lt;br /&gt;
*views/grades/_reviews.html.erb&lt;br /&gt;
&lt;br /&gt;
=Key People=&lt;br /&gt;
===Developers===&lt;br /&gt;
*Bhavesh Kasliwal&lt;br /&gt;
*Bhavya Bansal&lt;br /&gt;
*Chinmoy Baruah&lt;br /&gt;
*Rishabh Sinha&lt;br /&gt;
&lt;br /&gt;
===Mentor===&lt;br /&gt;
*Ed Gehringer&lt;/div&gt;</summary>
		<author><name>Rsinha2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=105430</id>
		<title>CSC/ECE 517 Fall 2016/E1698. Instructor/student control of anonymity + group-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=105430"/>
		<updated>2016-11-11T21:10:54Z</updated>

		<summary type="html">&lt;p&gt;Rsinha2: /* Files to be Considered */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction=&lt;br /&gt;
==Purpose==&lt;br /&gt;
'''Scenario:'''  An instructor using Expertiza wants to do an experiment comparing anonymous review with identified (non-anonymous) review.  And in general, there is quite a bit of research interest in the implications of anonymity in student interactions.  In this experiment, &lt;br /&gt;
&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews in small groups (4-5 students/group). The groups will stay the same for both rounds. The students in the groups should be able to see who they are reviewing and who is reviewing them.&lt;br /&gt;
For the non-anonymous groups, I'd like the students to be able to request group members, so I would want to be able to have some control, perhaps with an option to use random assignment to groups if they had no preference for group members.&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews anonymously (using the normal method we used this fall)&lt;br /&gt;
&lt;br /&gt;
'''What needs to be done''':  The Review Strategy tab of assignment creation needs have a new checkbox for anonymous reviews, which would be checked by default.  If it is checked, student views would be the same as at present.  If it is not checked, students would see their reviewers and grades in the same way as the instructor now sees them; thus, instead of seeing “Reviewer 1”, “Reviewer 2”, the student might see, “Anthony Adams”, “Bessie Brown”, etc.&lt;br /&gt;
&lt;br /&gt;
The code for displaying names obviously already exists, because it is used in the instructor views.  Implement the changes in an elegant way; for example, instead of checking multiple times in the view to determine whether the reviewer’s (or author’s) real name is to be displayed, try to send a message to a model class that will “do the right thing.”  This may involve creating separate model classes for anonymous and identified review, so that messages could be sent polymorphically.  It’s hard for me to know, without studying the code, whether this would simplify the code or clutter it, but please give some thought to what is the clearest and most robust way to code both anonymous &amp;amp; identified reviews, from the student’s and the instructor’s perspective.&lt;br /&gt;
&lt;br /&gt;
The other piece of the project is to enable review within groups, which means that every student in a group will review every other student in the group (but no students outside the group).  This can be configured on the Review Strategy tab when the review strategy is set to “Instructor-Selected”.  Under the “Set number of reviews done by each student” box, there could be another one, “Review done in groups of [ ] students”, where “[ ]” is a small text box.  There should also be an information button describing how group-based review works.&lt;br /&gt;
&lt;br /&gt;
==Scope==&lt;br /&gt;
The project provides instructor a functionality to make assignment reviews to be anonymous or non-anonymous. In addition, instructors have authority to create and assign review groups (students assigned same review group will review each others work) randomly.This scenario will be valid for individual assignments only. Also, anonymity is taken care from the perspective of reviewer as well as the reviewee. In case of non-anonymous groups, students may have the option to invite other students to join their group provided group size is not exceeding the maximum limit.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a peer review system which provides incremental learning from the class. This project has been developed together by faculty and students using [http://rubyonrails.org/ Ruby on Rails] framework. Expertiza allows the instructor to create, edit and delete assignments, create new assignment topics, assign them to a particular class or selected students, have students work on teams and then review each other's assignments at the end. For the students, they can signup for topics, form teams, and submit their projects and assignments. &lt;br /&gt;
Students then review the work done by other students and give suggestions to improve. Teams after reviews are allotted scores and they can refer to the peer comments to further improve their work. It also supports submission of different file types as well as URLs for assignments.&lt;br /&gt;
&lt;br /&gt;
=Design=&lt;br /&gt;
&lt;br /&gt;
'''Assignment Creation:'''&lt;br /&gt;
&lt;br /&gt;
Providing a checkbox in &amp;quot;review strategy tab&amp;quot; to mark an assignment to have anonymous or non-anonymous reviews. By default, every assignment will be having anonymous reviews but an instructor can change it by unchecking the checkbox.&lt;br /&gt;
&lt;br /&gt;
'''Group Formation:'''&lt;br /&gt;
&lt;br /&gt;
The instructor has the authority to create and assign groups randomly. In this case, students can not drop the group they have been assigned and only an instructor can change their group if needed. &lt;br /&gt;
In case, a group has not been assigned by an instructor, students will have the functionality to invite other students to join their group. This functionality is analogous to the invite members to join their team. &lt;br /&gt;
Students in the same group can review work of their group members only.&lt;br /&gt;
&lt;br /&gt;
For this, we will be creating a separate model for groups and will store all the group information into the corresponding database table. In order to follow the DRY principle, we will try to integrate the group code with the code written for teams. &lt;br /&gt;
&lt;br /&gt;
'''Non Anonymous Reviews'''&lt;br /&gt;
&lt;br /&gt;
In the case of non-anonymous reviews, students will be able to see the names of all the group members who have graded their individual work. In addition, students can also see whose work they are going to grade so that the non-anonymity is maintained from both sides.&lt;br /&gt;
&lt;br /&gt;
*This is the view of the review strategy tab where the checkbox for anonymity has to be added &lt;br /&gt;
&lt;br /&gt;
[[File:viewToBeChanged1.png]]&lt;br /&gt;
&lt;br /&gt;
*This is the view where names would be visible to ensure non anonymity of reviews&lt;br /&gt;
&lt;br /&gt;
[[File:New1234.png]]&lt;br /&gt;
&lt;br /&gt;
===Experimental Use===&lt;br /&gt;
&lt;br /&gt;
This project is part of an experiment to test whether anonymity makes a difference in reviews of students, thus to implement it one assignment would be made as anonymous and another as anonymous and the quality and the review scores would be tested to say if there is a change in quality and values of control and test&lt;br /&gt;
&lt;br /&gt;
= UI Testing =&lt;br /&gt;
The project can be tested by doing the following:&lt;br /&gt;
&lt;br /&gt;
 Log in as Instructor using instructor6&lt;br /&gt;
 use password as password&lt;br /&gt;
 click on manage assignments&lt;br /&gt;
 Go to any assignment and edit&lt;br /&gt;
 click on the review strategy tab&lt;br /&gt;
 uncheck anonymity to disable anonymous reviews&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On the student side&lt;br /&gt;
 log in as student&lt;br /&gt;
 click on assignments&lt;br /&gt;
 select your scores&lt;br /&gt;
 select view reviews &lt;br /&gt;
&lt;br /&gt;
when you check your scores for each review when you log in as a student&lt;br /&gt;
you should see the name of the reviewer&lt;br /&gt;
appended to review 1&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
=Files to be Considered=&lt;br /&gt;
*controller/reveiw_mapping_controller.rb&lt;br /&gt;
&lt;br /&gt;
*controller/teams_controller.rb&lt;br /&gt;
&lt;br /&gt;
*model/team.rb&lt;br /&gt;
&lt;br /&gt;
*views/assignments/edit/_review_strategy.html.erb&lt;br /&gt;
&lt;br /&gt;
*views/grades/_reviews.html.erb&lt;br /&gt;
&lt;br /&gt;
=Key People=&lt;br /&gt;
===Developers===&lt;br /&gt;
*Bhavesh Kasliwal&lt;br /&gt;
*Bhavya Bansal&lt;br /&gt;
*Chinmoy Baruah&lt;br /&gt;
*Rishabh Sinha&lt;br /&gt;
&lt;br /&gt;
===Mentor===&lt;br /&gt;
*Ed Gehringer&lt;/div&gt;</summary>
		<author><name>Rsinha2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=105421</id>
		<title>CSC/ECE 517 Fall 2016/E1698. Instructor/student control of anonymity + group-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=105421"/>
		<updated>2016-11-11T19:28:53Z</updated>

		<summary type="html">&lt;p&gt;Rsinha2: /* Files to be Considered */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction=&lt;br /&gt;
==Purpose==&lt;br /&gt;
'''Scenario:'''  An instructor using Expertiza wants to do an experiment comparing anonymous review with identified (non-anonymous) review.  And in general, there is quite a bit of research interest in the implications of anonymity in student interactions.  In this experiment, &lt;br /&gt;
&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews in small groups (4-5 students/group). The groups will stay the same for both rounds. The students in the groups should be able to see who they are reviewing and who is reviewing them.&lt;br /&gt;
For the non-anonymous groups, I'd like the students to be able to request group members, so I would want to be able to have some control, perhaps with an option to use random assignment to groups if they had no preference for group members.&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews anonymously (using the normal method we used this fall)&lt;br /&gt;
&lt;br /&gt;
'''What needs to be done''':  The Review Strategy tab of assignment creation needs have a new checkbox for anonymous reviews, which would be checked by default.  If it is checked, student views would be the same as at present.  If it is not checked, students would see their reviewers and grades in the same way as the instructor now sees them; thus, instead of seeing “Reviewer 1”, “Reviewer 2”, the student might see, “Anthony Adams”, “Bessie Brown”, etc.&lt;br /&gt;
&lt;br /&gt;
The code for displaying names obviously already exists, because it is used in the instructor views.  Implement the changes in an elegant way; for example, instead of checking multiple times in the view to determine whether the reviewer’s (or author’s) real name is to be displayed, try to send a message to a model class that will “do the right thing.”  This may involve creating separate model classes for anonymous and identified review, so that messages could be sent polymorphically.  It’s hard for me to know, without studying the code, whether this would simplify the code or clutter it, but please give some thought to what is the clearest and most robust way to code both anonymous &amp;amp; identified reviews, from the student’s and the instructor’s perspective.&lt;br /&gt;
&lt;br /&gt;
The other piece of the project is to enable review within groups, which means that every student in a group will review every other student in the group (but no students outside the group).  This can be configured on the Review Strategy tab when the review strategy is set to “Instructor-Selected”.  Under the “Set number of reviews done by each student” box, there could be another one, “Review done in groups of [ ] students”, where “[ ]” is a small text box.  There should also be an information button describing how group-based review works.&lt;br /&gt;
&lt;br /&gt;
==Scope==&lt;br /&gt;
The project provides instructor a functionality to make assignment reviews to be anonymous or non-anonymous. In addition, instructors have authority to create and assign review groups (students assigned same review group will review each others work) randomly.This scenario will be valid for individual assignments only. Also, anonymity is taken care from the perspective of reviewer as well as the reviewee. In case of non-anonymous groups, students may have the option to invite other students to join their group provided group size is not exceeding the maximum limit.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a peer review system which provides incremental learning from the class. This project has been developed together by faculty and students using [http://rubyonrails.org/ Ruby on Rails] framework. Expertiza allows the instructor to create, edit and delete assignments, create new assignment topics, assign them to a particular class or selected students, have students work on teams and then review each other's assignments at the end. For the students, they can signup for topics, form teams, and submit their projects and assignments. &lt;br /&gt;
Students then review the work done by other students and give suggestions to improve. Teams after reviews are allotted scores and they can refer to the peer comments to further improve their work. It also supports submission of different file types as well as URLs for assignments.&lt;br /&gt;
&lt;br /&gt;
=Design=&lt;br /&gt;
&lt;br /&gt;
'''Assignment Creation:'''&lt;br /&gt;
&lt;br /&gt;
Providing a checkbox in &amp;quot;review strategy tab&amp;quot; to mark an assignment to have anonymous or non-anonymous reviews. By default, every assignment will be having anonymous reviews but an instructor can change it by unchecking the checkbox.&lt;br /&gt;
&lt;br /&gt;
'''Group Formation:'''&lt;br /&gt;
&lt;br /&gt;
The instructor has the authority to create and assign groups randomly. In this case, students can not drop the group they have been assigned and only an instructor can change their group if needed. &lt;br /&gt;
In case, a group has not been assigned by an instructor, students will have the functionality to invite other students to join their group. This functionality is analogous to the invite members to join their team. &lt;br /&gt;
Students in the same group can review work of their group members only.&lt;br /&gt;
&lt;br /&gt;
For this, we will be creating a separate model for groups and will store all the group information into the corresponding database table. In order to follow the DRY principle, we will try to integrate the group code with the code written for teams. &lt;br /&gt;
&lt;br /&gt;
'''Non Anonymous Reviews'''&lt;br /&gt;
&lt;br /&gt;
In the case of non-anonymous reviews, students will be able to see the names of all the group members who have graded their individual work. In addition, students can also see whose work they are going to grade so that the non-anonymity is maintained from both sides.&lt;br /&gt;
&lt;br /&gt;
*This is the view of the review strategy tab where the checkbox for anonymity has to be added &lt;br /&gt;
&lt;br /&gt;
[[File:viewToBeChanged1.png]]&lt;br /&gt;
&lt;br /&gt;
*This is the view where names would be visible to ensure non anonymity of reviews&lt;br /&gt;
&lt;br /&gt;
[[File:New1234.png]]&lt;br /&gt;
&lt;br /&gt;
===Experimental Use===&lt;br /&gt;
&lt;br /&gt;
This project is part of an experiment to test whether anonymity makes a difference in reviews of students, thus to implement it one assignment would be made as anonymous and another as anonymous and the quality and the review scores would be tested to say if there is a change in quality and values of control and test&lt;br /&gt;
&lt;br /&gt;
=Files to be Considered=&lt;br /&gt;
*controller/reveiw_mapping_controller.rb&lt;br /&gt;
&lt;br /&gt;
*controller/teams_controller.rb&lt;br /&gt;
&lt;br /&gt;
*model/team.rb&lt;br /&gt;
&lt;br /&gt;
*views/assignments/edit/_review_strategy.html.erb&lt;br /&gt;
&lt;br /&gt;
*views/grades/_reviews.html.erb&lt;br /&gt;
&lt;br /&gt;
=Key People=&lt;br /&gt;
===Developers===&lt;br /&gt;
*Bhavesh Kasliwal&lt;br /&gt;
*Bhavya Bansal&lt;br /&gt;
*Chinmoy Baruah&lt;br /&gt;
*Rishabh Sinha&lt;br /&gt;
&lt;br /&gt;
===Mentor===&lt;br /&gt;
*Ed Gehringer&lt;/div&gt;</summary>
		<author><name>Rsinha2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=105420</id>
		<title>CSC/ECE 517 Fall 2016/E1698. Instructor/student control of anonymity + group-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=105420"/>
		<updated>2016-11-11T19:28:00Z</updated>

		<summary type="html">&lt;p&gt;Rsinha2: /* Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction=&lt;br /&gt;
==Purpose==&lt;br /&gt;
'''Scenario:'''  An instructor using Expertiza wants to do an experiment comparing anonymous review with identified (non-anonymous) review.  And in general, there is quite a bit of research interest in the implications of anonymity in student interactions.  In this experiment, &lt;br /&gt;
&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews in small groups (4-5 students/group). The groups will stay the same for both rounds. The students in the groups should be able to see who they are reviewing and who is reviewing them.&lt;br /&gt;
For the non-anonymous groups, I'd like the students to be able to request group members, so I would want to be able to have some control, perhaps with an option to use random assignment to groups if they had no preference for group members.&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews anonymously (using the normal method we used this fall)&lt;br /&gt;
&lt;br /&gt;
'''What needs to be done''':  The Review Strategy tab of assignment creation needs have a new checkbox for anonymous reviews, which would be checked by default.  If it is checked, student views would be the same as at present.  If it is not checked, students would see their reviewers and grades in the same way as the instructor now sees them; thus, instead of seeing “Reviewer 1”, “Reviewer 2”, the student might see, “Anthony Adams”, “Bessie Brown”, etc.&lt;br /&gt;
&lt;br /&gt;
The code for displaying names obviously already exists, because it is used in the instructor views.  Implement the changes in an elegant way; for example, instead of checking multiple times in the view to determine whether the reviewer’s (or author’s) real name is to be displayed, try to send a message to a model class that will “do the right thing.”  This may involve creating separate model classes for anonymous and identified review, so that messages could be sent polymorphically.  It’s hard for me to know, without studying the code, whether this would simplify the code or clutter it, but please give some thought to what is the clearest and most robust way to code both anonymous &amp;amp; identified reviews, from the student’s and the instructor’s perspective.&lt;br /&gt;
&lt;br /&gt;
The other piece of the project is to enable review within groups, which means that every student in a group will review every other student in the group (but no students outside the group).  This can be configured on the Review Strategy tab when the review strategy is set to “Instructor-Selected”.  Under the “Set number of reviews done by each student” box, there could be another one, “Review done in groups of [ ] students”, where “[ ]” is a small text box.  There should also be an information button describing how group-based review works.&lt;br /&gt;
&lt;br /&gt;
==Scope==&lt;br /&gt;
The project provides instructor a functionality to make assignment reviews to be anonymous or non-anonymous. In addition, instructors have authority to create and assign review groups (students assigned same review group will review each others work) randomly.This scenario will be valid for individual assignments only. Also, anonymity is taken care from the perspective of reviewer as well as the reviewee. In case of non-anonymous groups, students may have the option to invite other students to join their group provided group size is not exceeding the maximum limit.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a peer review system which provides incremental learning from the class. This project has been developed together by faculty and students using [http://rubyonrails.org/ Ruby on Rails] framework. Expertiza allows the instructor to create, edit and delete assignments, create new assignment topics, assign them to a particular class or selected students, have students work on teams and then review each other's assignments at the end. For the students, they can signup for topics, form teams, and submit their projects and assignments. &lt;br /&gt;
Students then review the work done by other students and give suggestions to improve. Teams after reviews are allotted scores and they can refer to the peer comments to further improve their work. It also supports submission of different file types as well as URLs for assignments.&lt;br /&gt;
&lt;br /&gt;
=Design=&lt;br /&gt;
&lt;br /&gt;
'''Assignment Creation:'''&lt;br /&gt;
&lt;br /&gt;
Providing a checkbox in &amp;quot;review strategy tab&amp;quot; to mark an assignment to have anonymous or non-anonymous reviews. By default, every assignment will be having anonymous reviews but an instructor can change it by unchecking the checkbox.&lt;br /&gt;
&lt;br /&gt;
'''Group Formation:'''&lt;br /&gt;
&lt;br /&gt;
The instructor has the authority to create and assign groups randomly. In this case, students can not drop the group they have been assigned and only an instructor can change their group if needed. &lt;br /&gt;
In case, a group has not been assigned by an instructor, students will have the functionality to invite other students to join their group. This functionality is analogous to the invite members to join their team. &lt;br /&gt;
Students in the same group can review work of their group members only.&lt;br /&gt;
&lt;br /&gt;
For this, we will be creating a separate model for groups and will store all the group information into the corresponding database table. In order to follow the DRY principle, we will try to integrate the group code with the code written for teams. &lt;br /&gt;
&lt;br /&gt;
'''Non Anonymous Reviews'''&lt;br /&gt;
&lt;br /&gt;
In the case of non-anonymous reviews, students will be able to see the names of all the group members who have graded their individual work. In addition, students can also see whose work they are going to grade so that the non-anonymity is maintained from both sides.&lt;br /&gt;
&lt;br /&gt;
*This is the view of the review strategy tab where the checkbox for anonymity has to be added &lt;br /&gt;
&lt;br /&gt;
[[File:viewToBeChanged1.png]]&lt;br /&gt;
&lt;br /&gt;
*This is the view where names would be visible to ensure non anonymity of reviews&lt;br /&gt;
&lt;br /&gt;
[[File:New1234.png]]&lt;br /&gt;
&lt;br /&gt;
===Experimental Use===&lt;br /&gt;
&lt;br /&gt;
This project is part of an experiment to test whether anonymity makes a difference in reviews of students, thus to implement it one assignment would be made as anonymous and another as anonymous and the quality and the review scores would be tested to say if there is a change in quality and values of control and test&lt;br /&gt;
&lt;br /&gt;
=Files to be Considered=&lt;br /&gt;
*reveiw_mapping_controller.rb&lt;br /&gt;
&lt;br /&gt;
*teams_controller.rb&lt;br /&gt;
&lt;br /&gt;
*team.rb&lt;br /&gt;
&lt;br /&gt;
*views/assignments/edit/_review_strategy.html.erb&lt;br /&gt;
&lt;br /&gt;
*views/grades/_reviews.html.erb&lt;br /&gt;
&lt;br /&gt;
=Key People=&lt;br /&gt;
===Developers===&lt;br /&gt;
*Bhavesh Kasliwal&lt;br /&gt;
*Bhavya Bansal&lt;br /&gt;
*Chinmoy Baruah&lt;br /&gt;
*Rishabh Sinha&lt;br /&gt;
&lt;br /&gt;
===Mentor===&lt;br /&gt;
*Ed Gehringer&lt;/div&gt;</summary>
		<author><name>Rsinha2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=105419</id>
		<title>CSC/ECE 517 Fall 2016/E1698. Instructor/student control of anonymity + group-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=105419"/>
		<updated>2016-11-11T19:25:30Z</updated>

		<summary type="html">&lt;p&gt;Rsinha2: /* Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction=&lt;br /&gt;
==Purpose==&lt;br /&gt;
'''Scenario:'''  An instructor using Expertiza wants to do an experiment comparing anonymous review with identified (non-anonymous) review.  And in general, there is quite a bit of research interest in the implications of anonymity in student interactions.  In this experiment, &lt;br /&gt;
&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews in small groups (4-5 students/group). The groups will stay the same for both rounds. The students in the groups should be able to see who they are reviewing and who is reviewing them.&lt;br /&gt;
For the non-anonymous groups, I'd like the students to be able to request group members, so I would want to be able to have some control, perhaps with an option to use random assignment to groups if they had no preference for group members.&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews anonymously (using the normal method we used this fall)&lt;br /&gt;
&lt;br /&gt;
'''What needs to be done''':  The Review Strategy tab of assignment creation needs have a new checkbox for anonymous reviews, which would be checked by default.  If it is checked, student views would be the same as at present.  If it is not checked, students would see their reviewers and grades in the same way as the instructor now sees them; thus, instead of seeing “Reviewer 1”, “Reviewer 2”, the student might see, “Anthony Adams”, “Bessie Brown”, etc.&lt;br /&gt;
&lt;br /&gt;
The code for displaying names obviously already exists, because it is used in the instructor views.  Implement the changes in an elegant way; for example, instead of checking multiple times in the view to determine whether the reviewer’s (or author’s) real name is to be displayed, try to send a message to a model class that will “do the right thing.”  This may involve creating separate model classes for anonymous and identified review, so that messages could be sent polymorphically.  It’s hard for me to know, without studying the code, whether this would simplify the code or clutter it, but please give some thought to what is the clearest and most robust way to code both anonymous &amp;amp; identified reviews, from the student’s and the instructor’s perspective.&lt;br /&gt;
&lt;br /&gt;
The other piece of the project is to enable review within groups, which means that every student in a group will review every other student in the group (but no students outside the group).  This can be configured on the Review Strategy tab when the review strategy is set to “Instructor-Selected”.  Under the “Set number of reviews done by each student” box, there could be another one, “Review done in groups of [ ] students”, where “[ ]” is a small text box.  There should also be an information button describing how group-based review works.&lt;br /&gt;
&lt;br /&gt;
==Scope==&lt;br /&gt;
The project provides instructor a functionality to make assignment reviews to be anonymous or non-anonymous. In addition, instructors have authority to create and assign review groups (students assigned same review group will review each others work) randomly.This scenario will be valid for individual assignments only. Also, anonymity is taken care from the perspective of reviewer as well as the reviewee. In case of non-anonymous groups, students may have the option to invite other students to join their group provided group size is not exceeding the maximum limit.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a peer review system which provides incremental learning from the class. This project has been developed together by faculty and students using [http://rubyonrails.org/ Ruby on Rails] framework. Expertiza allows the instructor to create, edit and delete assignments, create new assignment topics, assign them to a particular class or selected students, have students work on teams and then review each other's assignments at the end. For the students, they can signup for topics, form teams, and submit their projects and assignments. &lt;br /&gt;
Students then review the work done by other students and give suggestions to improve. Teams after reviews are allotted scores and they can refer to the peer comments to further improve their work. It also supports submission of different file types as well as URLs for assignments.&lt;br /&gt;
&lt;br /&gt;
=Design=&lt;br /&gt;
&lt;br /&gt;
'''Assignment Creation:'''&lt;br /&gt;
&lt;br /&gt;
Providing a checkbox in &amp;quot;review strategy tab&amp;quot; to mark an assignment to have anonymous or non-anonymous reviews. By default, every assignment will be having anonymous reviews but an instructor can change it by unchecking the checkbox.&lt;br /&gt;
&lt;br /&gt;
'''Group Formation:'''&lt;br /&gt;
&lt;br /&gt;
The instructor has the authority to create and assign groups randomly. In this case, students can not drop the group they have been assigned and only an instructor can change their group if needed. &lt;br /&gt;
In case, a group has not been assigned by an instructor, students will have the functionality to invite other students to join their group. This functionality is analogous to the invite members to join their team. &lt;br /&gt;
Students in the same group can review work of their group members only.&lt;br /&gt;
&lt;br /&gt;
For this, we will be creating a separate model for groups and will store all the group information into the corresponding database table. In order to follow the DRY principle, we will try to integrate the group code with the code written for teams. &lt;br /&gt;
&lt;br /&gt;
'''Non Anonymous Reviews'''&lt;br /&gt;
&lt;br /&gt;
In the case of non-anonymous reviews, students will be able to see the names of all the group members who have graded their individual work. In addition, students can also see whose work they are going to grade so that the non-anonymity is maintained from both sides.&lt;br /&gt;
&lt;br /&gt;
*This is the view of the review strategy tab where the checkbox for anonymity has to be added &lt;br /&gt;
&lt;br /&gt;
[[File:viewToBeChanged1.png]]&lt;br /&gt;
&lt;br /&gt;
*This is the view where names would be visible to ensure non anonymity of reviews&lt;br /&gt;
&lt;br /&gt;
[[File:New1234.png]]&lt;br /&gt;
&lt;br /&gt;
=Files to be Considered=&lt;br /&gt;
*reveiw_mapping_controller.rb&lt;br /&gt;
&lt;br /&gt;
*teams_controller.rb&lt;br /&gt;
&lt;br /&gt;
*team.rb&lt;br /&gt;
&lt;br /&gt;
*views/assignments/edit/_review_strategy.html.erb&lt;br /&gt;
&lt;br /&gt;
*views/grades/_reviews.html.erb&lt;br /&gt;
&lt;br /&gt;
=Key People=&lt;br /&gt;
===Developers===&lt;br /&gt;
*Bhavesh Kasliwal&lt;br /&gt;
*Bhavya Bansal&lt;br /&gt;
*Chinmoy Baruah&lt;br /&gt;
*Rishabh Sinha&lt;br /&gt;
&lt;br /&gt;
===Mentor===&lt;br /&gt;
*Ed Gehringer&lt;/div&gt;</summary>
		<author><name>Rsinha2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=105418</id>
		<title>CSC/ECE 517 Fall 2016/E1698. Instructor/student control of anonymity + group-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=105418"/>
		<updated>2016-11-11T19:22:11Z</updated>

		<summary type="html">&lt;p&gt;Rsinha2: /* Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction=&lt;br /&gt;
==Purpose==&lt;br /&gt;
'''Scenario:'''  An instructor using Expertiza wants to do an experiment comparing anonymous review with identified (non-anonymous) review.  And in general, there is quite a bit of research interest in the implications of anonymity in student interactions.  In this experiment, &lt;br /&gt;
&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews in small groups (4-5 students/group). The groups will stay the same for both rounds. The students in the groups should be able to see who they are reviewing and who is reviewing them.&lt;br /&gt;
For the non-anonymous groups, I'd like the students to be able to request group members, so I would want to be able to have some control, perhaps with an option to use random assignment to groups if they had no preference for group members.&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews anonymously (using the normal method we used this fall)&lt;br /&gt;
&lt;br /&gt;
'''What needs to be done''':  The Review Strategy tab of assignment creation needs have a new checkbox for anonymous reviews, which would be checked by default.  If it is checked, student views would be the same as at present.  If it is not checked, students would see their reviewers and grades in the same way as the instructor now sees them; thus, instead of seeing “Reviewer 1”, “Reviewer 2”, the student might see, “Anthony Adams”, “Bessie Brown”, etc.&lt;br /&gt;
&lt;br /&gt;
The code for displaying names obviously already exists, because it is used in the instructor views.  Implement the changes in an elegant way; for example, instead of checking multiple times in the view to determine whether the reviewer’s (or author’s) real name is to be displayed, try to send a message to a model class that will “do the right thing.”  This may involve creating separate model classes for anonymous and identified review, so that messages could be sent polymorphically.  It’s hard for me to know, without studying the code, whether this would simplify the code or clutter it, but please give some thought to what is the clearest and most robust way to code both anonymous &amp;amp; identified reviews, from the student’s and the instructor’s perspective.&lt;br /&gt;
&lt;br /&gt;
The other piece of the project is to enable review within groups, which means that every student in a group will review every other student in the group (but no students outside the group).  This can be configured on the Review Strategy tab when the review strategy is set to “Instructor-Selected”.  Under the “Set number of reviews done by each student” box, there could be another one, “Review done in groups of [ ] students”, where “[ ]” is a small text box.  There should also be an information button describing how group-based review works.&lt;br /&gt;
&lt;br /&gt;
==Scope==&lt;br /&gt;
The project provides instructor a functionality to make assignment reviews to be anonymous or non-anonymous. In addition, instructors have authority to create and assign review groups (students assigned same review group will review each others work) randomly.This scenario will be valid for individual assignments only. Also, anonymity is taken care from the perspective of reviewer as well as the reviewee. In case of non-anonymous groups, students may have the option to invite other students to join their group provided group size is not exceeding the maximum limit.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a peer review system which provides incremental learning from the class. This project has been developed together by faculty and students using [http://rubyonrails.org/ Ruby on Rails] framework. Expertiza allows the instructor to create, edit and delete assignments, create new assignment topics, assign them to a particular class or selected students, have students work on teams and then review each other's assignments at the end. For the students, they can signup for topics, form teams, and submit their projects and assignments. &lt;br /&gt;
Students then review the work done by other students and give suggestions to improve. Teams after reviews are allotted scores and they can refer to the peer comments to further improve their work. It also supports submission of different file types as well as URLs for assignments.&lt;br /&gt;
&lt;br /&gt;
=Design=&lt;br /&gt;
&lt;br /&gt;
'''Assignment Creation:'''&lt;br /&gt;
&lt;br /&gt;
Providing a checkbox in &amp;quot;review strategy tab&amp;quot; to mark an assignment to have anonymous or non-anonymous reviews. By default, every assignment will be having anonymous reviews but an instructor can change it by unchecking the checkbox.&lt;br /&gt;
&lt;br /&gt;
'''Group Formation:'''&lt;br /&gt;
&lt;br /&gt;
The instructor has the authority to create and assign groups randomly. In this case, students can not drop the group they have been assigned and only an instructor can change their group if needed. &lt;br /&gt;
In case, a group has not been assigned by an instructor, students will have the functionality to invite other students to join their group. This functionality is analogous to the invite members to join their team. &lt;br /&gt;
Students in the same group can review work of their group members only.&lt;br /&gt;
&lt;br /&gt;
For this, we will be creating a separate model for groups and will store all the group information into the corresponding database table. In order to follow the DRY principle, we will try to integrate the group code with the code written for teams. &lt;br /&gt;
&lt;br /&gt;
'''Non Anonymous Reviews'''&lt;br /&gt;
&lt;br /&gt;
In the case of non-anonymous reviews, students will be able to see the names of all the group members who have graded their individual work. In addition, students can also see whose work they are going to grade so that the non-anonymity is maintained from both sides.&lt;br /&gt;
&lt;br /&gt;
[[File:viewToBeChanged1.png]]&lt;br /&gt;
[[File:New1234.png]]&lt;br /&gt;
&lt;br /&gt;
=Files to be Considered=&lt;br /&gt;
*reveiw_mapping_controller.rb&lt;br /&gt;
&lt;br /&gt;
*teams_controller.rb&lt;br /&gt;
&lt;br /&gt;
*team.rb&lt;br /&gt;
&lt;br /&gt;
*views/assignments/edit/_review_strategy.html.erb&lt;br /&gt;
&lt;br /&gt;
*views/grades/_reviews.html.erb&lt;br /&gt;
&lt;br /&gt;
=Key People=&lt;br /&gt;
===Developers===&lt;br /&gt;
*Bhavesh Kasliwal&lt;br /&gt;
*Bhavya Bansal&lt;br /&gt;
*Chinmoy Baruah&lt;br /&gt;
*Rishabh Sinha&lt;br /&gt;
&lt;br /&gt;
===Mentor===&lt;br /&gt;
*Ed Gehringer&lt;/div&gt;</summary>
		<author><name>Rsinha2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=105417</id>
		<title>CSC/ECE 517 Fall 2016/E1698. Instructor/student control of anonymity + group-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=105417"/>
		<updated>2016-11-11T19:19:42Z</updated>

		<summary type="html">&lt;p&gt;Rsinha2: /* Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction=&lt;br /&gt;
==Purpose==&lt;br /&gt;
'''Scenario:'''  An instructor using Expertiza wants to do an experiment comparing anonymous review with identified (non-anonymous) review.  And in general, there is quite a bit of research interest in the implications of anonymity in student interactions.  In this experiment, &lt;br /&gt;
&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews in small groups (4-5 students/group). The groups will stay the same for both rounds. The students in the groups should be able to see who they are reviewing and who is reviewing them.&lt;br /&gt;
For the non-anonymous groups, I'd like the students to be able to request group members, so I would want to be able to have some control, perhaps with an option to use random assignment to groups if they had no preference for group members.&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews anonymously (using the normal method we used this fall)&lt;br /&gt;
&lt;br /&gt;
'''What needs to be done''':  The Review Strategy tab of assignment creation needs have a new checkbox for anonymous reviews, which would be checked by default.  If it is checked, student views would be the same as at present.  If it is not checked, students would see their reviewers and grades in the same way as the instructor now sees them; thus, instead of seeing “Reviewer 1”, “Reviewer 2”, the student might see, “Anthony Adams”, “Bessie Brown”, etc.&lt;br /&gt;
&lt;br /&gt;
The code for displaying names obviously already exists, because it is used in the instructor views.  Implement the changes in an elegant way; for example, instead of checking multiple times in the view to determine whether the reviewer’s (or author’s) real name is to be displayed, try to send a message to a model class that will “do the right thing.”  This may involve creating separate model classes for anonymous and identified review, so that messages could be sent polymorphically.  It’s hard for me to know, without studying the code, whether this would simplify the code or clutter it, but please give some thought to what is the clearest and most robust way to code both anonymous &amp;amp; identified reviews, from the student’s and the instructor’s perspective.&lt;br /&gt;
&lt;br /&gt;
The other piece of the project is to enable review within groups, which means that every student in a group will review every other student in the group (but no students outside the group).  This can be configured on the Review Strategy tab when the review strategy is set to “Instructor-Selected”.  Under the “Set number of reviews done by each student” box, there could be another one, “Review done in groups of [ ] students”, where “[ ]” is a small text box.  There should also be an information button describing how group-based review works.&lt;br /&gt;
&lt;br /&gt;
==Scope==&lt;br /&gt;
The project provides instructor a functionality to make assignment reviews to be anonymous or non-anonymous. In addition, instructors have authority to create and assign review groups (students assigned same review group will review each others work) randomly.This scenario will be valid for individual assignments only. Also, anonymity is taken care from the perspective of reviewer as well as the reviewee. In case of non-anonymous groups, students may have the option to invite other students to join their group provided group size is not exceeding the maximum limit.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a peer review system which provides incremental learning from the class. This project has been developed together by faculty and students using [http://rubyonrails.org/ Ruby on Rails] framework. Expertiza allows the instructor to create, edit and delete assignments, create new assignment topics, assign them to a particular class or selected students, have students work on teams and then review each other's assignments at the end. For the students, they can signup for topics, form teams, and submit their projects and assignments. &lt;br /&gt;
Students then review the work done by other students and give suggestions to improve. Teams after reviews are allotted scores and they can refer to the peer comments to further improve their work. It also supports submission of different file types as well as URLs for assignments.&lt;br /&gt;
&lt;br /&gt;
=Design=&lt;br /&gt;
&lt;br /&gt;
'''Assignment Creation:'''&lt;br /&gt;
&lt;br /&gt;
Providing a checkbox in &amp;quot;review strategy tab&amp;quot; to mark an assignment to have anonymous or non-anonymous reviews. By default, every assignment will be having anonymous reviews but an instructor can change it by unchecking the checkbox.&lt;br /&gt;
&lt;br /&gt;
'''Group Formation:'''&lt;br /&gt;
&lt;br /&gt;
The instructor has the authority to create and assign groups randomly. In this case, students can not drop the group they have been assigned and only an instructor can change their group if needed. &lt;br /&gt;
In case, a group has not been assigned by an instructor, students will have the functionality to invite other students to join their group. This functionality is analogous to the invite members to join their team. &lt;br /&gt;
Students in the same group can review work of their group members only.&lt;br /&gt;
&lt;br /&gt;
For this, we will be creating a separate model for groups and will store all the group information into the corresponding database table. In order to follow the DRY principle, we will try to integrate the group code with the code written for teams. &lt;br /&gt;
&lt;br /&gt;
'''Non Anonymous Reviews'''&lt;br /&gt;
&lt;br /&gt;
In the case of non-anonymous reviews, students will be able to see the names of all the group members who have graded their individual work. In addition, students can also see whose work they are going to grade so that the non-anonymity is maintained from both sides.&lt;br /&gt;
[[File:New1234.png]]&lt;br /&gt;
&lt;br /&gt;
=Files to be Considered=&lt;br /&gt;
*reveiw_mapping_controller.rb&lt;br /&gt;
&lt;br /&gt;
*teams_controller.rb&lt;br /&gt;
&lt;br /&gt;
*team.rb&lt;br /&gt;
&lt;br /&gt;
*views/assignments/edit/_review_strategy.html.erb&lt;br /&gt;
&lt;br /&gt;
*views/grades/_reviews.html.erb&lt;br /&gt;
&lt;br /&gt;
=Key People=&lt;br /&gt;
===Developers===&lt;br /&gt;
*Bhavesh Kasliwal&lt;br /&gt;
*Bhavya Bansal&lt;br /&gt;
*Chinmoy Baruah&lt;br /&gt;
*Rishabh Sinha&lt;br /&gt;
&lt;br /&gt;
===Mentor===&lt;br /&gt;
*Ed Gehringer&lt;/div&gt;</summary>
		<author><name>Rsinha2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:New1234.png&amp;diff=105416</id>
		<title>File:New1234.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:New1234.png&amp;diff=105416"/>
		<updated>2016-11-11T19:17:50Z</updated>

		<summary type="html">&lt;p&gt;Rsinha2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Rsinha2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=105022</id>
		<title>CSC/ECE 517 Fall 2016/E1698. Instructor/student control of anonymity + group-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=105022"/>
		<updated>2016-11-09T21:51:30Z</updated>

		<summary type="html">&lt;p&gt;Rsinha2: /* Scope */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= '''E1698: Instructor/student control of anonymity + group-based reviewing''' =&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
==Purpose==&lt;br /&gt;
'''The scenario:'''  An instructor using Expertiza wants to do an experiment comparing anonymous review with identified (non-anonymous) review.  And in general, there is quite a bit of research interest in the implications of anonymity in student interactions.  In this experiment, &lt;br /&gt;
&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews in small groups (4-5 students/group). The groups will stay the same for both rounds. The students in the groups should be able to see who they are reviewing and who is reviewing them.&lt;br /&gt;
For the non-anonymous groups, I'd like the students to be able to request group members, so I would want to be able to have some control, perhaps with an option to use random assignment to groups if they had no preference for group members.&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews anonymously (using the normal method we used this fall)&lt;br /&gt;
&lt;br /&gt;
'''What needs to be done''':  The Review Strategy tab of assignment creation needs have a new checkbox for anonymous reviews, which would be checked by default.  If it is checked, student views would be the same as at present.  If it is not checked, students would see their reviewers and grades in the same way as the instructor now sees them; thus, instead of seeing “Reviewer 1”, “Reviewer 2”, the student might see, “Anthony Adams”, “Bessie Brown”, etc.&lt;br /&gt;
&lt;br /&gt;
The code for displaying names obviously already exists, because it is used in the instructor views.  Implement the changes in an elegant way; for example, instead of checking multiple times in the view to determine whether the reviewer’s (or author’s) real name is to be displayed, try to send a message to a model class that will “do the right thing.”  This may involve creating separate model classes for anonymous and identified review, so that messages could be sent polymorphically.  It’s hard for me to know, without studying the code, whether this would simplify the code or clutter it, but please give some thought to what is the clearest and most robust way to code both anonymous &amp;amp; identified reviews, from the student’s and the instructor’s perspective.&lt;br /&gt;
&lt;br /&gt;
The other piece of the project is to enable review within groups, which means that every student in a group will review every other student in the group (but no students outside the group).  This can be configured on the Review Strategy tab when the review strategy is set to “Instructor-Selected”.  Under the “Set number of reviews done by each student” box, there could be another one, “Review done in groups of [ ] students”, where “[ ]” is a small text box.  There should also be an information button describing how group-based review works.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Scope==&lt;br /&gt;
The project provides instructor a functionality to make assignment reviews to be anonymous or non-anonymous. In addition, instructors have authority to create and assign review groups (students assigned same review group will review each others work) randomly.This scenario will be valid for individual assignments only. Also, anonymity is taken care from the perspective of reviewer as well as the reviewee. In case of non-anonymous groups, students may have the option to invite other students to join their group provided group size is not exceeding the maximum limit.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a peer review system which provides incremental learning from the class. This project has been developed together by faculty and students using [http://rubyonrails.org/ Ruby on Rails] framework. Expertiza allows the instructor to create, edit and delete assignments, create new assignment topics, assign them to a particular class or selected students, have students work on teams and then review each other's assignments at the end. For the students, they can signup for topics, form teams, and submit their projects and assignments. &lt;br /&gt;
Students then review the work done by other students and give suggestions to improve. Teams after reviews are allotted scores and they can refer to the peer comments to further improve their work. It also supports submission of different file types as well as URLs for assignments.&lt;br /&gt;
==Documentation==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introduction to Expertiza=&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a peer review system which provides incremental learning from the class. This project has been developed together by faculty and students using [http://rubyonrails.org/ Ruby on Rails] framework. Expertiza allows the instructor to create, edit and delete assignments, create new assignment topics, assign them to a particular class or selected students, have students work on teams and then review each other's assignments at the end. For the students, they can signup for topics, form teams, and submit their projects and assignments. &lt;br /&gt;
Students then review the work done by other students and give suggestions to improve. Teams after reviews are allotted scores and they can refer to the peer comments to further improve their work. It also supports submission of different file types as well as URLs for assignments.&lt;br /&gt;
&lt;br /&gt;
=Problem Statement=&lt;br /&gt;
'''The scenario:'''  An instructor using Expertiza wants to do an experiment comparing anonymous review with identified (non-anonymous) review.  And in general, there is quite a bit of research interest in the implications of anonymity in student interactions.  In this experiment, &lt;br /&gt;
&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews in small groups (4-5 students/group). The groups will stay the same for both rounds. The students in the groups should be able to see who they are reviewing and who is reviewing them.&lt;br /&gt;
For the non-anonymous groups, I'd like the students to be able to request group members, so I would want to be able to have some control, perhaps with an option to use random assignment to groups if they had no preference for group members.&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews anonymously (using the normal method we used this fall)&lt;br /&gt;
&lt;br /&gt;
'''What needs to be done''':  The Review Strategy tab of assignment creation needs have a new checkbox for anonymous reviews, which would be checked by default.  If it is checked, student views would be the same as at present.  If it is not checked, students would see their reviewers and grades in the same way as the instructor now sees them; thus, instead of seeing “Reviewer 1”, “Reviewer 2”, the student might see, “Anthony Adams”, “Bessie Brown”, etc.&lt;br /&gt;
&lt;br /&gt;
The code for displaying names obviously already exists, because it is used in the instructor views.  Implement the changes in an elegant way; for example, instead of checking multiple times in the view to determine whether the reviewer’s (or author’s) real name is to be displayed, try to send a message to a model class that will “do the right thing.”  This may involve creating separate model classes for anonymous and identified review, so that messages could be sent polymorphically.  It’s hard for me to know, without studying the code, whether this would simplify the code or clutter it, but please give some thought to what is the clearest and most robust way to code both anonymous &amp;amp; identified reviews, from the student’s and the instructor’s perspective.&lt;br /&gt;
&lt;br /&gt;
The other piece of the project is to enable review within groups, which means that every student in a group will review every other student in the group (but no students outside the group).  This can be configured on the Review Strategy tab when the review strategy is set to “Instructor-Selected”.  Under the “Set number of reviews done by each student” box, there could be another one, “Review done in groups of [ ] students”, where “[ ]” is a small text box.  There should also be an information button describing how group-based review works.&lt;br /&gt;
&lt;br /&gt;
=Design=&lt;br /&gt;
&lt;br /&gt;
=Key People=&lt;br /&gt;
===Developers===&lt;br /&gt;
*Bhavesh Kasliwal&lt;br /&gt;
*Bhavya Bansal&lt;br /&gt;
*Chinmoy Baruah&lt;br /&gt;
*Rishabh Sinha&lt;br /&gt;
&lt;br /&gt;
===Mentor===&lt;br /&gt;
*Ed Gehringer&lt;/div&gt;</summary>
		<author><name>Rsinha2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=105014</id>
		<title>CSC/ECE 517 Fall 2016/E1698. Instructor/student control of anonymity + group-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=105014"/>
		<updated>2016-11-09T21:30:05Z</updated>

		<summary type="html">&lt;p&gt;Rsinha2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= '''E1698: Instructor/student control of anonymity + group-based reviewing''' =&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
==Purpose==&lt;br /&gt;
'''The scenario:'''  An instructor using Expertiza wants to do an experiment comparing anonymous review with identified (non-anonymous) review.  And in general, there is quite a bit of research interest in the implications of anonymity in student interactions.  In this experiment, &lt;br /&gt;
&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews in small groups (4-5 students/group). The groups will stay the same for both rounds. The students in the groups should be able to see who they are reviewing and who is reviewing them.&lt;br /&gt;
For the non-anonymous groups, I'd like the students to be able to request group members, so I would want to be able to have some control, perhaps with an option to use random assignment to groups if they had no preference for group members.&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews anonymously (using the normal method we used this fall)&lt;br /&gt;
&lt;br /&gt;
'''What needs to be done''':  The Review Strategy tab of assignment creation needs have a new checkbox for anonymous reviews, which would be checked by default.  If it is checked, student views would be the same as at present.  If it is not checked, students would see their reviewers and grades in the same way as the instructor now sees them; thus, instead of seeing “Reviewer 1”, “Reviewer 2”, the student might see, “Anthony Adams”, “Bessie Brown”, etc.&lt;br /&gt;
&lt;br /&gt;
The code for displaying names obviously already exists, because it is used in the instructor views.  Implement the changes in an elegant way; for example, instead of checking multiple times in the view to determine whether the reviewer’s (or author’s) real name is to be displayed, try to send a message to a model class that will “do the right thing.”  This may involve creating separate model classes for anonymous and identified review, so that messages could be sent polymorphically.  It’s hard for me to know, without studying the code, whether this would simplify the code or clutter it, but please give some thought to what is the clearest and most robust way to code both anonymous &amp;amp; identified reviews, from the student’s and the instructor’s perspective.&lt;br /&gt;
&lt;br /&gt;
The other piece of the project is to enable review within groups, which means that every student in a group will review every other student in the group (but no students outside the group).  This can be configured on the Review Strategy tab when the review strategy is set to “Instructor-Selected”.  Under the “Set number of reviews done by each student” box, there could be another one, “Review done in groups of [ ] students”, where “[ ]” is a small text box.  There should also be an information button describing how group-based review works.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Scope==&lt;br /&gt;
==Background==&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a peer review system which provides incremental learning from the class. This project has been developed together by faculty and students using [http://rubyonrails.org/ Ruby on Rails] framework. Expertiza allows the instructor to create, edit and delete assignments, create new assignment topics, assign them to a particular class or selected students, have students work on teams and then review each other's assignments at the end. For the students, they can signup for topics, form teams, and submit their projects and assignments. &lt;br /&gt;
Students then review the work done by other students and give suggestions to improve. Teams after reviews are allotted scores and they can refer to the peer comments to further improve their work. It also supports submission of different file types as well as URLs for assignments.&lt;br /&gt;
==Documentation==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introduction to Expertiza=&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a peer review system which provides incremental learning from the class. This project has been developed together by faculty and students using [http://rubyonrails.org/ Ruby on Rails] framework. Expertiza allows the instructor to create, edit and delete assignments, create new assignment topics, assign them to a particular class or selected students, have students work on teams and then review each other's assignments at the end. For the students, they can signup for topics, form teams, and submit their projects and assignments. &lt;br /&gt;
Students then review the work done by other students and give suggestions to improve. Teams after reviews are allotted scores and they can refer to the peer comments to further improve their work. It also supports submission of different file types as well as URLs for assignments.&lt;br /&gt;
&lt;br /&gt;
=Problem Statement=&lt;br /&gt;
'''The scenario:'''  An instructor using Expertiza wants to do an experiment comparing anonymous review with identified (non-anonymous) review.  And in general, there is quite a bit of research interest in the implications of anonymity in student interactions.  In this experiment, &lt;br /&gt;
&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews in small groups (4-5 students/group). The groups will stay the same for both rounds. The students in the groups should be able to see who they are reviewing and who is reviewing them.&lt;br /&gt;
For the non-anonymous groups, I'd like the students to be able to request group members, so I would want to be able to have some control, perhaps with an option to use random assignment to groups if they had no preference for group members.&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews anonymously (using the normal method we used this fall)&lt;br /&gt;
&lt;br /&gt;
'''What needs to be done''':  The Review Strategy tab of assignment creation needs have a new checkbox for anonymous reviews, which would be checked by default.  If it is checked, student views would be the same as at present.  If it is not checked, students would see their reviewers and grades in the same way as the instructor now sees them; thus, instead of seeing “Reviewer 1”, “Reviewer 2”, the student might see, “Anthony Adams”, “Bessie Brown”, etc.&lt;br /&gt;
&lt;br /&gt;
The code for displaying names obviously already exists, because it is used in the instructor views.  Implement the changes in an elegant way; for example, instead of checking multiple times in the view to determine whether the reviewer’s (or author’s) real name is to be displayed, try to send a message to a model class that will “do the right thing.”  This may involve creating separate model classes for anonymous and identified review, so that messages could be sent polymorphically.  It’s hard for me to know, without studying the code, whether this would simplify the code or clutter it, but please give some thought to what is the clearest and most robust way to code both anonymous &amp;amp; identified reviews, from the student’s and the instructor’s perspective.&lt;br /&gt;
&lt;br /&gt;
The other piece of the project is to enable review within groups, which means that every student in a group will review every other student in the group (but no students outside the group).  This can be configured on the Review Strategy tab when the review strategy is set to “Instructor-Selected”.  Under the “Set number of reviews done by each student” box, there could be another one, “Review done in groups of [ ] students”, where “[ ]” is a small text box.  There should also be an information button describing how group-based review works.&lt;br /&gt;
&lt;br /&gt;
=Design=&lt;br /&gt;
&lt;br /&gt;
=Key People=&lt;br /&gt;
===Developers===&lt;br /&gt;
*Bhavesh Kasliwal&lt;br /&gt;
*Bhavya Bansal&lt;br /&gt;
*Chinmoy Baruah&lt;br /&gt;
*Rishabh Sinha&lt;br /&gt;
&lt;br /&gt;
===Mentor===&lt;br /&gt;
*Ed Gehringer&lt;/div&gt;</summary>
		<author><name>Rsinha2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=105009</id>
		<title>CSC/ECE 517 Fall 2016/E1698. Instructor/student control of anonymity + group-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=105009"/>
		<updated>2016-11-09T21:22:41Z</updated>

		<summary type="html">&lt;p&gt;Rsinha2: /* Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= '''E1698: Instructor/student control of anonymity + group-based reviewing''' =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introduction to Expertiza=&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a peer review system which provides incremental learning from the class. This project has been developed together by faculty and students using [http://rubyonrails.org/ Ruby on Rails] framework. Expertiza allows the instructor to create, edit and delete assignments, create new assignment topics, assign them to a particular class or selected students, have students work on teams and then review each other's assignments at the end. For the students, they can signup for topics, form teams, and submit their projects and assignments. &lt;br /&gt;
Students then review the work done by other students and give suggestions to improve. Teams after reviews are allotted scores and they can refer to the peer comments to further improve their work. It also supports submission of different file types as well as URLs for assignments.&lt;br /&gt;
&lt;br /&gt;
=Problem Statement=&lt;br /&gt;
'''The scenario:'''  An instructor using Expertiza wants to do an experiment comparing anonymous review with identified (non-anonymous) review.  And in general, there is quite a bit of research interest in the implications of anonymity in student interactions.  In this experiment, &lt;br /&gt;
&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews in small groups (4-5 students/group). The groups will stay the same for both rounds. The students in the groups should be able to see who they are reviewing and who is reviewing them.&lt;br /&gt;
For the non-anonymous groups, I'd like the students to be able to request group members, so I would want to be able to have some control, perhaps with an option to use random assignment to groups if they had no preference for group members.&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews anonymously (using the normal method we used this fall)&lt;br /&gt;
&lt;br /&gt;
'''What needs to be done''':  The Review Strategy tab of assignment creation needs have a new checkbox for anonymous reviews, which would be checked by default.  If it is checked, student views would be the same as at present.  If it is not checked, students would see their reviewers and grades in the same way as the instructor now sees them; thus, instead of seeing “Reviewer 1”, “Reviewer 2”, the student might see, “Anthony Adams”, “Bessie Brown”, etc.&lt;br /&gt;
&lt;br /&gt;
The code for displaying names obviously already exists, because it is used in the instructor views.  Implement the changes in an elegant way; for example, instead of checking multiple times in the view to determine whether the reviewer’s (or author’s) real name is to be displayed, try to send a message to a model class that will “do the right thing.”  This may involve creating separate model classes for anonymous and identified review, so that messages could be sent polymorphically.  It’s hard for me to know, without studying the code, whether this would simplify the code or clutter it, but please give some thought to what is the clearest and most robust way to code both anonymous &amp;amp; identified reviews, from the student’s and the instructor’s perspective.&lt;br /&gt;
&lt;br /&gt;
The other piece of the project is to enable review within groups, which means that every student in a group will review every other student in the group (but no students outside the group).  This can be configured on the Review Strategy tab when the review strategy is set to “Instructor-Selected”.  Under the “Set number of reviews done by each student” box, there could be another one, “Review done in groups of [ ] students”, where “[ ]” is a small text box.  There should also be an information button describing how group-based review works.&lt;br /&gt;
&lt;br /&gt;
=Design=&lt;br /&gt;
&lt;br /&gt;
=Key People=&lt;br /&gt;
===Developers===&lt;br /&gt;
*Bhavesh Kasliwal&lt;br /&gt;
*Bhavya Bansal&lt;br /&gt;
*Chinmoy Baruah&lt;br /&gt;
*Rishabh Sinha&lt;br /&gt;
&lt;br /&gt;
===Mentor===&lt;br /&gt;
*Ed Gehringer&lt;/div&gt;</summary>
		<author><name>Rsinha2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=104974</id>
		<title>CSC/ECE 517 Fall 2016/E1698. Instructor/student control of anonymity + group-based reviewing</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/E1698._Instructor/student_control_of_anonymity_%2B_group-based_reviewing&amp;diff=104974"/>
		<updated>2016-11-09T20:28:13Z</updated>

		<summary type="html">&lt;p&gt;Rsinha2: /* Problem Statement */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= '''E1698: Instructor/student control of anonymity + group-based reviewing''' =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introduction to Expertiza=&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is a peer review system which provides incremental learning from the class. This project has been developed together by faculty and students using [http://rubyonrails.org/ Ruby on Rails] framework. Expertiza allows the instructor to create, edit and delete assignments, create new assignment topics, assign them to a particular class or selected students, have students work on teams and then review each other's assignments at the end. For the students, they can signup for topics, form teams, and submit their projects and assignments. &lt;br /&gt;
Students then review the work done by other students and give suggestions to improve. Teams after reviews are allotted scores and they can refer to the peer comments to further improve their work. It also supports submission of different file types as well as URLs for assignments.&lt;br /&gt;
&lt;br /&gt;
=Problem Statement=&lt;br /&gt;
'''The scenario:'''  An instructor using Expertiza wants to do an experiment comparing anonymous review with identified (non-anonymous) review.  And in general, there is quite a bit of research interest in the implications of anonymity in student interactions.  In this experiment, &lt;br /&gt;
&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews in small groups (4-5 students/group). The groups will stay the same for both rounds. The students in the groups should be able to see who they are reviewing and who is reviewing them.&lt;br /&gt;
For the non-anonymous groups, I'd like the students to be able to request group members, so I would want to be able to have some control, perhaps with an option to use random assignment to groups if they had no preference for group members.&lt;br /&gt;
Approx ½ the class will conduct two rounds of formative reviews anonymously (using the normal method we used this fall)&lt;br /&gt;
&lt;br /&gt;
'''What needs to be done''':  The Review Strategy tab of assignment creation needs have a new checkbox for anonymous reviews, which would be checked by default.  If it is checked, student views would be the same as at present.  If it is not checked, students would see their reviewers and grades in the same way as the instructor now sees them; thus, instead of seeing “Reviewer 1”, “Reviewer 2”, the student might see, “Anthony Adams”, “Bessie Brown”, etc.&lt;br /&gt;
&lt;br /&gt;
The code for displaying names obviously already exists, because it is used in the instructor views.  Implement the changes in an elegant way; for example, instead of checking multiple times in the view to determine whether the reviewer’s (or author’s) real name is to be displayed, try to send a message to a model class that will “do the right thing.”  This may involve creating separate model classes for anonymous and identified review, so that messages could be sent polymorphically.  It’s hard for me to know, without studying the code, whether this would simplify the code or clutter it, but please give some thought to what is the clearest and most robust way to code both anonymous &amp;amp; identified reviews, from the student’s and the instructor’s perspective.&lt;br /&gt;
&lt;br /&gt;
The other piece of the project is to enable review within groups, which means that every student in a group will review every other student in the group (but no students outside the group).  This can be configured on the Review Strategy tab when the review strategy is set to “Instructor-Selected”.  Under the “Set number of reviews done by each student” box, there could be another one, “Review done in groups of [ ] students”, where “[ ]” is a small text box.  There should also be an information button describing how group-based review works.&lt;br /&gt;
&lt;br /&gt;
=Design=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Key People=&lt;br /&gt;
===Developers===&lt;br /&gt;
*Bhavesh Kasliwal&lt;br /&gt;
*Bhavya Bansal&lt;br /&gt;
*Chinmoy Baruah&lt;br /&gt;
*Rishabh Sinha&lt;br /&gt;
&lt;br /&gt;
===Mentor===&lt;br /&gt;
*Ed Gehringer&lt;/div&gt;</summary>
		<author><name>Rsinha2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=104330</id>
		<title>CSC/ECE 517 Fall 2016/oss E1656</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=104330"/>
		<updated>2016-11-04T04:12:25Z</updated>

		<summary type="html">&lt;p&gt;Rsinha2: /* UI Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== E1656. Improve imports ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This page provides a description of the Expertiza based OSS project. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Introduction to Expertiza==&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open source project based on [http://rubyonrails.org/ Ruby on Rails] framework.&lt;br /&gt;
&lt;br /&gt;
==Project Description==&lt;br /&gt;
===About Import===&lt;br /&gt;
In Expertiza, various kinds of data may be imported from [https://en.wikipedia.org/wiki/Comma-separated_values csv files], including users, participants in an assignemnt, topics and teams. When importing data, a corresponding csv file have to be composed. In a csv file, each new line represent a piece of datum and the different fields of a datum are separated by delimiters. But there are rough edges in the way these imports are done and certain other data that should be importable is not. This project focuses on implementing following tasks about data import functionality: &lt;br /&gt;
&lt;br /&gt;
*When a team with a duplicate name is imported, one of the options is to rename the new team.  There should also be an option to rename an existing team.  See Issue 329.&lt;br /&gt;
*Review assignments (“reviewer mappings”) should be able to be imported, but cannot be imported.  See Issue 711&lt;br /&gt;
*It should be possible to import a list of users who have signed up for topics, but this feature does not yet exist.  See Issue 153.&lt;br /&gt;
*For every kind of data to be imported, Expertiza currently specifies the ordering of fields.  This isn’t very flexible; it may require the user (an instructor) to edit an existing CSV file.  It would be better if, after importing the data, Expertiza showed the data together with dropdowns containing the default field headers.  (This is similar to the way Excel shows data when it is imported from a CSV file.)  Then the user could change the dropdowns to cause a different ordering of fields.  See Issue 110.&lt;br /&gt;
*Create a way to export a list of teams that have signed up for topics, and who are waitlisted for topics, as well as participants in an assignment who have not signed up for topics. Choose the format, but keep it as consistent as possible with the other export formats.  This would help the professor when students ask him for advice on finding teammates.  Extra Issue&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following tasks were listed as a requirement, but after careful examination it was determined that these tasks were already implemented&lt;br /&gt;
*The simplest fix: If I try to import topics, the import page gives me this message: “The import process expects the following columns:” but it doesn’t say what the columns are (topic number, topic name, category, number of slots, category)!  It used to be in the system; please revert the change to fix this bug.  See Issue 719.&lt;br /&gt;
*When teams are imported in order to insert new members, the members are not inserted.  See Issue 328.&lt;br /&gt;
*It should be possible to leave off the final fields in a line of a CSV file.  These fields are often not specified anyway.  For example, if a password isn’t specified when a new user is created, the system generates a password (see Issue 183).  When importing topics, topic categories are rarely specified.  But if the final field is blank, the import requires the CSV line to end with “, “ (comma and space).  This should be fixed for all imports.&lt;br /&gt;
&lt;br /&gt;
==About Versions Controller==&lt;br /&gt;
Git is a popular version control system, As a part of the project, We have made use of git for the purpose of version control. Our repository is a fork of the original Expertiza repository on which we have collaborated our work. And the project has been submitted through a pull request.&lt;br /&gt;
&lt;br /&gt;
==Handle Duplicates (Issue329)==&lt;br /&gt;
====Current Implementation====&lt;br /&gt;
&lt;br /&gt;
When a team with a duplicate name is imported, one of the options is to rename the new team. There should also be an option to rename an existing team. See Issue 329.&lt;br /&gt;
The current implementation allows the user to handle duplicates, by the following techniques&lt;br /&gt;
*ignore the new team&lt;br /&gt;
*replace the existing team with the new team&lt;br /&gt;
*insert any new members into the existing team&lt;br /&gt;
*rename the new team and import&lt;br /&gt;
*rename the existing team and import&lt;br /&gt;
&lt;br /&gt;
=====Functionality=====&lt;br /&gt;
&lt;br /&gt;
The above functionalities make it easier to achieve the goal of handling duplicates while importing.&lt;br /&gt;
&lt;br /&gt;
=====Drawbacks and Solutions=====&lt;br /&gt;
&lt;br /&gt;
The above set of functionalities do not allow User to ever rename an existing team, rather force him rename his own team.&lt;br /&gt;
Thus the above requirement provides the necessary freedom to the User by providing him the option to rename an already existing team.&lt;br /&gt;
&lt;br /&gt;
====New Implementation====&lt;br /&gt;
&lt;br /&gt;
The option has been implemented using the update functionality that is already present in rails models, to update existing values of Active Records. To implement this feature we have also made use of the functionality for generating team names, that is already present within the Team model.&lt;br /&gt;
&lt;br /&gt;
A code snippet is given below:&lt;br /&gt;
  if handle_dups == &amp;quot;renameOldTeam&amp;quot; # rename: rename new team&lt;br /&gt;
       if teamtype.is_a?(CourseTeam)&lt;br /&gt;
         CourseTeam.update(team.id, :name =&amp;gt; self.generate_team_name(Course.find(id).name))&lt;br /&gt;
         return name&lt;br /&gt;
       elsif teamtype.is_a?(AssignmentTeam)&lt;br /&gt;
         AssignmentTeam.update(team.id, :name =&amp;gt; self.generate_team_name(Assignment.find(id).name))&lt;br /&gt;
         return name&lt;br /&gt;
       end&lt;br /&gt;
     end&lt;br /&gt;
&lt;br /&gt;
'''Why has it been implemented the way it has been'''&lt;br /&gt;
&lt;br /&gt;
The above implementation has been chosen as, it is the easiest way rails provides to update value of records using active records.&lt;br /&gt;
&lt;br /&gt;
====UI Testing====&lt;br /&gt;
The Above feature has been tested from the UI using the both course Teams and Assignment Teams, where new teams were added with conflicting names and the rename existing team option was selected, which lead lead to the desired behavior, that is the team that was extant was renamed and new team was imported with the same name as that specified in the CSV file&lt;br /&gt;
&lt;br /&gt;
1. Log in on Expertiza as instructor&lt;br /&gt;
&lt;br /&gt;
2. Click Manage Assignments&lt;br /&gt;
&lt;br /&gt;
3. Click Add Teams on any assignment listed&lt;br /&gt;
&lt;br /&gt;
4. Click Import Teams at the bottom of the page&lt;br /&gt;
&lt;br /&gt;
5. Choose the Rename an Existing Team Option and click import once the CSV has been chosen&lt;br /&gt;
&lt;br /&gt;
==Fix Reviewer and Metareviewer Mappings (Issue711)==&lt;br /&gt;
====Current Implementation====&lt;br /&gt;
&lt;br /&gt;
When an instructor tries to assign reviewers for an assignment, if the review strategy of the assignment is‘Instructor-Selected’, he could assign reviewers by directly importing the reviewer mappings. But now, when the instructor attempts to submit the import, the system will raise an argument error showing:&lt;br /&gt;
&lt;br /&gt;
[[File:reviewfail.PNG]]&lt;br /&gt;
&lt;br /&gt;
The import fails and, clearly, it's a bug in Expertiza.&lt;br /&gt;
&lt;br /&gt;
====New Implementation====&lt;br /&gt;
To solve this problem, first refer to the view/review_mapping/_list_review_mappings.html.erb file and find out that the model to be imported is ReviewResponseMap. The import method in review_response_map.rb model file takes in 3 arguments which are row, _session and id. A code snippet of import_file_controller.rb (the import controller) is given below:&lt;br /&gt;
[[File:Reviewcode.PNG]]&lt;br /&gt;
&lt;br /&gt;
Before we add the code in parentheses, the ReviewResponseMap model was not explicitly specified which case it belongs to and falls into the else statement where the import method takes in 4 arguments. That’s the reason of getting the “wrong number of argument” error. To resolve the problem, a &amp;quot;or params[:model] == 'ReviewResponseMap'&amp;quot; is inserted into the parentheses to make the import method of reviewer mappings takes in 3 arguments again and then we can correctly import the reviewer mappings. The recovery method for MetareviewResponseMap is exactly the same with this one by adding &lt;br /&gt;
&amp;quot;or params[:model] == 'MetareviewResponseMap'&amp;quot; statement into the parentheses.&lt;br /&gt;
&lt;br /&gt;
====UI Testing====&lt;br /&gt;
1. Login as instructor. Click on ‘Manage Assignment’ to see all assignments in the database.&lt;br /&gt;
&lt;br /&gt;
2. Among all the assignments, click the ‘Review strategy’ card in edit page and find out one assignment with 'Instructor-Selected' strategy (e.g. 'Design exercise'). Creating a new 'Instructor-Selected'           assignment and add some participants to it is also applicable.&lt;br /&gt;
&lt;br /&gt;
3. 'Assign reviewers' for this assignment and click on the 'Import reviewer mappings' on the bottom of the page.&lt;br /&gt;
&lt;br /&gt;
4. Compose a csv file in the given format of 'Contributor, Reviewer1, Reviewer2, …, ReviewerN' and import the file. The ‘Contributor’ here is the name of a team in this assignment. &lt;br /&gt;
&lt;br /&gt;
5. Go back to reviewer mappings page to check if the 'Reviewers of the Contributor' in the file are listed in the 'Reviewed By' section of the 'Contributors'.&lt;br /&gt;
&lt;br /&gt;
==Import Sign Up Sheet (Issue153)==&lt;br /&gt;
====Current Implementation====&lt;br /&gt;
&lt;br /&gt;
When a signup sheet is used in Expertiza, users are expected to sign up for topics. But, the instructor might've taken signups offline, e.g., by passing around a signup sheet in class. If the signup are not taken online by the students, the instructor has to impersonate all the students one by one and sign them up for a topic, which is tedious.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====New Implementation====&lt;br /&gt;
To implement this new issue, a model which is in charge of creating a sign_up and SignedUpTeam should be located first. In SignUpSheet model, methods are designed  for the creation of a sign_up and SignedUpTeam using the data from data base and the new implementation should create them from an imported file. Hence, an ''import'' method is added to this model and a code snippet of it is shown as:&lt;br /&gt;
&lt;br /&gt;
[[File:Signupcode.PNG]]&lt;br /&gt;
&lt;br /&gt;
This new method imports new sign_up data in a format of &amp;quot;Topic identifier, User1, User2&amp;quot;. Users here are the ones who signed up for the topic with a certain identifier (id). Some edge cases are also taken into consideration in this method to prevent importing a non-existing team in this assignment, a non-existing user or a user who is not a participant of this assignment. &lt;br /&gt;
Next, a link on the view page needs to be created to access this method. The instructor can view the sign up sheet of an assignment under the &amp;quot;topic&amp;quot; card of the &amp;quot;edit&amp;quot; section. An &amp;quot;Import sign up sheet&amp;quot; button is added beside the &amp;quot;Import topic&amp;quot; link &lt;br /&gt;
&lt;br /&gt;
[[File:Button.PNG]]&lt;br /&gt;
&lt;br /&gt;
and the corresponding code should be inserted in the &amp;quot;view/sign_up_sheet/_add_topics/html.erb&amp;quot; file.&lt;br /&gt;
&lt;br /&gt;
[[File:View.PNG]]&lt;br /&gt;
&lt;br /&gt;
After all of this, the new feature is successfully implemented and the instructor can directly import a large offline sign up sheet without tedious impersonating. The whole process of importing sign ups works  exactly the same as student online sign ups. If the assignment does not have a topic yet, the 'Import sign up sheet' link will be invisible unless a topic is created or imported. If a imported user does not have a team, he will be automatically assigned a team and sign up for the topic. If users imported exceeds the limit a certain topic can hold, the leftmost users in the file (like the earliest signed up users) will have the topic and those right(later signed up) users will be in the wait list.&lt;br /&gt;
&lt;br /&gt;
====UI Testing====&lt;br /&gt;
1. Login as instructor. Click on 'Manage Assignment’ to see all assignments in the database.&lt;br /&gt;
&lt;br /&gt;
2. Click on 'edit', go to 'topic' card and find the &amp;quot;Import sign up sheet&amp;quot; link.&lt;br /&gt;
&lt;br /&gt;
3. Compose a csv file in the given format of 'Topic identifier, User1, User2, …' and import the file. The ‘Topic identifier’ here is the 'topic#' in the sign up sheet. &lt;br /&gt;
&lt;br /&gt;
4. Go back to sign up sheet page to check if the 'Users' in the file and their 'Teams' are listed under the 'Topic names' section.&lt;br /&gt;
&lt;br /&gt;
==Export Assignment Participants (Extra Issue)==&lt;br /&gt;
===Current Implementation===&lt;br /&gt;
Current Implementation just allows users to Export the set of all Assignment Participants, of a given assignment. It doesn't allow any further filtering.&lt;br /&gt;
&lt;br /&gt;
===Functionality===&lt;br /&gt;
The current functionality is very rigid and doesn't allow the user to know any more than the set of assignment Participants, which is also a major drawback&lt;br /&gt;
&lt;br /&gt;
===New Implementation===&lt;br /&gt;
The new implementation allows user to export Assignment Participants in four ways.&lt;br /&gt;
* List of All Users mapped with team number and topic name who have signed up for an assignment topic&lt;br /&gt;
* List of All Users mapped with team number and topic name who are wait-listed for an assignment topic&lt;br /&gt;
* List of All Participants who haven't yet signed up for a topic and haven't formed teams yet&lt;br /&gt;
* List of All Participants&lt;br /&gt;
&lt;br /&gt;
The functionality is present as a set of Radio buttons, which is checked by default to the fourth option that is to export all Participants. However that can be changed according to requirement.&lt;br /&gt;
&lt;br /&gt;
The above has been implemented by creating a partial for the view to add the radio button. Further and If else bock has been used in the model, to identify the option selected and accordingly, on the required set of Rows are pushed to the csv file. To know whether a User has signed up or not for a topic, The SignedUpTeam model is used and to find if the team is wait listed or not, the is_waitlisted boolean value id used to determine if the team is wait listed or not.&lt;br /&gt;
&lt;br /&gt;
A small Code snippet describing how one of these option was achieved is given below:&lt;br /&gt;
  if options[&amp;quot;participant_type&amp;quot;] == &amp;quot;signed&amp;quot;&lt;br /&gt;
         Team.where(:parent_id=&amp;gt; parent_id).find_each do |team|&lt;br /&gt;
           TeamsUser.where(:team_id=&amp;gt; team.id).find_each do |team_user|&lt;br /&gt;
             user = User.find(team_user.user_id)&lt;br /&gt;
             if SignedUpTeam.where( :team_id =&amp;gt; team.id).where(:is_waitlisted =&amp;gt; [false, nil,&amp;quot; &amp;quot;, &amp;quot;&amp;quot;]).present?&lt;br /&gt;
               assignemnt_team = SignedUpTeam.where( :team_id =&amp;gt; team.id).where(:is_waitlisted =&amp;gt; [false, nil,&amp;quot; &amp;quot;, &amp;quot;&amp;quot;]).first&lt;br /&gt;
               topic = SignUpTopic.find(assignemnt_team.topic_id)&lt;br /&gt;
             csv &amp;lt;&amp;lt; [&lt;br /&gt;
               user.name,&lt;br /&gt;
               user.fullname,&lt;br /&gt;
               user.email,&lt;br /&gt;
               user.role.name,&lt;br /&gt;
               user.parent.name,&lt;br /&gt;
               user.email_on_submission,&lt;br /&gt;
               user.email_on_review,&lt;br /&gt;
               user.email_on_review_of_review,&lt;br /&gt;
               team.id,&lt;br /&gt;
               topic.topic_name,&lt;br /&gt;
               &amp;quot;handle&amp;quot;&lt;br /&gt;
             ]&lt;br /&gt;
             end&lt;br /&gt;
           end&lt;br /&gt;
         end&lt;br /&gt;
'''Why has it been implemented the way it has been?''' &lt;br /&gt;
&lt;br /&gt;
The implementation has been done in the above manner to maintain parity with the structure of export functions that have been implemented in the other models. Further Since, It is not going to be in any other manner within the model, there is no point of extracting methods, which would just affect performance due to added procedure call and return. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====UI Testing====&lt;br /&gt;
UI testing for the above was done by exporting Assignment Teams for a given assignment using all the above options individually and checking if the result actually matched what was expected. Example 'all' should export all the participants listed withing the assignment. 'Signed Up Team' gives all the participants who have signed up mapped to their teams and respective topics.&lt;br /&gt;
&lt;br /&gt;
1. Sign in as Instructor&lt;br /&gt;
&lt;br /&gt;
2. Click Manage -&amp;gt; Assignments&lt;br /&gt;
&lt;br /&gt;
3. Click Add Participants for Final Project Assignment&lt;br /&gt;
&lt;br /&gt;
4. Click Export Assignment participants at the bottom of the page.&lt;br /&gt;
&lt;br /&gt;
5. Choose the appropriate option to export participants&lt;br /&gt;
&lt;br /&gt;
==Ordering of Imported Fields (Issue 110)==&lt;br /&gt;
====Current Implementation====&lt;br /&gt;
&lt;br /&gt;
Currently the order of the columns is preset and the user has to change the csv to match it.&lt;br /&gt;
&lt;br /&gt;
=====Drawbacks and Solutions=====&lt;br /&gt;
&lt;br /&gt;
This is inconvenient for the user to keep editing csv files. The solution iss to allow users chose the order of the columns as it appears in their csv file.&lt;br /&gt;
&lt;br /&gt;
====New Implementation====&lt;br /&gt;
In the view we added the drop down fields based on the expected_fields&lt;br /&gt;
&lt;br /&gt;
    *Please choose the order of the columns here:&amp;lt;br/&amp;gt;&lt;br /&gt;
    &amp;lt;%@array_expected_values.each{|field|%&amp;gt;&lt;br /&gt;
    &amp;lt;%=select_tag 'import_field_[field]', options_for_select(@array_expected_values.collect.with_index.to_a,field)%&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
    &amp;lt;%}%&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the import_file_controller.rb we made addition to the start method:&lt;br /&gt;
&lt;br /&gt;
    @array_expected_values = parse_line(@expected_fields,',',params)&lt;br /&gt;
    b = ['...','MetareviewerN','ReviewerN','Team MemberN']&lt;br /&gt;
    @array_expected_values.delete_if { |x| b.include?(x) }&lt;br /&gt;
    if(@array_expected_values.include?(&amp;quot;Team Member1&amp;quot;))&lt;br /&gt;
    (3..4).each do |i|&lt;br /&gt;
      @array_expected_values.push(&amp;quot;Team Member#{i}&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
    elsif(@array_expected_values.include?(&amp;quot;Reviewer1&amp;quot;))&lt;br /&gt;
    (3..15).each do |i|&lt;br /&gt;
      @array_expected_values.push(&amp;quot;Reviewer#{i}&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
    elsif(@array_expected_values.include?(&amp;quot;Metaeviewer1&amp;quot;))&lt;br /&gt;
    (3..15).each do |i|&lt;br /&gt;
      @array_expected_values.push(&amp;quot;Metareviewer#{i}&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
This allows expected_fields for the users and reviews to be unpacked as previously it was using wording such as &amp;quot;... userN&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Also in the import_file_controller.rb we added function that reorders the columns as they are expected by expertiza:&lt;br /&gt;
&lt;br /&gt;
def reorder_row(row,params)&lt;br /&gt;
    case params[:model]&lt;br /&gt;
      when &amp;quot;AssignmentTeam&amp;quot;&lt;br /&gt;
        expected_fields_variable_default = ['Team Name - optional', 'Team Member1','Team Member2', 'Team Member3', 'Team Member4']&lt;br /&gt;
      when &amp;quot;User&amp;quot;&lt;br /&gt;
        expected_fields_variable_default = [ 'username', 'full name (first[ middle] last)', 'e-mail address']&lt;br /&gt;
      when &amp;quot;ReviewResponseMap&amp;quot;&lt;br /&gt;
        expected_fields_variable_default = [ 'Contributor', 'Reviewer1', 'Reviewer2']&lt;br /&gt;
        (3..15).each do |i|&lt;br /&gt;
          expected_fields_variable_default.push(&amp;quot;Reviewer#{i}&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
      when &amp;quot;MetaeviewResponseMap&amp;quot;&lt;br /&gt;
        expected_fields_variable_default = [ 'Contributor', 'Reviewer', 'Metareviewer1','Metareviewer2']&lt;br /&gt;
        (3..15).each do |i|&lt;br /&gt;
          expected_fields_variable_default.push(&amp;quot;Metareviewer#{i}&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
       when &amp;quot;SignUpTopic&amp;quot;&lt;br /&gt;
         expected_fields_variable_default = [ 'Topic identifier', 'Topic name', 'Max choosers', 'Topic Category']&lt;br /&gt;
      else&lt;br /&gt;
        expected_fields_variable_default = ['Team Name - optional', 'Team Member1','Team Member2', 'Team Member3', 'Team Member4']&lt;br /&gt;
    end&lt;br /&gt;
    expected_fields_variable=[]&lt;br /&gt;
    custom_order={}&lt;br /&gt;
    return_row=[]&lt;br /&gt;
    expected_fields_variable=expected_fields_variable_default.reject.with_index { |x,i| i &amp;gt; row.length-1 }&lt;br /&gt;
    expected_fields_variable.each_with_index { |field, index|&lt;br /&gt;
      custom_order[params[&amp;quot;import_field_#{index}&amp;quot;]]=row[index]&lt;br /&gt;
    }&lt;br /&gt;
    expected_fields_variable.each_with_index { |field, index| return_row[index]=custom_order[field]}&lt;br /&gt;
    return_row&lt;br /&gt;
  end&lt;br /&gt;
====UI Testing====&lt;br /&gt;
To test this in the browser first need to be logged in as instructor. Then go to Manage -&amp;gt; Assignments -&amp;gt; Assignments tab. Then select to add teams to any assignment -&amp;gt; import teams. Here you would need to create a CSV file with the Team name and team members - separated by comma. The order of the column are arbitrary, just have to match them in the drop down fields provided. &lt;br /&gt;
For the team members there are maximum drop down fields, but you only need to fill out the relevant once. It will know to ignore irrelevant columns.&lt;br /&gt;
&lt;br /&gt;
==Improvement Scope ==&lt;br /&gt;
The above Import as well as export functionalities that have been implemented in due course of the project have a scope for improvement. Imports and exports are functionalities that are used very often used to insert data as well to transfer data stored into the Models to external CSV files. Thus these features can be further tested using rspec tests as well as capybara and cucumber tests so as to make it fool proof. However these tests cannot be made such that they hamper the flexibility of the implementation to achieve a particular functionality.&lt;br /&gt;
Further We can also add options to handle duplicates as well as to filter out exports in other models as well, instead of the ones it is already present. Thus there is a scope of a lot more improvement to make Expertiza more user friendly.&lt;/div&gt;</summary>
		<author><name>Rsinha2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=104272</id>
		<title>CSC/ECE 517 Fall 2016/oss E1656</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=104272"/>
		<updated>2016-11-04T01:25:12Z</updated>

		<summary type="html">&lt;p&gt;Rsinha2: /* New Implementation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== E1656. Improve imports ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This page provides a description of the Expertiza based OSS project. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Introduction to Expertiza==&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open source project based on [http://rubyonrails.org/ Ruby on Rails] framework.&lt;br /&gt;
&lt;br /&gt;
==Project Description==&lt;br /&gt;
===About Import===&lt;br /&gt;
In Expertiza, various kinds of data may be imported from [https://en.wikipedia.org/wiki/Comma-separated_values csv files], including users, participants in an assignemnt, topics and teams. When importing data, a corresponding csv file have to be composed. In a csv file, each new line represent a piece of datum and the different fields of a datum are separated by delimiters. But there are rough edges in the way these imports are done and certain other data that should be importable is not. This project focuses on implementing following tasks about data import functionality: &lt;br /&gt;
&lt;br /&gt;
*When a team with a duplicate name is imported, one of the options is to rename the new team.  There should also be an option to rename an existing team.  See Issue 329.&lt;br /&gt;
*Review assignments (“reviewer mappings”) should be able to be imported, but cannot be imported.  See Issue 711&lt;br /&gt;
*It should be possible to import a list of users who have signed up for topics, but this feature does not yet exist.  See Issue 153.&lt;br /&gt;
*For every kind of data to be imported, Expertiza currently specifies the ordering of fields.  This isn’t very flexible; it may require the user (an instructor) to edit an existing CSV file.  It would be better if, after importing the data, Expertiza showed the data together with dropdowns containing the default field headers.  (This is similar to the way Excel shows data when it is imported from a CSV file.)  Then the user could change the dropdowns to cause a different ordering of fields.  See Issue 110.&lt;br /&gt;
*Create a way to export a list of teams that have signed up for topics, and who are waitlisted for topics, as well as participants in an assignment who have not signed up for topics. Choose the format, but keep it as consistent as possible with the other export formats.  This would help the professor when students ask him for advice on finding teammates.  Extra Issue&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following tasks were listed as a requirement, but after careful examination it was determined that these tasks were already implemented&lt;br /&gt;
*The simplest fix: If I try to import topics, the import page gives me this message: “The import process expects the following columns:” but it doesn’t say what the columns are (topic number, topic name, category, number of slots, category)!  It used to be in the system; please revert the change to fix this bug.  See Issue 719.&lt;br /&gt;
*When teams are imported in order to insert new members, the members are not inserted.  See Issue 328.&lt;br /&gt;
*It should be possible to leave off the final fields in a line of a CSV file.  These fields are often not specified anyway.  For example, if a password isn’t specified when a new user is created, the system generates a password (see Issue 183).  When importing topics, topic categories are rarely specified.  But if the final field is blank, the import requires the CSV line to end with “, “ (comma and space).  This should be fixed for all imports.&lt;br /&gt;
&lt;br /&gt;
==About Versions Controller==&lt;br /&gt;
Git is a popular version control system, As a part of the project, We have made use of git for the purpose of version control. Our repository is a fork of the original Expertiza repository on which we have collaborated our work. And the project has been submitted through a pull request.&lt;br /&gt;
&lt;br /&gt;
==Handle Duplicates (Issue329)==&lt;br /&gt;
====Current Implementation====&lt;br /&gt;
&lt;br /&gt;
When a team with a duplicate name is imported, one of the options is to rename the new team. There should also be an option to rename an existing team. See Issue 329.&lt;br /&gt;
The current implementation allows the user to handle duplicates, by the following techniques&lt;br /&gt;
*ignore the new team&lt;br /&gt;
*replace the existing team with the new team&lt;br /&gt;
*insert any new members into the existing team&lt;br /&gt;
*rename the new team and import&lt;br /&gt;
*rename the existing team and import&lt;br /&gt;
&lt;br /&gt;
=====Functionality=====&lt;br /&gt;
&lt;br /&gt;
The above functionalities make it easier to achieve the goal of handling duplicates while importing.&lt;br /&gt;
&lt;br /&gt;
=====Drawbacks and Solutions=====&lt;br /&gt;
&lt;br /&gt;
The above set of functionalities do not allow User to ever rename an existing team, rather force him rename his own team.&lt;br /&gt;
Thus the above requirement provides the necessary freedom to the User by providing him the option to rename an already existing team.&lt;br /&gt;
&lt;br /&gt;
====New Implementation====&lt;br /&gt;
&lt;br /&gt;
The option has been implemented using the update functionality that is already present in rails models, to update existing values of Active Records. To implement this feature we have also made use of the functionality for generating team names, that is already present within the Team model.&lt;br /&gt;
&lt;br /&gt;
A code snippet is given below:&lt;br /&gt;
  if handle_dups == &amp;quot;renameOldTeam&amp;quot; # rename: rename new team&lt;br /&gt;
       if teamtype.is_a?(CourseTeam)&lt;br /&gt;
         CourseTeam.update(team.id, :name =&amp;gt; self.generate_team_name(Course.find(id).name))&lt;br /&gt;
         return name&lt;br /&gt;
       elsif teamtype.is_a?(AssignmentTeam)&lt;br /&gt;
         AssignmentTeam.update(team.id, :name =&amp;gt; self.generate_team_name(Assignment.find(id).name))&lt;br /&gt;
         return name&lt;br /&gt;
       end&lt;br /&gt;
     end&lt;br /&gt;
&lt;br /&gt;
'''Why has it been implemented the way it has been'''&lt;br /&gt;
&lt;br /&gt;
The above implementation has been chosen as, it is the easiest way rails provides to update value of records using active records.&lt;br /&gt;
&lt;br /&gt;
====UI Testing====&lt;br /&gt;
The Above feature has been tested from the UI using the both course Teams and Assignment Teams, where new teams were added with conflicting names and the rename existing team option was selected, which lead lead to the desired behavior, that is the team that was extant was renamed and new team was imported with the same name as that specified in the CSV file&lt;br /&gt;
&lt;br /&gt;
1. Log in on Expertiza as instructor&lt;br /&gt;
&lt;br /&gt;
2. Click Manage Assignments&lt;br /&gt;
&lt;br /&gt;
3. Click Add Teams on any assignment listed&lt;br /&gt;
&lt;br /&gt;
4. Click Import Teams at the bottom of the page&lt;br /&gt;
&lt;br /&gt;
5. Choose the Rename an Existing Team Option and click import once the CSV has been chosen&lt;br /&gt;
&lt;br /&gt;
==Fix Reviewer and Metareviewer Mappings (Issue711)==&lt;br /&gt;
====Current Implementation====&lt;br /&gt;
&lt;br /&gt;
When an instructor tries to assign reviewers for an assignment, if the review strategy of the assignment is‘Instructor-Selected’, he could assign reviewers by directly importing the reviewer mappings. But now, when the instructor attempts to submit the import, the system will raise an argument error showing:&lt;br /&gt;
&lt;br /&gt;
[[File:reviewfail.PNG]]&lt;br /&gt;
&lt;br /&gt;
The import fails and, clearly, it's a bug in Expertiza.&lt;br /&gt;
&lt;br /&gt;
====New Implementation====&lt;br /&gt;
To solve this problem, first refer to the view/review_mapping/_list_review_mappings.html.erb file and find out that the model to be imported is ReviewResponseMap. The import method in review_response_map.rb model file takes in 3 arguments which are row, _session and id. A code snippet of import_file_controller.rb (the import controller) is given below:&lt;br /&gt;
[[File:Reviewcode.PNG]]&lt;br /&gt;
&lt;br /&gt;
Before we add the code in parentheses, the ReviewResponseMap model was not explicitly specified which case it belongs to and falls into the else statement where the import method takes in 4 arguments. That’s the reason of getting the “wrong number of argument” error. To resolve the problem, a &amp;quot;or params[:model] == 'ReviewResponseMap'&amp;quot; is inserted into the parentheses to make the import method of reviewer mappings takes in 3 arguments again and then we can correctly import the reviewer mappings. The recovery method for MetareviewResponseMap is exactly the same with this one by adding &lt;br /&gt;
&amp;quot;or params[:model] == 'MetareviewResponseMap'&amp;quot; statement into the parentheses.&lt;br /&gt;
&lt;br /&gt;
====UI Testing====&lt;br /&gt;
1. Login as instructor. Click on ‘Manage Assignment’ to see all assignments in the database.&lt;br /&gt;
&lt;br /&gt;
2. Among all the assignments, click the ‘Review strategy’ card in edit page and find out one assignment with 'Instructor-Selected' strategy (e.g. 'Design exercise'). Creating a new 'Instructor-Selected'           assignment and add some participants to it is also applicable.&lt;br /&gt;
&lt;br /&gt;
3. 'Assign reviewers' for this assignment and click on the 'Import reviewer mappings' on the bottom of the page.&lt;br /&gt;
&lt;br /&gt;
4. Compose a csv file in the given format of 'Contributor, Reviewer1, Reviewer2, …, ReviewerN' and import the file. The ‘Contributor’ here is the name of a team in this assignment. &lt;br /&gt;
&lt;br /&gt;
5. Go back to reviewer mappings page to check if the 'Reviewers of the Contributor' in the file are listed in the 'Reviewed By' section of the 'Contributors'.&lt;br /&gt;
&lt;br /&gt;
==Import Sign Up Sheet (Issue153)==&lt;br /&gt;
====Current Implementation====&lt;br /&gt;
&lt;br /&gt;
When a signup sheet is used in Expertiza, users are expected to sign up for topics. But, the instructor might've taken signups offline, e.g., by passing around a signup sheet in class. If the signup are not taken online by the students, the instructor has to impersonate all the students one by one and sign them up for a topic, which is tedious.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====New Implementation====&lt;br /&gt;
To implement this new issue, a model which is in charge of creating a sign_up and SignedUpTeam should be located first. In SignUpSheet model, methods are designed  for the creation of a sign_up and SignedUpTeam using the data from data base and the new implementation should create them from an imported file. Hence, an ''import'' method is added to this model and a code snippet of it is shown as:&lt;br /&gt;
&lt;br /&gt;
[[File:Signupcode.PNG]]&lt;br /&gt;
&lt;br /&gt;
This new method imports new sign_up data in a format of &amp;quot;Topic identifier, User1, User2&amp;quot;. Users here are the ones who signed up for the topic with a certain identifier (id). Some edge cases are also taken into consideration in this method to prevent importing a non-existing team in this assignment, a non-existing user or a user who is not a participant of this assignment. &lt;br /&gt;
Next, a link on the view page needs to be created to access this method. The instructor can view the sign up sheet of an assignment under the &amp;quot;topic&amp;quot; card of the &amp;quot;edit&amp;quot; section. An &amp;quot;Import sign up sheet&amp;quot; button is added beside the &amp;quot;Import topic&amp;quot; link &lt;br /&gt;
&lt;br /&gt;
[[File:Button.PNG]]&lt;br /&gt;
&lt;br /&gt;
and the corresponding code should be inserted in the &amp;quot;view/sign_up_sheet/_add_topics/html.erb&amp;quot; file.&lt;br /&gt;
&lt;br /&gt;
[[File:View.PNG]]&lt;br /&gt;
&lt;br /&gt;
After all of this, the new feature is successfully implemented and the instructor can directly import a large offline sign up sheet without tedious impersonating. The whole process of importing sign ups works  exactly the same as student online sign ups. If the assignment does not have a topic yet, the 'Import sign up sheet' link will be invisible unless a topic is created or imported. If a imported user does not have a team, he will be automatically assigned a team and sign up for the topic. If users imported exceeds the limit a certain topic can hold, the leftmost users in the file (like the earliest signed up users) will have the topic and those right(later signed up) users will be in the wait list.&lt;br /&gt;
&lt;br /&gt;
====UI Testing====&lt;br /&gt;
1. Login as instructor. Click on 'Manage Assignment’ to see all assignments in the database.&lt;br /&gt;
&lt;br /&gt;
2. Click on 'edit', go to 'topic' card and find the &amp;quot;Import sign up sheet&amp;quot; link.&lt;br /&gt;
&lt;br /&gt;
3. Compose a csv file in the given format of 'Topic identifier, User1, User2, …' and import the file. The ‘Topic identifier’ here is the 'topic#' in the sign up sheet. &lt;br /&gt;
&lt;br /&gt;
4. Go back to sign up sheet page to check if the 'Users' in the file and their 'Teams' are listed under the 'Topic names' section.&lt;br /&gt;
&lt;br /&gt;
==Export Assignment Participants (Extra Issue)==&lt;br /&gt;
===Current Implementation===&lt;br /&gt;
Current Implementation just allows users to Export the set of all Assignment Participants, of a given assignment. It doesn't allow any further filtering.&lt;br /&gt;
&lt;br /&gt;
===Functionality===&lt;br /&gt;
The current functionality is very rigid and doesn't allow the user to know any more than the set of assignment Participants, which is also a major drawback&lt;br /&gt;
&lt;br /&gt;
===New Implementation===&lt;br /&gt;
The new implementation allows user to export Assignment Participants in four ways.&lt;br /&gt;
* List of All Users mapped with team number and topic name who have signed up for an assignment topic&lt;br /&gt;
* List of All Users mapped with team number and topic name who are wait-listed for an assignment topic&lt;br /&gt;
* List of All Participants who haven't yet signed up for a topic and haven't formed teams yet&lt;br /&gt;
* List of All Participants&lt;br /&gt;
&lt;br /&gt;
The functionality is present as a set of Radio buttons, which is checked by default to the fourth option that is to export all Participants. However that can be changed according to requirement.&lt;br /&gt;
&lt;br /&gt;
The above has been implemented by creating a partial for the view to add the radio button. Further and If else bock has been used in the model, to identify the option selected and accordingly, on the required set of Rows are pushed to the csv file. To know whether a User has signed up or not for a topic, The SignedUpTeam model is used and to find if the team is wait listed or not, the is_waitlisted boolean value id used to determine if the team is wait listed or not.&lt;br /&gt;
&lt;br /&gt;
A small Code snippet describing how one of these option was achieved is given below:&lt;br /&gt;
  if options[&amp;quot;participant_type&amp;quot;] == &amp;quot;signed&amp;quot;&lt;br /&gt;
         Team.where(:parent_id=&amp;gt; parent_id).find_each do |team|&lt;br /&gt;
           TeamsUser.where(:team_id=&amp;gt; team.id).find_each do |team_user|&lt;br /&gt;
             user = User.find(team_user.user_id)&lt;br /&gt;
             if SignedUpTeam.where( :team_id =&amp;gt; team.id).where(:is_waitlisted =&amp;gt; [false, nil,&amp;quot; &amp;quot;, &amp;quot;&amp;quot;]).present?&lt;br /&gt;
               assignemnt_team = SignedUpTeam.where( :team_id =&amp;gt; team.id).where(:is_waitlisted =&amp;gt; [false, nil,&amp;quot; &amp;quot;, &amp;quot;&amp;quot;]).first&lt;br /&gt;
               topic = SignUpTopic.find(assignemnt_team.topic_id)&lt;br /&gt;
             csv &amp;lt;&amp;lt; [&lt;br /&gt;
               user.name,&lt;br /&gt;
               user.fullname,&lt;br /&gt;
               user.email,&lt;br /&gt;
               user.role.name,&lt;br /&gt;
               user.parent.name,&lt;br /&gt;
               user.email_on_submission,&lt;br /&gt;
               user.email_on_review,&lt;br /&gt;
               user.email_on_review_of_review,&lt;br /&gt;
               team.id,&lt;br /&gt;
               topic.topic_name,&lt;br /&gt;
               &amp;quot;handle&amp;quot;&lt;br /&gt;
             ]&lt;br /&gt;
             end&lt;br /&gt;
           end&lt;br /&gt;
         end&lt;br /&gt;
'''Why has it been implemented the way it has been?''' &lt;br /&gt;
&lt;br /&gt;
The implementation has been done in the above manner to maintain parity with the structure of export functions that have been implemented in the other models. Further Since, It is not going to be in any other manner within the model, there is no point of extracting methods, which would just affect performance due to added procedure call and return. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====UI Testing====&lt;br /&gt;
UI testing for the above was done by exporting Assignment Teams for a given assignment using all the above options individually and checking if the result actually matched what was expected. Example 'all' should export all the participants listed withing the assignment. 'Signed Up Team' gives all the participants who have signed up mapped to their teams and respective topics.&lt;br /&gt;
&lt;br /&gt;
1. Sign in as Instructor&lt;br /&gt;
&lt;br /&gt;
2. Click Manage -&amp;gt; Assignments&lt;br /&gt;
&lt;br /&gt;
3. Click Add Participants for any assignment&lt;br /&gt;
&lt;br /&gt;
4. Click Export at the bottom of the page.&lt;br /&gt;
&lt;br /&gt;
5. Choose the appropriate option to export participants&lt;br /&gt;
&lt;br /&gt;
==Ordering of Imported Fields (Issue 110)==&lt;br /&gt;
====Current Implementation====&lt;br /&gt;
&lt;br /&gt;
Currently the order of the columns is preset and the user has to change the csv to match it.&lt;br /&gt;
&lt;br /&gt;
=====Drawbacks and Solutions=====&lt;br /&gt;
&lt;br /&gt;
This is inconvenient for the user to keep editing csv files. The solution iss to allow users chose the order of the columns as it appears in their csv file.&lt;br /&gt;
&lt;br /&gt;
====New Implementation====&lt;br /&gt;
In the view we added the drop down fields based on the expected_fields&lt;br /&gt;
&lt;br /&gt;
    *Please choose the order of the columns here:&amp;lt;br/&amp;gt;&lt;br /&gt;
    &amp;lt;%@array_expected_values.each{|field|%&amp;gt;&lt;br /&gt;
    &amp;lt;%=select_tag 'import_field_[field]', options_for_select(@array_expected_values.collect.with_index.to_a,field)%&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
    &amp;lt;%}%&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the import_file_controller.rb we made addition to the start method:&lt;br /&gt;
&lt;br /&gt;
    @array_expected_values = parse_line(@expected_fields,',',params)&lt;br /&gt;
    b = ['...','MetareviewerN','ReviewerN','Team MemberN']&lt;br /&gt;
    @array_expected_values.delete_if { |x| b.include?(x) }&lt;br /&gt;
    if(@array_expected_values.include?(&amp;quot;Team Member1&amp;quot;))&lt;br /&gt;
    (3..4).each do |i|&lt;br /&gt;
      @array_expected_values.push(&amp;quot;Team Member#{i}&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
    elsif(@array_expected_values.include?(&amp;quot;Reviewer1&amp;quot;))&lt;br /&gt;
    (3..15).each do |i|&lt;br /&gt;
      @array_expected_values.push(&amp;quot;Reviewer#{i}&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
    elsif(@array_expected_values.include?(&amp;quot;Metaeviewer1&amp;quot;))&lt;br /&gt;
    (3..15).each do |i|&lt;br /&gt;
      @array_expected_values.push(&amp;quot;Metareviewer#{i}&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
This allows expected_fields for the users and reviews to be unpacked as previously it was using wording such as &amp;quot;... userN&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Also in the import_file_controller.rb we added function that reorders the columns as they are expected by expertiza:&lt;br /&gt;
&lt;br /&gt;
def reorder_row(row,params)&lt;br /&gt;
    case params[:model]&lt;br /&gt;
      when &amp;quot;AssignmentTeam&amp;quot;&lt;br /&gt;
        expected_fields_variable_default = ['Team Name - optional', 'Team Member1','Team Member2', 'Team Member3', 'Team Member4']&lt;br /&gt;
      when &amp;quot;User&amp;quot;&lt;br /&gt;
        expected_fields_variable_default = [ 'username', 'full name (first[ middle] last)', 'e-mail address']&lt;br /&gt;
      when &amp;quot;ReviewResponseMap&amp;quot;&lt;br /&gt;
        expected_fields_variable_default = [ 'Contributor', 'Reviewer1', 'Reviewer2']&lt;br /&gt;
        (3..15).each do |i|&lt;br /&gt;
          expected_fields_variable_default.push(&amp;quot;Reviewer#{i}&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
      when &amp;quot;MetaeviewResponseMap&amp;quot;&lt;br /&gt;
        expected_fields_variable_default = [ 'Contributor', 'Reviewer', 'Metareviewer1','Metareviewer2']&lt;br /&gt;
        (3..15).each do |i|&lt;br /&gt;
          expected_fields_variable_default.push(&amp;quot;Metareviewer#{i}&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
       when &amp;quot;SignUpTopic&amp;quot;&lt;br /&gt;
         expected_fields_variable_default = [ 'Topic identifier', 'Topic name', 'Max choosers', 'Topic Category']&lt;br /&gt;
      else&lt;br /&gt;
        expected_fields_variable_default = ['Team Name - optional', 'Team Member1','Team Member2', 'Team Member3', 'Team Member4']&lt;br /&gt;
    end&lt;br /&gt;
    expected_fields_variable=[]&lt;br /&gt;
    custom_order={}&lt;br /&gt;
    return_row=[]&lt;br /&gt;
    expected_fields_variable=expected_fields_variable_default.reject.with_index { |x,i| i &amp;gt; row.length-1 }&lt;br /&gt;
    expected_fields_variable.each_with_index { |field, index|&lt;br /&gt;
      custom_order[params[&amp;quot;import_field_#{index}&amp;quot;]]=row[index]&lt;br /&gt;
    }&lt;br /&gt;
    expected_fields_variable.each_with_index { |field, index| return_row[index]=custom_order[field]}&lt;br /&gt;
    return_row&lt;br /&gt;
  end&lt;br /&gt;
====UI Testing====&lt;br /&gt;
To test this in the browser first need to be logged in as instructor. Then go to Manage -&amp;gt; Assignments -&amp;gt; Assignments tab. Then select to add teams to any assignment -&amp;gt; import teams. Here you would need to create a CSV file with the Team name and team members - separated by comma. The order of the column are arbitrary, just have to match them in the drop down fields provided. &lt;br /&gt;
For the team members there are maximum drop down fields, but you only need to fill out the relevant once. It will know to ignore irrelevant columns.&lt;br /&gt;
&lt;br /&gt;
==Improvement Scope ==&lt;br /&gt;
The above Import as well as export functionalities that have been implemented in due course of the project have a scope for improvement. Imports and exports are functionalities that are used very often used to insert data as well to transfer data stored into the Models to external CSV files. Thus these features can be further tested using rspec tests as well as capybara and cucumber tests so as to make it fool proof. However these tests cannot be made such that they hamper the flexibility of the implementation to achieve a particular functionality.&lt;br /&gt;
Further We can also add options to handle duplicates as well as to filter out exports in other models as well, instead of the ones it is already present. Thus there is a scope of a lot more improvement to make Expertiza more user friendly.&lt;/div&gt;</summary>
		<author><name>Rsinha2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=104271</id>
		<title>CSC/ECE 517 Fall 2016/oss E1656</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=104271"/>
		<updated>2016-11-04T01:24:59Z</updated>

		<summary type="html">&lt;p&gt;Rsinha2: /* New Implementation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== E1656. Improve imports ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This page provides a description of the Expertiza based OSS project. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Introduction to Expertiza==&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open source project based on [http://rubyonrails.org/ Ruby on Rails] framework.&lt;br /&gt;
&lt;br /&gt;
==Project Description==&lt;br /&gt;
===About Import===&lt;br /&gt;
In Expertiza, various kinds of data may be imported from [https://en.wikipedia.org/wiki/Comma-separated_values csv files], including users, participants in an assignemnt, topics and teams. When importing data, a corresponding csv file have to be composed. In a csv file, each new line represent a piece of datum and the different fields of a datum are separated by delimiters. But there are rough edges in the way these imports are done and certain other data that should be importable is not. This project focuses on implementing following tasks about data import functionality: &lt;br /&gt;
&lt;br /&gt;
*When a team with a duplicate name is imported, one of the options is to rename the new team.  There should also be an option to rename an existing team.  See Issue 329.&lt;br /&gt;
*Review assignments (“reviewer mappings”) should be able to be imported, but cannot be imported.  See Issue 711&lt;br /&gt;
*It should be possible to import a list of users who have signed up for topics, but this feature does not yet exist.  See Issue 153.&lt;br /&gt;
*For every kind of data to be imported, Expertiza currently specifies the ordering of fields.  This isn’t very flexible; it may require the user (an instructor) to edit an existing CSV file.  It would be better if, after importing the data, Expertiza showed the data together with dropdowns containing the default field headers.  (This is similar to the way Excel shows data when it is imported from a CSV file.)  Then the user could change the dropdowns to cause a different ordering of fields.  See Issue 110.&lt;br /&gt;
*Create a way to export a list of teams that have signed up for topics, and who are waitlisted for topics, as well as participants in an assignment who have not signed up for topics. Choose the format, but keep it as consistent as possible with the other export formats.  This would help the professor when students ask him for advice on finding teammates.  Extra Issue&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following tasks were listed as a requirement, but after careful examination it was determined that these tasks were already implemented&lt;br /&gt;
*The simplest fix: If I try to import topics, the import page gives me this message: “The import process expects the following columns:” but it doesn’t say what the columns are (topic number, topic name, category, number of slots, category)!  It used to be in the system; please revert the change to fix this bug.  See Issue 719.&lt;br /&gt;
*When teams are imported in order to insert new members, the members are not inserted.  See Issue 328.&lt;br /&gt;
*It should be possible to leave off the final fields in a line of a CSV file.  These fields are often not specified anyway.  For example, if a password isn’t specified when a new user is created, the system generates a password (see Issue 183).  When importing topics, topic categories are rarely specified.  But if the final field is blank, the import requires the CSV line to end with “, “ (comma and space).  This should be fixed for all imports.&lt;br /&gt;
&lt;br /&gt;
==About Versions Controller==&lt;br /&gt;
Git is a popular version control system, As a part of the project, We have made use of git for the purpose of version control. Our repository is a fork of the original Expertiza repository on which we have collaborated our work. And the project has been submitted through a pull request.&lt;br /&gt;
&lt;br /&gt;
==Handle Duplicates (Issue329)==&lt;br /&gt;
====Current Implementation====&lt;br /&gt;
&lt;br /&gt;
When a team with a duplicate name is imported, one of the options is to rename the new team. There should also be an option to rename an existing team. See Issue 329.&lt;br /&gt;
The current implementation allows the user to handle duplicates, by the following techniques&lt;br /&gt;
*ignore the new team&lt;br /&gt;
*replace the existing team with the new team&lt;br /&gt;
*insert any new members into the existing team&lt;br /&gt;
*rename the new team and import&lt;br /&gt;
*rename the existing team and import&lt;br /&gt;
&lt;br /&gt;
=====Functionality=====&lt;br /&gt;
&lt;br /&gt;
The above functionalities make it easier to achieve the goal of handling duplicates while importing.&lt;br /&gt;
&lt;br /&gt;
=====Drawbacks and Solutions=====&lt;br /&gt;
&lt;br /&gt;
The above set of functionalities do not allow User to ever rename an existing team, rather force him rename his own team.&lt;br /&gt;
Thus the above requirement provides the necessary freedom to the User by providing him the option to rename an already existing team.&lt;br /&gt;
&lt;br /&gt;
====New Implementation====&lt;br /&gt;
&lt;br /&gt;
The option has been implemented using the update functionality that is already present in rails models, to update existing values of Active Records. To implement this feature we have also made use of the functionality for generating team names, that is already present within the Team model.&lt;br /&gt;
&lt;br /&gt;
A code snippet is given below:&lt;br /&gt;
  if handle_dups == &amp;quot;renameOldTeam&amp;quot; # rename: rename new team&lt;br /&gt;
       if teamtype.is_a?(CourseTeam)&lt;br /&gt;
         CourseTeam.update(team.id, :name =&amp;gt; self.generate_team_name(Course.find(id).name))&lt;br /&gt;
         return name&lt;br /&gt;
       elsif teamtype.is_a?(AssignmentTeam)&lt;br /&gt;
         AssignmentTeam.update(team.id, :name =&amp;gt; self.generate_team_name(Assignment.find(id).name))&lt;br /&gt;
         return name&lt;br /&gt;
       end&lt;br /&gt;
     end&lt;br /&gt;
&lt;br /&gt;
'''Why has it been implemented the way it has been'''&lt;br /&gt;
The above implementation has been chosen as, it is the easiest way rails provides to update value of records using active records.&lt;br /&gt;
&lt;br /&gt;
====UI Testing====&lt;br /&gt;
The Above feature has been tested from the UI using the both course Teams and Assignment Teams, where new teams were added with conflicting names and the rename existing team option was selected, which lead lead to the desired behavior, that is the team that was extant was renamed and new team was imported with the same name as that specified in the CSV file&lt;br /&gt;
&lt;br /&gt;
1. Log in on Expertiza as instructor&lt;br /&gt;
&lt;br /&gt;
2. Click Manage Assignments&lt;br /&gt;
&lt;br /&gt;
3. Click Add Teams on any assignment listed&lt;br /&gt;
&lt;br /&gt;
4. Click Import Teams at the bottom of the page&lt;br /&gt;
&lt;br /&gt;
5. Choose the Rename an Existing Team Option and click import once the CSV has been chosen&lt;br /&gt;
&lt;br /&gt;
==Fix Reviewer and Metareviewer Mappings (Issue711)==&lt;br /&gt;
====Current Implementation====&lt;br /&gt;
&lt;br /&gt;
When an instructor tries to assign reviewers for an assignment, if the review strategy of the assignment is‘Instructor-Selected’, he could assign reviewers by directly importing the reviewer mappings. But now, when the instructor attempts to submit the import, the system will raise an argument error showing:&lt;br /&gt;
&lt;br /&gt;
[[File:reviewfail.PNG]]&lt;br /&gt;
&lt;br /&gt;
The import fails and, clearly, it's a bug in Expertiza.&lt;br /&gt;
&lt;br /&gt;
====New Implementation====&lt;br /&gt;
To solve this problem, first refer to the view/review_mapping/_list_review_mappings.html.erb file and find out that the model to be imported is ReviewResponseMap. The import method in review_response_map.rb model file takes in 3 arguments which are row, _session and id. A code snippet of import_file_controller.rb (the import controller) is given below:&lt;br /&gt;
[[File:Reviewcode.PNG]]&lt;br /&gt;
&lt;br /&gt;
Before we add the code in parentheses, the ReviewResponseMap model was not explicitly specified which case it belongs to and falls into the else statement where the import method takes in 4 arguments. That’s the reason of getting the “wrong number of argument” error. To resolve the problem, a &amp;quot;or params[:model] == 'ReviewResponseMap'&amp;quot; is inserted into the parentheses to make the import method of reviewer mappings takes in 3 arguments again and then we can correctly import the reviewer mappings. The recovery method for MetareviewResponseMap is exactly the same with this one by adding &lt;br /&gt;
&amp;quot;or params[:model] == 'MetareviewResponseMap'&amp;quot; statement into the parentheses.&lt;br /&gt;
&lt;br /&gt;
====UI Testing====&lt;br /&gt;
1. Login as instructor. Click on ‘Manage Assignment’ to see all assignments in the database.&lt;br /&gt;
&lt;br /&gt;
2. Among all the assignments, click the ‘Review strategy’ card in edit page and find out one assignment with 'Instructor-Selected' strategy (e.g. 'Design exercise'). Creating a new 'Instructor-Selected'           assignment and add some participants to it is also applicable.&lt;br /&gt;
&lt;br /&gt;
3. 'Assign reviewers' for this assignment and click on the 'Import reviewer mappings' on the bottom of the page.&lt;br /&gt;
&lt;br /&gt;
4. Compose a csv file in the given format of 'Contributor, Reviewer1, Reviewer2, …, ReviewerN' and import the file. The ‘Contributor’ here is the name of a team in this assignment. &lt;br /&gt;
&lt;br /&gt;
5. Go back to reviewer mappings page to check if the 'Reviewers of the Contributor' in the file are listed in the 'Reviewed By' section of the 'Contributors'.&lt;br /&gt;
&lt;br /&gt;
==Import Sign Up Sheet (Issue153)==&lt;br /&gt;
====Current Implementation====&lt;br /&gt;
&lt;br /&gt;
When a signup sheet is used in Expertiza, users are expected to sign up for topics. But, the instructor might've taken signups offline, e.g., by passing around a signup sheet in class. If the signup are not taken online by the students, the instructor has to impersonate all the students one by one and sign them up for a topic, which is tedious.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====New Implementation====&lt;br /&gt;
To implement this new issue, a model which is in charge of creating a sign_up and SignedUpTeam should be located first. In SignUpSheet model, methods are designed  for the creation of a sign_up and SignedUpTeam using the data from data base and the new implementation should create them from an imported file. Hence, an ''import'' method is added to this model and a code snippet of it is shown as:&lt;br /&gt;
&lt;br /&gt;
[[File:Signupcode.PNG]]&lt;br /&gt;
&lt;br /&gt;
This new method imports new sign_up data in a format of &amp;quot;Topic identifier, User1, User2&amp;quot;. Users here are the ones who signed up for the topic with a certain identifier (id). Some edge cases are also taken into consideration in this method to prevent importing a non-existing team in this assignment, a non-existing user or a user who is not a participant of this assignment. &lt;br /&gt;
Next, a link on the view page needs to be created to access this method. The instructor can view the sign up sheet of an assignment under the &amp;quot;topic&amp;quot; card of the &amp;quot;edit&amp;quot; section. An &amp;quot;Import sign up sheet&amp;quot; button is added beside the &amp;quot;Import topic&amp;quot; link &lt;br /&gt;
&lt;br /&gt;
[[File:Button.PNG]]&lt;br /&gt;
&lt;br /&gt;
and the corresponding code should be inserted in the &amp;quot;view/sign_up_sheet/_add_topics/html.erb&amp;quot; file.&lt;br /&gt;
&lt;br /&gt;
[[File:View.PNG]]&lt;br /&gt;
&lt;br /&gt;
After all of this, the new feature is successfully implemented and the instructor can directly import a large offline sign up sheet without tedious impersonating. The whole process of importing sign ups works  exactly the same as student online sign ups. If the assignment does not have a topic yet, the 'Import sign up sheet' link will be invisible unless a topic is created or imported. If a imported user does not have a team, he will be automatically assigned a team and sign up for the topic. If users imported exceeds the limit a certain topic can hold, the leftmost users in the file (like the earliest signed up users) will have the topic and those right(later signed up) users will be in the wait list.&lt;br /&gt;
&lt;br /&gt;
====UI Testing====&lt;br /&gt;
1. Login as instructor. Click on 'Manage Assignment’ to see all assignments in the database.&lt;br /&gt;
&lt;br /&gt;
2. Click on 'edit', go to 'topic' card and find the &amp;quot;Import sign up sheet&amp;quot; link.&lt;br /&gt;
&lt;br /&gt;
3. Compose a csv file in the given format of 'Topic identifier, User1, User2, …' and import the file. The ‘Topic identifier’ here is the 'topic#' in the sign up sheet. &lt;br /&gt;
&lt;br /&gt;
4. Go back to sign up sheet page to check if the 'Users' in the file and their 'Teams' are listed under the 'Topic names' section.&lt;br /&gt;
&lt;br /&gt;
==Export Assignment Participants (Extra Issue)==&lt;br /&gt;
===Current Implementation===&lt;br /&gt;
Current Implementation just allows users to Export the set of all Assignment Participants, of a given assignment. It doesn't allow any further filtering.&lt;br /&gt;
&lt;br /&gt;
===Functionality===&lt;br /&gt;
The current functionality is very rigid and doesn't allow the user to know any more than the set of assignment Participants, which is also a major drawback&lt;br /&gt;
&lt;br /&gt;
===New Implementation===&lt;br /&gt;
The new implementation allows user to export Assignment Participants in four ways.&lt;br /&gt;
* List of All Users mapped with team number and topic name who have signed up for an assignment topic&lt;br /&gt;
* List of All Users mapped with team number and topic name who are wait-listed for an assignment topic&lt;br /&gt;
* List of All Participants who haven't yet signed up for a topic and haven't formed teams yet&lt;br /&gt;
* List of All Participants&lt;br /&gt;
&lt;br /&gt;
The functionality is present as a set of Radio buttons, which is checked by default to the fourth option that is to export all Participants. However that can be changed according to requirement.&lt;br /&gt;
&lt;br /&gt;
The above has been implemented by creating a partial for the view to add the radio button. Further and If else bock has been used in the model, to identify the option selected and accordingly, on the required set of Rows are pushed to the csv file. To know whether a User has signed up or not for a topic, The SignedUpTeam model is used and to find if the team is wait listed or not, the is_waitlisted boolean value id used to determine if the team is wait listed or not.&lt;br /&gt;
&lt;br /&gt;
A small Code snippet describing how one of these option was achieved is given below:&lt;br /&gt;
  if options[&amp;quot;participant_type&amp;quot;] == &amp;quot;signed&amp;quot;&lt;br /&gt;
         Team.where(:parent_id=&amp;gt; parent_id).find_each do |team|&lt;br /&gt;
           TeamsUser.where(:team_id=&amp;gt; team.id).find_each do |team_user|&lt;br /&gt;
             user = User.find(team_user.user_id)&lt;br /&gt;
             if SignedUpTeam.where( :team_id =&amp;gt; team.id).where(:is_waitlisted =&amp;gt; [false, nil,&amp;quot; &amp;quot;, &amp;quot;&amp;quot;]).present?&lt;br /&gt;
               assignemnt_team = SignedUpTeam.where( :team_id =&amp;gt; team.id).where(:is_waitlisted =&amp;gt; [false, nil,&amp;quot; &amp;quot;, &amp;quot;&amp;quot;]).first&lt;br /&gt;
               topic = SignUpTopic.find(assignemnt_team.topic_id)&lt;br /&gt;
             csv &amp;lt;&amp;lt; [&lt;br /&gt;
               user.name,&lt;br /&gt;
               user.fullname,&lt;br /&gt;
               user.email,&lt;br /&gt;
               user.role.name,&lt;br /&gt;
               user.parent.name,&lt;br /&gt;
               user.email_on_submission,&lt;br /&gt;
               user.email_on_review,&lt;br /&gt;
               user.email_on_review_of_review,&lt;br /&gt;
               team.id,&lt;br /&gt;
               topic.topic_name,&lt;br /&gt;
               &amp;quot;handle&amp;quot;&lt;br /&gt;
             ]&lt;br /&gt;
             end&lt;br /&gt;
           end&lt;br /&gt;
         end&lt;br /&gt;
'''Why has it been implemented the way it has been?''' &lt;br /&gt;
&lt;br /&gt;
The implementation has been done in the above manner to maintain parity with the structure of export functions that have been implemented in the other models. Further Since, It is not going to be in any other manner within the model, there is no point of extracting methods, which would just affect performance due to added procedure call and return. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====UI Testing====&lt;br /&gt;
UI testing for the above was done by exporting Assignment Teams for a given assignment using all the above options individually and checking if the result actually matched what was expected. Example 'all' should export all the participants listed withing the assignment. 'Signed Up Team' gives all the participants who have signed up mapped to their teams and respective topics.&lt;br /&gt;
&lt;br /&gt;
1. Sign in as Instructor&lt;br /&gt;
&lt;br /&gt;
2. Click Manage -&amp;gt; Assignments&lt;br /&gt;
&lt;br /&gt;
3. Click Add Participants for any assignment&lt;br /&gt;
&lt;br /&gt;
4. Click Export at the bottom of the page.&lt;br /&gt;
&lt;br /&gt;
5. Choose the appropriate option to export participants&lt;br /&gt;
&lt;br /&gt;
==Ordering of Imported Fields (Issue 110)==&lt;br /&gt;
====Current Implementation====&lt;br /&gt;
&lt;br /&gt;
Currently the order of the columns is preset and the user has to change the csv to match it.&lt;br /&gt;
&lt;br /&gt;
=====Drawbacks and Solutions=====&lt;br /&gt;
&lt;br /&gt;
This is inconvenient for the user to keep editing csv files. The solution iss to allow users chose the order of the columns as it appears in their csv file.&lt;br /&gt;
&lt;br /&gt;
====New Implementation====&lt;br /&gt;
In the view we added the drop down fields based on the expected_fields&lt;br /&gt;
&lt;br /&gt;
    *Please choose the order of the columns here:&amp;lt;br/&amp;gt;&lt;br /&gt;
    &amp;lt;%@array_expected_values.each{|field|%&amp;gt;&lt;br /&gt;
    &amp;lt;%=select_tag 'import_field_[field]', options_for_select(@array_expected_values.collect.with_index.to_a,field)%&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
    &amp;lt;%}%&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the import_file_controller.rb we made addition to the start method:&lt;br /&gt;
&lt;br /&gt;
    @array_expected_values = parse_line(@expected_fields,',',params)&lt;br /&gt;
    b = ['...','MetareviewerN','ReviewerN','Team MemberN']&lt;br /&gt;
    @array_expected_values.delete_if { |x| b.include?(x) }&lt;br /&gt;
    if(@array_expected_values.include?(&amp;quot;Team Member1&amp;quot;))&lt;br /&gt;
    (3..4).each do |i|&lt;br /&gt;
      @array_expected_values.push(&amp;quot;Team Member#{i}&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
    elsif(@array_expected_values.include?(&amp;quot;Reviewer1&amp;quot;))&lt;br /&gt;
    (3..15).each do |i|&lt;br /&gt;
      @array_expected_values.push(&amp;quot;Reviewer#{i}&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
    elsif(@array_expected_values.include?(&amp;quot;Metaeviewer1&amp;quot;))&lt;br /&gt;
    (3..15).each do |i|&lt;br /&gt;
      @array_expected_values.push(&amp;quot;Metareviewer#{i}&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
This allows expected_fields for the users and reviews to be unpacked as previously it was using wording such as &amp;quot;... userN&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Also in the import_file_controller.rb we added function that reorders the columns as they are expected by expertiza:&lt;br /&gt;
&lt;br /&gt;
def reorder_row(row,params)&lt;br /&gt;
    case params[:model]&lt;br /&gt;
      when &amp;quot;AssignmentTeam&amp;quot;&lt;br /&gt;
        expected_fields_variable_default = ['Team Name - optional', 'Team Member1','Team Member2', 'Team Member3', 'Team Member4']&lt;br /&gt;
      when &amp;quot;User&amp;quot;&lt;br /&gt;
        expected_fields_variable_default = [ 'username', 'full name (first[ middle] last)', 'e-mail address']&lt;br /&gt;
      when &amp;quot;ReviewResponseMap&amp;quot;&lt;br /&gt;
        expected_fields_variable_default = [ 'Contributor', 'Reviewer1', 'Reviewer2']&lt;br /&gt;
        (3..15).each do |i|&lt;br /&gt;
          expected_fields_variable_default.push(&amp;quot;Reviewer#{i}&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
      when &amp;quot;MetaeviewResponseMap&amp;quot;&lt;br /&gt;
        expected_fields_variable_default = [ 'Contributor', 'Reviewer', 'Metareviewer1','Metareviewer2']&lt;br /&gt;
        (3..15).each do |i|&lt;br /&gt;
          expected_fields_variable_default.push(&amp;quot;Metareviewer#{i}&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
       when &amp;quot;SignUpTopic&amp;quot;&lt;br /&gt;
         expected_fields_variable_default = [ 'Topic identifier', 'Topic name', 'Max choosers', 'Topic Category']&lt;br /&gt;
      else&lt;br /&gt;
        expected_fields_variable_default = ['Team Name - optional', 'Team Member1','Team Member2', 'Team Member3', 'Team Member4']&lt;br /&gt;
    end&lt;br /&gt;
    expected_fields_variable=[]&lt;br /&gt;
    custom_order={}&lt;br /&gt;
    return_row=[]&lt;br /&gt;
    expected_fields_variable=expected_fields_variable_default.reject.with_index { |x,i| i &amp;gt; row.length-1 }&lt;br /&gt;
    expected_fields_variable.each_with_index { |field, index|&lt;br /&gt;
      custom_order[params[&amp;quot;import_field_#{index}&amp;quot;]]=row[index]&lt;br /&gt;
    }&lt;br /&gt;
    expected_fields_variable.each_with_index { |field, index| return_row[index]=custom_order[field]}&lt;br /&gt;
    return_row&lt;br /&gt;
  end&lt;br /&gt;
====UI Testing====&lt;br /&gt;
To test this in the browser first need to be logged in as instructor. Then go to Manage -&amp;gt; Assignments -&amp;gt; Assignments tab. Then select to add teams to any assignment -&amp;gt; import teams. Here you would need to create a CSV file with the Team name and team members - separated by comma. The order of the column are arbitrary, just have to match them in the drop down fields provided. &lt;br /&gt;
For the team members there are maximum drop down fields, but you only need to fill out the relevant once. It will know to ignore irrelevant columns.&lt;br /&gt;
&lt;br /&gt;
==Improvement Scope ==&lt;br /&gt;
The above Import as well as export functionalities that have been implemented in due course of the project have a scope for improvement. Imports and exports are functionalities that are used very often used to insert data as well to transfer data stored into the Models to external CSV files. Thus these features can be further tested using rspec tests as well as capybara and cucumber tests so as to make it fool proof. However these tests cannot be made such that they hamper the flexibility of the implementation to achieve a particular functionality.&lt;br /&gt;
Further We can also add options to handle duplicates as well as to filter out exports in other models as well, instead of the ones it is already present. Thus there is a scope of a lot more improvement to make Expertiza more user friendly.&lt;/div&gt;</summary>
		<author><name>Rsinha2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=104270</id>
		<title>CSC/ECE 517 Fall 2016/oss E1656</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=104270"/>
		<updated>2016-11-04T01:23:09Z</updated>

		<summary type="html">&lt;p&gt;Rsinha2: /* New Implementation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== E1656. Improve imports ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This page provides a description of the Expertiza based OSS project. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Introduction to Expertiza==&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open source project based on [http://rubyonrails.org/ Ruby on Rails] framework.&lt;br /&gt;
&lt;br /&gt;
==Project Description==&lt;br /&gt;
===About Import===&lt;br /&gt;
In Expertiza, various kinds of data may be imported from [https://en.wikipedia.org/wiki/Comma-separated_values csv files], including users, participants in an assignemnt, topics and teams. When importing data, a corresponding csv file have to be composed. In a csv file, each new line represent a piece of datum and the different fields of a datum are separated by delimiters. But there are rough edges in the way these imports are done and certain other data that should be importable is not. This project focuses on implementing following tasks about data import functionality: &lt;br /&gt;
&lt;br /&gt;
*When a team with a duplicate name is imported, one of the options is to rename the new team.  There should also be an option to rename an existing team.  See Issue 329.&lt;br /&gt;
*Review assignments (“reviewer mappings”) should be able to be imported, but cannot be imported.  See Issue 711&lt;br /&gt;
*It should be possible to import a list of users who have signed up for topics, but this feature does not yet exist.  See Issue 153.&lt;br /&gt;
*For every kind of data to be imported, Expertiza currently specifies the ordering of fields.  This isn’t very flexible; it may require the user (an instructor) to edit an existing CSV file.  It would be better if, after importing the data, Expertiza showed the data together with dropdowns containing the default field headers.  (This is similar to the way Excel shows data when it is imported from a CSV file.)  Then the user could change the dropdowns to cause a different ordering of fields.  See Issue 110.&lt;br /&gt;
*Create a way to export a list of teams that have signed up for topics, and who are waitlisted for topics, as well as participants in an assignment who have not signed up for topics. Choose the format, but keep it as consistent as possible with the other export formats.  This would help the professor when students ask him for advice on finding teammates.  Extra Issue&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following tasks were listed as a requirement, but after careful examination it was determined that these tasks were already implemented&lt;br /&gt;
*The simplest fix: If I try to import topics, the import page gives me this message: “The import process expects the following columns:” but it doesn’t say what the columns are (topic number, topic name, category, number of slots, category)!  It used to be in the system; please revert the change to fix this bug.  See Issue 719.&lt;br /&gt;
*When teams are imported in order to insert new members, the members are not inserted.  See Issue 328.&lt;br /&gt;
*It should be possible to leave off the final fields in a line of a CSV file.  These fields are often not specified anyway.  For example, if a password isn’t specified when a new user is created, the system generates a password (see Issue 183).  When importing topics, topic categories are rarely specified.  But if the final field is blank, the import requires the CSV line to end with “, “ (comma and space).  This should be fixed for all imports.&lt;br /&gt;
&lt;br /&gt;
==About Versions Controller==&lt;br /&gt;
Git is a popular version control system, As a part of the project, We have made use of git for the purpose of version control. Our repository is a fork of the original Expertiza repository on which we have collaborated our work. And the project has been submitted through a pull request.&lt;br /&gt;
&lt;br /&gt;
==Handle Duplicates (Issue329)==&lt;br /&gt;
====Current Implementation====&lt;br /&gt;
&lt;br /&gt;
When a team with a duplicate name is imported, one of the options is to rename the new team. There should also be an option to rename an existing team. See Issue 329.&lt;br /&gt;
The current implementation allows the user to handle duplicates, by the following techniques&lt;br /&gt;
*ignore the new team&lt;br /&gt;
*replace the existing team with the new team&lt;br /&gt;
*insert any new members into the existing team&lt;br /&gt;
*rename the new team and import&lt;br /&gt;
*rename the existing team and import&lt;br /&gt;
&lt;br /&gt;
=====Functionality=====&lt;br /&gt;
&lt;br /&gt;
The above functionalities make it easier to achieve the goal of handling duplicates while importing.&lt;br /&gt;
&lt;br /&gt;
=====Drawbacks and Solutions=====&lt;br /&gt;
&lt;br /&gt;
The above set of functionalities do not allow User to ever rename an existing team, rather force him rename his own team.&lt;br /&gt;
Thus the above requirement provides the necessary freedom to the User by providing him the option to rename an already existing team.&lt;br /&gt;
&lt;br /&gt;
====New Implementation====&lt;br /&gt;
&lt;br /&gt;
The option has been implemented using the update functionality that is already present in rails models, to update existing values of Active Records. To implement this feature we have also made use of the functionality for generating team names, that is already present within the Team model.&lt;br /&gt;
&lt;br /&gt;
A code snippet is given below:&lt;br /&gt;
  if handle_dups == &amp;quot;renameOldTeam&amp;quot; # rename: rename new team&lt;br /&gt;
       if teamtype.is_a?(CourseTeam)&lt;br /&gt;
         CourseTeam.update(team.id, :name =&amp;gt; self.generate_team_name(Course.find(id).name))&lt;br /&gt;
         return name&lt;br /&gt;
       elsif teamtype.is_a?(AssignmentTeam)&lt;br /&gt;
         AssignmentTeam.update(team.id, :name =&amp;gt; self.generate_team_name(Assignment.find(id).name))&lt;br /&gt;
         return name&lt;br /&gt;
       end&lt;br /&gt;
     end&lt;br /&gt;
&lt;br /&gt;
====UI Testing====&lt;br /&gt;
The Above feature has been tested from the UI using the both course Teams and Assignment Teams, where new teams were added with conflicting names and the rename existing team option was selected, which lead lead to the desired behavior, that is the team that was extant was renamed and new team was imported with the same name as that specified in the CSV file&lt;br /&gt;
&lt;br /&gt;
1. Log in on Expertiza as instructor&lt;br /&gt;
&lt;br /&gt;
2. Click Manage Assignments&lt;br /&gt;
&lt;br /&gt;
3. Click Add Teams on any assignment listed&lt;br /&gt;
&lt;br /&gt;
4. Click Import Teams at the bottom of the page&lt;br /&gt;
&lt;br /&gt;
5. Choose the Rename an Existing Team Option and click import once the CSV has been chosen&lt;br /&gt;
&lt;br /&gt;
==Fix Reviewer and Metareviewer Mappings (Issue711)==&lt;br /&gt;
====Current Implementation====&lt;br /&gt;
&lt;br /&gt;
When an instructor tries to assign reviewers for an assignment, if the review strategy of the assignment is‘Instructor-Selected’, he could assign reviewers by directly importing the reviewer mappings. But now, when the instructor attempts to submit the import, the system will raise an argument error showing:&lt;br /&gt;
&lt;br /&gt;
[[File:reviewfail.PNG]]&lt;br /&gt;
&lt;br /&gt;
The import fails and, clearly, it's a bug in Expertiza.&lt;br /&gt;
&lt;br /&gt;
====New Implementation====&lt;br /&gt;
To solve this problem, first refer to the view/review_mapping/_list_review_mappings.html.erb file and find out that the model to be imported is ReviewResponseMap. The import method in review_response_map.rb model file takes in 3 arguments which are row, _session and id. A code snippet of import_file_controller.rb (the import controller) is given below:&lt;br /&gt;
[[File:Reviewcode.PNG]]&lt;br /&gt;
&lt;br /&gt;
Before we add the code in parentheses, the ReviewResponseMap model was not explicitly specified which case it belongs to and falls into the else statement where the import method takes in 4 arguments. That’s the reason of getting the “wrong number of argument” error. To resolve the problem, a &amp;quot;or params[:model] == 'ReviewResponseMap'&amp;quot; is inserted into the parentheses to make the import method of reviewer mappings takes in 3 arguments again and then we can correctly import the reviewer mappings. The recovery method for MetareviewResponseMap is exactly the same with this one by adding &lt;br /&gt;
&amp;quot;or params[:model] == 'MetareviewResponseMap'&amp;quot; statement into the parentheses.&lt;br /&gt;
&lt;br /&gt;
====UI Testing====&lt;br /&gt;
1. Login as instructor. Click on ‘Manage Assignment’ to see all assignments in the database.&lt;br /&gt;
&lt;br /&gt;
2. Among all the assignments, click the ‘Review strategy’ card in edit page and find out one assignment with 'Instructor-Selected' strategy (e.g. 'Design exercise'). Creating a new 'Instructor-Selected'           assignment and add some participants to it is also applicable.&lt;br /&gt;
&lt;br /&gt;
3. 'Assign reviewers' for this assignment and click on the 'Import reviewer mappings' on the bottom of the page.&lt;br /&gt;
&lt;br /&gt;
4. Compose a csv file in the given format of 'Contributor, Reviewer1, Reviewer2, …, ReviewerN' and import the file. The ‘Contributor’ here is the name of a team in this assignment. &lt;br /&gt;
&lt;br /&gt;
5. Go back to reviewer mappings page to check if the 'Reviewers of the Contributor' in the file are listed in the 'Reviewed By' section of the 'Contributors'.&lt;br /&gt;
&lt;br /&gt;
==Import Sign Up Sheet (Issue153)==&lt;br /&gt;
====Current Implementation====&lt;br /&gt;
&lt;br /&gt;
When a signup sheet is used in Expertiza, users are expected to sign up for topics. But, the instructor might've taken signups offline, e.g., by passing around a signup sheet in class. If the signup are not taken online by the students, the instructor has to impersonate all the students one by one and sign them up for a topic, which is tedious.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====New Implementation====&lt;br /&gt;
To implement this new issue, a model which is in charge of creating a sign_up and SignedUpTeam should be located first. In SignUpSheet model, methods are designed  for the creation of a sign_up and SignedUpTeam using the data from data base and the new implementation should create them from an imported file. Hence, an ''import'' method is added to this model and a code snippet of it is shown as:&lt;br /&gt;
&lt;br /&gt;
[[File:Signupcode.PNG]]&lt;br /&gt;
&lt;br /&gt;
This new method imports new sign_up data in a format of &amp;quot;Topic identifier, User1, User2&amp;quot;. Users here are the ones who signed up for the topic with a certain identifier (id). Some edge cases are also taken into consideration in this method to prevent importing a non-existing team in this assignment, a non-existing user or a user who is not a participant of this assignment. &lt;br /&gt;
Next, a link on the view page needs to be created to access this method. The instructor can view the sign up sheet of an assignment under the &amp;quot;topic&amp;quot; card of the &amp;quot;edit&amp;quot; section. An &amp;quot;Import sign up sheet&amp;quot; button is added beside the &amp;quot;Import topic&amp;quot; link &lt;br /&gt;
&lt;br /&gt;
[[File:Button.PNG]]&lt;br /&gt;
&lt;br /&gt;
and the corresponding code should be inserted in the &amp;quot;view/sign_up_sheet/_add_topics/html.erb&amp;quot; file.&lt;br /&gt;
&lt;br /&gt;
[[File:View.PNG]]&lt;br /&gt;
&lt;br /&gt;
After all of this, the new feature is successfully implemented and the instructor can directly import a large offline sign up sheet without tedious impersonating. The whole process of importing sign ups works  exactly the same as student online sign ups. If the assignment does not have a topic yet, the 'Import sign up sheet' link will be invisible unless a topic is created or imported. If a imported user does not have a team, he will be automatically assigned a team and sign up for the topic. If users imported exceeds the limit a certain topic can hold, the leftmost users in the file (like the earliest signed up users) will have the topic and those right(later signed up) users will be in the wait list.&lt;br /&gt;
&lt;br /&gt;
====UI Testing====&lt;br /&gt;
1. Login as instructor. Click on 'Manage Assignment’ to see all assignments in the database.&lt;br /&gt;
&lt;br /&gt;
2. Click on 'edit', go to 'topic' card and find the &amp;quot;Import sign up sheet&amp;quot; link.&lt;br /&gt;
&lt;br /&gt;
3. Compose a csv file in the given format of 'Topic identifier, User1, User2, …' and import the file. The ‘Topic identifier’ here is the 'topic#' in the sign up sheet. &lt;br /&gt;
&lt;br /&gt;
4. Go back to sign up sheet page to check if the 'Users' in the file and their 'Teams' are listed under the 'Topic names' section.&lt;br /&gt;
&lt;br /&gt;
==Export Assignment Participants (Extra Issue)==&lt;br /&gt;
===Current Implementation===&lt;br /&gt;
Current Implementation just allows users to Export the set of all Assignment Participants, of a given assignment. It doesn't allow any further filtering.&lt;br /&gt;
&lt;br /&gt;
===Functionality===&lt;br /&gt;
The current functionality is very rigid and doesn't allow the user to know any more than the set of assignment Participants, which is also a major drawback&lt;br /&gt;
&lt;br /&gt;
===New Implementation===&lt;br /&gt;
The new implementation allows user to export Assignment Participants in four ways.&lt;br /&gt;
* List of All Users mapped with team number and topic name who have signed up for an assignment topic&lt;br /&gt;
* List of All Users mapped with team number and topic name who are wait-listed for an assignment topic&lt;br /&gt;
* List of All Participants who haven't yet signed up for a topic and haven't formed teams yet&lt;br /&gt;
* List of All Participants&lt;br /&gt;
&lt;br /&gt;
The functionality is present as a set of Radio buttons, which is checked by default to the fourth option that is to export all Participants. However that can be changed according to requirement.&lt;br /&gt;
&lt;br /&gt;
The above has been implemented by creating a partial for the view to add the radio button. Further and If else bock has been used in the model, to identify the option selected and accordingly, on the required set of Rows are pushed to the csv file. To know whether a User has signed up or not for a topic, The SignedUpTeam model is used and to find if the team is wait listed or not, the is_waitlisted boolean value id used to determine if the team is wait listed or not.&lt;br /&gt;
&lt;br /&gt;
A small Code snippet describing how one of these option was achieved is given below:&lt;br /&gt;
  if options[&amp;quot;participant_type&amp;quot;] == &amp;quot;signed&amp;quot;&lt;br /&gt;
         Team.where(:parent_id=&amp;gt; parent_id).find_each do |team|&lt;br /&gt;
           TeamsUser.where(:team_id=&amp;gt; team.id).find_each do |team_user|&lt;br /&gt;
             user = User.find(team_user.user_id)&lt;br /&gt;
             if SignedUpTeam.where( :team_id =&amp;gt; team.id).where(:is_waitlisted =&amp;gt; [false, nil,&amp;quot; &amp;quot;, &amp;quot;&amp;quot;]).present?&lt;br /&gt;
               assignemnt_team = SignedUpTeam.where( :team_id =&amp;gt; team.id).where(:is_waitlisted =&amp;gt; [false, nil,&amp;quot; &amp;quot;, &amp;quot;&amp;quot;]).first&lt;br /&gt;
               topic = SignUpTopic.find(assignemnt_team.topic_id)&lt;br /&gt;
             csv &amp;lt;&amp;lt; [&lt;br /&gt;
               user.name,&lt;br /&gt;
               user.fullname,&lt;br /&gt;
               user.email,&lt;br /&gt;
               user.role.name,&lt;br /&gt;
               user.parent.name,&lt;br /&gt;
               user.email_on_submission,&lt;br /&gt;
               user.email_on_review,&lt;br /&gt;
               user.email_on_review_of_review,&lt;br /&gt;
               team.id,&lt;br /&gt;
               topic.topic_name,&lt;br /&gt;
               &amp;quot;handle&amp;quot;&lt;br /&gt;
             ]&lt;br /&gt;
             end&lt;br /&gt;
           end&lt;br /&gt;
         end&lt;br /&gt;
'''Why has it been implemented the way it has been?''' &lt;br /&gt;
&lt;br /&gt;
The implementation has been done in the above manner to maintain parity with the structure of export functions that have been implemented in the other models. Further Since, It is not going to be in any other manner within the model, there is no point of extracting methods, which would just affect performance due to added procedure call and return. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====UI Testing====&lt;br /&gt;
UI testing for the above was done by exporting Assignment Teams for a given assignment using all the above options individually and checking if the result actually matched what was expected. Example 'all' should export all the participants listed withing the assignment. 'Signed Up Team' gives all the participants who have signed up mapped to their teams and respective topics.&lt;br /&gt;
&lt;br /&gt;
1. Sign in as Instructor&lt;br /&gt;
&lt;br /&gt;
2. Click Manage -&amp;gt; Assignments&lt;br /&gt;
&lt;br /&gt;
3. Click Add Participants for any assignment&lt;br /&gt;
&lt;br /&gt;
4. Click Export at the bottom of the page.&lt;br /&gt;
&lt;br /&gt;
5. Choose the appropriate option to export participants&lt;br /&gt;
&lt;br /&gt;
==Ordering of Imported Fields (Issue 110)==&lt;br /&gt;
====Current Implementation====&lt;br /&gt;
&lt;br /&gt;
Currently the order of the columns is preset and the user has to change the csv to match it.&lt;br /&gt;
&lt;br /&gt;
=====Drawbacks and Solutions=====&lt;br /&gt;
&lt;br /&gt;
This is inconvenient for the user to keep editing csv files. The solution iss to allow users chose the order of the columns as it appears in their csv file.&lt;br /&gt;
&lt;br /&gt;
====New Implementation====&lt;br /&gt;
In the view we added the drop down fields based on the expected_fields&lt;br /&gt;
&lt;br /&gt;
    *Please choose the order of the columns here:&amp;lt;br/&amp;gt;&lt;br /&gt;
    &amp;lt;%@array_expected_values.each{|field|%&amp;gt;&lt;br /&gt;
    &amp;lt;%=select_tag 'import_field_[field]', options_for_select(@array_expected_values.collect.with_index.to_a,field)%&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
    &amp;lt;%}%&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the import_file_controller.rb we made addition to the start method:&lt;br /&gt;
&lt;br /&gt;
    @array_expected_values = parse_line(@expected_fields,',',params)&lt;br /&gt;
    b = ['...','MetareviewerN','ReviewerN','Team MemberN']&lt;br /&gt;
    @array_expected_values.delete_if { |x| b.include?(x) }&lt;br /&gt;
    if(@array_expected_values.include?(&amp;quot;Team Member1&amp;quot;))&lt;br /&gt;
    (3..4).each do |i|&lt;br /&gt;
      @array_expected_values.push(&amp;quot;Team Member#{i}&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
    elsif(@array_expected_values.include?(&amp;quot;Reviewer1&amp;quot;))&lt;br /&gt;
    (3..15).each do |i|&lt;br /&gt;
      @array_expected_values.push(&amp;quot;Reviewer#{i}&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
    elsif(@array_expected_values.include?(&amp;quot;Metaeviewer1&amp;quot;))&lt;br /&gt;
    (3..15).each do |i|&lt;br /&gt;
      @array_expected_values.push(&amp;quot;Metareviewer#{i}&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
This allows expected_fields for the users and reviews to be unpacked as previously it was using wording such as &amp;quot;... userN&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Also in the import_file_controller.rb we added function that reorders the columns as they are expected by expertiza:&lt;br /&gt;
&lt;br /&gt;
def reorder_row(row,params)&lt;br /&gt;
    case params[:model]&lt;br /&gt;
      when &amp;quot;AssignmentTeam&amp;quot;&lt;br /&gt;
        expected_fields_variable_default = ['Team Name - optional', 'Team Member1','Team Member2', 'Team Member3', 'Team Member4']&lt;br /&gt;
      when &amp;quot;User&amp;quot;&lt;br /&gt;
        expected_fields_variable_default = [ 'username', 'full name (first[ middle] last)', 'e-mail address']&lt;br /&gt;
      when &amp;quot;ReviewResponseMap&amp;quot;&lt;br /&gt;
        expected_fields_variable_default = [ 'Contributor', 'Reviewer1', 'Reviewer2']&lt;br /&gt;
        (3..15).each do |i|&lt;br /&gt;
          expected_fields_variable_default.push(&amp;quot;Reviewer#{i}&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
      when &amp;quot;MetaeviewResponseMap&amp;quot;&lt;br /&gt;
        expected_fields_variable_default = [ 'Contributor', 'Reviewer', 'Metareviewer1','Metareviewer2']&lt;br /&gt;
        (3..15).each do |i|&lt;br /&gt;
          expected_fields_variable_default.push(&amp;quot;Metareviewer#{i}&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
       when &amp;quot;SignUpTopic&amp;quot;&lt;br /&gt;
         expected_fields_variable_default = [ 'Topic identifier', 'Topic name', 'Max choosers', 'Topic Category']&lt;br /&gt;
      else&lt;br /&gt;
        expected_fields_variable_default = ['Team Name - optional', 'Team Member1','Team Member2', 'Team Member3', 'Team Member4']&lt;br /&gt;
    end&lt;br /&gt;
    expected_fields_variable=[]&lt;br /&gt;
    custom_order={}&lt;br /&gt;
    return_row=[]&lt;br /&gt;
    expected_fields_variable=expected_fields_variable_default.reject.with_index { |x,i| i &amp;gt; row.length-1 }&lt;br /&gt;
    expected_fields_variable.each_with_index { |field, index|&lt;br /&gt;
      custom_order[params[&amp;quot;import_field_#{index}&amp;quot;]]=row[index]&lt;br /&gt;
    }&lt;br /&gt;
    expected_fields_variable.each_with_index { |field, index| return_row[index]=custom_order[field]}&lt;br /&gt;
    return_row&lt;br /&gt;
  end&lt;br /&gt;
====UI Testing====&lt;br /&gt;
To test this in the browser first need to be logged in as instructor. Then go to Manage -&amp;gt; Assignments -&amp;gt; Assignments tab. Then select to add teams to any assignment -&amp;gt; import teams. Here you would need to create a CSV file with the Team name and team members - separated by comma. The order of the column are arbitrary, just have to match them in the drop down fields provided. &lt;br /&gt;
For the team members there are maximum drop down fields, but you only need to fill out the relevant once. It will know to ignore irrelevant columns.&lt;br /&gt;
&lt;br /&gt;
==Improvement Scope ==&lt;br /&gt;
The above Import as well as export functionalities that have been implemented in due course of the project have a scope for improvement. Imports and exports are functionalities that are used very often used to insert data as well to transfer data stored into the Models to external CSV files. Thus these features can be further tested using rspec tests as well as capybara and cucumber tests so as to make it fool proof. However these tests cannot be made such that they hamper the flexibility of the implementation to achieve a particular functionality.&lt;br /&gt;
Further We can also add options to handle duplicates as well as to filter out exports in other models as well, instead of the ones it is already present. Thus there is a scope of a lot more improvement to make Expertiza more user friendly.&lt;/div&gt;</summary>
		<author><name>Rsinha2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=104010</id>
		<title>CSC/ECE 517 Fall 2016/oss E1656</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=104010"/>
		<updated>2016-10-29T23:27:32Z</updated>

		<summary type="html">&lt;p&gt;Rsinha2: /* UI Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== E1656. Improve imports ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This page provides a description of the Expertiza based OSS project. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Introduction to Expertiza==&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open source project based on [http://rubyonrails.org/ Ruby on Rails] framework.&lt;br /&gt;
&lt;br /&gt;
==Project Description==&lt;br /&gt;
===About Import===&lt;br /&gt;
In Expertiza, various kinds of data may be imported from [https://en.wikipedia.org/wiki/Comma-separated_values csv files], including users, participants in an assignemnt, topics and teams. When importing data, a corresponding csv file have to be composed. In a csv file, each new line represent a piece of datum and the different fields of a datum are separated by delimiters. But there are rough edges in the way these imports are done and certain other data that should be importable is not. This project focuses on implementing following tasks about data import functionality: &lt;br /&gt;
&lt;br /&gt;
*When a team with a duplicate name is imported, one of the options is to rename the new team.  There should also be an option to rename an existing team.  See Issue 329.&lt;br /&gt;
*Review assignments (“reviewer mappings”) should be able to be imported, but cannot be imported.  See Issue 711&lt;br /&gt;
*It should be possible to import a list of users who have signed up for topics, but this feature does not yet exist.  See Issue 153.&lt;br /&gt;
*For every kind of data to be imported, Expertiza currently specifies the ordering of fields.  This isn’t very flexible; it may require the user (an instructor) to edit an existing CSV file.  It would be better if, after importing the data, Expertiza showed the data together with dropdowns containing the default field headers.  (This is similar to the way Excel shows data when it is imported from a CSV file.)  Then the user could change the dropdowns to cause a different ordering of fields.  See Issue 110.&lt;br /&gt;
*Create a way to export a list of teams that have signed up for topics, and who are waitlisted for topics, as well as participants in an assignment who have not signed up for topics. Choose the format, but keep it as consistent as possible with the other export formats.  This would help the professor when students ask him for advice on finding teammates.  Extra Issue&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following tasks were listed as a requirement, but after careful examination it was determined that these tasks were already implemented&lt;br /&gt;
*The simplest fix: If I try to import topics, the import page gives me this message: “The import process expects the following columns:” but it doesn’t say what the columns are (topic number, topic name, category, number of slots, category)!  It used to be in the system; please revert the change to fix this bug.  See Issue 719.&lt;br /&gt;
*When teams are imported in order to insert new members, the members are not inserted.  See Issue 328.&lt;br /&gt;
*It should be possible to leave off the final fields in a line of a CSV file.  These fields are often not specified anyway.  For example, if a password isn’t specified when a new user is created, the system generates a password (see Issue 183).  When importing topics, topic categories are rarely specified.  But if the final field is blank, the import requires the CSV line to end with “, “ (comma and space).  This should be fixed for all imports.&lt;br /&gt;
&lt;br /&gt;
==About Versions Controller==&lt;br /&gt;
Git is a popular version control system, As a part of the project, We have made use of git for the purpose of version control. Our repository is a fork of the original Expertiza repository on which we have collaborated our work. And the project has been submitted through a pull request.&lt;br /&gt;
&lt;br /&gt;
==Handle Duplicates (Issue329)==&lt;br /&gt;
====Current Implementation====&lt;br /&gt;
&lt;br /&gt;
When a team with a duplicate name is imported, one of the options is to rename the new team. There should also be an option to rename an existing team. See Issue 329.&lt;br /&gt;
The current implementation allows the user to handle duplicates, by the following techniques&lt;br /&gt;
*ignore the new team&lt;br /&gt;
*replace the existing team with the new team&lt;br /&gt;
*insert any new members into the existing team&lt;br /&gt;
*rename the new team and import&lt;br /&gt;
*rename the existing team and import&lt;br /&gt;
&lt;br /&gt;
=====Functionality=====&lt;br /&gt;
&lt;br /&gt;
The above functionalities make it easier to achieve the goal of handling duplicates while importing.&lt;br /&gt;
&lt;br /&gt;
=====Drawbacks and Solutions=====&lt;br /&gt;
&lt;br /&gt;
The above set of functionalities do not allow User to ever rename an existing team, rather force him rename his own team.&lt;br /&gt;
Thus the above requirement provides the necessary freedom to the User by providing him the option to rename an already existing team.&lt;br /&gt;
&lt;br /&gt;
====New Implementation====&lt;br /&gt;
&lt;br /&gt;
The option has been implemented using the update functionality that is already present in rails models, to update existing values of Active Records. To implement this feature we have also made use of the functionality for generating team names, that is already present within the Team model.&lt;br /&gt;
&lt;br /&gt;
A code snippet is given below:&lt;br /&gt;
  if handle_dups == &amp;quot;renameOldTeam&amp;quot; # rename: rename new team&lt;br /&gt;
       if teamtype.is_a?(CourseTeam)&lt;br /&gt;
         CourseTeam.update(team.id, :name =&amp;gt; self.generate_team_name(Course.find(id).name))&lt;br /&gt;
         return name&lt;br /&gt;
       elsif teamtype.is_a?(AssignmentTeam)&lt;br /&gt;
         AssignmentTeam.update(team.id, :name =&amp;gt; self.generate_team_name(Assignment.find(id).name))&lt;br /&gt;
         return name&lt;br /&gt;
       end&lt;br /&gt;
     end&lt;br /&gt;
&lt;br /&gt;
====UI Testing====&lt;br /&gt;
The Above feature has been tested from the UI using the both course Teams and Assignment Teams, where new teams were added with conflicting names and the rename existing team option was selected, which lead lead to the desired behavior, that is the team that was extant was renamed and new team was imported with the same name as that specified in the CSV file&lt;br /&gt;
&lt;br /&gt;
1. Log in on Expertiza as instructor&lt;br /&gt;
&lt;br /&gt;
2. Click Manage Assignments&lt;br /&gt;
&lt;br /&gt;
3. Click Add Teams on any assignment listed&lt;br /&gt;
&lt;br /&gt;
4. Click Import Teams at the bottom of the page&lt;br /&gt;
&lt;br /&gt;
5. Choose the Rename an Existing Team Option and click import once the CSV has been chosen&lt;br /&gt;
&lt;br /&gt;
==Fix Reviewer and Metareviewer Mappings (Issue711)==&lt;br /&gt;
====Current Implementation====&lt;br /&gt;
&lt;br /&gt;
When an instructor tries to assign reviewers for an assignment, if the review strategy of the assignment is‘Instructor-Selected’, he could assign reviewers by directly importing the reviewer mappings. But now, when the instructor attempts to submit the import, the system will raise an argument error showing:&lt;br /&gt;
&lt;br /&gt;
[[File:reviewfail.PNG]]&lt;br /&gt;
&lt;br /&gt;
The import fails and, clearly, it's a bug in Expertiza.&lt;br /&gt;
&lt;br /&gt;
====New Implementation====&lt;br /&gt;
To solve this problem, first refer to the view/review_mapping/_list_review_mappings.html.erb file and find out that the model to be imported is ReviewResponseMap. The import method in review_response_map.rb model file takes in 3 arguments which are row, _session and id. A code snippet of import_file_controller.rb (the import controller) is given below:&lt;br /&gt;
[[File:Reviewcode.PNG]]&lt;br /&gt;
&lt;br /&gt;
Before we add the code in parentheses, the ReviewResponseMap model was not explicitly specified which case it belongs to and falls into the else statement where the import method takes in 4 arguments. That’s the reason of getting the “wrong number of argument” error. To resolve the problem, a &amp;quot;or params[:model] == 'ReviewResponseMap'&amp;quot; is inserted into the parentheses to make the import method of reviewer mappings takes in 3 arguments again and then we can correctly import the reviewer mappings. The recovery method for MetareviewResponseMap is exactly the same with this one by adding &lt;br /&gt;
&amp;quot;or params[:model] == 'MetareviewResponseMap'&amp;quot; statement into the parentheses.&lt;br /&gt;
&lt;br /&gt;
====UI Testing====&lt;br /&gt;
1. Login as instructor. Click on ‘Manage Assignment’ to see all assignments in the database.&lt;br /&gt;
&lt;br /&gt;
2. Among all the assignments, click the ‘Review strategy’ card in edit page and find out one assignment with 'Instructor-Selected' strategy (e.g. 'Design exercise'). Creating a new 'Instructor-Selected'           assignment and add some participants to it is also applicable.&lt;br /&gt;
&lt;br /&gt;
3. 'Assign reviewers' for this assignment and click on the 'Import reviewer mappings' on the bottom of the page.&lt;br /&gt;
&lt;br /&gt;
4. Compose a csv file in the given format of 'Contributor, Reviewer1, Reviewer2, …, ReviewerN' and import the file. The ‘Contributor’ here is the name of a team in this assignment. &lt;br /&gt;
&lt;br /&gt;
5. Go back to reviewer mappings page to check if the 'Reviewers of the Contributor' in the file are listed in the 'Reviewed By' section of the 'Contributors'.&lt;br /&gt;
&lt;br /&gt;
==Import Sign Up Sheet (Issue153)==&lt;br /&gt;
====Current Implementation====&lt;br /&gt;
&lt;br /&gt;
When a signup sheet is used in Expertiza, users are expected to sign up for topics. But, the instructor might've taken signups offline, e.g., by passing around a signup sheet in class. If the signup are not taken online by the students, the instructor has to impersonate all the students one by one and sign them up for a topic, which is tedious.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====New Implementation====&lt;br /&gt;
To implement this new issue, a model which is in charge of creating a sign_up and SignedUpTeam should be located first. In SignUpSheet model, methods are designed  for the creation of a sign_up and SignedUpTeam using the data from data base and the new implementation should create them from an imported file. Hence, an ''import'' method is added to this model and a code snippet of it is shown as:&lt;br /&gt;
&lt;br /&gt;
[[File:Signupcode.PNG]]&lt;br /&gt;
&lt;br /&gt;
This new method imports new sign_up data in a format of &amp;quot;Topic identifier, User1, User2&amp;quot;. Users here are the ones who signed up for the topic with a certain identifier (id). Some edge cases are also taken into consideration in this method to prevent importing a non-existing team in this assignment, a non-existing user or a user who is not a participant of this assignment. &lt;br /&gt;
Next, a link on the view page needs to be created to access this method. The instructor can view the sign up sheet of an assignment under the &amp;quot;topic&amp;quot; card of the &amp;quot;edit&amp;quot; section. An &amp;quot;Import sign up sheet&amp;quot; button is added beside the &amp;quot;Import topic&amp;quot; link &lt;br /&gt;
&lt;br /&gt;
[[File:Button.PNG]]&lt;br /&gt;
&lt;br /&gt;
and the corresponding code should be inserted in the &amp;quot;view/sign_up_sheet/_add_topics/html.erb&amp;quot; file.&lt;br /&gt;
&lt;br /&gt;
[[File:View.PNG]]&lt;br /&gt;
&lt;br /&gt;
After all of this, the new feature is successfully implemented and the instructor can directly import a large offline sign up sheet without tedious impersonating. The whole process of importing sign ups works  exactly the same as student online sign ups. If the assignment does not have a topic yet, the 'Import sign up sheet' link will be invisible unless a topic is created or imported. If a imported user does not have a team, he will be automatically assigned a team and sign up for the topic. If users imported exceeds the limit a certain topic can hold, the leftmost users in the file (like the earliest signed up users) will have the topic and those right(later signed up) users will be in the wait list.&lt;br /&gt;
&lt;br /&gt;
====UI Testing====&lt;br /&gt;
1. Login as instructor. Click on 'Manage Assignment’ to see all assignments in the database.&lt;br /&gt;
&lt;br /&gt;
2. Click on 'edit', go to 'topic' card and find the &amp;quot;Import sign up sheet&amp;quot; link.&lt;br /&gt;
&lt;br /&gt;
3. Compose a csv file in the given format of 'Topic identifier, User1, User2, …' and import the file. The ‘Topic identifier’ here is the 'topic#' in the sign up sheet. &lt;br /&gt;
&lt;br /&gt;
4. Go back to sign up sheet page to check if the 'Users' in the file and their 'Teams' are listed under the 'Topic names' section.&lt;br /&gt;
&lt;br /&gt;
==Export Assignment Participants (Extra Issue)==&lt;br /&gt;
===Current Implementation===&lt;br /&gt;
Current Implementation just allows users to Export the set of all Assignment Participants, of a given assignment. It doesn't allow any further filtering.&lt;br /&gt;
&lt;br /&gt;
===Functionality===&lt;br /&gt;
The current functionality is very rigid and doesn't allow the user to know any more than the set of assignment Participants, which is also a major drawback&lt;br /&gt;
&lt;br /&gt;
===New Implementation===&lt;br /&gt;
The new implementation allows user to export Assignment Participants in four ways.&lt;br /&gt;
* List of All Users mapped with team number and topic name who have signed up for an assignment topic&lt;br /&gt;
* List of All Users mapped with team number and topic name who are wait-listed for an assignment topic&lt;br /&gt;
* List of All Participants who haven't yet signed up for a topic and haven't formed teams yet&lt;br /&gt;
* List of All Participants&lt;br /&gt;
&lt;br /&gt;
The functionality is present as a set of Radio buttons, which is checked by default to the fourth option that is to export all Participants. However that can be changed according to requirement.&lt;br /&gt;
&lt;br /&gt;
The above has been implemented by creating a partial for the view to add the radio button. Further and If else bock has been used in the model, to identify the option selected and accordingly, on the required set of Rows are pushed to the csv file. To know whether a User has signed up or not for a topic, The SignedUpTeam model is used and to find if the team is wait listed or not, the is_waitlisted boolean value id used to determine if the team is wait listed or not.&lt;br /&gt;
&lt;br /&gt;
A small Code snippet describing how one of these option was achieved is given below:&lt;br /&gt;
  if options[&amp;quot;participant_type&amp;quot;] == &amp;quot;signed&amp;quot;&lt;br /&gt;
         Team.where(:parent_id=&amp;gt; parent_id).find_each do |team|&lt;br /&gt;
           TeamsUser.where(:team_id=&amp;gt; team.id).find_each do |team_user|&lt;br /&gt;
             user = User.find(team_user.user_id)&lt;br /&gt;
             if SignedUpTeam.where( :team_id =&amp;gt; team.id).where(:is_waitlisted =&amp;gt; [false, nil,&amp;quot; &amp;quot;, &amp;quot;&amp;quot;]).present?&lt;br /&gt;
               assignemnt_team = SignedUpTeam.where( :team_id =&amp;gt; team.id).where(:is_waitlisted =&amp;gt; [false, nil,&amp;quot; &amp;quot;, &amp;quot;&amp;quot;]).first&lt;br /&gt;
               topic = SignUpTopic.find(assignemnt_team.topic_id)&lt;br /&gt;
             csv &amp;lt;&amp;lt; [&lt;br /&gt;
               user.name,&lt;br /&gt;
               user.fullname,&lt;br /&gt;
               user.email,&lt;br /&gt;
               user.role.name,&lt;br /&gt;
               user.parent.name,&lt;br /&gt;
               user.email_on_submission,&lt;br /&gt;
               user.email_on_review,&lt;br /&gt;
               user.email_on_review_of_review,&lt;br /&gt;
               team.id,&lt;br /&gt;
               topic.topic_name,&lt;br /&gt;
               &amp;quot;handle&amp;quot;&lt;br /&gt;
             ]&lt;br /&gt;
             end&lt;br /&gt;
           end&lt;br /&gt;
         end&lt;br /&gt;
&lt;br /&gt;
====UI Testing====&lt;br /&gt;
UI testing for the above was done by exporting Assignment Teams for a given assignment using all the above options individually and checking if the result actually matched what was expected. Example 'all' should export all the participants listed withing the assignment. 'Signed Up Team' gives all the participants who have signed up mapped to their teams and respective topics.&lt;br /&gt;
&lt;br /&gt;
1. Sign in as Instructor&lt;br /&gt;
&lt;br /&gt;
2. Click Manage -&amp;gt; Assignments&lt;br /&gt;
&lt;br /&gt;
3. Click Add Participants for any assignment&lt;br /&gt;
&lt;br /&gt;
4. Click Export at the bottom of the page.&lt;br /&gt;
&lt;br /&gt;
5. Choose the appropriate option to export participants&lt;br /&gt;
&lt;br /&gt;
==Ordering of Imported Fields (Issue 110)==&lt;br /&gt;
====Current Implementation====&lt;br /&gt;
&lt;br /&gt;
Currently the order of the columns is preset and the user has to change the csv to match it.&lt;br /&gt;
&lt;br /&gt;
=====Drawbacks and Solutions=====&lt;br /&gt;
&lt;br /&gt;
This is inconvenient for the user to keep editing csv files. The solution iss to allow users chose the order of the columns as it appears in their csv file.&lt;br /&gt;
&lt;br /&gt;
====New Implementation====&lt;br /&gt;
In the view we added the drop down fields based on the expected_fields&lt;br /&gt;
&lt;br /&gt;
    *Please choose the order of the columns here:&amp;lt;br/&amp;gt;&lt;br /&gt;
    &amp;lt;%@array_expected_values.each{|field|%&amp;gt;&lt;br /&gt;
    &amp;lt;%=select_tag 'import_field_[field]', options_for_select(@array_expected_values.collect.with_index.to_a,field)%&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
    &amp;lt;%}%&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the import_file_controller.rb we made addition to the start method:&lt;br /&gt;
&lt;br /&gt;
    @array_expected_values = parse_line(@expected_fields,',',params)&lt;br /&gt;
    b = ['...','MetareviewerN','ReviewerN','Team MemberN']&lt;br /&gt;
    @array_expected_values.delete_if { |x| b.include?(x) }&lt;br /&gt;
    if(@array_expected_values.include?(&amp;quot;Team Member1&amp;quot;))&lt;br /&gt;
    (3..4).each do |i|&lt;br /&gt;
      @array_expected_values.push(&amp;quot;Team Member#{i}&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
    elsif(@array_expected_values.include?(&amp;quot;Reviewer1&amp;quot;))&lt;br /&gt;
    (3..15).each do |i|&lt;br /&gt;
      @array_expected_values.push(&amp;quot;Reviewer#{i}&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
    elsif(@array_expected_values.include?(&amp;quot;Metaeviewer1&amp;quot;))&lt;br /&gt;
    (3..15).each do |i|&lt;br /&gt;
      @array_expected_values.push(&amp;quot;Metareviewer#{i}&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
This allows expected_fields for the users and reviews to be unpacked as previously it was using wording such as &amp;quot;... userN&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Also in the import_file_controller.rb we added function that reorders the columns as they are expected by expertiza:&lt;br /&gt;
&lt;br /&gt;
def reorder_row(row,params)&lt;br /&gt;
    case params[:model]&lt;br /&gt;
      when &amp;quot;AssignmentTeam&amp;quot;&lt;br /&gt;
        expected_fields_variable_default = ['Team Name - optional', 'Team Member1','Team Member2', 'Team Member3', 'Team Member4']&lt;br /&gt;
      when &amp;quot;User&amp;quot;&lt;br /&gt;
        expected_fields_variable_default = [ 'username', 'full name (first[ middle] last)', 'e-mail address']&lt;br /&gt;
      when &amp;quot;ReviewResponseMap&amp;quot;&lt;br /&gt;
        expected_fields_variable_default = [ 'Contributor', 'Reviewer1', 'Reviewer2']&lt;br /&gt;
        (3..15).each do |i|&lt;br /&gt;
          expected_fields_variable_default.push(&amp;quot;Reviewer#{i}&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
      when &amp;quot;MetaeviewResponseMap&amp;quot;&lt;br /&gt;
        expected_fields_variable_default = [ 'Contributor', 'Reviewer', 'Metareviewer1','Metareviewer2']&lt;br /&gt;
        (3..15).each do |i|&lt;br /&gt;
          expected_fields_variable_default.push(&amp;quot;Metareviewer#{i}&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
       when &amp;quot;SignUpTopic&amp;quot;&lt;br /&gt;
         expected_fields_variable_default = [ 'Topic identifier', 'Topic name', 'Max choosers', 'Topic Category']&lt;br /&gt;
      else&lt;br /&gt;
        expected_fields_variable_default = ['Team Name - optional', 'Team Member1','Team Member2', 'Team Member3', 'Team Member4']&lt;br /&gt;
    end&lt;br /&gt;
    expected_fields_variable=[]&lt;br /&gt;
    custom_order={}&lt;br /&gt;
    return_row=[]&lt;br /&gt;
    expected_fields_variable=expected_fields_variable_default.reject.with_index { |x,i| i &amp;gt; row.length-1 }&lt;br /&gt;
    expected_fields_variable.each_with_index { |field, index|&lt;br /&gt;
      custom_order[params[&amp;quot;import_field_#{index}&amp;quot;]]=row[index]&lt;br /&gt;
    }&lt;br /&gt;
    expected_fields_variable.each_with_index { |field, index| return_row[index]=custom_order[field]}&lt;br /&gt;
    return_row&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
==Improvement Scope ==&lt;br /&gt;
The above Import as well as export functionalities that have been implemented in due course of the project have a scope for improvement. Imports and exports are functionalities that are used very often used to insert data as well to transfer data stored into the Models to external CSV files. Thus these features can be further tested using rspec tests as well as capybara and cucumber tests so as to make it fool proof. However these tests cannot be made such that they hamper the flexibility of the implementation to achieve a particular functionality.&lt;br /&gt;
Further We can also add options to handle duplicates as well as to filter out exports in other models as well, instead of the ones it is already present. Thus there is a scope of a lot more improvement to make Expertiza more user friendly.&lt;/div&gt;</summary>
		<author><name>Rsinha2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=104009</id>
		<title>CSC/ECE 517 Fall 2016/oss E1656</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=104009"/>
		<updated>2016-10-29T23:24:48Z</updated>

		<summary type="html">&lt;p&gt;Rsinha2: /* UI Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== E1656. Improve imports ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This page provides a description of the Expertiza based OSS project. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Introduction to Expertiza==&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open source project based on [http://rubyonrails.org/ Ruby on Rails] framework.&lt;br /&gt;
&lt;br /&gt;
==Project Description==&lt;br /&gt;
===About Import===&lt;br /&gt;
In Expertiza, various kinds of data may be imported from [https://en.wikipedia.org/wiki/Comma-separated_values csv files], including users, participants in an assignemnt, topics and teams. When importing data, a corresponding csv file have to be composed. In a csv file, each new line represent a piece of datum and the different fields of a datum are separated by delimiters. But there are rough edges in the way these imports are done and certain other data that should be importable is not. This project focuses on implementing following tasks about data import functionality: &lt;br /&gt;
&lt;br /&gt;
*When a team with a duplicate name is imported, one of the options is to rename the new team.  There should also be an option to rename an existing team.  See Issue 329.&lt;br /&gt;
*Review assignments (“reviewer mappings”) should be able to be imported, but cannot be imported.  See Issue 711&lt;br /&gt;
*It should be possible to import a list of users who have signed up for topics, but this feature does not yet exist.  See Issue 153.&lt;br /&gt;
*For every kind of data to be imported, Expertiza currently specifies the ordering of fields.  This isn’t very flexible; it may require the user (an instructor) to edit an existing CSV file.  It would be better if, after importing the data, Expertiza showed the data together with dropdowns containing the default field headers.  (This is similar to the way Excel shows data when it is imported from a CSV file.)  Then the user could change the dropdowns to cause a different ordering of fields.  See Issue 110.&lt;br /&gt;
*Create a way to export a list of teams that have signed up for topics, and who are waitlisted for topics, as well as participants in an assignment who have not signed up for topics. Choose the format, but keep it as consistent as possible with the other export formats.  This would help the professor when students ask him for advice on finding teammates.  Extra Issue&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following tasks were listed as a requirement, but after careful examination it was determined that these tasks were already implemented&lt;br /&gt;
*The simplest fix: If I try to import topics, the import page gives me this message: “The import process expects the following columns:” but it doesn’t say what the columns are (topic number, topic name, category, number of slots, category)!  It used to be in the system; please revert the change to fix this bug.  See Issue 719.&lt;br /&gt;
*When teams are imported in order to insert new members, the members are not inserted.  See Issue 328.&lt;br /&gt;
*It should be possible to leave off the final fields in a line of a CSV file.  These fields are often not specified anyway.  For example, if a password isn’t specified when a new user is created, the system generates a password (see Issue 183).  When importing topics, topic categories are rarely specified.  But if the final field is blank, the import requires the CSV line to end with “, “ (comma and space).  This should be fixed for all imports.&lt;br /&gt;
&lt;br /&gt;
==About Versions Controller==&lt;br /&gt;
Git is a popular version control system, As a part of the project, We have made use of git for the purpose of version control. Our repository is a fork of the original Expertiza repository on which we have collaborated our work. And the project has been submitted through a pull request.&lt;br /&gt;
&lt;br /&gt;
==Handle Duplicates (Issue329)==&lt;br /&gt;
====Current Implementation====&lt;br /&gt;
&lt;br /&gt;
When a team with a duplicate name is imported, one of the options is to rename the new team. There should also be an option to rename an existing team. See Issue 329.&lt;br /&gt;
The current implementation allows the user to handle duplicates, by the following techniques&lt;br /&gt;
*ignore the new team&lt;br /&gt;
*replace the existing team with the new team&lt;br /&gt;
*insert any new members into the existing team&lt;br /&gt;
*rename the new team and import&lt;br /&gt;
*rename the existing team and import&lt;br /&gt;
&lt;br /&gt;
=====Functionality=====&lt;br /&gt;
&lt;br /&gt;
The above functionalities make it easier to achieve the goal of handling duplicates while importing.&lt;br /&gt;
&lt;br /&gt;
=====Drawbacks and Solutions=====&lt;br /&gt;
&lt;br /&gt;
The above set of functionalities do not allow User to ever rename an existing team, rather force him rename his own team.&lt;br /&gt;
Thus the above requirement provides the necessary freedom to the User by providing him the option to rename an already existing team.&lt;br /&gt;
&lt;br /&gt;
====New Implementation====&lt;br /&gt;
&lt;br /&gt;
The option has been implemented using the update functionality that is already present in rails models, to update existing values of Active Records. To implement this feature we have also made use of the functionality for generating team names, that is already present within the Team model.&lt;br /&gt;
&lt;br /&gt;
A code snippet is given below:&lt;br /&gt;
  if handle_dups == &amp;quot;renameOldTeam&amp;quot; # rename: rename new team&lt;br /&gt;
       if teamtype.is_a?(CourseTeam)&lt;br /&gt;
         CourseTeam.update(team.id, :name =&amp;gt; self.generate_team_name(Course.find(id).name))&lt;br /&gt;
         return name&lt;br /&gt;
       elsif teamtype.is_a?(AssignmentTeam)&lt;br /&gt;
         AssignmentTeam.update(team.id, :name =&amp;gt; self.generate_team_name(Assignment.find(id).name))&lt;br /&gt;
         return name&lt;br /&gt;
       end&lt;br /&gt;
     end&lt;br /&gt;
&lt;br /&gt;
====UI Testing====&lt;br /&gt;
The Above feature has been tested from the UI using the both course Teams and Assignment Teams, where new teams were added with conflicting names and the rename existing team option was selected, which lead lead to the desired behavior, that is the team that was extant was renamed and new team was imported with the same name as that specified in the CSV file&lt;br /&gt;
&lt;br /&gt;
1. Log in on Expertiza as instructor&lt;br /&gt;
&lt;br /&gt;
2. Click Manage Assignments&lt;br /&gt;
&lt;br /&gt;
3. Click Add Teams on any assignment listed&lt;br /&gt;
&lt;br /&gt;
4. Click Import Teams at the bottom of the page&lt;br /&gt;
&lt;br /&gt;
5. Choose the Rename an Existing Team Option and click import once the CSV has been chosen&lt;br /&gt;
&lt;br /&gt;
==Fix Reviewer and Metareviewer Mappings (Issue711)==&lt;br /&gt;
====Current Implementation====&lt;br /&gt;
&lt;br /&gt;
When an instructor tries to assign reviewers for an assignment, if the review strategy of the assignment is‘Instructor-Selected’, he could assign reviewers by directly importing the reviewer mappings. But now, when the instructor attempts to submit the import, the system will raise an argument error showing:&lt;br /&gt;
&lt;br /&gt;
[[File:reviewfail.PNG]]&lt;br /&gt;
&lt;br /&gt;
The import fails and, clearly, it's a bug in Expertiza.&lt;br /&gt;
&lt;br /&gt;
====New Implementation====&lt;br /&gt;
To solve this problem, first refer to the view/review_mapping/_list_review_mappings.html.erb file and find out that the model to be imported is ReviewResponseMap. The import method in review_response_map.rb model file takes in 3 arguments which are row, _session and id. A code snippet of import_file_controller.rb (the import controller) is given below:&lt;br /&gt;
[[File:Reviewcode.PNG]]&lt;br /&gt;
&lt;br /&gt;
Before we add the code in parentheses, the ReviewResponseMap model was not explicitly specified which case it belongs to and falls into the else statement where the import method takes in 4 arguments. That’s the reason of getting the “wrong number of argument” error. To resolve the problem, a &amp;quot;or params[:model] == 'ReviewResponseMap'&amp;quot; is inserted into the parentheses to make the import method of reviewer mappings takes in 3 arguments again and then we can correctly import the reviewer mappings. The recovery method for MetareviewResponseMap is exactly the same with this one by adding &lt;br /&gt;
&amp;quot;or params[:model] == 'MetareviewResponseMap'&amp;quot; statement into the parentheses.&lt;br /&gt;
&lt;br /&gt;
====UI Testing====&lt;br /&gt;
1. Login as instructor. Click on ‘Manage Assignment’ to see all assignments in the database.&lt;br /&gt;
&lt;br /&gt;
2. Among all the assignments, click the ‘Review strategy’ card in edit page and find out one assignment with 'Instructor-Selected' strategy (e.g. 'Design exercise'). Creating a new 'Instructor-Selected'           assignment and add some participants to it is also applicable.&lt;br /&gt;
&lt;br /&gt;
3. 'Assign reviewers' for this assignment and click on the 'Import reviewer mappings' on the bottom of the page.&lt;br /&gt;
&lt;br /&gt;
4. Compose a csv file in the given format of 'Contributor, Reviewer1, Reviewer2, …, ReviewerN' and import the file. The ‘Contributor’ here is the name of a team in this assignment. &lt;br /&gt;
&lt;br /&gt;
5. Go back to reviewer mappings page to check if the 'Reviewers of the Contributor' in the file are listed in the 'Reviewed By' section of the 'Contributors'.&lt;br /&gt;
&lt;br /&gt;
==Import Sign Up Sheet (Issue153)==&lt;br /&gt;
====Current Implementation====&lt;br /&gt;
&lt;br /&gt;
When a signup sheet is used in Expertiza, users are expected to sign up for topics. But, the instructor might've taken signups offline, e.g., by passing around a signup sheet in class. If the signup are not taken online by the students, the instructor has to impersonate all the students one by one and sign them up for a topic, which is tedious.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====New Implementation====&lt;br /&gt;
To implement this new issue, a model which is in charge of creating a sign_up and SignedUpTeam should be located first. In SignUpSheet model, methods are designed  for the creation of a sign_up and SignedUpTeam using the data from data base and the new implementation should create them from an imported file. Hence, an ''import'' method is added to this model and a code snippet of it is shown as:&lt;br /&gt;
&lt;br /&gt;
[[File:Signupcode.PNG]]&lt;br /&gt;
&lt;br /&gt;
This new method imports new sign_up data in a format of &amp;quot;Topic identifier, User1, User2&amp;quot;. Users here are the ones who signed up for the topic with a certain identifier (id). Some edge cases are also taken into consideration in this method to prevent importing a non-existing team in this assignment, a non-existing user or a user who is not a participant of this assignment. &lt;br /&gt;
Next, a link on the view page needs to be created to access this method. The instructor can view the sign up sheet of an assignment under the &amp;quot;topic&amp;quot; card of the &amp;quot;edit&amp;quot; section. An &amp;quot;Import sign up sheet&amp;quot; button is added beside the &amp;quot;Import topic&amp;quot; link &lt;br /&gt;
&lt;br /&gt;
[[File:Button.PNG]]&lt;br /&gt;
&lt;br /&gt;
and the corresponding code should be inserted in the &amp;quot;view/sign_up_sheet/_add_topics/html.erb&amp;quot; file.&lt;br /&gt;
&lt;br /&gt;
[[File:View.PNG]]&lt;br /&gt;
&lt;br /&gt;
After all of this, the new feature is successfully implemented and the instructor can directly import a large offline sign up sheet without tedious impersonating. The whole process of importing sign ups works  exactly the same as student online sign ups. If the assignment does not have a topic yet, the 'Import sign up sheet' link will be invisible unless a topic is created or imported. If a imported user does not have a team, he will be automatically assigned a team and sign up for the topic. If users imported exceeds the limit a certain topic can hold, the leftmost users in the file (like the earliest signed up users) will have the topic and those right(later signed up) users will be in the wait list.&lt;br /&gt;
&lt;br /&gt;
====UI Testing====&lt;br /&gt;
1. Login as instructor. Click on 'Manage Assignment’ to see all assignments in the database.&lt;br /&gt;
&lt;br /&gt;
2. Click on 'edit', go to 'topic' card and find the &amp;quot;Import sign up sheet&amp;quot; link.&lt;br /&gt;
&lt;br /&gt;
3. Compose a csv file in the given format of 'Topic identifier, User1, User2, …' and import the file. The ‘Topic identifier’ here is the 'topic#' in the sign up sheet. &lt;br /&gt;
&lt;br /&gt;
4. Go back to sign up sheet page to check if the 'Users' in the file and their 'Teams' are listed under the 'Topic names' section.&lt;br /&gt;
&lt;br /&gt;
==Export Assignment Participants (Extra Issue)==&lt;br /&gt;
===Current Implementation===&lt;br /&gt;
Current Implementation just allows users to Export the set of all Assignment Participants, of a given assignment. It doesn't allow any further filtering.&lt;br /&gt;
&lt;br /&gt;
===Functionality===&lt;br /&gt;
The current functionality is very rigid and doesn't allow the user to know any more than the set of assignment Participants, which is also a major drawback&lt;br /&gt;
&lt;br /&gt;
===New Implementation===&lt;br /&gt;
The new implementation allows user to export Assignment Participants in four ways.&lt;br /&gt;
* List of All Users mapped with team number and topic name who have signed up for an assignment topic&lt;br /&gt;
* List of All Users mapped with team number and topic name who are wait-listed for an assignment topic&lt;br /&gt;
* List of All Participants who haven't yet signed up for a topic and haven't formed teams yet&lt;br /&gt;
* List of All Participants&lt;br /&gt;
&lt;br /&gt;
The functionality is present as a set of Radio buttons, which is checked by default to the fourth option that is to export all Participants. However that can be changed according to requirement.&lt;br /&gt;
&lt;br /&gt;
The above has been implemented by creating a partial for the view to add the radio button. Further and If else bock has been used in the model, to identify the option selected and accordingly, on the required set of Rows are pushed to the csv file. To know whether a User has signed up or not for a topic, The SignedUpTeam model is used and to find if the team is wait listed or not, the is_waitlisted boolean value id used to determine if the team is wait listed or not.&lt;br /&gt;
&lt;br /&gt;
A small Code snippet describing how one of these option was achieved is given below:&lt;br /&gt;
  if options[&amp;quot;participant_type&amp;quot;] == &amp;quot;signed&amp;quot;&lt;br /&gt;
         Team.where(:parent_id=&amp;gt; parent_id).find_each do |team|&lt;br /&gt;
           TeamsUser.where(:team_id=&amp;gt; team.id).find_each do |team_user|&lt;br /&gt;
             user = User.find(team_user.user_id)&lt;br /&gt;
             if SignedUpTeam.where( :team_id =&amp;gt; team.id).where(:is_waitlisted =&amp;gt; [false, nil,&amp;quot; &amp;quot;, &amp;quot;&amp;quot;]).present?&lt;br /&gt;
               assignemnt_team = SignedUpTeam.where( :team_id =&amp;gt; team.id).where(:is_waitlisted =&amp;gt; [false, nil,&amp;quot; &amp;quot;, &amp;quot;&amp;quot;]).first&lt;br /&gt;
               topic = SignUpTopic.find(assignemnt_team.topic_id)&lt;br /&gt;
             csv &amp;lt;&amp;lt; [&lt;br /&gt;
               user.name,&lt;br /&gt;
               user.fullname,&lt;br /&gt;
               user.email,&lt;br /&gt;
               user.role.name,&lt;br /&gt;
               user.parent.name,&lt;br /&gt;
               user.email_on_submission,&lt;br /&gt;
               user.email_on_review,&lt;br /&gt;
               user.email_on_review_of_review,&lt;br /&gt;
               team.id,&lt;br /&gt;
               topic.topic_name,&lt;br /&gt;
               &amp;quot;handle&amp;quot;&lt;br /&gt;
             ]&lt;br /&gt;
             end&lt;br /&gt;
           end&lt;br /&gt;
         end&lt;br /&gt;
&lt;br /&gt;
====UI Testing====&lt;br /&gt;
UI testing for the above was done by exporting Assignment Teams for a given assignment using all the above options individually and checking if the result actually matched what was expected. Example 'all' should export all the participants listed withing the assignment. 'Signed Up Team' gives all the participants who have signed up mapped to their teams and respective topics.&lt;br /&gt;
If you are signed in as Instructor:&lt;br /&gt;
Feature can be tested by clicking on add participants button in manage assignments and then clicking on export course participants at the bottom of the page. And then following the applicable option for testing the respective features described above.&lt;br /&gt;
&lt;br /&gt;
==Ordering of Imported Fields (Issue 110)==&lt;br /&gt;
====Current Implementation====&lt;br /&gt;
&lt;br /&gt;
Currently the order of the columns is preset and the user has to change the csv to match it.&lt;br /&gt;
&lt;br /&gt;
=====Drawbacks and Solutions=====&lt;br /&gt;
&lt;br /&gt;
This is inconvenient for the user to keep editing csv files. The solution iss to allow users chose the order of the columns as it appears in their csv file.&lt;br /&gt;
&lt;br /&gt;
====New Implementation====&lt;br /&gt;
In the view we added the drop down fields based on the expected_fields&lt;br /&gt;
&lt;br /&gt;
    *Please choose the order of the columns here:&amp;lt;br/&amp;gt;&lt;br /&gt;
    &amp;lt;%@array_expected_values.each{|field|%&amp;gt;&lt;br /&gt;
    &amp;lt;%=select_tag 'import_field_[field]', options_for_select(@array_expected_values.collect.with_index.to_a,field)%&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
    &amp;lt;%}%&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the import_file_controller.rb we made addition to the start method:&lt;br /&gt;
&lt;br /&gt;
    @array_expected_values = parse_line(@expected_fields,',',params)&lt;br /&gt;
    b = ['...','MetareviewerN','ReviewerN','Team MemberN']&lt;br /&gt;
    @array_expected_values.delete_if { |x| b.include?(x) }&lt;br /&gt;
    if(@array_expected_values.include?(&amp;quot;Team Member1&amp;quot;))&lt;br /&gt;
    (3..4).each do |i|&lt;br /&gt;
      @array_expected_values.push(&amp;quot;Team Member#{i}&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
    elsif(@array_expected_values.include?(&amp;quot;Reviewer1&amp;quot;))&lt;br /&gt;
    (3..15).each do |i|&lt;br /&gt;
      @array_expected_values.push(&amp;quot;Reviewer#{i}&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
    elsif(@array_expected_values.include?(&amp;quot;Metaeviewer1&amp;quot;))&lt;br /&gt;
    (3..15).each do |i|&lt;br /&gt;
      @array_expected_values.push(&amp;quot;Metareviewer#{i}&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
This allows expected_fields for the users and reviews to be unpacked as previously it was using wording such as &amp;quot;... userN&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Also in the import_file_controller.rb we added function that reorders the columns as they are expected by expertiza:&lt;br /&gt;
&lt;br /&gt;
def reorder_row(row,params)&lt;br /&gt;
    case params[:model]&lt;br /&gt;
      when &amp;quot;AssignmentTeam&amp;quot;&lt;br /&gt;
        expected_fields_variable_default = ['Team Name - optional', 'Team Member1','Team Member2', 'Team Member3', 'Team Member4']&lt;br /&gt;
      when &amp;quot;User&amp;quot;&lt;br /&gt;
        expected_fields_variable_default = [ 'username', 'full name (first[ middle] last)', 'e-mail address']&lt;br /&gt;
      when &amp;quot;ReviewResponseMap&amp;quot;&lt;br /&gt;
        expected_fields_variable_default = [ 'Contributor', 'Reviewer1', 'Reviewer2']&lt;br /&gt;
        (3..15).each do |i|&lt;br /&gt;
          expected_fields_variable_default.push(&amp;quot;Reviewer#{i}&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
      when &amp;quot;MetaeviewResponseMap&amp;quot;&lt;br /&gt;
        expected_fields_variable_default = [ 'Contributor', 'Reviewer', 'Metareviewer1','Metareviewer2']&lt;br /&gt;
        (3..15).each do |i|&lt;br /&gt;
          expected_fields_variable_default.push(&amp;quot;Metareviewer#{i}&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
       when &amp;quot;SignUpTopic&amp;quot;&lt;br /&gt;
         expected_fields_variable_default = [ 'Topic identifier', 'Topic name', 'Max choosers', 'Topic Category']&lt;br /&gt;
      else&lt;br /&gt;
        expected_fields_variable_default = ['Team Name - optional', 'Team Member1','Team Member2', 'Team Member3', 'Team Member4']&lt;br /&gt;
    end&lt;br /&gt;
    expected_fields_variable=[]&lt;br /&gt;
    custom_order={}&lt;br /&gt;
    return_row=[]&lt;br /&gt;
    expected_fields_variable=expected_fields_variable_default.reject.with_index { |x,i| i &amp;gt; row.length-1 }&lt;br /&gt;
    expected_fields_variable.each_with_index { |field, index|&lt;br /&gt;
      custom_order[params[&amp;quot;import_field_#{index}&amp;quot;]]=row[index]&lt;br /&gt;
    }&lt;br /&gt;
    expected_fields_variable.each_with_index { |field, index| return_row[index]=custom_order[field]}&lt;br /&gt;
    return_row&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
==Improvement Scope ==&lt;br /&gt;
The above Import as well as export functionalities that have been implemented in due course of the project have a scope for improvement. Imports and exports are functionalities that are used very often used to insert data as well to transfer data stored into the Models to external CSV files. Thus these features can be further tested using rspec tests as well as capybara and cucumber tests so as to make it fool proof. However these tests cannot be made such that they hamper the flexibility of the implementation to achieve a particular functionality.&lt;br /&gt;
Further We can also add options to handle duplicates as well as to filter out exports in other models as well, instead of the ones it is already present. Thus there is a scope of a lot more improvement to make Expertiza more user friendly.&lt;/div&gt;</summary>
		<author><name>Rsinha2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=104008</id>
		<title>CSC/ECE 517 Fall 2016/oss E1656</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=104008"/>
		<updated>2016-10-29T23:24:09Z</updated>

		<summary type="html">&lt;p&gt;Rsinha2: /* UI Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== E1656. Improve imports ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This page provides a description of the Expertiza based OSS project. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Introduction to Expertiza==&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open source project based on [http://rubyonrails.org/ Ruby on Rails] framework.&lt;br /&gt;
&lt;br /&gt;
==Project Description==&lt;br /&gt;
===About Import===&lt;br /&gt;
In Expertiza, various kinds of data may be imported from [https://en.wikipedia.org/wiki/Comma-separated_values csv files], including users, participants in an assignemnt, topics and teams. When importing data, a corresponding csv file have to be composed. In a csv file, each new line represent a piece of datum and the different fields of a datum are separated by delimiters. But there are rough edges in the way these imports are done and certain other data that should be importable is not. This project focuses on implementing following tasks about data import functionality: &lt;br /&gt;
&lt;br /&gt;
*When a team with a duplicate name is imported, one of the options is to rename the new team.  There should also be an option to rename an existing team.  See Issue 329.&lt;br /&gt;
*Review assignments (“reviewer mappings”) should be able to be imported, but cannot be imported.  See Issue 711&lt;br /&gt;
*It should be possible to import a list of users who have signed up for topics, but this feature does not yet exist.  See Issue 153.&lt;br /&gt;
*For every kind of data to be imported, Expertiza currently specifies the ordering of fields.  This isn’t very flexible; it may require the user (an instructor) to edit an existing CSV file.  It would be better if, after importing the data, Expertiza showed the data together with dropdowns containing the default field headers.  (This is similar to the way Excel shows data when it is imported from a CSV file.)  Then the user could change the dropdowns to cause a different ordering of fields.  See Issue 110.&lt;br /&gt;
*Create a way to export a list of teams that have signed up for topics, and who are waitlisted for topics, as well as participants in an assignment who have not signed up for topics. Choose the format, but keep it as consistent as possible with the other export formats.  This would help the professor when students ask him for advice on finding teammates.  Extra Issue&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following tasks were listed as a requirement, but after careful examination it was determined that these tasks were already implemented&lt;br /&gt;
*The simplest fix: If I try to import topics, the import page gives me this message: “The import process expects the following columns:” but it doesn’t say what the columns are (topic number, topic name, category, number of slots, category)!  It used to be in the system; please revert the change to fix this bug.  See Issue 719.&lt;br /&gt;
*When teams are imported in order to insert new members, the members are not inserted.  See Issue 328.&lt;br /&gt;
*It should be possible to leave off the final fields in a line of a CSV file.  These fields are often not specified anyway.  For example, if a password isn’t specified when a new user is created, the system generates a password (see Issue 183).  When importing topics, topic categories are rarely specified.  But if the final field is blank, the import requires the CSV line to end with “, “ (comma and space).  This should be fixed for all imports.&lt;br /&gt;
&lt;br /&gt;
==About Versions Controller==&lt;br /&gt;
Git is a popular version control system, As a part of the project, We have made use of git for the purpose of version control. Our repository is a fork of the original Expertiza repository on which we have collaborated our work. And the project has been submitted through a pull request.&lt;br /&gt;
&lt;br /&gt;
==Handle Duplicates (Issue329)==&lt;br /&gt;
====Current Implementation====&lt;br /&gt;
&lt;br /&gt;
When a team with a duplicate name is imported, one of the options is to rename the new team. There should also be an option to rename an existing team. See Issue 329.&lt;br /&gt;
The current implementation allows the user to handle duplicates, by the following techniques&lt;br /&gt;
*ignore the new team&lt;br /&gt;
*replace the existing team with the new team&lt;br /&gt;
*insert any new members into the existing team&lt;br /&gt;
*rename the new team and import&lt;br /&gt;
*rename the existing team and import&lt;br /&gt;
&lt;br /&gt;
=====Functionality=====&lt;br /&gt;
&lt;br /&gt;
The above functionalities make it easier to achieve the goal of handling duplicates while importing.&lt;br /&gt;
&lt;br /&gt;
=====Drawbacks and Solutions=====&lt;br /&gt;
&lt;br /&gt;
The above set of functionalities do not allow User to ever rename an existing team, rather force him rename his own team.&lt;br /&gt;
Thus the above requirement provides the necessary freedom to the User by providing him the option to rename an already existing team.&lt;br /&gt;
&lt;br /&gt;
====New Implementation====&lt;br /&gt;
&lt;br /&gt;
The option has been implemented using the update functionality that is already present in rails models, to update existing values of Active Records. To implement this feature we have also made use of the functionality for generating team names, that is already present within the Team model.&lt;br /&gt;
&lt;br /&gt;
A code snippet is given below:&lt;br /&gt;
  if handle_dups == &amp;quot;renameOldTeam&amp;quot; # rename: rename new team&lt;br /&gt;
       if teamtype.is_a?(CourseTeam)&lt;br /&gt;
         CourseTeam.update(team.id, :name =&amp;gt; self.generate_team_name(Course.find(id).name))&lt;br /&gt;
         return name&lt;br /&gt;
       elsif teamtype.is_a?(AssignmentTeam)&lt;br /&gt;
         AssignmentTeam.update(team.id, :name =&amp;gt; self.generate_team_name(Assignment.find(id).name))&lt;br /&gt;
         return name&lt;br /&gt;
       end&lt;br /&gt;
     end&lt;br /&gt;
&lt;br /&gt;
====UI Testing====&lt;br /&gt;
The Above feature has been tested from the UI using the both course Teams and Assignment Teams, where new teams were added with conflicting names and the rename existing team option was selected, which lead lead to the desired behavior, that is the team that was extant was renamed and new team was imported with the same name as that specified in the CSV file&lt;br /&gt;
&lt;br /&gt;
1. Log in on Expertiza as instructor&lt;br /&gt;
2. Click Manage Assignments&lt;br /&gt;
3. Click Add Teams on any assignment listed&lt;br /&gt;
4. Click Import Teams at the bottom of the page&lt;br /&gt;
5. Choose the Rename an Existing Team Option and click import once the CSV has been chosen&lt;br /&gt;
&lt;br /&gt;
==Fix Reviewer and Metareviewer Mappings (Issue711)==&lt;br /&gt;
====Current Implementation====&lt;br /&gt;
&lt;br /&gt;
When an instructor tries to assign reviewers for an assignment, if the review strategy of the assignment is‘Instructor-Selected’, he could assign reviewers by directly importing the reviewer mappings. But now, when the instructor attempts to submit the import, the system will raise an argument error showing:&lt;br /&gt;
&lt;br /&gt;
[[File:reviewfail.PNG]]&lt;br /&gt;
&lt;br /&gt;
The import fails and, clearly, it's a bug in Expertiza.&lt;br /&gt;
&lt;br /&gt;
====New Implementation====&lt;br /&gt;
To solve this problem, first refer to the view/review_mapping/_list_review_mappings.html.erb file and find out that the model to be imported is ReviewResponseMap. The import method in review_response_map.rb model file takes in 3 arguments which are row, _session and id. A code snippet of import_file_controller.rb (the import controller) is given below:&lt;br /&gt;
[[File:Reviewcode.PNG]]&lt;br /&gt;
&lt;br /&gt;
Before we add the code in parentheses, the ReviewResponseMap model was not explicitly specified which case it belongs to and falls into the else statement where the import method takes in 4 arguments. That’s the reason of getting the “wrong number of argument” error. To resolve the problem, a &amp;quot;or params[:model] == 'ReviewResponseMap'&amp;quot; is inserted into the parentheses to make the import method of reviewer mappings takes in 3 arguments again and then we can correctly import the reviewer mappings. The recovery method for MetareviewResponseMap is exactly the same with this one by adding &lt;br /&gt;
&amp;quot;or params[:model] == 'MetareviewResponseMap'&amp;quot; statement into the parentheses.&lt;br /&gt;
&lt;br /&gt;
====UI Testing====&lt;br /&gt;
1. Login as instructor. Click on ‘Manage Assignment’ to see all assignments in the database.&lt;br /&gt;
&lt;br /&gt;
2. Among all the assignments, click the ‘Review strategy’ card in edit page and find out one assignment with 'Instructor-Selected' strategy (e.g. 'Design exercise'). Creating a new 'Instructor-Selected'           assignment and add some participants to it is also applicable.&lt;br /&gt;
&lt;br /&gt;
3. 'Assign reviewers' for this assignment and click on the 'Import reviewer mappings' on the bottom of the page.&lt;br /&gt;
&lt;br /&gt;
4. Compose a csv file in the given format of 'Contributor, Reviewer1, Reviewer2, …, ReviewerN' and import the file. The ‘Contributor’ here is the name of a team in this assignment. &lt;br /&gt;
&lt;br /&gt;
5. Go back to reviewer mappings page to check if the 'Reviewers of the Contributor' in the file are listed in the 'Reviewed By' section of the 'Contributors'.&lt;br /&gt;
&lt;br /&gt;
==Import Sign Up Sheet (Issue153)==&lt;br /&gt;
====Current Implementation====&lt;br /&gt;
&lt;br /&gt;
When a signup sheet is used in Expertiza, users are expected to sign up for topics. But, the instructor might've taken signups offline, e.g., by passing around a signup sheet in class. If the signup are not taken online by the students, the instructor has to impersonate all the students one by one and sign them up for a topic, which is tedious.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====New Implementation====&lt;br /&gt;
To implement this new issue, a model which is in charge of creating a sign_up and SignedUpTeam should be located first. In SignUpSheet model, methods are designed  for the creation of a sign_up and SignedUpTeam using the data from data base and the new implementation should create them from an imported file. Hence, an ''import'' method is added to this model and a code snippet of it is shown as:&lt;br /&gt;
&lt;br /&gt;
[[File:Signupcode.PNG]]&lt;br /&gt;
&lt;br /&gt;
This new method imports new sign_up data in a format of &amp;quot;Topic identifier, User1, User2&amp;quot;. Users here are the ones who signed up for the topic with a certain identifier (id). Some edge cases are also taken into consideration in this method to prevent importing a non-existing team in this assignment, a non-existing user or a user who is not a participant of this assignment. &lt;br /&gt;
Next, a link on the view page needs to be created to access this method. The instructor can view the sign up sheet of an assignment under the &amp;quot;topic&amp;quot; card of the &amp;quot;edit&amp;quot; section. An &amp;quot;Import sign up sheet&amp;quot; button is added beside the &amp;quot;Import topic&amp;quot; link &lt;br /&gt;
&lt;br /&gt;
[[File:Button.PNG]]&lt;br /&gt;
&lt;br /&gt;
and the corresponding code should be inserted in the &amp;quot;view/sign_up_sheet/_add_topics/html.erb&amp;quot; file.&lt;br /&gt;
&lt;br /&gt;
[[File:View.PNG]]&lt;br /&gt;
&lt;br /&gt;
After all of this, the new feature is successfully implemented and the instructor can directly import a large offline sign up sheet without tedious impersonating. The whole process of importing sign ups works  exactly the same as student online sign ups. If the assignment does not have a topic yet, the 'Import sign up sheet' link will be invisible unless a topic is created or imported. If a imported user does not have a team, he will be automatically assigned a team and sign up for the topic. If users imported exceeds the limit a certain topic can hold, the leftmost users in the file (like the earliest signed up users) will have the topic and those right(later signed up) users will be in the wait list.&lt;br /&gt;
&lt;br /&gt;
====UI Testing====&lt;br /&gt;
1. Login as instructor. Click on 'Manage Assignment’ to see all assignments in the database.&lt;br /&gt;
&lt;br /&gt;
2. Click on 'edit', go to 'topic' card and find the &amp;quot;Import sign up sheet&amp;quot; link.&lt;br /&gt;
&lt;br /&gt;
3. Compose a csv file in the given format of 'Topic identifier, User1, User2, …' and import the file. The ‘Topic identifier’ here is the 'topic#' in the sign up sheet. &lt;br /&gt;
&lt;br /&gt;
4. Go back to sign up sheet page to check if the 'Users' in the file and their 'Teams' are listed under the 'Topic names' section.&lt;br /&gt;
&lt;br /&gt;
==Export Assignment Participants (Extra Issue)==&lt;br /&gt;
===Current Implementation===&lt;br /&gt;
Current Implementation just allows users to Export the set of all Assignment Participants, of a given assignment. It doesn't allow any further filtering.&lt;br /&gt;
&lt;br /&gt;
===Functionality===&lt;br /&gt;
The current functionality is very rigid and doesn't allow the user to know any more than the set of assignment Participants, which is also a major drawback&lt;br /&gt;
&lt;br /&gt;
===New Implementation===&lt;br /&gt;
The new implementation allows user to export Assignment Participants in four ways.&lt;br /&gt;
* List of All Users mapped with team number and topic name who have signed up for an assignment topic&lt;br /&gt;
* List of All Users mapped with team number and topic name who are wait-listed for an assignment topic&lt;br /&gt;
* List of All Participants who haven't yet signed up for a topic and haven't formed teams yet&lt;br /&gt;
* List of All Participants&lt;br /&gt;
&lt;br /&gt;
The functionality is present as a set of Radio buttons, which is checked by default to the fourth option that is to export all Participants. However that can be changed according to requirement.&lt;br /&gt;
&lt;br /&gt;
The above has been implemented by creating a partial for the view to add the radio button. Further and If else bock has been used in the model, to identify the option selected and accordingly, on the required set of Rows are pushed to the csv file. To know whether a User has signed up or not for a topic, The SignedUpTeam model is used and to find if the team is wait listed or not, the is_waitlisted boolean value id used to determine if the team is wait listed or not.&lt;br /&gt;
&lt;br /&gt;
A small Code snippet describing how one of these option was achieved is given below:&lt;br /&gt;
  if options[&amp;quot;participant_type&amp;quot;] == &amp;quot;signed&amp;quot;&lt;br /&gt;
         Team.where(:parent_id=&amp;gt; parent_id).find_each do |team|&lt;br /&gt;
           TeamsUser.where(:team_id=&amp;gt; team.id).find_each do |team_user|&lt;br /&gt;
             user = User.find(team_user.user_id)&lt;br /&gt;
             if SignedUpTeam.where( :team_id =&amp;gt; team.id).where(:is_waitlisted =&amp;gt; [false, nil,&amp;quot; &amp;quot;, &amp;quot;&amp;quot;]).present?&lt;br /&gt;
               assignemnt_team = SignedUpTeam.where( :team_id =&amp;gt; team.id).where(:is_waitlisted =&amp;gt; [false, nil,&amp;quot; &amp;quot;, &amp;quot;&amp;quot;]).first&lt;br /&gt;
               topic = SignUpTopic.find(assignemnt_team.topic_id)&lt;br /&gt;
             csv &amp;lt;&amp;lt; [&lt;br /&gt;
               user.name,&lt;br /&gt;
               user.fullname,&lt;br /&gt;
               user.email,&lt;br /&gt;
               user.role.name,&lt;br /&gt;
               user.parent.name,&lt;br /&gt;
               user.email_on_submission,&lt;br /&gt;
               user.email_on_review,&lt;br /&gt;
               user.email_on_review_of_review,&lt;br /&gt;
               team.id,&lt;br /&gt;
               topic.topic_name,&lt;br /&gt;
               &amp;quot;handle&amp;quot;&lt;br /&gt;
             ]&lt;br /&gt;
             end&lt;br /&gt;
           end&lt;br /&gt;
         end&lt;br /&gt;
&lt;br /&gt;
====UI Testing====&lt;br /&gt;
UI testing for the above was done by exporting Assignment Teams for a given assignment using all the above options individually and checking if the result actually matched what was expected. Example 'all' should export all the participants listed withing the assignment. 'Signed Up Team' gives all the participants who have signed up mapped to their teams and respective topics.&lt;br /&gt;
If you are signed in as Instructor:&lt;br /&gt;
Feature can be tested by clicking on add participants button in manage assignments and then clicking on export course participants at the bottom of the page. And then following the applicable option for testing the respective features described above.&lt;br /&gt;
&lt;br /&gt;
==Ordering of Imported Fields (Issue 110)==&lt;br /&gt;
====Current Implementation====&lt;br /&gt;
&lt;br /&gt;
Currently the order of the columns is preset and the user has to change the csv to match it.&lt;br /&gt;
&lt;br /&gt;
=====Drawbacks and Solutions=====&lt;br /&gt;
&lt;br /&gt;
This is inconvenient for the user to keep editing csv files. The solution iss to allow users chose the order of the columns as it appears in their csv file.&lt;br /&gt;
&lt;br /&gt;
====New Implementation====&lt;br /&gt;
In the view we added the drop down fields based on the expected_fields&lt;br /&gt;
&lt;br /&gt;
    *Please choose the order of the columns here:&amp;lt;br/&amp;gt;&lt;br /&gt;
    &amp;lt;%@array_expected_values.each{|field|%&amp;gt;&lt;br /&gt;
    &amp;lt;%=select_tag 'import_field_[field]', options_for_select(@array_expected_values.collect.with_index.to_a,field)%&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
    &amp;lt;%}%&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the import_file_controller.rb we made addition to the start method:&lt;br /&gt;
&lt;br /&gt;
    @array_expected_values = parse_line(@expected_fields,',',params)&lt;br /&gt;
    b = ['...','MetareviewerN','ReviewerN','Team MemberN']&lt;br /&gt;
    @array_expected_values.delete_if { |x| b.include?(x) }&lt;br /&gt;
    if(@array_expected_values.include?(&amp;quot;Team Member1&amp;quot;))&lt;br /&gt;
    (3..4).each do |i|&lt;br /&gt;
      @array_expected_values.push(&amp;quot;Team Member#{i}&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
    elsif(@array_expected_values.include?(&amp;quot;Reviewer1&amp;quot;))&lt;br /&gt;
    (3..15).each do |i|&lt;br /&gt;
      @array_expected_values.push(&amp;quot;Reviewer#{i}&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
    elsif(@array_expected_values.include?(&amp;quot;Metaeviewer1&amp;quot;))&lt;br /&gt;
    (3..15).each do |i|&lt;br /&gt;
      @array_expected_values.push(&amp;quot;Metareviewer#{i}&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
This allows expected_fields for the users and reviews to be unpacked as previously it was using wording such as &amp;quot;... userN&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Also in the import_file_controller.rb we added function that reorders the columns as they are expected by expertiza:&lt;br /&gt;
&lt;br /&gt;
def reorder_row(row,params)&lt;br /&gt;
    case params[:model]&lt;br /&gt;
      when &amp;quot;AssignmentTeam&amp;quot;&lt;br /&gt;
        expected_fields_variable_default = ['Team Name - optional', 'Team Member1','Team Member2', 'Team Member3', 'Team Member4']&lt;br /&gt;
      when &amp;quot;User&amp;quot;&lt;br /&gt;
        expected_fields_variable_default = [ 'username', 'full name (first[ middle] last)', 'e-mail address']&lt;br /&gt;
      when &amp;quot;ReviewResponseMap&amp;quot;&lt;br /&gt;
        expected_fields_variable_default = [ 'Contributor', 'Reviewer1', 'Reviewer2']&lt;br /&gt;
        (3..15).each do |i|&lt;br /&gt;
          expected_fields_variable_default.push(&amp;quot;Reviewer#{i}&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
      when &amp;quot;MetaeviewResponseMap&amp;quot;&lt;br /&gt;
        expected_fields_variable_default = [ 'Contributor', 'Reviewer', 'Metareviewer1','Metareviewer2']&lt;br /&gt;
        (3..15).each do |i|&lt;br /&gt;
          expected_fields_variable_default.push(&amp;quot;Metareviewer#{i}&amp;quot;)&lt;br /&gt;
        end&lt;br /&gt;
       when &amp;quot;SignUpTopic&amp;quot;&lt;br /&gt;
         expected_fields_variable_default = [ 'Topic identifier', 'Topic name', 'Max choosers', 'Topic Category']&lt;br /&gt;
      else&lt;br /&gt;
        expected_fields_variable_default = ['Team Name - optional', 'Team Member1','Team Member2', 'Team Member3', 'Team Member4']&lt;br /&gt;
    end&lt;br /&gt;
    expected_fields_variable=[]&lt;br /&gt;
    custom_order={}&lt;br /&gt;
    return_row=[]&lt;br /&gt;
    expected_fields_variable=expected_fields_variable_default.reject.with_index { |x,i| i &amp;gt; row.length-1 }&lt;br /&gt;
    expected_fields_variable.each_with_index { |field, index|&lt;br /&gt;
      custom_order[params[&amp;quot;import_field_#{index}&amp;quot;]]=row[index]&lt;br /&gt;
    }&lt;br /&gt;
    expected_fields_variable.each_with_index { |field, index| return_row[index]=custom_order[field]}&lt;br /&gt;
    return_row&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
==Improvement Scope ==&lt;br /&gt;
The above Import as well as export functionalities that have been implemented in due course of the project have a scope for improvement. Imports and exports are functionalities that are used very often used to insert data as well to transfer data stored into the Models to external CSV files. Thus these features can be further tested using rspec tests as well as capybara and cucumber tests so as to make it fool proof. However these tests cannot be made such that they hamper the flexibility of the implementation to achieve a particular functionality.&lt;br /&gt;
Further We can also add options to handle duplicates as well as to filter out exports in other models as well, instead of the ones it is already present. Thus there is a scope of a lot more improvement to make Expertiza more user friendly.&lt;/div&gt;</summary>
		<author><name>Rsinha2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=103845</id>
		<title>CSC/ECE 517 Fall 2016/oss E1656</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=103845"/>
		<updated>2016-10-29T03:58:43Z</updated>

		<summary type="html">&lt;p&gt;Rsinha2: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== E1656. Improve imports ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This page provides a description of the Expertiza based OSS project. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Introduction to Expertiza==&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open source project based on [http://rubyonrails.org/ Ruby on Rails] framework.&lt;br /&gt;
&lt;br /&gt;
==Project Description==&lt;br /&gt;
===About Import===&lt;br /&gt;
In Expertiza, various kinds of data may be imported from [https://en.wikipedia.org/wiki/Comma-separated_values csv files], including users, participants in an assignemnt, topics and teams. When importing data, a corresponding csv file have to be composed. In a csv file, each new line represent a piece of datum and the different fields of a datum are separated by delimiters. But there are rough edges in the way these imports are done and certain other data that should be importable is not. This project focuses on implementing following tasks about data import functionality: &lt;br /&gt;
&lt;br /&gt;
*When a team with a duplicate name is imported, one of the options is to rename the new team.  There should also be an option to rename an existing team.  See Issue 329.&lt;br /&gt;
*Review assignments (“reviewer mappings”) should be able to be imported, but cannot be imported.  See Issue 711&lt;br /&gt;
*It should be possible to import a list of users who have signed up for topics, but this feature does not yet exist.  See Issue 153.&lt;br /&gt;
*For every kind of data to be imported, Expertiza currently specifies the ordering of fields.  This isn’t very flexible; it may require the user (an instructor) to edit an existing CSV file.  It would be better if, after importing the data, Expertiza showed the data together with dropdowns containing the default field headers.  (This is similar to the way Excel shows data when it is imported from a CSV file.)  Then the user could change the dropdowns to cause a different ordering of fields.  See Issue 110.&lt;br /&gt;
*Create a way to export a list of teams that have signed up for topics, and who are waitlisted for topics, as well as participants in an assignment who have not signed up for topics. Choose the format, but keep it as consistent as possible with the other export formats.  This would help the professor when students ask him for advice on finding teammates.  Extra Issue&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following tasks were listed as a requirement, but after careful examination it was determined that these tasks were already implemented&lt;br /&gt;
*The simplest fix: If I try to import topics, the import page gives me this message: “The import process expects the following columns:” but it doesn’t say what the columns are (topic number, topic name, category, number of slots, category)!  It used to be in the system; please revert the change to fix this bug.  See Issue 719.&lt;br /&gt;
*When teams are imported in order to insert new members, the members are not inserted.  See Issue 328.&lt;br /&gt;
*It should be possible to leave off the final fields in a line of a CSV file.  These fields are often not specified anyway.  For example, if a password isn’t specified when a new user is created, the system generates a password (see Issue 183).  When importing topics, topic categories are rarely specified.  But if the final field is blank, the import requires the CSV line to end with “, “ (comma and space).  This should be fixed for all imports.&lt;br /&gt;
&lt;br /&gt;
==About Versions Controller==&lt;br /&gt;
Git is a popular version control system, As a part of the project, We have made use of git for the purpose of version control. Our repository is a fork of the original Expertiza repository on which we have collaborated our work. And the project has been submitted through a pull request.&lt;br /&gt;
&lt;br /&gt;
==Handle Duplicates (Issue329)==&lt;br /&gt;
====Current Implementation====&lt;br /&gt;
&lt;br /&gt;
When a team with a duplicate name is imported, one of the options is to rename the new team. There should also be an option to rename an existing team. See Issue 329.&lt;br /&gt;
The current implementation allows the user to handle duplicates, by the following techniques&lt;br /&gt;
*ignore the new team&lt;br /&gt;
*replace the existing team with the new team&lt;br /&gt;
*insert any new members into the existing team&lt;br /&gt;
*rename the new team and import&lt;br /&gt;
*rename the existing team and import&lt;br /&gt;
&lt;br /&gt;
=====Functionality=====&lt;br /&gt;
&lt;br /&gt;
The above functionalities make it easier to achieve the goal of handling duplicates while importing.&lt;br /&gt;
&lt;br /&gt;
=====Drawbacks and Solutions=====&lt;br /&gt;
&lt;br /&gt;
The above set of functionalities do not allow User to ever rename an existing team, rather force him rename his own team.&lt;br /&gt;
Thus the above requirement provides the necessary freedom to the User by providing him the option to rename an already existing team.&lt;br /&gt;
&lt;br /&gt;
====New Implementation====&lt;br /&gt;
&lt;br /&gt;
The option has been implemented using the update functionality that is already present in rails models, to update existing values of Active Records. To implement this feature we have also made use of the functionality for generating team names, that is already present within the Team model.&lt;br /&gt;
&lt;br /&gt;
A code snippet is given below:&lt;br /&gt;
  if handle_dups == &amp;quot;renameOldTeam&amp;quot; # rename: rename new team&lt;br /&gt;
       if teamtype.is_a?(CourseTeam)&lt;br /&gt;
         CourseTeam.update(team.id, :name =&amp;gt; self.generate_team_name(Course.find(id).name))&lt;br /&gt;
         return name&lt;br /&gt;
       elsif teamtype.is_a?(AssignmentTeam)&lt;br /&gt;
         AssignmentTeam.update(team.id, :name =&amp;gt; self.generate_team_name(Assignment.find(id).name))&lt;br /&gt;
         return name&lt;br /&gt;
       end&lt;br /&gt;
     end&lt;br /&gt;
&lt;br /&gt;
====UI Testing====&lt;br /&gt;
The Above feature has been tested from the UI using the both course Teams and Assignment Teams, where new teams were added with conflicting names and the rename existing team option was selected, which lead lead to the desired behavior, that is the team that was extant was renamed and new team was imported with the same name as that specified in the CSV file&lt;br /&gt;
&lt;br /&gt;
The feature can be tested from Add teams option in manage assignments. From where one can import teams and choose the required feature&lt;br /&gt;
&lt;br /&gt;
==Fix Reviewer and Metareviewer Mappings (Issue711)==&lt;br /&gt;
====Current Implementation====&lt;br /&gt;
&lt;br /&gt;
When an instructor tries to assign reviewers for an assignment, if the review strategy of the assignment is‘Instructor-Selected’, he could assign reviewers by directly importing the reviewer mappings. But now, when the instructor attempts to submit the import, the system will raise an argument error showing:&lt;br /&gt;
&lt;br /&gt;
[[File:reviewfail.PNG]]&lt;br /&gt;
&lt;br /&gt;
The import fails and, clearly, it's a bug in Expertiza.&lt;br /&gt;
&lt;br /&gt;
====New Implementation====&lt;br /&gt;
To solve this problem, first refer to the view/review_mapping/_list_review_mappings.html.erb file and find out that the model to be imported is ReviewResponseMap. The import method in review_response_map.rb model file takes in 3 arguments which are row, _session and id. A code snippet of import_file_controller.rb (the import controller) is given below:&lt;br /&gt;
[[File:Reviewcode.PNG]]&lt;br /&gt;
&lt;br /&gt;
Before we add the code in parentheses, the ReviewResponseMap model was not explicitly specified which case it belongs to and falls into the else statement where the import method takes in 4 arguments. That’s the reason of getting the “wrong number of argument” error. To resolve the problem, a &amp;quot;or params[:model] == 'ReviewResponseMap'&amp;quot; is inserted into the parentheses to make the import method of reviewer mappings takes in 3 arguments again and then we can correctly import the reviewer mappings. The recovery method for MetareviewResponseMap is exactly the same with this one by adding &lt;br /&gt;
&amp;quot;or params[:model] == 'MetareviewResponseMap'&amp;quot; statement into the parentheses.&lt;br /&gt;
&lt;br /&gt;
====UI Testing====&lt;br /&gt;
1. Login as instructor. Click on ‘Manage Assignment’ to see all assignments in the database.&lt;br /&gt;
&lt;br /&gt;
2. Among all the assignments, click the ‘Review strategy’ card in edit page and find out one assignment with 'Instructor-Selected' strategy (e.g. 'Design exercise'). Creating a new 'Instructor-Selected'           assignment and add some participants to it is also applicable.&lt;br /&gt;
&lt;br /&gt;
3. 'Assign reviewers' for this assignment and click on the 'Import reviewer mappings' on the bottom of the page.&lt;br /&gt;
&lt;br /&gt;
4. Compose a csv file in the given format of 'Contributor, Reviewer1, Reviewer2, …, ReviewerN' and import the file. The ‘Contributor’ here is the name of a team in this assignment. &lt;br /&gt;
&lt;br /&gt;
5. Go back to reviewer mappings page to check if the 'Reviewers of the Contributor' in the file are listed in the 'Reviewed By' section of the 'Contributors'.&lt;br /&gt;
&lt;br /&gt;
==Export Assignment Participants (Extra Issue)==&lt;br /&gt;
===Current Implementation===&lt;br /&gt;
Current Implementation just allows users to Export the set of all Assignment Participants, of a given assignment. It doesn't allow any further filtering.&lt;br /&gt;
&lt;br /&gt;
===Functionality===&lt;br /&gt;
The current functionality is very rigid and doesn't allow the user to know any more than the set of assignment Participants, which is also a major drawback&lt;br /&gt;
&lt;br /&gt;
===New Implementation===&lt;br /&gt;
The new implementation allows user to export Assignment Participants in four ways.&lt;br /&gt;
* List of All Users mapped with team number and topic name who have signed up for an assignment topic&lt;br /&gt;
* List of All Users mapped with team number and topic name who are wait-listed for an assignment topic&lt;br /&gt;
* List of All Participants who haven't yet signed up for a topic and haven't formed teams yet&lt;br /&gt;
* List of All Participants&lt;br /&gt;
&lt;br /&gt;
The functionality is present as a set of Radio buttons, which is checked by default to the fourth option that is to export all Participants. However that can be changed according to requirement.&lt;br /&gt;
&lt;br /&gt;
The above has been implemented by creating a partial for the view to add the radio button. Further and If else bock has been used in the model, to identify the option selected and accordingly, on the required set of Rows are pushed to the csv file. To know whether a User has signed up or not for a topic, The SignedUpTeam model is used and to find if the team is wait listed or not, the is_waitlisted boolean value id used to determine if the team is wait listed or not.&lt;br /&gt;
&lt;br /&gt;
A small Code snippet describing how one of these option was achieved is given below:&lt;br /&gt;
  if options[&amp;quot;participant_type&amp;quot;] == &amp;quot;signed&amp;quot;&lt;br /&gt;
         Team.where(:parent_id=&amp;gt; parent_id).find_each do |team|&lt;br /&gt;
           TeamsUser.where(:team_id=&amp;gt; team.id).find_each do |team_user|&lt;br /&gt;
             user = User.find(team_user.user_id)&lt;br /&gt;
             if SignedUpTeam.where( :team_id =&amp;gt; team.id).where(:is_waitlisted =&amp;gt; [false, nil,&amp;quot; &amp;quot;, &amp;quot;&amp;quot;]).present?&lt;br /&gt;
               assignemnt_team = SignedUpTeam.where( :team_id =&amp;gt; team.id).where(:is_waitlisted =&amp;gt; [false, nil,&amp;quot; &amp;quot;, &amp;quot;&amp;quot;]).first&lt;br /&gt;
               topic = SignUpTopic.find(assignemnt_team.topic_id)&lt;br /&gt;
             csv &amp;lt;&amp;lt; [&lt;br /&gt;
               user.name,&lt;br /&gt;
               user.fullname,&lt;br /&gt;
               user.email,&lt;br /&gt;
               user.role.name,&lt;br /&gt;
               user.parent.name,&lt;br /&gt;
               user.email_on_submission,&lt;br /&gt;
               user.email_on_review,&lt;br /&gt;
               user.email_on_review_of_review,&lt;br /&gt;
               team.id,&lt;br /&gt;
               topic.topic_name,&lt;br /&gt;
               &amp;quot;handle&amp;quot;&lt;br /&gt;
             ]&lt;br /&gt;
             end&lt;br /&gt;
           end&lt;br /&gt;
         end&lt;br /&gt;
&lt;br /&gt;
====UI Testing====&lt;br /&gt;
UI testing for the above was done by exporting Assignment Teams for a given assignment using all the above options individually and checking if the result actually matched what was expected. Example 'all' should export all the participants listed withing the assignment. 'Signed Up Team' gives all the participants who have signed up mapped to their teams and respective topics.&lt;br /&gt;
If you are signed in as Instructor:&lt;br /&gt;
Feature can be tested by clicking on add participants button in manage assignments and then clicking on export course participants at the bottom of the page. And then following the applicable option for testing the respective features described above&lt;br /&gt;
&lt;br /&gt;
==Ordering of imported fields==&lt;br /&gt;
====Current Implementation====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Functionality=====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Drawbacks and Solutions=====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====New Implementation====&lt;br /&gt;
In the view we added the drop down fields based on the expected_fields&lt;br /&gt;
&lt;br /&gt;
    *Please choose the order of the columns here:&amp;lt;br/&amp;gt;&lt;br /&gt;
    &amp;lt;%@array_expected_values.each{|field|%&amp;gt;&lt;br /&gt;
    &amp;lt;%=select_tag 'import_field_[field]', options_for_select(@array_expected_values.collect.with_index.to_a,field)%&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
    &amp;lt;%}%&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the import_file_controller.rb we made addition to the start method:&lt;br /&gt;
&lt;br /&gt;
    @array_expected_values = parse_line(@expected_fields,',',params)&lt;br /&gt;
    b = ['...','MetareviewerN','ReviewerN','Team MemberN']&lt;br /&gt;
    @array_expected_values.delete_if { |x| b.include?(x) }&lt;br /&gt;
&lt;br /&gt;
    if(@array_expected_values.include?(&amp;quot;Team Member1&amp;quot;))&lt;br /&gt;
    (3..4).each do |i|&lt;br /&gt;
      @array_expected_values.push(&amp;quot;Team Member#{i}&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
    elsif(@array_expected_values.include?(&amp;quot;Reviewer1&amp;quot;))&lt;br /&gt;
    (3..15).each do |i|&lt;br /&gt;
      @array_expected_values.push(&amp;quot;Reviewer#{i}&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
    elsif(@array_expected_values.include?(&amp;quot;Metaeviewer1&amp;quot;))&lt;br /&gt;
    (3..15).each do |i|&lt;br /&gt;
      @array_expected_values.push(&amp;quot;Metareviewer#{i}&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
This allows expected_fields for the users and reviews to be unpacked as previously it was using wording such as &amp;quot;... userN&amp;quot;&lt;br /&gt;
&lt;br /&gt;
====UI Testing====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Improvement Scope ==&lt;br /&gt;
The above Import as well as export functionalities that have been implemented in due course of the project have a scope for improvement. Imports and exports are functionalities that are used very often used to insert data as well to transfer data stored into the Models to external CSV files. Thus these features can be further tested using rspec tests as well as capybara and cucumber tests so as to make it fool proof. However these tests cannot be made such that they hamper the flexibility of the implementation to achieve a particular functionality.&lt;br /&gt;
Further We can also add options to handle duplicates as well as to filter out exports in other models as well, instead of the ones it is already present. Thus there is a scope of a lot more improvement to make Expertiza more user friendly&lt;/div&gt;</summary>
		<author><name>Rsinha2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=103637</id>
		<title>CSC/ECE 517 Fall 2016/oss E1656</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=103637"/>
		<updated>2016-10-29T02:05:02Z</updated>

		<summary type="html">&lt;p&gt;Rsinha2: /* Improvement Scope */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== E1656. Improve imports ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This page provides a description of the Expertiza based OSS project. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Introduction to Expertiza==&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open source project based on [http://rubyonrails.org/ Ruby on Rails] framework.&lt;br /&gt;
&lt;br /&gt;
==Project Description==&lt;br /&gt;
===About Import===&lt;br /&gt;
In Expertiza, various kinds of data may be imported from [https://en.wikipedia.org/wiki/Comma-separated_values csv files], including users, participants in an assignemnt, topics and teams. When importing data, a corresponding csv file have to be composed. In a csv file, each new line represent a piece of datum and the different fields of a datum are separated by delimiters. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following tasks were implemented in this project:&lt;br /&gt;
&lt;br /&gt;
*When a team with a duplicate name is imported, one of the options is to rename the new team.  There should also be an option to rename an existing team.  See Issue 329.&lt;br /&gt;
*Review assignments (“reviewer mappings”) should be able to be imported, but cannot be imported.  See Issue 711&lt;br /&gt;
*It should be possible to import a list of users who have signed up for topics, but this feature does not yet exist.  See Issue 153.&lt;br /&gt;
*For every kind of data to be imported, Expertiza currently specifies the ordering of fields.  This isn’t very flexible; it may require the user (an instructor) to edit an existing CSV file.  It would be better if, after importing the data, Expertiza showed the data together with dropdowns containing the default field headers.  (This is similar to the way Excel shows data when it is imported from a CSV file.)  Then the user could change the dropdowns to cause a different ordering of fields.  See Issue 110.&lt;br /&gt;
*Create a way to export a list of teams that have signed up for topics, and who are waitlisted for topics, as well as participants in an assignment who have not signed up for topics. Choose the format, but keep it as consistent as possible with the other export formats.  This would help the professor when students ask him for advice on finding teammates.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following tasks were listed as a requirement, but after careful examination it was determined that these tasks were already implemented&lt;br /&gt;
*The simplest fix: If I try to import topics, the import page gives me this message: “The import process expects the following columns:” but it doesn’t say what the columns are (topic number, topic name, category, number of slots, category)!  It used to be in the system; please revert the change to fix this bug.  See Issue 719.&lt;br /&gt;
*When teams are imported in order to insert new members, the members are not inserted.  See Issue 328.&lt;br /&gt;
*It should be possible to leave off the final fields in a line of a CSV file.  These fields are often not specified anyway.  For example, if a password isn’t specified when a new user is created, the system generates a password (see Issue 183).  When importing topics, topic categories are rarely specified.  But if the final field is blank, the import requires the CSV line to end with “, “ (comma and space).  This should be fixed for all imports.&lt;br /&gt;
&lt;br /&gt;
==About Versions Controller==&lt;br /&gt;
Git is a popular version control system, As a part of the project, We have made use of git for the purpose of version control. Our repository is a fork of the original Expertiza repository on which we have collaborated our work. And the project has been submitted through a pull request.&lt;br /&gt;
&lt;br /&gt;
==Handle Duplicates==&lt;br /&gt;
====Current Implementation====&lt;br /&gt;
&lt;br /&gt;
'''When a team with a duplicate name is imported, one of the options is to rename the new team. There should also be an option to rename an existing team. See Issue 329.&lt;br /&gt;
'''The current implementation allows the user to handle duplicates, by the following techniques&lt;br /&gt;
*ignore the new team&lt;br /&gt;
*replace the existing team with the new team&lt;br /&gt;
*insert any new members into the existing team&lt;br /&gt;
*rename the new team and import&lt;br /&gt;
*rename the existing team and import&lt;br /&gt;
&lt;br /&gt;
=====Functionality=====&lt;br /&gt;
&lt;br /&gt;
The above functionalities make it easier to achieve the goal of handling duplicates while importing.&lt;br /&gt;
&lt;br /&gt;
=====Drawbacks and Solutions=====&lt;br /&gt;
&lt;br /&gt;
The above set of functionalities do not allow User to ever rename an existing team, rather force him rename his own team.&lt;br /&gt;
Thus the above requirement provides the necessary freedom to the User by providing him the option to rename an already existing team.&lt;br /&gt;
&lt;br /&gt;
====New Implementation====&lt;br /&gt;
&lt;br /&gt;
The option has been implemented using the update functionality that is already present in rails models, to update existing values of Active Records. To implement this feature we have also made use of the functionality for generating team names, that is already present within the Team model.&lt;br /&gt;
&lt;br /&gt;
A code snippet is given below:&lt;br /&gt;
  if handle_dups == &amp;quot;renameOldTeam&amp;quot; # rename: rename new team&lt;br /&gt;
       if teamtype.is_a?(CourseTeam)&lt;br /&gt;
         CourseTeam.update(team.id, :name =&amp;gt; self.generate_team_name(Course.find(id).name))&lt;br /&gt;
         return name&lt;br /&gt;
       elsif teamtype.is_a?(AssignmentTeam)&lt;br /&gt;
         AssignmentTeam.update(team.id, :name =&amp;gt; self.generate_team_name(Assignment.find(id).name))&lt;br /&gt;
         return name&lt;br /&gt;
       end&lt;br /&gt;
     end&lt;br /&gt;
&lt;br /&gt;
====UI Testing====&lt;br /&gt;
The Above feature has been tested from the UI using the both course Teams and Assignment Teams, where new teams were added with conflicting names and the rename existing team option was selected, which lead lead to the desired behavior, that is the team that was extant was renamed and new team was imported with the same name as that specified in the CSV file&lt;br /&gt;
&lt;br /&gt;
The feature can be tested from Add teams option in manage assignments. From where one can import teams and choose the required feature&lt;br /&gt;
&lt;br /&gt;
==Export Assignment Participants==&lt;br /&gt;
===Current Implementation===&lt;br /&gt;
Current Implementation just allows users to Export the set of all Assignment Participants, of a given assignment. It doesn't allow any further filtering.&lt;br /&gt;
&lt;br /&gt;
===Functionality===&lt;br /&gt;
The current functionality is very rigid and doesn't allow the user to know any more than the set of assignment Participants, which is also a major drawback&lt;br /&gt;
&lt;br /&gt;
===New Implementation===&lt;br /&gt;
The new implementation allows user to export Assignment Participants in four ways.&lt;br /&gt;
* List of All Users mapped with team number and topic name who have signed up for an assignment topic&lt;br /&gt;
* List of All Users mapped with team number and topic name who are wait-listed for an assignment topic&lt;br /&gt;
* List of All Participants who haven't yet signed up for a topic and haven't formed teams yet&lt;br /&gt;
* List of All Participants&lt;br /&gt;
&lt;br /&gt;
The functionality is present as a set of Radio buttons, which is checked by default to the fourth option that is to export all Participants. However that can be changed according to requirement.&lt;br /&gt;
&lt;br /&gt;
The above has been implemented by creating a partial for the view to add the radio button. Further and If else bock has been used in the model, to identify the option selected and accordingly, on the required set of Rows are pushed to the csv file. To know whether a User has signed up or not for a topic, The SignedUpTeam model is used and to find if the team is wait listed or not, the is_waitlisted boolean value id used to determine if the team is wait listed or not.&lt;br /&gt;
&lt;br /&gt;
A small Code snippet describing how one of these option was achieved is given below:&lt;br /&gt;
  if options[&amp;quot;participant_type&amp;quot;] == &amp;quot;signed&amp;quot;&lt;br /&gt;
         Team.where(:parent_id=&amp;gt; parent_id).find_each do |team|&lt;br /&gt;
           TeamsUser.where(:team_id=&amp;gt; team.id).find_each do |team_user|&lt;br /&gt;
             user = User.find(team_user.user_id)&lt;br /&gt;
             if SignedUpTeam.where( :team_id =&amp;gt; team.id).where(:is_waitlisted =&amp;gt; [false, nil,&amp;quot; &amp;quot;, &amp;quot;&amp;quot;]).present?&lt;br /&gt;
               assignemnt_team = SignedUpTeam.where( :team_id =&amp;gt; team.id).where(:is_waitlisted =&amp;gt; [false, nil,&amp;quot; &amp;quot;, &amp;quot;&amp;quot;]).first&lt;br /&gt;
               topic = SignUpTopic.find(assignemnt_team.topic_id)&lt;br /&gt;
             csv &amp;lt;&amp;lt; [&lt;br /&gt;
               user.name,&lt;br /&gt;
               user.fullname,&lt;br /&gt;
               user.email,&lt;br /&gt;
               user.role.name,&lt;br /&gt;
               user.parent.name,&lt;br /&gt;
               user.email_on_submission,&lt;br /&gt;
               user.email_on_review,&lt;br /&gt;
               user.email_on_review_of_review,&lt;br /&gt;
               team.id,&lt;br /&gt;
               topic.topic_name,&lt;br /&gt;
               &amp;quot;handle&amp;quot;&lt;br /&gt;
             ]&lt;br /&gt;
             end&lt;br /&gt;
           end&lt;br /&gt;
         end&lt;br /&gt;
&lt;br /&gt;
====UI Testing====&lt;br /&gt;
UI testing for the above was done by exporting Assignment Teams for a given assignment using all the above options individually and checking if the result actually matched what was expected. Example 'all' should export all the participants listed withing the assignment. 'Signed Up Team' gives all the participants who have signed up mapped to their teams and respective topics.&lt;br /&gt;
If you are signed in as Instructor:&lt;br /&gt;
Feature can be tested by clicking on add participants button in manage assignments and then clicking on export course participants at the bottom of the page. And then following the applicable option for testing the respective features described above&lt;br /&gt;
&lt;br /&gt;
==Ordering of imported fields==&lt;br /&gt;
====Current Implementation====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Functionality=====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Drawbacks and Solutions=====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====New Implementation====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====UI Testing====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Improvement Scope ==&lt;br /&gt;
The above Import as well as export functionalities that have been implemented in due course of the project have a scope for improvement. Imports and exports are functionalities that are used very often used to insert data as well to transfer data stored into the Models to external CSV files. Thus these features can be further tested using rspec tests as well as capybara and cucumber tests so as to make it fool proof. However these tests cannot be made such that they hamper the flexibility of the implementation to achieve a particular functionality.&lt;br /&gt;
Further We can also add options to handle duplicates as well as to filter out exports in other models as well, instead of the ones it is already present. Thus there is a scope of a lot more improvement to make Expertiza more user friendly&lt;br /&gt;
&lt;br /&gt;
==References==&lt;/div&gt;</summary>
		<author><name>Rsinha2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=103125</id>
		<title>CSC/ECE 517 Fall 2016/oss E1656</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=103125"/>
		<updated>2016-10-28T21:52:48Z</updated>

		<summary type="html">&lt;p&gt;Rsinha2: /* UI Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1656. Improve imports==&lt;br /&gt;
&lt;br /&gt;
This page provides a description of the Expertiza based OSS project. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Introduction to Expertiza==&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open source project based on [http://rubyonrails.org/ Ruby on Rails] framework.&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
The following tasks were implmeted in this project:&lt;br /&gt;
&lt;br /&gt;
*When a team with a duplicate name is imported, one of the options is to rename the new team.  There should also be an option to rename an existing team.  See Issue 329.&lt;br /&gt;
*Review assignments (“reviewer mappings”) should be able to be imported, but cannot be imported.  See Issue 711&lt;br /&gt;
*It should be possible to import a list of users who have signed up for topics, but this feature does not yet exist.  See Issue 153.&lt;br /&gt;
*For every kind of data to be imported, Expertiza currently specifies the ordering of fields.  This isn’t very flexible; it may require the user (an instructor) to edit an existing CSV file.  It would be better if, after importing the data, Expertiza showed the data together with dropdowns containing the default field headers.  (This is similar to the way Excel shows data when it is imported from a CSV file.)  Then the user could change the dropdowns to cause a different ordering of fields.  See Issue 110.&lt;br /&gt;
*Create a way to export a list of teams that have signed up for topics, and who are waitlisted for topics, as well as participants in an assignment who have not signed up for topics. Choose the format, but keep it as consistent as possible with the other export formats.  This would help the professor when students ask him for advice on finding teammates.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following tasks were listed as a requirement, but after careful examination it was determined that these tasks were already implemented&lt;br /&gt;
*The simplest fix: If I try to import topics, the import page gives me this message: “The import process expects the following columns:” but it doesn’t say what the columns are (topic number, topic name, category, number of slots, category)!  It used to be in the system; please revert the change to fix this bug.  See Issue 719.&lt;br /&gt;
*When teams are imported in order to insert new members, the members are not inserted.  See Issue 328.&lt;br /&gt;
*It should be possible to leave off the final fields in a line of a CSV file.  These fields are often not specified anyway.  For example, if a password isn’t specified when a new user is created, the system generates a password (see Issue 183).  When importing topics, topic categories are rarely specified.  But if the final field is blank, the import requires the CSV line to end with “, “ (comma and space).  This should be fixed for all imports.&lt;br /&gt;
&lt;br /&gt;
==About Versions Controller==&lt;br /&gt;
Git is a popular version control system, As a part of the project, We have made use of git for the purpose of version control. Our repository is a fork of the original Expertiza repository on which we have collaborated our work. And the project has been submitted through a pull request.&lt;br /&gt;
&lt;br /&gt;
==Handle Duplicates==&lt;br /&gt;
====Current Implementation====&lt;br /&gt;
&lt;br /&gt;
'''When a team with a duplicate name is imported, one of the options is to rename the new team. There should also be an option to rename an existing team. See Issue 329.&lt;br /&gt;
'''The current implementation allows the user to handle duplicates, by the following techniques&lt;br /&gt;
*ignore the new team&lt;br /&gt;
*replace the existing team with the new team&lt;br /&gt;
*insert any new members into the existing team&lt;br /&gt;
*rename the new team and import&lt;br /&gt;
*rename the existing team and import&lt;br /&gt;
&lt;br /&gt;
=====Functionality=====&lt;br /&gt;
&lt;br /&gt;
The above functionalities make it easier to achieve the goal of handling duplicates while importing.&lt;br /&gt;
&lt;br /&gt;
=====Drawbacks and Solutions=====&lt;br /&gt;
&lt;br /&gt;
The above set of functionalities do not allow User to ever rename an existing team, rather force him rename his own team.&lt;br /&gt;
Thus the above requirement provides the necessary freedom to the User by providing him the option to rename an already existing team.&lt;br /&gt;
&lt;br /&gt;
====New Implementation====&lt;br /&gt;
&lt;br /&gt;
The option has been implemented using the update functionality that is already present in rails models, to update existing values of Active Records. To implement this feature we have also made use of the functionality for generating team names, that is already present within the Team model.&lt;br /&gt;
&lt;br /&gt;
A code snippet is given below:&lt;br /&gt;
  if handle_dups == &amp;quot;renameOldTeam&amp;quot; # rename: rename new team&lt;br /&gt;
       if teamtype.is_a?(CourseTeam)&lt;br /&gt;
         CourseTeam.update(team.id, :name =&amp;gt; self.generate_team_name(Course.find(id).name))&lt;br /&gt;
         return name&lt;br /&gt;
       elsif teamtype.is_a?(AssignmentTeam)&lt;br /&gt;
         AssignmentTeam.update(team.id, :name =&amp;gt; self.generate_team_name(Assignment.find(id).name))&lt;br /&gt;
         return name&lt;br /&gt;
       end&lt;br /&gt;
     end&lt;br /&gt;
&lt;br /&gt;
====UI Testing====&lt;br /&gt;
The Above feature has been tested from the UI using the both course Teams and Assignment Teams, where new teams were added with conflicting names and the rename existing team option was selected, which lead lead to the desired behavior, that is the team that was extant was renamed and new team was imported with the same name as that specified in the CSV file&lt;br /&gt;
&lt;br /&gt;
The feature can be tested from Add teams option in manage assignments. From where one can import teams and choose the required feature&lt;br /&gt;
&lt;br /&gt;
==Export Assignment Participants==&lt;br /&gt;
===Current Implementation===&lt;br /&gt;
Current Implementation just allows users to Export the set of all Assignment Participants, of a given assignment. It doesn't allow any further filtering.&lt;br /&gt;
&lt;br /&gt;
===Functionality===&lt;br /&gt;
The current functionality is very rigid and doesn't allow the user to know any more than the set of assignment Participants, which is also a major drawback&lt;br /&gt;
&lt;br /&gt;
===New Implementation===&lt;br /&gt;
The new implementation allows user to export Assignment Participants in four ways.&lt;br /&gt;
* List of All Users mapped with team number and topic name who have signed up for an assignment topic&lt;br /&gt;
* List of All Users mapped with team number and topic name who are wait-listed for an assignment topic&lt;br /&gt;
* List of All Participants who haven't yet signed up for a topic and haven't formed teams yet&lt;br /&gt;
* List of All Participants&lt;br /&gt;
&lt;br /&gt;
The functionality is present as a set of Radio buttons, which is checked by default to the fourth option that is to export all Participants. However that can be changed according to requirement.&lt;br /&gt;
&lt;br /&gt;
The above has been implemented by creating a partial for the view to add the radio button. Further and If else bock has been used in the model, to identify the option selected and accordingly, on the required set of Rows are pushed to the csv file. To know whether a User has signed up or not for a topic, The SignedUpTeam model is used and to find if the team is wait listed or not, the is_waitlisted boolean value id used to determine if the team is wait listed or not.&lt;br /&gt;
&lt;br /&gt;
A small Code snippet describing how one of these option was achieved is given below:&lt;br /&gt;
  if options[&amp;quot;participant_type&amp;quot;] == &amp;quot;signed&amp;quot;&lt;br /&gt;
         Team.where(:parent_id=&amp;gt; parent_id).find_each do |team|&lt;br /&gt;
           TeamsUser.where(:team_id=&amp;gt; team.id).find_each do |team_user|&lt;br /&gt;
             user = User.find(team_user.user_id)&lt;br /&gt;
             if SignedUpTeam.where( :team_id =&amp;gt; team.id).where(:is_waitlisted =&amp;gt; [false, nil,&amp;quot; &amp;quot;, &amp;quot;&amp;quot;]).present?&lt;br /&gt;
               assignemnt_team = SignedUpTeam.where( :team_id =&amp;gt; team.id).where(:is_waitlisted =&amp;gt; [false, nil,&amp;quot; &amp;quot;, &amp;quot;&amp;quot;]).first&lt;br /&gt;
               topic = SignUpTopic.find(assignemnt_team.topic_id)&lt;br /&gt;
             csv &amp;lt;&amp;lt; [&lt;br /&gt;
               user.name,&lt;br /&gt;
               user.fullname,&lt;br /&gt;
               user.email,&lt;br /&gt;
               user.role.name,&lt;br /&gt;
               user.parent.name,&lt;br /&gt;
               user.email_on_submission,&lt;br /&gt;
               user.email_on_review,&lt;br /&gt;
               user.email_on_review_of_review,&lt;br /&gt;
               team.id,&lt;br /&gt;
               topic.topic_name,&lt;br /&gt;
               &amp;quot;handle&amp;quot;&lt;br /&gt;
             ]&lt;br /&gt;
             end&lt;br /&gt;
           end&lt;br /&gt;
         end&lt;br /&gt;
&lt;br /&gt;
====UI Testing====&lt;br /&gt;
UI testing for the above was done by exporting Assignment Teams for a given assignment using all the above options individually and checking if the result actually matched what was expected. Example 'all' should export all the participants listed withing the assignment. 'Signed Up Team' gives all the participants who have signed up mapped to their teams and respective topics.&lt;br /&gt;
If you are signed in as Instructor:&lt;br /&gt;
Feature can be tested by clicking on add participants button in manage assignments and then clicking on export course participants at the bottom of the page. And then following the applicable option for testing the respective features described above&lt;br /&gt;
&lt;br /&gt;
==Ordering of imported fields==&lt;br /&gt;
====Current Implementation====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Functionality=====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Drawbacks and Solutions=====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====New Implementation====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====UI Testing====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Improvement Scope ==&lt;br /&gt;
&lt;br /&gt;
==References==&lt;/div&gt;</summary>
		<author><name>Rsinha2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=103085</id>
		<title>CSC/ECE 517 Fall 2016/oss E1656</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=103085"/>
		<updated>2016-10-28T21:44:27Z</updated>

		<summary type="html">&lt;p&gt;Rsinha2: /* UI Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1656. Improve imports==&lt;br /&gt;
&lt;br /&gt;
This page provides a description of the Expertiza based OSS project. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Introduction to Expertiza==&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open source project based on [http://rubyonrails.org/ Ruby on Rails] framework.&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
The following tasks were implmeted in this project:&lt;br /&gt;
&lt;br /&gt;
*When a team with a duplicate name is imported, one of the options is to rename the new team.  There should also be an option to rename an existing team.  See Issue 329.&lt;br /&gt;
*Review assignments (“reviewer mappings”) should be able to be imported, but cannot be imported.  See Issue 711&lt;br /&gt;
*It should be possible to import a list of users who have signed up for topics, but this feature does not yet exist.  See Issue 153.&lt;br /&gt;
*For every kind of data to be imported, Expertiza currently specifies the ordering of fields.  This isn’t very flexible; it may require the user (an instructor) to edit an existing CSV file.  It would be better if, after importing the data, Expertiza showed the data together with dropdowns containing the default field headers.  (This is similar to the way Excel shows data when it is imported from a CSV file.)  Then the user could change the dropdowns to cause a different ordering of fields.  See Issue 110.&lt;br /&gt;
*Create a way to export a list of teams that have signed up for topics, and who are waitlisted for topics, as well as participants in an assignment who have not signed up for topics. Choose the format, but keep it as consistent as possible with the other export formats.  This would help the professor when students ask him for advice on finding teammates.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following tasks were listed as a requirement, but after careful examination it was determined that these tasks were already implemented&lt;br /&gt;
*The simplest fix: If I try to import topics, the import page gives me this message: “The import process expects the following columns:” but it doesn’t say what the columns are (topic number, topic name, category, number of slots, category)!  It used to be in the system; please revert the change to fix this bug.  See Issue 719.&lt;br /&gt;
*When teams are imported in order to insert new members, the members are not inserted.  See Issue 328.&lt;br /&gt;
*It should be possible to leave off the final fields in a line of a CSV file.  These fields are often not specified anyway.  For example, if a password isn’t specified when a new user is created, the system generates a password (see Issue 183).  When importing topics, topic categories are rarely specified.  But if the final field is blank, the import requires the CSV line to end with “, “ (comma and space).  This should be fixed for all imports.&lt;br /&gt;
&lt;br /&gt;
==About Versions Controller==&lt;br /&gt;
Git is a popular version control system, As a part of the project, We have made use of git for the purpose of version control. Our repository is a fork of the original Expertiza repository on which we have collaborated our work. And the project has been submitted through a pull request.&lt;br /&gt;
&lt;br /&gt;
==Handle Duplicates==&lt;br /&gt;
====Current Implementation====&lt;br /&gt;
&lt;br /&gt;
'''When a team with a duplicate name is imported, one of the options is to rename the new team. There should also be an option to rename an existing team. See Issue 329.&lt;br /&gt;
'''The current implementation allows the user to handle duplicates, by the following techniques&lt;br /&gt;
*ignore the new team&lt;br /&gt;
*replace the existing team with the new team&lt;br /&gt;
*insert any new members into the existing team&lt;br /&gt;
*rename the new team and import&lt;br /&gt;
*rename the existing team and import&lt;br /&gt;
&lt;br /&gt;
=====Functionality=====&lt;br /&gt;
&lt;br /&gt;
The above functionalities make it easier to achieve the goal of handling duplicates while importing.&lt;br /&gt;
&lt;br /&gt;
=====Drawbacks and Solutions=====&lt;br /&gt;
&lt;br /&gt;
The above set of functionalities do not allow User to ever rename an existing team, rather force him rename his own team.&lt;br /&gt;
Thus the above requirement provides the necessary freedom to the User by providing him the option to rename an already existing team.&lt;br /&gt;
&lt;br /&gt;
====New Implementation====&lt;br /&gt;
&lt;br /&gt;
The option has been implemented using the update functionality that is already present in rails models, to update existing values of Active Records. To implement this feature we have also made use of the functionality for generating team names, that is already present within the Team model.&lt;br /&gt;
&lt;br /&gt;
A code snippet is given below:&lt;br /&gt;
  if handle_dups == &amp;quot;renameOldTeam&amp;quot; # rename: rename new team&lt;br /&gt;
       if teamtype.is_a?(CourseTeam)&lt;br /&gt;
         CourseTeam.update(team.id, :name =&amp;gt; self.generate_team_name(Course.find(id).name))&lt;br /&gt;
         return name&lt;br /&gt;
       elsif teamtype.is_a?(AssignmentTeam)&lt;br /&gt;
         AssignmentTeam.update(team.id, :name =&amp;gt; self.generate_team_name(Assignment.find(id).name))&lt;br /&gt;
         return name&lt;br /&gt;
       end&lt;br /&gt;
     end&lt;br /&gt;
&lt;br /&gt;
====UI Testing====&lt;br /&gt;
The Above feature has been tested from the UI using the both course Teams and Assignment Teams, where new teams were added with conflicting names and the rename existing team option was selected, which lead lead to the desired behavior, that is the team that was extant was renamed and new team was imported with the same name as that specified in the CSV file&lt;br /&gt;
&lt;br /&gt;
The feature can be tested from Add teams option in manage assignments. From where one can import teams and choose the required feature&lt;br /&gt;
&lt;br /&gt;
==Export Assignment Participants==&lt;br /&gt;
===Current Implementation===&lt;br /&gt;
Current Implementation just allows users to Export the set of all Assignment Participants, of a given assignment. It doesn't allow any further filtering.&lt;br /&gt;
&lt;br /&gt;
===Functionality===&lt;br /&gt;
The current functionality is very rigid and doesn't allow the user to know any more than the set of assignment Participants, which is also a major drawback&lt;br /&gt;
&lt;br /&gt;
===New Implementation===&lt;br /&gt;
The new implementation allows user to export Assignment Participants in four ways.&lt;br /&gt;
* List of All Users mapped with team number and topic name who have signed up for an assignment topic&lt;br /&gt;
* List of All Users mapped with team number and topic name who are wait-listed for an assignment topic&lt;br /&gt;
* List of All Participants who haven't yet signed up for a topic and haven't formed teams yet&lt;br /&gt;
* List of All Participants&lt;br /&gt;
&lt;br /&gt;
The functionality is present as a set of Radio buttons, which is checked by default to the fourth option that is to export all Participants. However that can be changed according to requirement.&lt;br /&gt;
&lt;br /&gt;
The above has been implemented by creating a partial for the view to add the radio button. Further and If else bock has been used in the model, to identify the option selected and accordingly, on the required set of Rows are pushed to the csv file. To know whether a User has signed up or not for a topic, The SignedUpTeam model is used and to find if the team is wait listed or not, the is_waitlisted boolean value id used to determine if the team is wait listed or not.&lt;br /&gt;
&lt;br /&gt;
A small Code snippet describing how one of these option was achieved is given below:&lt;br /&gt;
  if options[&amp;quot;participant_type&amp;quot;] == &amp;quot;signed&amp;quot;&lt;br /&gt;
         Team.where(:parent_id=&amp;gt; parent_id).find_each do |team|&lt;br /&gt;
           TeamsUser.where(:team_id=&amp;gt; team.id).find_each do |team_user|&lt;br /&gt;
             user = User.find(team_user.user_id)&lt;br /&gt;
             if SignedUpTeam.where( :team_id =&amp;gt; team.id).where(:is_waitlisted =&amp;gt; [false, nil,&amp;quot; &amp;quot;, &amp;quot;&amp;quot;]).present?&lt;br /&gt;
               assignemnt_team = SignedUpTeam.where( :team_id =&amp;gt; team.id).where(:is_waitlisted =&amp;gt; [false, nil,&amp;quot; &amp;quot;, &amp;quot;&amp;quot;]).first&lt;br /&gt;
               topic = SignUpTopic.find(assignemnt_team.topic_id)&lt;br /&gt;
             csv &amp;lt;&amp;lt; [&lt;br /&gt;
               user.name,&lt;br /&gt;
               user.fullname,&lt;br /&gt;
               user.email,&lt;br /&gt;
               user.role.name,&lt;br /&gt;
               user.parent.name,&lt;br /&gt;
               user.email_on_submission,&lt;br /&gt;
               user.email_on_review,&lt;br /&gt;
               user.email_on_review_of_review,&lt;br /&gt;
               team.id,&lt;br /&gt;
               topic.topic_name,&lt;br /&gt;
               &amp;quot;handle&amp;quot;&lt;br /&gt;
             ]&lt;br /&gt;
             end&lt;br /&gt;
           end&lt;br /&gt;
         end&lt;br /&gt;
&lt;br /&gt;
====UI Testing====&lt;br /&gt;
UI testing for the above was done by exporting Assignment Teams for a given assignment using all the above options individually and checking if the result actually matched what was expected. Example 'all' should export all the participants listed withing the assignment. 'Signed Up Team' gives all the participants who have signed up mapped to their teams and respective topics.&lt;br /&gt;
&lt;br /&gt;
==Ordering of imported fields==&lt;br /&gt;
====Current Implementation====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Functionality=====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Drawbacks and Solutions=====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====New Implementation====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====UI Testing====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Improvement Scope ==&lt;br /&gt;
&lt;br /&gt;
==References==&lt;/div&gt;</summary>
		<author><name>Rsinha2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=102731</id>
		<title>CSC/ECE 517 Fall 2016/oss E1656</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=102731"/>
		<updated>2016-10-28T15:53:57Z</updated>

		<summary type="html">&lt;p&gt;Rsinha2: /* Export Assignment Participants */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1656. Improve imports==&lt;br /&gt;
&lt;br /&gt;
This page provides a description of the Expertiza based OSS project. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Introduction to Expertiza==&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open source project based on [http://rubyonrails.org/ Ruby on Rails] framework.&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
The following tasks were listed for this project:&lt;br /&gt;
*The simplest fix: If I try to import topics, the import page gives me this message: “The import process expects the following columns:” but it doesn’t say what the columns are (topic number, topic name, category, number of slots, category)!  It used to be in the system; please revert the change to fix this bug.  See Issue 719.&lt;br /&gt;
*When teams are imported in order to insert new members, the members are not inserted.  See Issue 328.&lt;br /&gt;
*When a team with a duplicate name is imported, one of the options is to rename the new team.  There should also be an option to rename an existing team.  See Issue 329.&lt;br /&gt;
*Review assignments (“reviewer mappings”) should be able to be imported, but cannot be imported.  See Issue 711&lt;br /&gt;
*It should be possible to import a list of users who have signed up for topics, but this feature does not yet exist.  See Issue 153.&lt;br /&gt;
*It should be possible to leave off the final fields in a line of a CSV file.  These fields are often not specified anyway.  For example, if a password isn’t specified when a new user is created, the system generates a password (see Issue 183).  When importing topics, topic categories are rarely specified.  But if the final field is blank, the import requires the CSV line to end with “, “ (comma and space).  This should be fixed for all imports.&lt;br /&gt;
*For every kind of data to be imported, Expertiza currently specifies the ordering of fields.  This isn’t very flexible; it may require the user (an instructor) to edit an existing CSV file.  It would be better if, after importing the data, Expertiza showed the data together with dropdowns containing the default field headers.  (This is similar to the way Excel shows data when it is imported from a CSV file.)  Then the user could change the dropdowns to cause a different ordering of fields.  See Issue 110.&lt;br /&gt;
*Create a way to export a list of teams that have signed up for topics, and who are waitlisted for topics, as well as participants in an assignment who have not signed up for topics. Choose the format, but keep it as consistent as possible with the other export formats.  This would help the professor when students ask him for advice on finding teammates.&lt;br /&gt;
&lt;br /&gt;
==About Versions Controller==&lt;br /&gt;
Git is a popular version control system, As a part of the project, We have made use of git for the purpose of version control. Our repository is a fork of the original Expertiza repository on which we have collaborated our work. And the project has been submitted through a pull request.&lt;br /&gt;
&lt;br /&gt;
==Handle Duplicates==&lt;br /&gt;
====Current Implementation====&lt;br /&gt;
&lt;br /&gt;
'''When a team with a duplicate name is imported, one of the options is to rename the new team. There should also be an option to rename an existing team. See Issue 329.&lt;br /&gt;
'''The current implementation allows the user to handle duplicates, by the following techniques&lt;br /&gt;
*ignore the new team&lt;br /&gt;
*replace the existing team with the new team&lt;br /&gt;
*insert any new members into the existing team&lt;br /&gt;
*rename the new team and import&lt;br /&gt;
*rename the existing team and import&lt;br /&gt;
&lt;br /&gt;
=====Functionality=====&lt;br /&gt;
&lt;br /&gt;
The above functionalities make it easier to achieve the goal of handling duplicates while importing.&lt;br /&gt;
&lt;br /&gt;
=====Drawbacks and Solutions=====&lt;br /&gt;
&lt;br /&gt;
The above set of functionalities do not allow User to ever rename an existing team, rather force him rename his own team.&lt;br /&gt;
Thus the above requirement provides the necessary freedom to the User by providing him the option to rename an already existing team.&lt;br /&gt;
&lt;br /&gt;
====New Implementation====&lt;br /&gt;
&lt;br /&gt;
The option has been implemented using the update functionality that is already present in rails models, to update existing values of Active Records. To implement this feature we have also made use of the functionality for generating team names, that is already present within the Team model.&lt;br /&gt;
&lt;br /&gt;
A code snippet is given below:&lt;br /&gt;
  if handle_dups == &amp;quot;renameOldTeam&amp;quot; # rename: rename new team&lt;br /&gt;
       if teamtype.is_a?(CourseTeam)&lt;br /&gt;
         CourseTeam.update(team.id, :name =&amp;gt; self.generate_team_name(Course.find(id).name))&lt;br /&gt;
         return name&lt;br /&gt;
       elsif teamtype.is_a?(AssignmentTeam)&lt;br /&gt;
         AssignmentTeam.update(team.id, :name =&amp;gt; self.generate_team_name(Assignment.find(id).name))&lt;br /&gt;
         return name&lt;br /&gt;
       end&lt;br /&gt;
     end&lt;br /&gt;
&lt;br /&gt;
====UI Testing====&lt;br /&gt;
The Above feature has been tested from the UI using the both course Teams and Assignment Teams, where new teams were added with conflicting names and the rename existing team option was selected, which lead lead to the desired behavior, that is the team that was extant was renamed and new team was imported with the same name as that specified in the CSV file&lt;br /&gt;
&lt;br /&gt;
==Export Assignment Participants==&lt;br /&gt;
===Current Implementation===&lt;br /&gt;
Current Implementation just allows users to Export the set of all Assignment Participants, of a given assignment. It doesn't allow any further filtering.&lt;br /&gt;
&lt;br /&gt;
===Functionality===&lt;br /&gt;
The current functionality is very rigid and doesn't allow the user to know any more than the set of assignment Participants, which is also a major drawback&lt;br /&gt;
&lt;br /&gt;
===New Implementation===&lt;br /&gt;
The new implementation allows user to export Assignment Participants in four ways.&lt;br /&gt;
* List of All Users mapped with team number and topic name who have signed up for an assignment topic&lt;br /&gt;
* List of All Users mapped with team number and topic name who are wait-listed for an assignment topic&lt;br /&gt;
* List of All Participants who haven't yet signed up for a topic and haven't formed teams yet&lt;br /&gt;
* List of All Participants&lt;br /&gt;
&lt;br /&gt;
The functionality is present as a set of Radio buttons, which is checked by default to the fourth option that is to export all Participants. However that can be changed according to requirement.&lt;br /&gt;
&lt;br /&gt;
The above has been implemented by creating a partial for the view to add the radio button. Further and If else bock has been used in the model, to identify the option selected and accordingly, on the required set of Rows are pushed to the csv file. To know whether a User has signed up or not for a topic, The SignedUpTeam model is used and to find if the team is wait listed or not, the is_waitlisted boolean value id used to determine if the team is wait listed or not.&lt;br /&gt;
&lt;br /&gt;
A small Code snippet describing how one of these option was achieved is given below:&lt;br /&gt;
  if options[&amp;quot;participant_type&amp;quot;] == &amp;quot;signed&amp;quot;&lt;br /&gt;
         Team.where(:parent_id=&amp;gt; parent_id).find_each do |team|&lt;br /&gt;
           TeamsUser.where(:team_id=&amp;gt; team.id).find_each do |team_user|&lt;br /&gt;
             user = User.find(team_user.user_id)&lt;br /&gt;
             if SignedUpTeam.where( :team_id =&amp;gt; team.id).where(:is_waitlisted =&amp;gt; [false, nil,&amp;quot; &amp;quot;, &amp;quot;&amp;quot;]).present?&lt;br /&gt;
               assignemnt_team = SignedUpTeam.where( :team_id =&amp;gt; team.id).where(:is_waitlisted =&amp;gt; [false, nil,&amp;quot; &amp;quot;, &amp;quot;&amp;quot;]).first&lt;br /&gt;
               topic = SignUpTopic.find(assignemnt_team.topic_id)&lt;br /&gt;
             csv &amp;lt;&amp;lt; [&lt;br /&gt;
               user.name,&lt;br /&gt;
               user.fullname,&lt;br /&gt;
               user.email,&lt;br /&gt;
               user.role.name,&lt;br /&gt;
               user.parent.name,&lt;br /&gt;
               user.email_on_submission,&lt;br /&gt;
               user.email_on_review,&lt;br /&gt;
               user.email_on_review_of_review,&lt;br /&gt;
               team.id,&lt;br /&gt;
               topic.topic_name,&lt;br /&gt;
               &amp;quot;handle&amp;quot;&lt;br /&gt;
             ]&lt;br /&gt;
             end&lt;br /&gt;
           end&lt;br /&gt;
         end&lt;br /&gt;
&lt;br /&gt;
====UI Testing====&lt;br /&gt;
UI testing for the above was done by exporting Assignment Teams for a given assignment using all the above options individually and checking if the result actually matched what was expected. Example 'all' should export all the participants listed withing the assignment. 'Signed Up Team' gives all the participants who have signed up mapped to their teams and respective topics.&lt;br /&gt;
&lt;br /&gt;
==Code improvements==&lt;br /&gt;
&lt;br /&gt;
==Testing ==&lt;br /&gt;
===Rspec testing===&lt;br /&gt;
===UI testing===&lt;br /&gt;
&lt;br /&gt;
==References==&lt;/div&gt;</summary>
		<author><name>Rsinha2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=102727</id>
		<title>CSC/ECE 517 Fall 2016/oss E1656</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=102727"/>
		<updated>2016-10-28T15:39:58Z</updated>

		<summary type="html">&lt;p&gt;Rsinha2: /* Handle Duplicates */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1656. Improve imports==&lt;br /&gt;
&lt;br /&gt;
This page provides a description of the Expertiza based OSS project. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Introduction to Expertiza==&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open source project based on [http://rubyonrails.org/ Ruby on Rails] framework.&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
The following tasks were listed for this project:&lt;br /&gt;
*The simplest fix: If I try to import topics, the import page gives me this message: “The import process expects the following columns:” but it doesn’t say what the columns are (topic number, topic name, category, number of slots, category)!  It used to be in the system; please revert the change to fix this bug.  See Issue 719.&lt;br /&gt;
*When teams are imported in order to insert new members, the members are not inserted.  See Issue 328.&lt;br /&gt;
*When a team with a duplicate name is imported, one of the options is to rename the new team.  There should also be an option to rename an existing team.  See Issue 329.&lt;br /&gt;
*Review assignments (“reviewer mappings”) should be able to be imported, but cannot be imported.  See Issue 711&lt;br /&gt;
*It should be possible to import a list of users who have signed up for topics, but this feature does not yet exist.  See Issue 153.&lt;br /&gt;
*It should be possible to leave off the final fields in a line of a CSV file.  These fields are often not specified anyway.  For example, if a password isn’t specified when a new user is created, the system generates a password (see Issue 183).  When importing topics, topic categories are rarely specified.  But if the final field is blank, the import requires the CSV line to end with “, “ (comma and space).  This should be fixed for all imports.&lt;br /&gt;
*For every kind of data to be imported, Expertiza currently specifies the ordering of fields.  This isn’t very flexible; it may require the user (an instructor) to edit an existing CSV file.  It would be better if, after importing the data, Expertiza showed the data together with dropdowns containing the default field headers.  (This is similar to the way Excel shows data when it is imported from a CSV file.)  Then the user could change the dropdowns to cause a different ordering of fields.  See Issue 110.&lt;br /&gt;
*Create a way to export a list of teams that have signed up for topics, and who are waitlisted for topics, as well as participants in an assignment who have not signed up for topics. Choose the format, but keep it as consistent as possible with the other export formats.  This would help the professor when students ask him for advice on finding teammates.&lt;br /&gt;
&lt;br /&gt;
==About Versions Controller==&lt;br /&gt;
Git is a popular version control system, As a part of the project, We have made use of git for the purpose of version control. Our repository is a fork of the original Expertiza repository on which we have collaborated our work. And the project has been submitted through a pull request.&lt;br /&gt;
&lt;br /&gt;
==Handle Duplicates==&lt;br /&gt;
====Current Implementation====&lt;br /&gt;
&lt;br /&gt;
'''When a team with a duplicate name is imported, one of the options is to rename the new team. There should also be an option to rename an existing team. See Issue 329.&lt;br /&gt;
'''The current implementation allows the user to handle duplicates, by the following techniques&lt;br /&gt;
*ignore the new team&lt;br /&gt;
*replace the existing team with the new team&lt;br /&gt;
*insert any new members into the existing team&lt;br /&gt;
*rename the new team and import&lt;br /&gt;
*rename the existing team and import&lt;br /&gt;
&lt;br /&gt;
=====Functionality=====&lt;br /&gt;
&lt;br /&gt;
The above functionalities make it easier to achieve the goal of handling duplicates while importing.&lt;br /&gt;
&lt;br /&gt;
=====Drawbacks and Solutions=====&lt;br /&gt;
&lt;br /&gt;
The above set of functionalities do not allow User to ever rename an existing team, rather force him rename his own team.&lt;br /&gt;
Thus the above requirement provides the necessary freedom to the User by providing him the option to rename an already existing team.&lt;br /&gt;
&lt;br /&gt;
====New Implementation====&lt;br /&gt;
&lt;br /&gt;
The option has been implemented using the update functionality that is already present in rails models, to update existing values of Active Records. To implement this feature we have also made use of the functionality for generating team names, that is already present within the Team model.&lt;br /&gt;
&lt;br /&gt;
A code snippet is given below:&lt;br /&gt;
  if handle_dups == &amp;quot;renameOldTeam&amp;quot; # rename: rename new team&lt;br /&gt;
       if teamtype.is_a?(CourseTeam)&lt;br /&gt;
         CourseTeam.update(team.id, :name =&amp;gt; self.generate_team_name(Course.find(id).name))&lt;br /&gt;
         return name&lt;br /&gt;
       elsif teamtype.is_a?(AssignmentTeam)&lt;br /&gt;
         AssignmentTeam.update(team.id, :name =&amp;gt; self.generate_team_name(Assignment.find(id).name))&lt;br /&gt;
         return name&lt;br /&gt;
       end&lt;br /&gt;
     end&lt;br /&gt;
&lt;br /&gt;
====UI Testing====&lt;br /&gt;
The Above feature has been tested from the UI using the both course Teams and Assignment Teams, where new teams were added with conflicting names and the rename existing team option was selected, which lead lead to the desired behavior, that is the team that was extant was renamed and new team was imported with the same name as that specified in the CSV file&lt;br /&gt;
&lt;br /&gt;
==Export Assignment Participants==&lt;br /&gt;
===Current Implementation===&lt;br /&gt;
Current Implementation just allows users to Export the set of all Assignment Participants, of a given assignment. It doesn't allow any further filtering.&lt;br /&gt;
&lt;br /&gt;
===Functionality===&lt;br /&gt;
The current functionality is very rigid and doesn't allow the user to know any more than the set of assignment Participants, which is also a major drawback&lt;br /&gt;
&lt;br /&gt;
===New Implementation===&lt;br /&gt;
The new implementation allows user to export Assignment Participants in four ways.&lt;br /&gt;
* List of All Users mapped with team number and topic name who have signed up for an assignment topic&lt;br /&gt;
* List of All Users mapped with team number and topic name who are wait-listed for an assignment topic&lt;br /&gt;
* List of All Participants who haven't yet signed up for a topic and haven't formed teams yet&lt;br /&gt;
* List of All Participants&lt;br /&gt;
&lt;br /&gt;
The functionality is present as a set of Radio buttons, which is checked by default to the fourth option that is to export all Participants. However that can be changed according to requirement.&lt;br /&gt;
&lt;br /&gt;
The above has been implemented by creating a partial for the view to add the radio button. Further and If else bock has been used in the model, to identify the option selected and accordingly, on the required set of Rows are pushed to the csv file. To know whether a User has signed up or not for a topic, The SignedUpTeam model is used and to find if the team is wait listed or not, the is_waitlisted boolean value id used to determine if the team is wait listed or not.&lt;br /&gt;
&lt;br /&gt;
A small Code snippet describing how one of these option was achieved is given below:&lt;br /&gt;
  if options[&amp;quot;participant_type&amp;quot;] == &amp;quot;signed&amp;quot;&lt;br /&gt;
         Team.where(:parent_id=&amp;gt; parent_id).find_each do |team|&lt;br /&gt;
           TeamsUser.where(:team_id=&amp;gt; team.id).find_each do |team_user|&lt;br /&gt;
             user = User.find(team_user.user_id)&lt;br /&gt;
             if SignedUpTeam.where( :team_id =&amp;gt; team.id).where(:is_waitlisted =&amp;gt; [false, nil,&amp;quot; &amp;quot;, &amp;quot;&amp;quot;]).present?&lt;br /&gt;
               assignemnt_team = SignedUpTeam.where( :team_id =&amp;gt; team.id).where(:is_waitlisted =&amp;gt; [false, nil,&amp;quot; &amp;quot;, &amp;quot;&amp;quot;]).first&lt;br /&gt;
               topic = SignUpTopic.find(assignemnt_team.topic_id)&lt;br /&gt;
             csv &amp;lt;&amp;lt; [&lt;br /&gt;
               user.name,&lt;br /&gt;
               user.fullname,&lt;br /&gt;
               user.email,&lt;br /&gt;
               user.role.name,&lt;br /&gt;
               user.parent.name,&lt;br /&gt;
               user.email_on_submission,&lt;br /&gt;
               user.email_on_review,&lt;br /&gt;
               user.email_on_review_of_review,&lt;br /&gt;
               team.id,&lt;br /&gt;
               topic.topic_name,&lt;br /&gt;
               &amp;quot;handle&amp;quot;&lt;br /&gt;
             ]&lt;br /&gt;
             end&lt;br /&gt;
           end&lt;br /&gt;
         end&lt;br /&gt;
&lt;br /&gt;
==Code improvements==&lt;br /&gt;
&lt;br /&gt;
==Testing ==&lt;br /&gt;
===Rspec testing===&lt;br /&gt;
===UI testing===&lt;br /&gt;
&lt;br /&gt;
==References==&lt;/div&gt;</summary>
		<author><name>Rsinha2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=102723</id>
		<title>CSC/ECE 517 Fall 2016/oss E1656</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=102723"/>
		<updated>2016-10-28T15:09:53Z</updated>

		<summary type="html">&lt;p&gt;Rsinha2: /* New Implementation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1656. Improve imports==&lt;br /&gt;
&lt;br /&gt;
This page provides a description of the Expertiza based OSS project. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Introduction to Expertiza==&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open source project based on [http://rubyonrails.org/ Ruby on Rails] framework.&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
The following tasks were listed for this project:&lt;br /&gt;
*The simplest fix: If I try to import topics, the import page gives me this message: “The import process expects the following columns:” but it doesn’t say what the columns are (topic number, topic name, category, number of slots, category)!  It used to be in the system; please revert the change to fix this bug.  See Issue 719.&lt;br /&gt;
*When teams are imported in order to insert new members, the members are not inserted.  See Issue 328.&lt;br /&gt;
*When a team with a duplicate name is imported, one of the options is to rename the new team.  There should also be an option to rename an existing team.  See Issue 329.&lt;br /&gt;
*Review assignments (“reviewer mappings”) should be able to be imported, but cannot be imported.  See Issue 711&lt;br /&gt;
*It should be possible to import a list of users who have signed up for topics, but this feature does not yet exist.  See Issue 153.&lt;br /&gt;
*It should be possible to leave off the final fields in a line of a CSV file.  These fields are often not specified anyway.  For example, if a password isn’t specified when a new user is created, the system generates a password (see Issue 183).  When importing topics, topic categories are rarely specified.  But if the final field is blank, the import requires the CSV line to end with “, “ (comma and space).  This should be fixed for all imports.&lt;br /&gt;
*For every kind of data to be imported, Expertiza currently specifies the ordering of fields.  This isn’t very flexible; it may require the user (an instructor) to edit an existing CSV file.  It would be better if, after importing the data, Expertiza showed the data together with dropdowns containing the default field headers.  (This is similar to the way Excel shows data when it is imported from a CSV file.)  Then the user could change the dropdowns to cause a different ordering of fields.  See Issue 110.&lt;br /&gt;
*Create a way to export a list of teams that have signed up for topics, and who are waitlisted for topics, as well as participants in an assignment who have not signed up for topics. Choose the format, but keep it as consistent as possible with the other export formats.  This would help the professor when students ask him for advice on finding teammates.&lt;br /&gt;
&lt;br /&gt;
==About Versions Controller==&lt;br /&gt;
Git is a popular version control system, As a part of the project, We have made use of git for the purpose of version control. Our repository is a fork of the original Expertiza repository on which we have collaborated our work. And the project has been submitted through a pull request.&lt;br /&gt;
&lt;br /&gt;
==Handle Duplicates==&lt;br /&gt;
====Current Implementation====&lt;br /&gt;
&lt;br /&gt;
'''When a team with a duplicate name is imported, one of the options is to rename the new team. There should also be an option to rename an existing team. See Issue 329.&lt;br /&gt;
'''The current implementation allows the user to handle duplicates, by the following techniques&lt;br /&gt;
*ignore the new team&lt;br /&gt;
*replace the existing team with the new team&lt;br /&gt;
*insert any new members into the existing team&lt;br /&gt;
*rename the new team and import&lt;br /&gt;
*rename the existing team and import&lt;br /&gt;
&lt;br /&gt;
=====Functionality=====&lt;br /&gt;
&lt;br /&gt;
The above functionalities make it easier to achieve the goal of handling duplicates while importing.&lt;br /&gt;
&lt;br /&gt;
=====Drawbacks and Solutions=====&lt;br /&gt;
&lt;br /&gt;
The above set of functionalities do not allow User to ever rename an existing team, rather force him rename his own team.&lt;br /&gt;
Thus the above requirement provides the necessary freedom to the User by providing him the option to rename an already existing team.&lt;br /&gt;
&lt;br /&gt;
====New Implementation====&lt;br /&gt;
&lt;br /&gt;
The option has been implemented using the update functionality that is already present in rails models, to update existing values of Active Records. To implement this feature we have also made use of the functionality for generating team names, that is already present within the Team model.&lt;br /&gt;
&lt;br /&gt;
A code snippet is given below:&lt;br /&gt;
  if handle_dups == &amp;quot;renameOldTeam&amp;quot; # rename: rename new team&lt;br /&gt;
       if teamtype.is_a?(CourseTeam)&lt;br /&gt;
         CourseTeam.update(team.id, :name =&amp;gt; self.generate_team_name(Course.find(id).name))&lt;br /&gt;
         return name&lt;br /&gt;
       elsif teamtype.is_a?(AssignmentTeam)&lt;br /&gt;
         AssignmentTeam.update(team.id, :name =&amp;gt; self.generate_team_name(Assignment.find(id).name))&lt;br /&gt;
         return name&lt;br /&gt;
       end&lt;br /&gt;
     end&lt;br /&gt;
&lt;br /&gt;
==Export Assignment Participants==&lt;br /&gt;
===Current Implementation===&lt;br /&gt;
Current Implementation just allows users to Export the set of all Assignment Participants, of a given assignment. It doesn't allow any further filtering.&lt;br /&gt;
&lt;br /&gt;
===Functionality===&lt;br /&gt;
The current functionality is very rigid and doesn't allow the user to know any more than the set of assignment Participants, which is also a major drawback&lt;br /&gt;
&lt;br /&gt;
===New Implementation===&lt;br /&gt;
The new implementation allows user to export Assignment Participants in four ways.&lt;br /&gt;
* List of All Users mapped with team number and topic name who have signed up for an assignment topic&lt;br /&gt;
* List of All Users mapped with team number and topic name who are wait-listed for an assignment topic&lt;br /&gt;
* List of All Participants who haven't yet signed up for a topic and haven't formed teams yet&lt;br /&gt;
* List of All Participants&lt;br /&gt;
&lt;br /&gt;
The functionality is present as a set of Radio buttons, which is checked by default to the fourth option that is to export all Participants. However that can be changed according to requirement.&lt;br /&gt;
&lt;br /&gt;
The above has been implemented by creating a partial for the view to add the radio button. Further and If else bock has been used in the model, to identify the option selected and accordingly, on the required set of Rows are pushed to the csv file. To know whether a User has signed up or not for a topic, The SignedUpTeam model is used and to find if the team is wait listed or not, the is_waitlisted boolean value id used to determine if the team is wait listed or not.&lt;br /&gt;
&lt;br /&gt;
A small Code snippet describing how one of these option was achieved is given below:&lt;br /&gt;
  if options[&amp;quot;participant_type&amp;quot;] == &amp;quot;signed&amp;quot;&lt;br /&gt;
         Team.where(:parent_id=&amp;gt; parent_id).find_each do |team|&lt;br /&gt;
           TeamsUser.where(:team_id=&amp;gt; team.id).find_each do |team_user|&lt;br /&gt;
             user = User.find(team_user.user_id)&lt;br /&gt;
             if SignedUpTeam.where( :team_id =&amp;gt; team.id).where(:is_waitlisted =&amp;gt; [false, nil,&amp;quot; &amp;quot;, &amp;quot;&amp;quot;]).present?&lt;br /&gt;
               assignemnt_team = SignedUpTeam.where( :team_id =&amp;gt; team.id).where(:is_waitlisted =&amp;gt; [false, nil,&amp;quot; &amp;quot;, &amp;quot;&amp;quot;]).first&lt;br /&gt;
               topic = SignUpTopic.find(assignemnt_team.topic_id)&lt;br /&gt;
             csv &amp;lt;&amp;lt; [&lt;br /&gt;
               user.name,&lt;br /&gt;
               user.fullname,&lt;br /&gt;
               user.email,&lt;br /&gt;
               user.role.name,&lt;br /&gt;
               user.parent.name,&lt;br /&gt;
               user.email_on_submission,&lt;br /&gt;
               user.email_on_review,&lt;br /&gt;
               user.email_on_review_of_review,&lt;br /&gt;
               team.id,&lt;br /&gt;
               topic.topic_name,&lt;br /&gt;
               &amp;quot;handle&amp;quot;&lt;br /&gt;
             ]&lt;br /&gt;
             end&lt;br /&gt;
           end&lt;br /&gt;
         end&lt;br /&gt;
&lt;br /&gt;
==Code improvements==&lt;br /&gt;
&lt;br /&gt;
==Testing ==&lt;br /&gt;
===Rspec testing===&lt;br /&gt;
===UI testing===&lt;br /&gt;
&lt;br /&gt;
==References==&lt;/div&gt;</summary>
		<author><name>Rsinha2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=102689</id>
		<title>CSC/ECE 517 Fall 2016/oss E1656</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=102689"/>
		<updated>2016-10-28T05:00:24Z</updated>

		<summary type="html">&lt;p&gt;Rsinha2: /* About Versions Controller */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1656. Improve imports==&lt;br /&gt;
&lt;br /&gt;
This page provides a description of the Expertiza based OSS project. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Introduction to Expertiza==&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open source project based on [http://rubyonrails.org/ Ruby on Rails] framework.&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
The following tasks were listed for this project:&lt;br /&gt;
*The simplest fix: If I try to import topics, the import page gives me this message: “The import process expects the following columns:” but it doesn’t say what the columns are (topic number, topic name, category, number of slots, category)!  It used to be in the system; please revert the change to fix this bug.  See Issue 719.&lt;br /&gt;
*When teams are imported in order to insert new members, the members are not inserted.  See Issue 328.&lt;br /&gt;
*When a team with a duplicate name is imported, one of the options is to rename the new team.  There should also be an option to rename an existing team.  See Issue 329.&lt;br /&gt;
*Review assignments (“reviewer mappings”) should be able to be imported, but cannot be imported.  See Issue 711&lt;br /&gt;
*It should be possible to import a list of users who have signed up for topics, but this feature does not yet exist.  See Issue 153.&lt;br /&gt;
*It should be possible to leave off the final fields in a line of a CSV file.  These fields are often not specified anyway.  For example, if a password isn’t specified when a new user is created, the system generates a password (see Issue 183).  When importing topics, topic categories are rarely specified.  But if the final field is blank, the import requires the CSV line to end with “, “ (comma and space).  This should be fixed for all imports.&lt;br /&gt;
*For every kind of data to be imported, Expertiza currently specifies the ordering of fields.  This isn’t very flexible; it may require the user (an instructor) to edit an existing CSV file.  It would be better if, after importing the data, Expertiza showed the data together with dropdowns containing the default field headers.  (This is similar to the way Excel shows data when it is imported from a CSV file.)  Then the user could change the dropdowns to cause a different ordering of fields.  See Issue 110.&lt;br /&gt;
*Create a way to export a list of teams that have signed up for topics, and who are waitlisted for topics, as well as participants in an assignment who have not signed up for topics. Choose the format, but keep it as consistent as possible with the other export formats.  This would help the professor when students ask him for advice on finding teammates.&lt;br /&gt;
&lt;br /&gt;
==About Versions Controller==&lt;br /&gt;
Git is a popular version control system, As a part of the project, We have made use of git for the purpose of version control. Our repository is a fork of the original Expertiza repository on which we have collaborated our work. And the project has been submitted through a pull request.&lt;br /&gt;
&lt;br /&gt;
==Handle Duplicates==&lt;br /&gt;
====Current Implementation====&lt;br /&gt;
&lt;br /&gt;
'''When a team with a duplicate name is imported, one of the options is to rename the new team. There should also be an option to rename an existing team. See Issue 329.&lt;br /&gt;
'''The current implementation allows the user to handle duplicates, by the following techniques&lt;br /&gt;
*ignore the new team&lt;br /&gt;
*replace the existing team with the new team&lt;br /&gt;
*insert any new members into the existing team&lt;br /&gt;
*rename the new team and import&lt;br /&gt;
*rename the existing team and import&lt;br /&gt;
&lt;br /&gt;
=====Functionality=====&lt;br /&gt;
&lt;br /&gt;
The above functionalities make it easier to achieve the goal of handling duplicates while importing.&lt;br /&gt;
&lt;br /&gt;
=====Drawbacks and Solutions=====&lt;br /&gt;
&lt;br /&gt;
The above set of functionalities do not allow User to ever rename an existing team, rather force him rename his own team.&lt;br /&gt;
Thus the above requirement provides the necessary freedom to the User by providing him the option to rename an already existing team.&lt;br /&gt;
&lt;br /&gt;
====New Implementation====&lt;br /&gt;
&lt;br /&gt;
The option has been implemented using the update functionality that is already present in rails models, to update existing values of Active Records. To implement this feature we have also made use of the functionality for generating team names, that is already present within the Team model.&lt;br /&gt;
&lt;br /&gt;
A code snippet is given below:&lt;br /&gt;
  if handle_dups == &amp;quot;renameOldTeam&amp;quot; # rename: rename new team&lt;br /&gt;
       if teamtype.is_a?(CourseTeam)&lt;br /&gt;
         CourseTeam.update(team.id, :name =&amp;gt; self.generate_team_name(Course.find(id).name))&lt;br /&gt;
         return name&lt;br /&gt;
       elsif teamtype.is_a?(AssignmentTeam)&lt;br /&gt;
         AssignmentTeam.update(team.id, :name =&amp;gt; self.generate_team_name(Assignment.find(id).name))&lt;br /&gt;
         return name&lt;br /&gt;
       end&lt;br /&gt;
     end&lt;br /&gt;
&lt;br /&gt;
==Export Assignment Participants==&lt;br /&gt;
===Current Implementation===&lt;br /&gt;
Current Implementation just allows users to Export the set of all Assignment Participants, of a given assignment. It doesn't allow any further filtering.&lt;br /&gt;
&lt;br /&gt;
===Functionality===&lt;br /&gt;
The current functionality is very rigid and doesn't allow the user to know any more than the set of assignment Participants, which is also a major drawback&lt;br /&gt;
&lt;br /&gt;
===New Implementation===&lt;br /&gt;
The new implementation allows user to export Assignment Participants in four ways.&lt;br /&gt;
* List of All Users mapped with team number and topic name who have signed up for an assignment topic&lt;br /&gt;
* List of All Users mapped with team number and topic name who are wait-listed for an assignment topic&lt;br /&gt;
* List of All Participants who haven't yet signed up for a topic and haven't formed teams yet&lt;br /&gt;
* List of All Participants&lt;br /&gt;
&lt;br /&gt;
The functionality is present as a set of Radio buttons, which is checked by default to the fourth option that is to export all Participants. However that can be changed according to requirement.&lt;br /&gt;
&lt;br /&gt;
The above has been implemented by creating a partial for the view to add the radio button. Further and If else bock has been used in the model, to identify the option selected and accordingly, on the required set of Rows are pushed to the csv file. To know whether a User has signed up or not for a topic, The SignedUpTeam model is used and to find if the team is wait listed or not, the is_waitlisted boolean value id used to determine if the team is wait listed or not.&lt;br /&gt;
&lt;br /&gt;
==Code improvements==&lt;br /&gt;
&lt;br /&gt;
==Testing ==&lt;br /&gt;
===Rspec testing===&lt;br /&gt;
===UI testing===&lt;br /&gt;
&lt;br /&gt;
==References==&lt;/div&gt;</summary>
		<author><name>Rsinha2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=102682</id>
		<title>CSC/ECE 517 Fall 2016/oss E1656</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=102682"/>
		<updated>2016-10-28T04:56:39Z</updated>

		<summary type="html">&lt;p&gt;Rsinha2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1656. Improve imports==&lt;br /&gt;
&lt;br /&gt;
This page provides a description of the Expertiza based OSS project. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Introduction to Expertiza==&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open source project based on [http://rubyonrails.org/ Ruby on Rails] framework.&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
The following tasks were listed for this project:&lt;br /&gt;
*The simplest fix: If I try to import topics, the import page gives me this message: “The import process expects the following columns:” but it doesn’t say what the columns are (topic number, topic name, category, number of slots, category)!  It used to be in the system; please revert the change to fix this bug.  See Issue 719.&lt;br /&gt;
*When teams are imported in order to insert new members, the members are not inserted.  See Issue 328.&lt;br /&gt;
*When a team with a duplicate name is imported, one of the options is to rename the new team.  There should also be an option to rename an existing team.  See Issue 329.&lt;br /&gt;
*Review assignments (“reviewer mappings”) should be able to be imported, but cannot be imported.  See Issue 711&lt;br /&gt;
*It should be possible to import a list of users who have signed up for topics, but this feature does not yet exist.  See Issue 153.&lt;br /&gt;
*It should be possible to leave off the final fields in a line of a CSV file.  These fields are often not specified anyway.  For example, if a password isn’t specified when a new user is created, the system generates a password (see Issue 183).  When importing topics, topic categories are rarely specified.  But if the final field is blank, the import requires the CSV line to end with “, “ (comma and space).  This should be fixed for all imports.&lt;br /&gt;
*For every kind of data to be imported, Expertiza currently specifies the ordering of fields.  This isn’t very flexible; it may require the user (an instructor) to edit an existing CSV file.  It would be better if, after importing the data, Expertiza showed the data together with dropdowns containing the default field headers.  (This is similar to the way Excel shows data when it is imported from a CSV file.)  Then the user could change the dropdowns to cause a different ordering of fields.  See Issue 110.&lt;br /&gt;
*Create a way to export a list of teams that have signed up for topics, and who are waitlisted for topics, as well as participants in an assignment who have not signed up for topics. Choose the format, but keep it as consistent as possible with the other export formats.  This would help the professor when students ask him for advice on finding teammates.&lt;br /&gt;
&lt;br /&gt;
==About Versions Controller==&lt;br /&gt;
&lt;br /&gt;
==Handle Duplicates==&lt;br /&gt;
====Current Implementation====&lt;br /&gt;
&lt;br /&gt;
'''When a team with a duplicate name is imported, one of the options is to rename the new team. There should also be an option to rename an existing team. See Issue 329.&lt;br /&gt;
'''The current implementation allows the user to handle duplicates, by the following techniques&lt;br /&gt;
*ignore the new team&lt;br /&gt;
*replace the existing team with the new team&lt;br /&gt;
*insert any new members into the existing team&lt;br /&gt;
*rename the new team and import&lt;br /&gt;
*rename the existing team and import&lt;br /&gt;
&lt;br /&gt;
=====Functionality=====&lt;br /&gt;
&lt;br /&gt;
The above functionalities make it easier to achieve the goal of handling duplicates while importing.&lt;br /&gt;
&lt;br /&gt;
=====Drawbacks and Solutions=====&lt;br /&gt;
&lt;br /&gt;
The above set of functionalities do not allow User to ever rename an existing team, rather force him rename his own team.&lt;br /&gt;
Thus the above requirement provides the necessary freedom to the User by providing him the option to rename an already existing team.&lt;br /&gt;
&lt;br /&gt;
====New Implementation====&lt;br /&gt;
&lt;br /&gt;
The option has been implemented using the update functionality that is already present in rails models, to update existing values of Active Records. To implement this feature we have also made use of the functionality for generating team names, that is already present within the Team model.&lt;br /&gt;
&lt;br /&gt;
A code snippet is given below:&lt;br /&gt;
  if handle_dups == &amp;quot;renameOldTeam&amp;quot; # rename: rename new team&lt;br /&gt;
       if teamtype.is_a?(CourseTeam)&lt;br /&gt;
         CourseTeam.update(team.id, :name =&amp;gt; self.generate_team_name(Course.find(id).name))&lt;br /&gt;
         return name&lt;br /&gt;
       elsif teamtype.is_a?(AssignmentTeam)&lt;br /&gt;
         AssignmentTeam.update(team.id, :name =&amp;gt; self.generate_team_name(Assignment.find(id).name))&lt;br /&gt;
         return name&lt;br /&gt;
       end&lt;br /&gt;
     end&lt;br /&gt;
&lt;br /&gt;
==Export Assignment Participants==&lt;br /&gt;
===Current Implementation===&lt;br /&gt;
Current Implementation just allows users to Export the set of all Assignment Participants, of a given assignment. It doesn't allow any further filtering.&lt;br /&gt;
&lt;br /&gt;
===Functionality===&lt;br /&gt;
The current functionality is very rigid and doesn't allow the user to know any more than the set of assignment Participants, which is also a major drawback&lt;br /&gt;
&lt;br /&gt;
===New Implementation===&lt;br /&gt;
The new implementation allows user to export Assignment Participants in four ways.&lt;br /&gt;
* List of All Users mapped with team number and topic name who have signed up for an assignment topic&lt;br /&gt;
* List of All Users mapped with team number and topic name who are wait-listed for an assignment topic&lt;br /&gt;
* List of All Participants who haven't yet signed up for a topic and haven't formed teams yet&lt;br /&gt;
* List of All Participants&lt;br /&gt;
&lt;br /&gt;
The functionality is present as a set of Radio buttons, which is checked by default to the fourth option that is to export all Participants. However that can be changed according to requirement.&lt;br /&gt;
&lt;br /&gt;
The above has been implemented by creating a partial for the view to add the radio button. Further and If else bock has been used in the model, to identify the option selected and accordingly, on the required set of Rows are pushed to the csv file. To know whether a User has signed up or not for a topic, The SignedUpTeam model is used and to find if the team is wait listed or not, the is_waitlisted boolean value id used to determine if the team is wait listed or not.&lt;br /&gt;
&lt;br /&gt;
==Code improvements==&lt;br /&gt;
&lt;br /&gt;
==Testing ==&lt;br /&gt;
===Rspec testing===&lt;br /&gt;
===UI testing===&lt;br /&gt;
&lt;br /&gt;
==References==&lt;/div&gt;</summary>
		<author><name>Rsinha2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=102681</id>
		<title>CSC/ECE 517 Fall 2016/oss E1656</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=102681"/>
		<updated>2016-10-28T04:55:03Z</updated>

		<summary type="html">&lt;p&gt;Rsinha2: /* Handle Duplicates */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1656. Improve imports==&lt;br /&gt;
&lt;br /&gt;
This page provides a description of the Expertiza based OSS project. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Introduction to Expertiza==&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open source project based on [http://rubyonrails.org/ Ruby on Rails] framework.&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
The following tasks were listed for this project:&lt;br /&gt;
*The simplest fix: If I try to import topics, the import page gives me this message: “The import process expects the following columns:” but it doesn’t say what the columns are (topic number, topic name, category, number of slots, category)!  It used to be in the system; please revert the change to fix this bug.  See Issue 719.&lt;br /&gt;
*When teams are imported in order to insert new members, the members are not inserted.  See Issue 328.&lt;br /&gt;
*When a team with a duplicate name is imported, one of the options is to rename the new team.  There should also be an option to rename an existing team.  See Issue 329.&lt;br /&gt;
*Review assignments (“reviewer mappings”) should be able to be imported, but cannot be imported.  See Issue 711&lt;br /&gt;
*It should be possible to import a list of users who have signed up for topics, but this feature does not yet exist.  See Issue 153.&lt;br /&gt;
*It should be possible to leave off the final fields in a line of a CSV file.  These fields are often not specified anyway.  For example, if a password isn’t specified when a new user is created, the system generates a password (see Issue 183).  When importing topics, topic categories are rarely specified.  But if the final field is blank, the import requires the CSV line to end with “, “ (comma and space).  This should be fixed for all imports.&lt;br /&gt;
*For every kind of data to be imported, Expertiza currently specifies the ordering of fields.  This isn’t very flexible; it may require the user (an instructor) to edit an existing CSV file.  It would be better if, after importing the data, Expertiza showed the data together with dropdowns containing the default field headers.  (This is similar to the way Excel shows data when it is imported from a CSV file.)  Then the user could change the dropdowns to cause a different ordering of fields.  See Issue 110.&lt;br /&gt;
*Create a way to export a list of teams that have signed up for topics, and who are waitlisted for topics, as well as participants in an assignment who have not signed up for topics. Choose the format, but keep it as consistent as possible with the other export formats.  This would help the professor when students ask him for advice on finding teammates.&lt;br /&gt;
&lt;br /&gt;
==About Versions Controller==&lt;br /&gt;
&lt;br /&gt;
==Handle Duplicates==&lt;br /&gt;
====Current Implementation====&lt;br /&gt;
&lt;br /&gt;
'''When a team with a duplicate name is imported, one of the options is to rename the new team. There should also be an option to rename an existing team. See Issue 329.&lt;br /&gt;
'''The current implementation allows the user to handle duplicates, by the following techniques&lt;br /&gt;
*ignore the new team&lt;br /&gt;
*replace the existing team with the new team&lt;br /&gt;
*insert any new members into the existing team&lt;br /&gt;
*rename the new team and import&lt;br /&gt;
*rename the existing team and import&lt;br /&gt;
&lt;br /&gt;
=====Functionality=====&lt;br /&gt;
&lt;br /&gt;
The above functionalities make it easier to achieve the goal of handling duplicates while importing.&lt;br /&gt;
&lt;br /&gt;
=====Drawbacks and Solutions=====&lt;br /&gt;
&lt;br /&gt;
The above set of functionalities do not allow User to ever rename an existing team, rather force him rename his own team.&lt;br /&gt;
Thus the above requirement provides the necessary freedom to the User by providing him the option to rename an already existing team.&lt;br /&gt;
&lt;br /&gt;
====New Implementation====&lt;br /&gt;
&lt;br /&gt;
The option has been implemented using the update functionality that is already present in rails models, to update existing values of Active Records. To implement this feature we have also made use of the functionality for generating team names, that is already present within the Team model.&lt;br /&gt;
&lt;br /&gt;
A code snippet is given below:&lt;br /&gt;
  if handle_dups == &amp;quot;renameOldTeam&amp;quot; # rename: rename new team&lt;br /&gt;
       if teamtype.is_a?(CourseTeam)&lt;br /&gt;
         CourseTeam.update(team.id, :name =&amp;gt; self.generate_team_name(Course.find(id).name))&lt;br /&gt;
         return name&lt;br /&gt;
       elsif teamtype.is_a?(AssignmentTeam)&lt;br /&gt;
         AssignmentTeam.update(team.id, :name =&amp;gt; self.generate_team_name(Assignment.find(id).name))&lt;br /&gt;
         return name&lt;br /&gt;
       end&lt;br /&gt;
     end&lt;br /&gt;
&lt;br /&gt;
===Export Assignment Participants===&lt;br /&gt;
====Current Implementation====&lt;br /&gt;
Current Implementation just allows users to Export the set of all Assignment Participants, of a given assignment. It doesn't allow any further filtering.&lt;br /&gt;
&lt;br /&gt;
====Functionality====&lt;br /&gt;
The current functionality is very rigid and doesn't allow the user to know any more than the set of assignment Participants, which is also a major drawback&lt;br /&gt;
&lt;br /&gt;
====New Implementation====&lt;br /&gt;
The new implementation allows user to export Assignment Participants in four ways.&lt;br /&gt;
* List of All Users mapped with team number and topic name who have signed up for an assignment topic&lt;br /&gt;
* List of All Users mapped with team number and topic name who are wait-listed for an assignment topic&lt;br /&gt;
* List of All Participants who haven't yet signed up for a topic and haven't formed teams yet&lt;br /&gt;
* List of All Participants&lt;br /&gt;
&lt;br /&gt;
The functionality is present as a set of Radio buttons, which is checked by default to the fourth option that is to export all Participants. However that can be changed according to requirement.&lt;br /&gt;
&lt;br /&gt;
The above has been implemented by creating a partial for the view to add the radio button. Further and If else bock has been used in the model, to identify the option selected and accordingly, on the required set of Rows are pushed to the csv file. To know whether a User has signed up or not for a topic, The SignedUpTeam model is used and to find if the team is wait listed or not, the is_waitlisted boolean value id used to determine if the team is wait listed or not.&lt;br /&gt;
&lt;br /&gt;
===Code improvements===&lt;br /&gt;
&lt;br /&gt;
===Testing ===&lt;br /&gt;
====Rspec testing====&lt;br /&gt;
====UI testing====&lt;br /&gt;
&lt;br /&gt;
===References===&lt;/div&gt;</summary>
		<author><name>Rsinha2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=102680</id>
		<title>CSC/ECE 517 Fall 2016/oss E1656</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=102680"/>
		<updated>2016-10-28T04:54:48Z</updated>

		<summary type="html">&lt;p&gt;Rsinha2: /* About Versions Controller */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1656. Improve imports==&lt;br /&gt;
&lt;br /&gt;
This page provides a description of the Expertiza based OSS project. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Introduction to Expertiza==&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open source project based on [http://rubyonrails.org/ Ruby on Rails] framework.&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
The following tasks were listed for this project:&lt;br /&gt;
*The simplest fix: If I try to import topics, the import page gives me this message: “The import process expects the following columns:” but it doesn’t say what the columns are (topic number, topic name, category, number of slots, category)!  It used to be in the system; please revert the change to fix this bug.  See Issue 719.&lt;br /&gt;
*When teams are imported in order to insert new members, the members are not inserted.  See Issue 328.&lt;br /&gt;
*When a team with a duplicate name is imported, one of the options is to rename the new team.  There should also be an option to rename an existing team.  See Issue 329.&lt;br /&gt;
*Review assignments (“reviewer mappings”) should be able to be imported, but cannot be imported.  See Issue 711&lt;br /&gt;
*It should be possible to import a list of users who have signed up for topics, but this feature does not yet exist.  See Issue 153.&lt;br /&gt;
*It should be possible to leave off the final fields in a line of a CSV file.  These fields are often not specified anyway.  For example, if a password isn’t specified when a new user is created, the system generates a password (see Issue 183).  When importing topics, topic categories are rarely specified.  But if the final field is blank, the import requires the CSV line to end with “, “ (comma and space).  This should be fixed for all imports.&lt;br /&gt;
*For every kind of data to be imported, Expertiza currently specifies the ordering of fields.  This isn’t very flexible; it may require the user (an instructor) to edit an existing CSV file.  It would be better if, after importing the data, Expertiza showed the data together with dropdowns containing the default field headers.  (This is similar to the way Excel shows data when it is imported from a CSV file.)  Then the user could change the dropdowns to cause a different ordering of fields.  See Issue 110.&lt;br /&gt;
*Create a way to export a list of teams that have signed up for topics, and who are waitlisted for topics, as well as participants in an assignment who have not signed up for topics. Choose the format, but keep it as consistent as possible with the other export formats.  This would help the professor when students ask him for advice on finding teammates.&lt;br /&gt;
&lt;br /&gt;
==About Versions Controller==&lt;br /&gt;
&lt;br /&gt;
===Handle Duplicates===&lt;br /&gt;
====Current Implementation====&lt;br /&gt;
&lt;br /&gt;
'''When a team with a duplicate name is imported, one of the options is to rename the new team. There should also be an option to rename an existing team. See Issue 329.&lt;br /&gt;
'''The current implementation allows the user to handle duplicates, by the following techniques&lt;br /&gt;
*ignore the new team&lt;br /&gt;
*replace the existing team with the new team&lt;br /&gt;
*insert any new members into the existing team&lt;br /&gt;
*rename the new team and import&lt;br /&gt;
*rename the existing team and import&lt;br /&gt;
&lt;br /&gt;
=====Functionality=====&lt;br /&gt;
&lt;br /&gt;
The above functionalities make it easier to achieve the goal of handling duplicates while importing.&lt;br /&gt;
&lt;br /&gt;
=====Drawbacks and Solutions=====&lt;br /&gt;
&lt;br /&gt;
The above set of functionalities do not allow User to ever rename an existing team, rather force him rename his own team.&lt;br /&gt;
Thus the above requirement provides the necessary freedom to the User by providing him the option to rename an already existing team.&lt;br /&gt;
&lt;br /&gt;
====New Implementation====&lt;br /&gt;
&lt;br /&gt;
The option has been implemented using the update functionality that is already present in rails models, to update existing values of Active Records. To implement this feature we have also made use of the functionality for generating team names, that is already present within the Team model.&lt;br /&gt;
&lt;br /&gt;
A code snippet is given below:&lt;br /&gt;
  if handle_dups == &amp;quot;renameOldTeam&amp;quot; # rename: rename new team&lt;br /&gt;
       if teamtype.is_a?(CourseTeam)&lt;br /&gt;
         CourseTeam.update(team.id, :name =&amp;gt; self.generate_team_name(Course.find(id).name))&lt;br /&gt;
         return name&lt;br /&gt;
       elsif teamtype.is_a?(AssignmentTeam)&lt;br /&gt;
         AssignmentTeam.update(team.id, :name =&amp;gt; self.generate_team_name(Assignment.find(id).name))&lt;br /&gt;
         return name&lt;br /&gt;
       end&lt;br /&gt;
     end&lt;br /&gt;
&lt;br /&gt;
===Export Assignment Participants===&lt;br /&gt;
====Current Implementation====&lt;br /&gt;
Current Implementation just allows users to Export the set of all Assignment Participants, of a given assignment. It doesn't allow any further filtering.&lt;br /&gt;
&lt;br /&gt;
====Functionality====&lt;br /&gt;
The current functionality is very rigid and doesn't allow the user to know any more than the set of assignment Participants, which is also a major drawback&lt;br /&gt;
&lt;br /&gt;
====New Implementation====&lt;br /&gt;
The new implementation allows user to export Assignment Participants in four ways.&lt;br /&gt;
* List of All Users mapped with team number and topic name who have signed up for an assignment topic&lt;br /&gt;
* List of All Users mapped with team number and topic name who are wait-listed for an assignment topic&lt;br /&gt;
* List of All Participants who haven't yet signed up for a topic and haven't formed teams yet&lt;br /&gt;
* List of All Participants&lt;br /&gt;
&lt;br /&gt;
The functionality is present as a set of Radio buttons, which is checked by default to the fourth option that is to export all Participants. However that can be changed according to requirement.&lt;br /&gt;
&lt;br /&gt;
The above has been implemented by creating a partial for the view to add the radio button. Further and If else bock has been used in the model, to identify the option selected and accordingly, on the required set of Rows are pushed to the csv file. To know whether a User has signed up or not for a topic, The SignedUpTeam model is used and to find if the team is wait listed or not, the is_waitlisted boolean value id used to determine if the team is wait listed or not.&lt;br /&gt;
&lt;br /&gt;
===Code improvements===&lt;br /&gt;
&lt;br /&gt;
===Testing ===&lt;br /&gt;
====Rspec testing====&lt;br /&gt;
====UI testing====&lt;br /&gt;
&lt;br /&gt;
===References===&lt;/div&gt;</summary>
		<author><name>Rsinha2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=102679</id>
		<title>CSC/ECE 517 Fall 2016/oss E1656</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=102679"/>
		<updated>2016-10-28T04:54:32Z</updated>

		<summary type="html">&lt;p&gt;Rsinha2: /* Problem Statement */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1656. Improve imports==&lt;br /&gt;
&lt;br /&gt;
This page provides a description of the Expertiza based OSS project. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Introduction to Expertiza==&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open source project based on [http://rubyonrails.org/ Ruby on Rails] framework.&lt;br /&gt;
&lt;br /&gt;
==Problem Statement==&lt;br /&gt;
The following tasks were listed for this project:&lt;br /&gt;
*The simplest fix: If I try to import topics, the import page gives me this message: “The import process expects the following columns:” but it doesn’t say what the columns are (topic number, topic name, category, number of slots, category)!  It used to be in the system; please revert the change to fix this bug.  See Issue 719.&lt;br /&gt;
*When teams are imported in order to insert new members, the members are not inserted.  See Issue 328.&lt;br /&gt;
*When a team with a duplicate name is imported, one of the options is to rename the new team.  There should also be an option to rename an existing team.  See Issue 329.&lt;br /&gt;
*Review assignments (“reviewer mappings”) should be able to be imported, but cannot be imported.  See Issue 711&lt;br /&gt;
*It should be possible to import a list of users who have signed up for topics, but this feature does not yet exist.  See Issue 153.&lt;br /&gt;
*It should be possible to leave off the final fields in a line of a CSV file.  These fields are often not specified anyway.  For example, if a password isn’t specified when a new user is created, the system generates a password (see Issue 183).  When importing topics, topic categories are rarely specified.  But if the final field is blank, the import requires the CSV line to end with “, “ (comma and space).  This should be fixed for all imports.&lt;br /&gt;
*For every kind of data to be imported, Expertiza currently specifies the ordering of fields.  This isn’t very flexible; it may require the user (an instructor) to edit an existing CSV file.  It would be better if, after importing the data, Expertiza showed the data together with dropdowns containing the default field headers.  (This is similar to the way Excel shows data when it is imported from a CSV file.)  Then the user could change the dropdowns to cause a different ordering of fields.  See Issue 110.&lt;br /&gt;
*Create a way to export a list of teams that have signed up for topics, and who are waitlisted for topics, as well as participants in an assignment who have not signed up for topics. Choose the format, but keep it as consistent as possible with the other export formats.  This would help the professor when students ask him for advice on finding teammates.&lt;br /&gt;
&lt;br /&gt;
===About Versions Controller===&lt;br /&gt;
&lt;br /&gt;
===Handle Duplicates===&lt;br /&gt;
====Current Implementation====&lt;br /&gt;
&lt;br /&gt;
'''When a team with a duplicate name is imported, one of the options is to rename the new team. There should also be an option to rename an existing team. See Issue 329.&lt;br /&gt;
'''The current implementation allows the user to handle duplicates, by the following techniques&lt;br /&gt;
*ignore the new team&lt;br /&gt;
*replace the existing team with the new team&lt;br /&gt;
*insert any new members into the existing team&lt;br /&gt;
*rename the new team and import&lt;br /&gt;
*rename the existing team and import&lt;br /&gt;
&lt;br /&gt;
=====Functionality=====&lt;br /&gt;
&lt;br /&gt;
The above functionalities make it easier to achieve the goal of handling duplicates while importing.&lt;br /&gt;
&lt;br /&gt;
=====Drawbacks and Solutions=====&lt;br /&gt;
&lt;br /&gt;
The above set of functionalities do not allow User to ever rename an existing team, rather force him rename his own team.&lt;br /&gt;
Thus the above requirement provides the necessary freedom to the User by providing him the option to rename an already existing team.&lt;br /&gt;
&lt;br /&gt;
====New Implementation====&lt;br /&gt;
&lt;br /&gt;
The option has been implemented using the update functionality that is already present in rails models, to update existing values of Active Records. To implement this feature we have also made use of the functionality for generating team names, that is already present within the Team model.&lt;br /&gt;
&lt;br /&gt;
A code snippet is given below:&lt;br /&gt;
  if handle_dups == &amp;quot;renameOldTeam&amp;quot; # rename: rename new team&lt;br /&gt;
       if teamtype.is_a?(CourseTeam)&lt;br /&gt;
         CourseTeam.update(team.id, :name =&amp;gt; self.generate_team_name(Course.find(id).name))&lt;br /&gt;
         return name&lt;br /&gt;
       elsif teamtype.is_a?(AssignmentTeam)&lt;br /&gt;
         AssignmentTeam.update(team.id, :name =&amp;gt; self.generate_team_name(Assignment.find(id).name))&lt;br /&gt;
         return name&lt;br /&gt;
       end&lt;br /&gt;
     end&lt;br /&gt;
&lt;br /&gt;
===Export Assignment Participants===&lt;br /&gt;
====Current Implementation====&lt;br /&gt;
Current Implementation just allows users to Export the set of all Assignment Participants, of a given assignment. It doesn't allow any further filtering.&lt;br /&gt;
&lt;br /&gt;
====Functionality====&lt;br /&gt;
The current functionality is very rigid and doesn't allow the user to know any more than the set of assignment Participants, which is also a major drawback&lt;br /&gt;
&lt;br /&gt;
====New Implementation====&lt;br /&gt;
The new implementation allows user to export Assignment Participants in four ways.&lt;br /&gt;
* List of All Users mapped with team number and topic name who have signed up for an assignment topic&lt;br /&gt;
* List of All Users mapped with team number and topic name who are wait-listed for an assignment topic&lt;br /&gt;
* List of All Participants who haven't yet signed up for a topic and haven't formed teams yet&lt;br /&gt;
* List of All Participants&lt;br /&gt;
&lt;br /&gt;
The functionality is present as a set of Radio buttons, which is checked by default to the fourth option that is to export all Participants. However that can be changed according to requirement.&lt;br /&gt;
&lt;br /&gt;
The above has been implemented by creating a partial for the view to add the radio button. Further and If else bock has been used in the model, to identify the option selected and accordingly, on the required set of Rows are pushed to the csv file. To know whether a User has signed up or not for a topic, The SignedUpTeam model is used and to find if the team is wait listed or not, the is_waitlisted boolean value id used to determine if the team is wait listed or not.&lt;br /&gt;
&lt;br /&gt;
===Code improvements===&lt;br /&gt;
&lt;br /&gt;
===Testing ===&lt;br /&gt;
====Rspec testing====&lt;br /&gt;
====UI testing====&lt;br /&gt;
&lt;br /&gt;
===References===&lt;/div&gt;</summary>
		<author><name>Rsinha2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=102678</id>
		<title>CSC/ECE 517 Fall 2016/oss E1656</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=102678"/>
		<updated>2016-10-28T04:54:08Z</updated>

		<summary type="html">&lt;p&gt;Rsinha2: /* Introduction to Expertiza */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1656. Improve imports==&lt;br /&gt;
&lt;br /&gt;
This page provides a description of the Expertiza based OSS project. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Introduction to Expertiza==&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open source project based on [http://rubyonrails.org/ Ruby on Rails] framework.&lt;br /&gt;
&lt;br /&gt;
===Problem Statement===&lt;br /&gt;
The following tasks were listed for this project:&lt;br /&gt;
*The simplest fix: If I try to import topics, the import page gives me this message: “The import process expects the following columns:” but it doesn’t say what the columns are (topic number, topic name, category, number of slots, category)!  It used to be in the system; please revert the change to fix this bug.  See Issue 719.&lt;br /&gt;
*When teams are imported in order to insert new members, the members are not inserted.  See Issue 328.&lt;br /&gt;
*When a team with a duplicate name is imported, one of the options is to rename the new team.  There should also be an option to rename an existing team.  See Issue 329.&lt;br /&gt;
*Review assignments (“reviewer mappings”) should be able to be imported, but cannot be imported.  See Issue 711&lt;br /&gt;
*It should be possible to import a list of users who have signed up for topics, but this feature does not yet exist.  See Issue 153.&lt;br /&gt;
*It should be possible to leave off the final fields in a line of a CSV file.  These fields are often not specified anyway.  For example, if a password isn’t specified when a new user is created, the system generates a password (see Issue 183).  When importing topics, topic categories are rarely specified.  But if the final field is blank, the import requires the CSV line to end with “, “ (comma and space).  This should be fixed for all imports.&lt;br /&gt;
*For every kind of data to be imported, Expertiza currently specifies the ordering of fields.  This isn’t very flexible; it may require the user (an instructor) to edit an existing CSV file.  It would be better if, after importing the data, Expertiza showed the data together with dropdowns containing the default field headers.  (This is similar to the way Excel shows data when it is imported from a CSV file.)  Then the user could change the dropdowns to cause a different ordering of fields.  See Issue 110.&lt;br /&gt;
*Create a way to export a list of teams that have signed up for topics, and who are waitlisted for topics, as well as participants in an assignment who have not signed up for topics. Choose the format, but keep it as consistent as possible with the other export formats.  This would help the professor when students ask him for advice on finding teammates.&lt;br /&gt;
&lt;br /&gt;
===About Versions Controller===&lt;br /&gt;
&lt;br /&gt;
===Handle Duplicates===&lt;br /&gt;
====Current Implementation====&lt;br /&gt;
&lt;br /&gt;
'''When a team with a duplicate name is imported, one of the options is to rename the new team. There should also be an option to rename an existing team. See Issue 329.&lt;br /&gt;
'''The current implementation allows the user to handle duplicates, by the following techniques&lt;br /&gt;
*ignore the new team&lt;br /&gt;
*replace the existing team with the new team&lt;br /&gt;
*insert any new members into the existing team&lt;br /&gt;
*rename the new team and import&lt;br /&gt;
*rename the existing team and import&lt;br /&gt;
&lt;br /&gt;
=====Functionality=====&lt;br /&gt;
&lt;br /&gt;
The above functionalities make it easier to achieve the goal of handling duplicates while importing.&lt;br /&gt;
&lt;br /&gt;
=====Drawbacks and Solutions=====&lt;br /&gt;
&lt;br /&gt;
The above set of functionalities do not allow User to ever rename an existing team, rather force him rename his own team.&lt;br /&gt;
Thus the above requirement provides the necessary freedom to the User by providing him the option to rename an already existing team.&lt;br /&gt;
&lt;br /&gt;
====New Implementation====&lt;br /&gt;
&lt;br /&gt;
The option has been implemented using the update functionality that is already present in rails models, to update existing values of Active Records. To implement this feature we have also made use of the functionality for generating team names, that is already present within the Team model.&lt;br /&gt;
&lt;br /&gt;
A code snippet is given below:&lt;br /&gt;
  if handle_dups == &amp;quot;renameOldTeam&amp;quot; # rename: rename new team&lt;br /&gt;
       if teamtype.is_a?(CourseTeam)&lt;br /&gt;
         CourseTeam.update(team.id, :name =&amp;gt; self.generate_team_name(Course.find(id).name))&lt;br /&gt;
         return name&lt;br /&gt;
       elsif teamtype.is_a?(AssignmentTeam)&lt;br /&gt;
         AssignmentTeam.update(team.id, :name =&amp;gt; self.generate_team_name(Assignment.find(id).name))&lt;br /&gt;
         return name&lt;br /&gt;
       end&lt;br /&gt;
     end&lt;br /&gt;
&lt;br /&gt;
===Export Assignment Participants===&lt;br /&gt;
====Current Implementation====&lt;br /&gt;
Current Implementation just allows users to Export the set of all Assignment Participants, of a given assignment. It doesn't allow any further filtering.&lt;br /&gt;
&lt;br /&gt;
====Functionality====&lt;br /&gt;
The current functionality is very rigid and doesn't allow the user to know any more than the set of assignment Participants, which is also a major drawback&lt;br /&gt;
&lt;br /&gt;
====New Implementation====&lt;br /&gt;
The new implementation allows user to export Assignment Participants in four ways.&lt;br /&gt;
* List of All Users mapped with team number and topic name who have signed up for an assignment topic&lt;br /&gt;
* List of All Users mapped with team number and topic name who are wait-listed for an assignment topic&lt;br /&gt;
* List of All Participants who haven't yet signed up for a topic and haven't formed teams yet&lt;br /&gt;
* List of All Participants&lt;br /&gt;
&lt;br /&gt;
The functionality is present as a set of Radio buttons, which is checked by default to the fourth option that is to export all Participants. However that can be changed according to requirement.&lt;br /&gt;
&lt;br /&gt;
The above has been implemented by creating a partial for the view to add the radio button. Further and If else bock has been used in the model, to identify the option selected and accordingly, on the required set of Rows are pushed to the csv file. To know whether a User has signed up or not for a topic, The SignedUpTeam model is used and to find if the team is wait listed or not, the is_waitlisted boolean value id used to determine if the team is wait listed or not.&lt;br /&gt;
&lt;br /&gt;
===Code improvements===&lt;br /&gt;
&lt;br /&gt;
===Testing ===&lt;br /&gt;
====Rspec testing====&lt;br /&gt;
====UI testing====&lt;br /&gt;
&lt;br /&gt;
===References===&lt;/div&gt;</summary>
		<author><name>Rsinha2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=102672</id>
		<title>CSC/ECE 517 Fall 2016/oss E1656</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=102672"/>
		<updated>2016-10-28T04:37:15Z</updated>

		<summary type="html">&lt;p&gt;Rsinha2: /* Current Implementation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1656. Improve imports==&lt;br /&gt;
&lt;br /&gt;
This page provides a description of the Expertiza based OSS project. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Introduction to Expertiza===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open source project based on [http://rubyonrails.org/ Ruby on Rails] framework.&lt;br /&gt;
&lt;br /&gt;
===Problem Statement===&lt;br /&gt;
The following tasks were listed for this project:&lt;br /&gt;
*The simplest fix: If I try to import topics, the import page gives me this message: “The import process expects the following columns:” but it doesn’t say what the columns are (topic number, topic name, category, number of slots, category)!  It used to be in the system; please revert the change to fix this bug.  See Issue 719.&lt;br /&gt;
*When teams are imported in order to insert new members, the members are not inserted.  See Issue 328.&lt;br /&gt;
*When a team with a duplicate name is imported, one of the options is to rename the new team.  There should also be an option to rename an existing team.  See Issue 329.&lt;br /&gt;
*Review assignments (“reviewer mappings”) should be able to be imported, but cannot be imported.  See Issue 711&lt;br /&gt;
*It should be possible to import a list of users who have signed up for topics, but this feature does not yet exist.  See Issue 153.&lt;br /&gt;
*It should be possible to leave off the final fields in a line of a CSV file.  These fields are often not specified anyway.  For example, if a password isn’t specified when a new user is created, the system generates a password (see Issue 183).  When importing topics, topic categories are rarely specified.  But if the final field is blank, the import requires the CSV line to end with “, “ (comma and space).  This should be fixed for all imports.&lt;br /&gt;
*For every kind of data to be imported, Expertiza currently specifies the ordering of fields.  This isn’t very flexible; it may require the user (an instructor) to edit an existing CSV file.  It would be better if, after importing the data, Expertiza showed the data together with dropdowns containing the default field headers.  (This is similar to the way Excel shows data when it is imported from a CSV file.)  Then the user could change the dropdowns to cause a different ordering of fields.  See Issue 110.&lt;br /&gt;
*Create a way to export a list of teams that have signed up for topics, and who are waitlisted for topics, as well as participants in an assignment who have not signed up for topics. Choose the format, but keep it as consistent as possible with the other export formats.  This would help the professor when students ask him for advice on finding teammates.&lt;br /&gt;
&lt;br /&gt;
===About Versions Controller===&lt;br /&gt;
&lt;br /&gt;
===Handle Duplicates===&lt;br /&gt;
====Current Implementation====&lt;br /&gt;
&lt;br /&gt;
'''When a team with a duplicate name is imported, one of the options is to rename the new team. There should also be an option to rename an existing team. See Issue 329.&lt;br /&gt;
'''The current implementation allows the user to handle duplicates, by the following techniques&lt;br /&gt;
*ignore the new team&lt;br /&gt;
*replace the existing team with the new team&lt;br /&gt;
*insert any new members into the existing team&lt;br /&gt;
*rename the new team and import&lt;br /&gt;
*rename the existing team and import&lt;br /&gt;
&lt;br /&gt;
=====Functionality=====&lt;br /&gt;
&lt;br /&gt;
The above functionalities make it easier to achieve the goal of handling duplicates while importing.&lt;br /&gt;
&lt;br /&gt;
=====Drawbacks and Solutions=====&lt;br /&gt;
&lt;br /&gt;
The above set of functionalities do not allow User to ever rename an existing team, rather force him rename his own team.&lt;br /&gt;
Thus the above requirement provides the necessary freedom to the User by providing him the option to rename an already existing team.&lt;br /&gt;
&lt;br /&gt;
====New Implementation====&lt;br /&gt;
&lt;br /&gt;
The option has been implemented using the update functionality that is already present in rails models, to update existing values of Active Records. To implement this feature we have also made use of the functionality for generating team names, that is already present within the Team model.&lt;br /&gt;
&lt;br /&gt;
A code snippet is given below:&lt;br /&gt;
  if handle_dups == &amp;quot;renameOldTeam&amp;quot; # rename: rename new team&lt;br /&gt;
       if teamtype.is_a?(CourseTeam)&lt;br /&gt;
         CourseTeam.update(team.id, :name =&amp;gt; self.generate_team_name(Course.find(id).name))&lt;br /&gt;
         return name&lt;br /&gt;
       elsif teamtype.is_a?(AssignmentTeam)&lt;br /&gt;
         AssignmentTeam.update(team.id, :name =&amp;gt; self.generate_team_name(Assignment.find(id).name))&lt;br /&gt;
         return name&lt;br /&gt;
       end&lt;br /&gt;
     end&lt;br /&gt;
&lt;br /&gt;
===Export Assignment Participants===&lt;br /&gt;
====Current Implementation====&lt;br /&gt;
Current Implementation just allows users to Export the set of all Assignment Participants, of a given assignment. It doesn't allow any further filtering.&lt;br /&gt;
&lt;br /&gt;
====Functionality====&lt;br /&gt;
The current functionality is very rigid and doesn't allow the user to know any more than the set of assignment Participants, which is also a major drawback&lt;br /&gt;
&lt;br /&gt;
====New Implementation====&lt;br /&gt;
The new implementation allows user to export Assignment Participants in four ways.&lt;br /&gt;
* List of All Users mapped with team number and topic name who have signed up for an assignment topic&lt;br /&gt;
* List of All Users mapped with team number and topic name who are wait-listed for an assignment topic&lt;br /&gt;
* List of All Participants who haven't yet signed up for a topic and haven't formed teams yet&lt;br /&gt;
* List of All Participants&lt;br /&gt;
&lt;br /&gt;
The functionality is present as a set of Radio buttons, which is checked by default to the fourth option that is to export all Participants. However that can be changed according to requirement.&lt;br /&gt;
&lt;br /&gt;
The above has been implemented by creating a partial for the view to add the radio button. Further and If else bock has been used in the model, to identify the option selected and accordingly, on the required set of Rows are pushed to the csv file. To know whether a User has signed up or not for a topic, The SignedUpTeam model is used and to find if the team is wait listed or not, the is_waitlisted boolean value id used to determine if the team is wait listed or not.&lt;br /&gt;
&lt;br /&gt;
===Code improvements===&lt;br /&gt;
&lt;br /&gt;
===Testing ===&lt;br /&gt;
====Rspec testing====&lt;br /&gt;
====UI testing====&lt;br /&gt;
&lt;br /&gt;
===References===&lt;/div&gt;</summary>
		<author><name>Rsinha2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=102671</id>
		<title>CSC/ECE 517 Fall 2016/oss E1656</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=102671"/>
		<updated>2016-10-28T04:34:42Z</updated>

		<summary type="html">&lt;p&gt;Rsinha2: /* Export Participants */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1656. Improve imports==&lt;br /&gt;
&lt;br /&gt;
This page provides a description of the Expertiza based OSS project. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Introduction to Expertiza===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open source project based on [http://rubyonrails.org/ Ruby on Rails] framework.&lt;br /&gt;
&lt;br /&gt;
===Problem Statement===&lt;br /&gt;
The following tasks were listed for this project:&lt;br /&gt;
*The simplest fix: If I try to import topics, the import page gives me this message: “The import process expects the following columns:” but it doesn’t say what the columns are (topic number, topic name, category, number of slots, category)!  It used to be in the system; please revert the change to fix this bug.  See Issue 719.&lt;br /&gt;
*When teams are imported in order to insert new members, the members are not inserted.  See Issue 328.&lt;br /&gt;
*When a team with a duplicate name is imported, one of the options is to rename the new team.  There should also be an option to rename an existing team.  See Issue 329.&lt;br /&gt;
*Review assignments (“reviewer mappings”) should be able to be imported, but cannot be imported.  See Issue 711&lt;br /&gt;
*It should be possible to import a list of users who have signed up for topics, but this feature does not yet exist.  See Issue 153.&lt;br /&gt;
*It should be possible to leave off the final fields in a line of a CSV file.  These fields are often not specified anyway.  For example, if a password isn’t specified when a new user is created, the system generates a password (see Issue 183).  When importing topics, topic categories are rarely specified.  But if the final field is blank, the import requires the CSV line to end with “, “ (comma and space).  This should be fixed for all imports.&lt;br /&gt;
*For every kind of data to be imported, Expertiza currently specifies the ordering of fields.  This isn’t very flexible; it may require the user (an instructor) to edit an existing CSV file.  It would be better if, after importing the data, Expertiza showed the data together with dropdowns containing the default field headers.  (This is similar to the way Excel shows data when it is imported from a CSV file.)  Then the user could change the dropdowns to cause a different ordering of fields.  See Issue 110.&lt;br /&gt;
*Create a way to export a list of teams that have signed up for topics, and who are waitlisted for topics, as well as participants in an assignment who have not signed up for topics. Choose the format, but keep it as consistent as possible with the other export formats.  This would help the professor when students ask him for advice on finding teammates.&lt;br /&gt;
&lt;br /&gt;
===About Versions Controller===&lt;br /&gt;
&lt;br /&gt;
===Handle Duplicates===&lt;br /&gt;
====Current Implementation====&lt;br /&gt;
&lt;br /&gt;
'''When a team with a duplicate name is imported, one of the options is to rename the new team. There should also be an option to rename an existing team. See Issue 329.&lt;br /&gt;
'''The current implementation allows the user to handle duplicates, by the following techniques&lt;br /&gt;
*ignore the new team&lt;br /&gt;
*replace the existing team with the new team&lt;br /&gt;
*insert any new members into the existing team&lt;br /&gt;
*rename the new team and import&lt;br /&gt;
*rename the existing team and import&lt;br /&gt;
&lt;br /&gt;
=====Functionality=====&lt;br /&gt;
&lt;br /&gt;
The above functionalities make it easier to achieve the goal of handling duplicates while importing.&lt;br /&gt;
&lt;br /&gt;
=====Drawbacks and Solutions=====&lt;br /&gt;
&lt;br /&gt;
The above set of functionalities do not allow User to ever rename an existing team, rather force him rename his own team.&lt;br /&gt;
Thus the above requirement provides the necessary freedom to the User by providing him the option to rename an already existing team.&lt;br /&gt;
&lt;br /&gt;
====New Implementation====&lt;br /&gt;
&lt;br /&gt;
The option has been implemented using the update functionality that is already present in rails models, to update existing values of Active Records. To implement this feature we have also made use of the functionality for generating team names, that is already present within the Team model.&lt;br /&gt;
&lt;br /&gt;
A code snippet is given below:&lt;br /&gt;
  if handle_dups == &amp;quot;renameOldTeam&amp;quot; # rename: rename new team&lt;br /&gt;
       if teamtype.is_a?(CourseTeam)&lt;br /&gt;
         CourseTeam.update(team.id, :name =&amp;gt; self.generate_team_name(Course.find(id).name))&lt;br /&gt;
         return name&lt;br /&gt;
       elsif teamtype.is_a?(AssignmentTeam)&lt;br /&gt;
         AssignmentTeam.update(team.id, :name =&amp;gt; self.generate_team_name(Assignment.find(id).name))&lt;br /&gt;
         return name&lt;br /&gt;
       end&lt;br /&gt;
     end&lt;br /&gt;
&lt;br /&gt;
===Export Assignment Participants===&lt;br /&gt;
====Current Implementation====&lt;br /&gt;
Current Implementation just allows users to Export the set of all Assignment Participants, of a given assignment. It doesn't allow ant further filtering.&lt;br /&gt;
&lt;br /&gt;
====New Implementation====&lt;br /&gt;
The new implementation allows user to export Assignment Participants in four ways.&lt;br /&gt;
* List of All Users mapped with team number and topic name who have signed up for an assignment topic&lt;br /&gt;
* List of All Users mapped with team number and topic name who are wait-listed for an assignment topic&lt;br /&gt;
* List of All Participants who haven't yet signed up for a topic and haven't formed teams yet&lt;br /&gt;
* List of All Participants&lt;br /&gt;
&lt;br /&gt;
The functionality is present as a set of Radio buttons, which is checked by default to the fourth option that is to export all Participants. However that can be changed according to requirement.&lt;br /&gt;
&lt;br /&gt;
The above has been implemented by creating a partial for the view to add the radio button. Further and If else bock has been used in the model, to identify the option selected and accordingly, on the required set of Rows are pushed to the csv file. To know whether a User has signed up or not for a topic, The SignedUpTeam model is used and to find if the team is wait listed or not, the is_waitlisted boolean value id used to determine if the team is wait listed or not.&lt;br /&gt;
&lt;br /&gt;
===Code improvements===&lt;br /&gt;
&lt;br /&gt;
===Testing ===&lt;br /&gt;
====Rspec testing====&lt;br /&gt;
====UI testing====&lt;br /&gt;
&lt;br /&gt;
===References===&lt;/div&gt;</summary>
		<author><name>Rsinha2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=102666</id>
		<title>CSC/ECE 517 Fall 2016/oss E1656</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=102666"/>
		<updated>2016-10-28T04:22:54Z</updated>

		<summary type="html">&lt;p&gt;Rsinha2: /* =New Implementation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1656. Improve imports==&lt;br /&gt;
&lt;br /&gt;
This page provides a description of the Expertiza based OSS project. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Introduction to Expertiza===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open source project based on [http://rubyonrails.org/ Ruby on Rails] framework.&lt;br /&gt;
&lt;br /&gt;
===Problem Statement===&lt;br /&gt;
The following tasks were listed for this project:&lt;br /&gt;
*The simplest fix: If I try to import topics, the import page gives me this message: “The import process expects the following columns:” but it doesn’t say what the columns are (topic number, topic name, category, number of slots, category)!  It used to be in the system; please revert the change to fix this bug.  See Issue 719.&lt;br /&gt;
*When teams are imported in order to insert new members, the members are not inserted.  See Issue 328.&lt;br /&gt;
*When a team with a duplicate name is imported, one of the options is to rename the new team.  There should also be an option to rename an existing team.  See Issue 329.&lt;br /&gt;
*Review assignments (“reviewer mappings”) should be able to be imported, but cannot be imported.  See Issue 711&lt;br /&gt;
*It should be possible to import a list of users who have signed up for topics, but this feature does not yet exist.  See Issue 153.&lt;br /&gt;
*It should be possible to leave off the final fields in a line of a CSV file.  These fields are often not specified anyway.  For example, if a password isn’t specified when a new user is created, the system generates a password (see Issue 183).  When importing topics, topic categories are rarely specified.  But if the final field is blank, the import requires the CSV line to end with “, “ (comma and space).  This should be fixed for all imports.&lt;br /&gt;
*For every kind of data to be imported, Expertiza currently specifies the ordering of fields.  This isn’t very flexible; it may require the user (an instructor) to edit an existing CSV file.  It would be better if, after importing the data, Expertiza showed the data together with dropdowns containing the default field headers.  (This is similar to the way Excel shows data when it is imported from a CSV file.)  Then the user could change the dropdowns to cause a different ordering of fields.  See Issue 110.&lt;br /&gt;
*Create a way to export a list of teams that have signed up for topics, and who are waitlisted for topics, as well as participants in an assignment who have not signed up for topics. Choose the format, but keep it as consistent as possible with the other export formats.  This would help the professor when students ask him for advice on finding teammates.&lt;br /&gt;
&lt;br /&gt;
===About Versions Controller===&lt;br /&gt;
&lt;br /&gt;
===Handle Duplicates===&lt;br /&gt;
====Current Implementation====&lt;br /&gt;
&lt;br /&gt;
'''When a team with a duplicate name is imported, one of the options is to rename the new team. There should also be an option to rename an existing team. See Issue 329.&lt;br /&gt;
'''The current implementation allows the user to handle duplicates, by the following techniques&lt;br /&gt;
*ignore the new team&lt;br /&gt;
*replace the existing team with the new team&lt;br /&gt;
*insert any new members into the existing team&lt;br /&gt;
*rename the new team and import&lt;br /&gt;
*rename the existing team and import&lt;br /&gt;
&lt;br /&gt;
=====Functionality=====&lt;br /&gt;
&lt;br /&gt;
The above functionalities make it easier to achieve the goal of handling duplicates while importing.&lt;br /&gt;
&lt;br /&gt;
=====Drawbacks and Solutions=====&lt;br /&gt;
&lt;br /&gt;
The above set of functionalities do not allow User to ever rename an existing team, rather force him rename his own team.&lt;br /&gt;
Thus the above requirement provides the necessary freedom to the User by providing him the option to rename an already existing team.&lt;br /&gt;
&lt;br /&gt;
====New Implementation====&lt;br /&gt;
&lt;br /&gt;
The option has been implemented using the update functionality that is already present in rails models, to update existing values of Active Records. To implement this feature we have also made use of the functionality for generating team names, that is already present within the Team model.&lt;br /&gt;
&lt;br /&gt;
A code snippet is given below:&lt;br /&gt;
  if handle_dups == &amp;quot;renameOldTeam&amp;quot; # rename: rename new team&lt;br /&gt;
       if teamtype.is_a?(CourseTeam)&lt;br /&gt;
         CourseTeam.update(team.id, :name =&amp;gt; self.generate_team_name(Course.find(id).name))&lt;br /&gt;
         return name&lt;br /&gt;
       elsif teamtype.is_a?(AssignmentTeam)&lt;br /&gt;
         AssignmentTeam.update(team.id, :name =&amp;gt; self.generate_team_name(Assignment.find(id).name))&lt;br /&gt;
         return name&lt;br /&gt;
       end&lt;br /&gt;
     end&lt;br /&gt;
&lt;br /&gt;
===Export Participants===&lt;br /&gt;
===Code improvements===&lt;br /&gt;
&lt;br /&gt;
===Testing ===&lt;br /&gt;
====Rspec testing====&lt;br /&gt;
====UI testing====&lt;br /&gt;
&lt;br /&gt;
===References===&lt;/div&gt;</summary>
		<author><name>Rsinha2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=102665</id>
		<title>CSC/ECE 517 Fall 2016/oss E1656</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=102665"/>
		<updated>2016-10-28T04:22:44Z</updated>

		<summary type="html">&lt;p&gt;Rsinha2: /* =Current Implementation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1656. Improve imports==&lt;br /&gt;
&lt;br /&gt;
This page provides a description of the Expertiza based OSS project. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Introduction to Expertiza===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open source project based on [http://rubyonrails.org/ Ruby on Rails] framework.&lt;br /&gt;
&lt;br /&gt;
===Problem Statement===&lt;br /&gt;
The following tasks were listed for this project:&lt;br /&gt;
*The simplest fix: If I try to import topics, the import page gives me this message: “The import process expects the following columns:” but it doesn’t say what the columns are (topic number, topic name, category, number of slots, category)!  It used to be in the system; please revert the change to fix this bug.  See Issue 719.&lt;br /&gt;
*When teams are imported in order to insert new members, the members are not inserted.  See Issue 328.&lt;br /&gt;
*When a team with a duplicate name is imported, one of the options is to rename the new team.  There should also be an option to rename an existing team.  See Issue 329.&lt;br /&gt;
*Review assignments (“reviewer mappings”) should be able to be imported, but cannot be imported.  See Issue 711&lt;br /&gt;
*It should be possible to import a list of users who have signed up for topics, but this feature does not yet exist.  See Issue 153.&lt;br /&gt;
*It should be possible to leave off the final fields in a line of a CSV file.  These fields are often not specified anyway.  For example, if a password isn’t specified when a new user is created, the system generates a password (see Issue 183).  When importing topics, topic categories are rarely specified.  But if the final field is blank, the import requires the CSV line to end with “, “ (comma and space).  This should be fixed for all imports.&lt;br /&gt;
*For every kind of data to be imported, Expertiza currently specifies the ordering of fields.  This isn’t very flexible; it may require the user (an instructor) to edit an existing CSV file.  It would be better if, after importing the data, Expertiza showed the data together with dropdowns containing the default field headers.  (This is similar to the way Excel shows data when it is imported from a CSV file.)  Then the user could change the dropdowns to cause a different ordering of fields.  See Issue 110.&lt;br /&gt;
*Create a way to export a list of teams that have signed up for topics, and who are waitlisted for topics, as well as participants in an assignment who have not signed up for topics. Choose the format, but keep it as consistent as possible with the other export formats.  This would help the professor when students ask him for advice on finding teammates.&lt;br /&gt;
&lt;br /&gt;
===About Versions Controller===&lt;br /&gt;
&lt;br /&gt;
===Handle Duplicates===&lt;br /&gt;
====Current Implementation====&lt;br /&gt;
&lt;br /&gt;
'''When a team with a duplicate name is imported, one of the options is to rename the new team. There should also be an option to rename an existing team. See Issue 329.&lt;br /&gt;
'''The current implementation allows the user to handle duplicates, by the following techniques&lt;br /&gt;
*ignore the new team&lt;br /&gt;
*replace the existing team with the new team&lt;br /&gt;
*insert any new members into the existing team&lt;br /&gt;
*rename the new team and import&lt;br /&gt;
*rename the existing team and import&lt;br /&gt;
&lt;br /&gt;
=====Functionality=====&lt;br /&gt;
&lt;br /&gt;
The above functionalities make it easier to achieve the goal of handling duplicates while importing.&lt;br /&gt;
&lt;br /&gt;
=====Drawbacks and Solutions=====&lt;br /&gt;
&lt;br /&gt;
The above set of functionalities do not allow User to ever rename an existing team, rather force him rename his own team.&lt;br /&gt;
Thus the above requirement provides the necessary freedom to the User by providing him the option to rename an already existing team.&lt;br /&gt;
&lt;br /&gt;
====New Implementation===&lt;br /&gt;
&lt;br /&gt;
The option has been implemented using the update functionality that is already present in rails models, to update existing values of Active Records. To implement this feature we have also made use of the functionality for generating team names, that is already present within the Team model.&lt;br /&gt;
&lt;br /&gt;
A code snippet is given below:&lt;br /&gt;
  if handle_dups == &amp;quot;renameOldTeam&amp;quot; # rename: rename new team&lt;br /&gt;
       if teamtype.is_a?(CourseTeam)&lt;br /&gt;
         CourseTeam.update(team.id, :name =&amp;gt; self.generate_team_name(Course.find(id).name))&lt;br /&gt;
         return name&lt;br /&gt;
       elsif teamtype.is_a?(AssignmentTeam)&lt;br /&gt;
         AssignmentTeam.update(team.id, :name =&amp;gt; self.generate_team_name(Assignment.find(id).name))&lt;br /&gt;
         return name&lt;br /&gt;
       end&lt;br /&gt;
     end&lt;br /&gt;
===Export Participants===&lt;br /&gt;
===Code improvements===&lt;br /&gt;
&lt;br /&gt;
===Testing ===&lt;br /&gt;
====Rspec testing====&lt;br /&gt;
====UI testing====&lt;br /&gt;
&lt;br /&gt;
===References===&lt;/div&gt;</summary>
		<author><name>Rsinha2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=102664</id>
		<title>CSC/ECE 517 Fall 2016/oss E1656</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=102664"/>
		<updated>2016-10-28T04:22:28Z</updated>

		<summary type="html">&lt;p&gt;Rsinha2: /* E1656. Improve imports */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1656. Improve imports==&lt;br /&gt;
&lt;br /&gt;
This page provides a description of the Expertiza based OSS project. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Introduction to Expertiza===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open source project based on [http://rubyonrails.org/ Ruby on Rails] framework.&lt;br /&gt;
&lt;br /&gt;
===Problem Statement===&lt;br /&gt;
The following tasks were listed for this project:&lt;br /&gt;
*The simplest fix: If I try to import topics, the import page gives me this message: “The import process expects the following columns:” but it doesn’t say what the columns are (topic number, topic name, category, number of slots, category)!  It used to be in the system; please revert the change to fix this bug.  See Issue 719.&lt;br /&gt;
*When teams are imported in order to insert new members, the members are not inserted.  See Issue 328.&lt;br /&gt;
*When a team with a duplicate name is imported, one of the options is to rename the new team.  There should also be an option to rename an existing team.  See Issue 329.&lt;br /&gt;
*Review assignments (“reviewer mappings”) should be able to be imported, but cannot be imported.  See Issue 711&lt;br /&gt;
*It should be possible to import a list of users who have signed up for topics, but this feature does not yet exist.  See Issue 153.&lt;br /&gt;
*It should be possible to leave off the final fields in a line of a CSV file.  These fields are often not specified anyway.  For example, if a password isn’t specified when a new user is created, the system generates a password (see Issue 183).  When importing topics, topic categories are rarely specified.  But if the final field is blank, the import requires the CSV line to end with “, “ (comma and space).  This should be fixed for all imports.&lt;br /&gt;
*For every kind of data to be imported, Expertiza currently specifies the ordering of fields.  This isn’t very flexible; it may require the user (an instructor) to edit an existing CSV file.  It would be better if, after importing the data, Expertiza showed the data together with dropdowns containing the default field headers.  (This is similar to the way Excel shows data when it is imported from a CSV file.)  Then the user could change the dropdowns to cause a different ordering of fields.  See Issue 110.&lt;br /&gt;
*Create a way to export a list of teams that have signed up for topics, and who are waitlisted for topics, as well as participants in an assignment who have not signed up for topics. Choose the format, but keep it as consistent as possible with the other export formats.  This would help the professor when students ask him for advice on finding teammates.&lt;br /&gt;
&lt;br /&gt;
===About Versions Controller===&lt;br /&gt;
&lt;br /&gt;
===Handle Duplicates===&lt;br /&gt;
====Current Implementation===&lt;br /&gt;
&lt;br /&gt;
'''When a team with a duplicate name is imported, one of the options is to rename the new team. There should also be an option to rename an existing team. See Issue 329.&lt;br /&gt;
'''The current implementation allows the user to handle duplicates, by the following techniques&lt;br /&gt;
*ignore the new team&lt;br /&gt;
*replace the existing team with the new team&lt;br /&gt;
*insert any new members into the existing team&lt;br /&gt;
*rename the new team and import&lt;br /&gt;
*rename the existing team and import&lt;br /&gt;
&lt;br /&gt;
=====Functionality=====&lt;br /&gt;
&lt;br /&gt;
The above functionalities make it easier to achieve the goal of handling duplicates while importing.&lt;br /&gt;
&lt;br /&gt;
=====Drawbacks and Solutions=====&lt;br /&gt;
&lt;br /&gt;
The above set of functionalities do not allow User to ever rename an existing team, rather force him rename his own team.&lt;br /&gt;
Thus the above requirement provides the necessary freedom to the User by providing him the option to rename an already existing team.&lt;br /&gt;
&lt;br /&gt;
====New Implementation===&lt;br /&gt;
&lt;br /&gt;
The option has been implemented using the update functionality that is already present in rails models, to update existing values of Active Records. To implement this feature we have also made use of the functionality for generating team names, that is already present within the Team model.&lt;br /&gt;
&lt;br /&gt;
A code snippet is given below:&lt;br /&gt;
  if handle_dups == &amp;quot;renameOldTeam&amp;quot; # rename: rename new team&lt;br /&gt;
       if teamtype.is_a?(CourseTeam)&lt;br /&gt;
         CourseTeam.update(team.id, :name =&amp;gt; self.generate_team_name(Course.find(id).name))&lt;br /&gt;
         return name&lt;br /&gt;
       elsif teamtype.is_a?(AssignmentTeam)&lt;br /&gt;
         AssignmentTeam.update(team.id, :name =&amp;gt; self.generate_team_name(Assignment.find(id).name))&lt;br /&gt;
         return name&lt;br /&gt;
       end&lt;br /&gt;
     end&lt;br /&gt;
===Export Participants===&lt;br /&gt;
===Code improvements===&lt;br /&gt;
&lt;br /&gt;
===Testing ===&lt;br /&gt;
====Rspec testing====&lt;br /&gt;
====UI testing====&lt;br /&gt;
&lt;br /&gt;
===References===&lt;/div&gt;</summary>
		<author><name>Rsinha2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=102662</id>
		<title>CSC/ECE 517 Fall 2016/oss E1656</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=102662"/>
		<updated>2016-10-28T04:19:45Z</updated>

		<summary type="html">&lt;p&gt;Rsinha2: /* Current Implementation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1656. Improve imports==&lt;br /&gt;
&lt;br /&gt;
This page provides a description of the Expertiza based OSS project. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Introduction to Expertiza===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open source project based on [http://rubyonrails.org/ Ruby on Rails] framework.&lt;br /&gt;
&lt;br /&gt;
===Problem Statement===&lt;br /&gt;
The following tasks were listed for this project:&lt;br /&gt;
*The simplest fix: If I try to import topics, the import page gives me this message: “The import process expects the following columns:” but it doesn’t say what the columns are (topic number, topic name, category, number of slots, category)!  It used to be in the system; please revert the change to fix this bug.  See Issue 719.&lt;br /&gt;
*When teams are imported in order to insert new members, the members are not inserted.  See Issue 328.&lt;br /&gt;
*When a team with a duplicate name is imported, one of the options is to rename the new team.  There should also be an option to rename an existing team.  See Issue 329.&lt;br /&gt;
*Review assignments (“reviewer mappings”) should be able to be imported, but cannot be imported.  See Issue 711&lt;br /&gt;
*It should be possible to import a list of users who have signed up for topics, but this feature does not yet exist.  See Issue 153.&lt;br /&gt;
*It should be possible to leave off the final fields in a line of a CSV file.  These fields are often not specified anyway.  For example, if a password isn’t specified when a new user is created, the system generates a password (see Issue 183).  When importing topics, topic categories are rarely specified.  But if the final field is blank, the import requires the CSV line to end with “, “ (comma and space).  This should be fixed for all imports.&lt;br /&gt;
*For every kind of data to be imported, Expertiza currently specifies the ordering of fields.  This isn’t very flexible; it may require the user (an instructor) to edit an existing CSV file.  It would be better if, after importing the data, Expertiza showed the data together with dropdowns containing the default field headers.  (This is similar to the way Excel shows data when it is imported from a CSV file.)  Then the user could change the dropdowns to cause a different ordering of fields.  See Issue 110.&lt;br /&gt;
*Create a way to export a list of teams that have signed up for topics, and who are waitlisted for topics, as well as participants in an assignment who have not signed up for topics. Choose the format, but keep it as consistent as possible with the other export formats.  This would help the professor when students ask him for advice on finding teammates.&lt;br /&gt;
&lt;br /&gt;
===About Versions Controller===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Current Implementation===&lt;br /&gt;
&lt;br /&gt;
'''When a team with a duplicate name is imported, one of the options is to rename the new team. There should also be an option to rename an existing team. See Issue 329.&lt;br /&gt;
'''The current implementation allows the user to handle duplicates, by the following techniques&lt;br /&gt;
*ignore the new team&lt;br /&gt;
*replace the existing team with the new team&lt;br /&gt;
*insert any new members into the existing team&lt;br /&gt;
*rename the new team and import&lt;br /&gt;
*rename the existing team and import&lt;br /&gt;
&lt;br /&gt;
=====Functionality=====&lt;br /&gt;
&lt;br /&gt;
The above functionalities make it easier to achieve the goal of handling duplicates while importing.&lt;br /&gt;
&lt;br /&gt;
=====Drawbacks and Solutions=====&lt;br /&gt;
&lt;br /&gt;
The above set of functionalities do not allow User to ever rename an existing team, rather force him rename his own team.&lt;br /&gt;
Thus the above requirement provides the necessary freedom to the User by providing him the option to rename an already existing team.&lt;br /&gt;
&lt;br /&gt;
===New Implementation===&lt;br /&gt;
&lt;br /&gt;
The option has been implemented using the update functionality that is already present in rails models, to update existing values of Active Records. To implement this feature we have also made use of the functionality for generating team names, that is already present within the Team model.&lt;br /&gt;
&lt;br /&gt;
A code snippet is given below:&lt;br /&gt;
  if handle_dups == &amp;quot;renameOldTeam&amp;quot; # rename: rename new team&lt;br /&gt;
       if teamtype.is_a?(CourseTeam)&lt;br /&gt;
         CourseTeam.update(team.id, :name =&amp;gt; self.generate_team_name(Course.find(id).name))&lt;br /&gt;
         return name&lt;br /&gt;
       elsif teamtype.is_a?(AssignmentTeam)&lt;br /&gt;
         AssignmentTeam.update(team.id, :name =&amp;gt; self.generate_team_name(Assignment.find(id).name))&lt;br /&gt;
         return name&lt;br /&gt;
       end&lt;br /&gt;
     end&lt;br /&gt;
&lt;br /&gt;
===Code improvements===&lt;br /&gt;
&lt;br /&gt;
===Testing ===&lt;br /&gt;
====Rspec testing====&lt;br /&gt;
====UI testing====&lt;br /&gt;
&lt;br /&gt;
===References===&lt;/div&gt;</summary>
		<author><name>Rsinha2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=102660</id>
		<title>CSC/ECE 517 Fall 2016/oss E1656</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=102660"/>
		<updated>2016-10-28T04:18:52Z</updated>

		<summary type="html">&lt;p&gt;Rsinha2: /* New Implementation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1656. Improve imports==&lt;br /&gt;
&lt;br /&gt;
This page provides a description of the Expertiza based OSS project. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Introduction to Expertiza===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open source project based on [http://rubyonrails.org/ Ruby on Rails] framework.&lt;br /&gt;
&lt;br /&gt;
===Problem Statement===&lt;br /&gt;
The following tasks were listed for this project:&lt;br /&gt;
*The simplest fix: If I try to import topics, the import page gives me this message: “The import process expects the following columns:” but it doesn’t say what the columns are (topic number, topic name, category, number of slots, category)!  It used to be in the system; please revert the change to fix this bug.  See Issue 719.&lt;br /&gt;
*When teams are imported in order to insert new members, the members are not inserted.  See Issue 328.&lt;br /&gt;
*When a team with a duplicate name is imported, one of the options is to rename the new team.  There should also be an option to rename an existing team.  See Issue 329.&lt;br /&gt;
*Review assignments (“reviewer mappings”) should be able to be imported, but cannot be imported.  See Issue 711&lt;br /&gt;
*It should be possible to import a list of users who have signed up for topics, but this feature does not yet exist.  See Issue 153.&lt;br /&gt;
*It should be possible to leave off the final fields in a line of a CSV file.  These fields are often not specified anyway.  For example, if a password isn’t specified when a new user is created, the system generates a password (see Issue 183).  When importing topics, topic categories are rarely specified.  But if the final field is blank, the import requires the CSV line to end with “, “ (comma and space).  This should be fixed for all imports.&lt;br /&gt;
*For every kind of data to be imported, Expertiza currently specifies the ordering of fields.  This isn’t very flexible; it may require the user (an instructor) to edit an existing CSV file.  It would be better if, after importing the data, Expertiza showed the data together with dropdowns containing the default field headers.  (This is similar to the way Excel shows data when it is imported from a CSV file.)  Then the user could change the dropdowns to cause a different ordering of fields.  See Issue 110.&lt;br /&gt;
*Create a way to export a list of teams that have signed up for topics, and who are waitlisted for topics, as well as participants in an assignment who have not signed up for topics. Choose the format, but keep it as consistent as possible with the other export formats.  This would help the professor when students ask him for advice on finding teammates.&lt;br /&gt;
&lt;br /&gt;
===About Versions Controller===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Current Implementation===&lt;br /&gt;
&lt;br /&gt;
When a team with a duplicate name is imported, one of the options is to rename the new team. There should also be an option to rename an existing team. See Issue 329.&lt;br /&gt;
The current implementation allows the user to handle duplicates, by the following techniques&lt;br /&gt;
*ignore the new team&lt;br /&gt;
*replace the existing team with the new team&lt;br /&gt;
*insert any new members into the existing team&lt;br /&gt;
*rename the new team and import&lt;br /&gt;
*rename the existing team and import&lt;br /&gt;
&lt;br /&gt;
=====Functionality=====&lt;br /&gt;
&lt;br /&gt;
The above functionalities make it easier to achieve the goal of handling duplicates while importing.&lt;br /&gt;
&lt;br /&gt;
=====Drawbacks and Solutions=====&lt;br /&gt;
&lt;br /&gt;
The above set of functionalities do not allow User to ever rename an existing team, rather force him rename his own team.&lt;br /&gt;
Thus the above requirement provides the necessary freedom to the User by providing him the option to rename an already existing team.&lt;br /&gt;
&lt;br /&gt;
===New Implementation===&lt;br /&gt;
&lt;br /&gt;
The option has been implemented using the update functionality that is already present in rails models, to update existing values of Active Records. To implement this feature we have also made use of the functionality for generating team names, that is already present within the Team model.&lt;br /&gt;
&lt;br /&gt;
A code snippet is given below:&lt;br /&gt;
  if handle_dups == &amp;quot;renameOldTeam&amp;quot; # rename: rename new team&lt;br /&gt;
       if teamtype.is_a?(CourseTeam)&lt;br /&gt;
         CourseTeam.update(team.id, :name =&amp;gt; self.generate_team_name(Course.find(id).name))&lt;br /&gt;
         return name&lt;br /&gt;
       elsif teamtype.is_a?(AssignmentTeam)&lt;br /&gt;
         AssignmentTeam.update(team.id, :name =&amp;gt; self.generate_team_name(Assignment.find(id).name))&lt;br /&gt;
         return name&lt;br /&gt;
       end&lt;br /&gt;
     end&lt;br /&gt;
&lt;br /&gt;
===Code improvements===&lt;br /&gt;
&lt;br /&gt;
===Testing ===&lt;br /&gt;
====Rspec testing====&lt;br /&gt;
====UI testing====&lt;br /&gt;
&lt;br /&gt;
===References===&lt;/div&gt;</summary>
		<author><name>Rsinha2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=102659</id>
		<title>CSC/ECE 517 Fall 2016/oss E1656</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=102659"/>
		<updated>2016-10-28T04:15:21Z</updated>

		<summary type="html">&lt;p&gt;Rsinha2: /* New Implementation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1656. Improve imports==&lt;br /&gt;
&lt;br /&gt;
This page provides a description of the Expertiza based OSS project. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Introduction to Expertiza===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open source project based on [http://rubyonrails.org/ Ruby on Rails] framework.&lt;br /&gt;
&lt;br /&gt;
===Problem Statement===&lt;br /&gt;
The following tasks were listed for this project:&lt;br /&gt;
*The simplest fix: If I try to import topics, the import page gives me this message: “The import process expects the following columns:” but it doesn’t say what the columns are (topic number, topic name, category, number of slots, category)!  It used to be in the system; please revert the change to fix this bug.  See Issue 719.&lt;br /&gt;
*When teams are imported in order to insert new members, the members are not inserted.  See Issue 328.&lt;br /&gt;
*When a team with a duplicate name is imported, one of the options is to rename the new team.  There should also be an option to rename an existing team.  See Issue 329.&lt;br /&gt;
*Review assignments (“reviewer mappings”) should be able to be imported, but cannot be imported.  See Issue 711&lt;br /&gt;
*It should be possible to import a list of users who have signed up for topics, but this feature does not yet exist.  See Issue 153.&lt;br /&gt;
*It should be possible to leave off the final fields in a line of a CSV file.  These fields are often not specified anyway.  For example, if a password isn’t specified when a new user is created, the system generates a password (see Issue 183).  When importing topics, topic categories are rarely specified.  But if the final field is blank, the import requires the CSV line to end with “, “ (comma and space).  This should be fixed for all imports.&lt;br /&gt;
*For every kind of data to be imported, Expertiza currently specifies the ordering of fields.  This isn’t very flexible; it may require the user (an instructor) to edit an existing CSV file.  It would be better if, after importing the data, Expertiza showed the data together with dropdowns containing the default field headers.  (This is similar to the way Excel shows data when it is imported from a CSV file.)  Then the user could change the dropdowns to cause a different ordering of fields.  See Issue 110.&lt;br /&gt;
*Create a way to export a list of teams that have signed up for topics, and who are waitlisted for topics, as well as participants in an assignment who have not signed up for topics. Choose the format, but keep it as consistent as possible with the other export formats.  This would help the professor when students ask him for advice on finding teammates.&lt;br /&gt;
&lt;br /&gt;
===About Versions Controller===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Current Implementation===&lt;br /&gt;
&lt;br /&gt;
When a team with a duplicate name is imported, one of the options is to rename the new team. There should also be an option to rename an existing team. See Issue 329.&lt;br /&gt;
The current implementation allows the user to handle duplicates, by the following techniques&lt;br /&gt;
*ignore the new team&lt;br /&gt;
*replace the existing team with the new team&lt;br /&gt;
*insert any new members into the existing team&lt;br /&gt;
*rename the new team and import&lt;br /&gt;
*rename the existing team and import&lt;br /&gt;
&lt;br /&gt;
=====Functionality=====&lt;br /&gt;
&lt;br /&gt;
The above functionalities make it easier to achieve the goal of handling duplicates while importing.&lt;br /&gt;
&lt;br /&gt;
=====Drawbacks and Solutions=====&lt;br /&gt;
&lt;br /&gt;
The above set of functionalities do not allow User to ever rename an existing team, rather force him rename his own team.&lt;br /&gt;
Thus the above requirement provides the necessary freedom to the User by providing him the option to rename an already existing team.&lt;br /&gt;
&lt;br /&gt;
===New Implementation===&lt;br /&gt;
&lt;br /&gt;
The option has been implemented using the update functionality that is already present in rails models, to update existing values of Active Records. To implement this feature we have also made use of the functionality for generating team names, that is already present within the Team model.&lt;br /&gt;
&lt;br /&gt;
===Code improvements===&lt;br /&gt;
&lt;br /&gt;
===Testing ===&lt;br /&gt;
====Rspec testing====&lt;br /&gt;
====UI testing====&lt;br /&gt;
&lt;br /&gt;
===References===&lt;/div&gt;</summary>
		<author><name>Rsinha2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=102658</id>
		<title>CSC/ECE 517 Fall 2016/oss E1656</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=102658"/>
		<updated>2016-10-28T04:11:58Z</updated>

		<summary type="html">&lt;p&gt;Rsinha2: /* Current Implementation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1656. Improve imports==&lt;br /&gt;
&lt;br /&gt;
This page provides a description of the Expertiza based OSS project. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Introduction to Expertiza===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open source project based on [http://rubyonrails.org/ Ruby on Rails] framework.&lt;br /&gt;
&lt;br /&gt;
===Problem Statement===&lt;br /&gt;
The following tasks were listed for this project:&lt;br /&gt;
*The simplest fix: If I try to import topics, the import page gives me this message: “The import process expects the following columns:” but it doesn’t say what the columns are (topic number, topic name, category, number of slots, category)!  It used to be in the system; please revert the change to fix this bug.  See Issue 719.&lt;br /&gt;
*When teams are imported in order to insert new members, the members are not inserted.  See Issue 328.&lt;br /&gt;
*When a team with a duplicate name is imported, one of the options is to rename the new team.  There should also be an option to rename an existing team.  See Issue 329.&lt;br /&gt;
*Review assignments (“reviewer mappings”) should be able to be imported, but cannot be imported.  See Issue 711&lt;br /&gt;
*It should be possible to import a list of users who have signed up for topics, but this feature does not yet exist.  See Issue 153.&lt;br /&gt;
*It should be possible to leave off the final fields in a line of a CSV file.  These fields are often not specified anyway.  For example, if a password isn’t specified when a new user is created, the system generates a password (see Issue 183).  When importing topics, topic categories are rarely specified.  But if the final field is blank, the import requires the CSV line to end with “, “ (comma and space).  This should be fixed for all imports.&lt;br /&gt;
*For every kind of data to be imported, Expertiza currently specifies the ordering of fields.  This isn’t very flexible; it may require the user (an instructor) to edit an existing CSV file.  It would be better if, after importing the data, Expertiza showed the data together with dropdowns containing the default field headers.  (This is similar to the way Excel shows data when it is imported from a CSV file.)  Then the user could change the dropdowns to cause a different ordering of fields.  See Issue 110.&lt;br /&gt;
*Create a way to export a list of teams that have signed up for topics, and who are waitlisted for topics, as well as participants in an assignment who have not signed up for topics. Choose the format, but keep it as consistent as possible with the other export formats.  This would help the professor when students ask him for advice on finding teammates.&lt;br /&gt;
&lt;br /&gt;
===About Versions Controller===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Current Implementation===&lt;br /&gt;
&lt;br /&gt;
When a team with a duplicate name is imported, one of the options is to rename the new team. There should also be an option to rename an existing team. See Issue 329.&lt;br /&gt;
The current implementation allows the user to handle duplicates, by the following techniques&lt;br /&gt;
*ignore the new team&lt;br /&gt;
*replace the existing team with the new team&lt;br /&gt;
*insert any new members into the existing team&lt;br /&gt;
*rename the new team and import&lt;br /&gt;
*rename the existing team and import&lt;br /&gt;
&lt;br /&gt;
=====Functionality=====&lt;br /&gt;
&lt;br /&gt;
The above functionalities make it easier to achieve the goal of handling duplicates while importing.&lt;br /&gt;
&lt;br /&gt;
=====Drawbacks and Solutions=====&lt;br /&gt;
&lt;br /&gt;
The above set of functionalities do not allow User to ever rename an existing team, rather force him rename his own team.&lt;br /&gt;
Thus the above requirement provides the necessary freedom to the User by providing him the option to rename an already existing team.&lt;br /&gt;
&lt;br /&gt;
===New Implementation===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Code improvements===&lt;br /&gt;
&lt;br /&gt;
===Testing ===&lt;br /&gt;
====Rspec testing====&lt;br /&gt;
====UI testing====&lt;br /&gt;
&lt;br /&gt;
===References===&lt;/div&gt;</summary>
		<author><name>Rsinha2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=102656</id>
		<title>CSC/ECE 517 Fall 2016/oss E1656</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=102656"/>
		<updated>2016-10-28T03:58:48Z</updated>

		<summary type="html">&lt;p&gt;Rsinha2: /* Introduction to Expertiza */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1656. Improve imports==&lt;br /&gt;
&lt;br /&gt;
This page provides a description of the Expertiza based OSS project. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Introduction to Expertiza===&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open source project based on [http://rubyonrails.org/ Ruby on Rails] framework.&lt;br /&gt;
&lt;br /&gt;
===Problem Statement===&lt;br /&gt;
The following tasks were listed for this project:&lt;br /&gt;
*The simplest fix: If I try to import topics, the import page gives me this message: “The import process expects the following columns:” but it doesn’t say what the columns are (topic number, topic name, category, number of slots, category)!  It used to be in the system; please revert the change to fix this bug.  See Issue 719.&lt;br /&gt;
*When teams are imported in order to insert new members, the members are not inserted.  See Issue 328.&lt;br /&gt;
*When a team with a duplicate name is imported, one of the options is to rename the new team.  There should also be an option to rename an existing team.  See Issue 329.&lt;br /&gt;
*Review assignments (“reviewer mappings”) should be able to be imported, but cannot be imported.  See Issue 711&lt;br /&gt;
*It should be possible to import a list of users who have signed up for topics, but this feature does not yet exist.  See Issue 153.&lt;br /&gt;
*It should be possible to leave off the final fields in a line of a CSV file.  These fields are often not specified anyway.  For example, if a password isn’t specified when a new user is created, the system generates a password (see Issue 183).  When importing topics, topic categories are rarely specified.  But if the final field is blank, the import requires the CSV line to end with “, “ (comma and space).  This should be fixed for all imports.&lt;br /&gt;
*For every kind of data to be imported, Expertiza currently specifies the ordering of fields.  This isn’t very flexible; it may require the user (an instructor) to edit an existing CSV file.  It would be better if, after importing the data, Expertiza showed the data together with dropdowns containing the default field headers.  (This is similar to the way Excel shows data when it is imported from a CSV file.)  Then the user could change the dropdowns to cause a different ordering of fields.  See Issue 110.&lt;br /&gt;
*Create a way to export a list of teams that have signed up for topics, and who are waitlisted for topics, as well as participants in an assignment who have not signed up for topics. Choose the format, but keep it as consistent as possible with the other export formats.  This would help the professor when students ask him for advice on finding teammates.&lt;br /&gt;
&lt;br /&gt;
===About Versions Controller===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Current Implementation===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Functionality=====&lt;br /&gt;
&lt;br /&gt;
=====Drawbacks and Solutions=====&lt;br /&gt;
&lt;br /&gt;
===New Implementation===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Code improvements===&lt;br /&gt;
&lt;br /&gt;
===Testing ===&lt;br /&gt;
====Rspec testing====&lt;br /&gt;
====UI testing====&lt;br /&gt;
&lt;br /&gt;
===References===&lt;/div&gt;</summary>
		<author><name>Rsinha2</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=102654</id>
		<title>CSC/ECE 517 Fall 2016/oss E1656</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2016/oss_E1656&amp;diff=102654"/>
		<updated>2016-10-28T03:58:29Z</updated>

		<summary type="html">&lt;p&gt;Rsinha2: /* Introduction to Expertiza */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==E1656. Improve imports==&lt;br /&gt;
&lt;br /&gt;
This page provides a description of the Expertiza based OSS project. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Introduction to Expertiza===&lt;br /&gt;
____________________________________________________________________________________________________________________________________________________________&lt;br /&gt;
[http://expertiza.ncsu.edu/ Expertiza] is an open source project based on [http://rubyonrails.org/ Ruby on Rails] framework.&lt;br /&gt;
&lt;br /&gt;
===Problem Statement===&lt;br /&gt;
The following tasks were listed for this project:&lt;br /&gt;
*The simplest fix: If I try to import topics, the import page gives me this message: “The import process expects the following columns:” but it doesn’t say what the columns are (topic number, topic name, category, number of slots, category)!  It used to be in the system; please revert the change to fix this bug.  See Issue 719.&lt;br /&gt;
*When teams are imported in order to insert new members, the members are not inserted.  See Issue 328.&lt;br /&gt;
*When a team with a duplicate name is imported, one of the options is to rename the new team.  There should also be an option to rename an existing team.  See Issue 329.&lt;br /&gt;
*Review assignments (“reviewer mappings”) should be able to be imported, but cannot be imported.  See Issue 711&lt;br /&gt;
*It should be possible to import a list of users who have signed up for topics, but this feature does not yet exist.  See Issue 153.&lt;br /&gt;
*It should be possible to leave off the final fields in a line of a CSV file.  These fields are often not specified anyway.  For example, if a password isn’t specified when a new user is created, the system generates a password (see Issue 183).  When importing topics, topic categories are rarely specified.  But if the final field is blank, the import requires the CSV line to end with “, “ (comma and space).  This should be fixed for all imports.&lt;br /&gt;
*For every kind of data to be imported, Expertiza currently specifies the ordering of fields.  This isn’t very flexible; it may require the user (an instructor) to edit an existing CSV file.  It would be better if, after importing the data, Expertiza showed the data together with dropdowns containing the default field headers.  (This is similar to the way Excel shows data when it is imported from a CSV file.)  Then the user could change the dropdowns to cause a different ordering of fields.  See Issue 110.&lt;br /&gt;
*Create a way to export a list of teams that have signed up for topics, and who are waitlisted for topics, as well as participants in an assignment who have not signed up for topics. Choose the format, but keep it as consistent as possible with the other export formats.  This would help the professor when students ask him for advice on finding teammates.&lt;br /&gt;
&lt;br /&gt;
===About Versions Controller===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Current Implementation===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Functionality=====&lt;br /&gt;
&lt;br /&gt;
=====Drawbacks and Solutions=====&lt;br /&gt;
&lt;br /&gt;
===New Implementation===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Code improvements===&lt;br /&gt;
&lt;br /&gt;
===Testing ===&lt;br /&gt;
====Rspec testing====&lt;br /&gt;
====UI testing====&lt;br /&gt;
&lt;br /&gt;
===References===&lt;/div&gt;</summary>
		<author><name>Rsinha2</name></author>
	</entry>
</feed>