CSC/ECE 517 Fall 2019 - E1938. OSS project Duke Blue: Fix import glitches: Difference between revisions

From Expertiza_Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
Line 67: Line 67:
<br>
<br>


<strong>Issue #329<br></strong>
<strong>Issue #153<br></strong>
This was a new requirement to add an option to upload topics along with the teams assigned.
This was a new requirement to add an option to upload topics along with the teams assigned.



Revision as of 01:17, 29 October 2019

Issue #918

New code introduced is as follows.
File:app/helpers/import_topics_helper.rb
Code: def self.define_attributes(row_hash)

   attributes = {}
   if !row_hash[:description].nil? and !row_hash[:description].ascii_only?
     row_hash[:description] = self.trim_non_ascii(row_hash[:description])
     puts row_hash[:description]
   end
   attributes["topic_identifier"] = row_hash[:topic_identifier].strip
   attributes["topic_name"] = row_hash[:topic_name].strip
   attributes["max_choosers"] = row_hash[:max_choosers].strip
   attributes
 end
 def self.trim_non_ascii(string)
   string.split().each do |char|
     !char.ascii_only? ? string.tr!(char, ' ') : nil
   end
   string.gsub!(/\s+/, ' ')
 end

Issue #328

This was an issue to fix the functionality of Insert any new members into existing team. This was due to faulty handling of the option handle_dups and incorrect checking of parameters.
Code was modified to ensure minimal impact to existing testcases and functionalities. Code:

     name = handle_duplicate(team, name, id, options["handle_dups"], teamtype)



After fixing changes


Issue #329

This was a request to add an option to rename existing team if there was a conflict in the team name.
New code introduced was as follows:
In start.html.erb

         <option value="rename_existing">rename the existing team and import</option>


In team.rb

   # E1938: Added handling for renaming old team when conflict arises
   if handle_dups == "rename_existing"
     if teamtype.is_a?(CourseTeam.class)
       team.update(name: self.generate_team_name(Course.find(id).name))
     elsif  teamtype.is_a?(AssignmentTeam.class)
       team.update(name: self.generate_team_name(Assignment.find(id).name))
     end
     return name
   end


The state of D before conflicting import:



After fixing changes


As you can see the new team got the name D and the old file got renamed to Team_17.

Issue #153
This was a new requirement to add an option to upload topics along with the teams assigned.

Code Changes: import_file/_sign_up_topic.html.erb (All the select tags has been changed

           <select name="select1" id="select1" class="form-control" style="background-color:lightgrey">
             <option value="topic_identifier">Topic Identifier (required)</option>
             <option value="topic_name">Topic Name (required)</option>
             <option value="max_choosers">Max Choosers (required)</option>
             <option value="category">Category (optional)</option>
             <option value="description">Description (optional)</option>
             <option value="link">Link (optional)</option>
             <option value="assigned_team">Assigned Team (optional)</option>
           </select>


model/sing_up_topic.rb def self.import(row_hash, session, _id = nil) if row_hash.length < 3 raise ArgumentError, "The CSV File expects the format: Topic identifier, Topic name, Max choosers, Topic Category (optional), Topic Description (Optional), Topic Link (optional), Assigned Team Name (optional)." end topic = SignUpTopic.where(topic_name: row_hash[:topic_name], assignment_id: session[:assignment_id]).first if topic.nil? attributes = ImportTopicsHelper.define_attributes(row_hash) topic_new_id = ImportTopicsHelper.create_new_sign_up_topic(attributes, session) unless row_hash[:assigned_team].nil? team = Team.where(name: row_hash[:assigned_team]).first ImportTopicsHelper.assign_team_topic(topic_new_id, team.id) end else topic.max_choosers = row_hash[:max_choosers] topic.topic_identifier = row_hash[:topic_identifier] # topic.assignment_id = session[:assignment_id] topic.save unless row_hash[:assigned_team].nil? team = Team.where(name: row_hash[:assigned_team]).first newteam = SignedUpTeam.where(topic_id: topic.id, team_id: team.id).first if newteam.nil? ImportTopicsHelper.assign_team_topic(topic.id, team.id) else newteam.team_id = team.id newteam.save end end end end
helpers/import_topics_helper.rb def self.assign_team_topic(topic_id, assigned_team) attributes = {} attributes["topic_id"] = topic_id attributes["team_id"] = assigned_team assign_team = SignedUpTeam.new(attributes) assign_team.save! end def self.create_new_sign_up_topic(attributes, session) sign_up_topic = SignUpTopic.new(attributes) sign_up_topic.assignment_id = session[:assignment_id] sign_up_topic.save # sign_up_topic sign_up_topic.save! sign_up_topic.id end controllers/import_file_controller.rb (Optional Count) if (params[:assigned_team] == 'true') @optional_count += 1 end controllers/import_file_controller.rb (import_from_hash) elsif params[:optional_count] == '4' new_header = [params[:select1], params[:select2], params[:select3], params[:select4], params[:select5], params[:select6], params[:select7]] @header_integrated_body = hash_rows_with_headers(new_header,contents_hash[:body]) views/sign_up_sheet/_add_topics.html.erb <%= link_to 'Import topics', { :controller => 'import_file', :action => 'start', :model => 'SignUpTopic', :id => params[:id], :expected_fields => 'Topic Identifier' + '&nbsp&nbsp|&nbsp&nbsp' + 'Topic Name' + '&nbsp&nbsp|&nbsp&nbsp' + 'Max Choosers' + '&nbsp&nbsp|&nbsp&nbsp' + 'Topic Category (optional)' + '&nbsp&nbsp|&nbsp&nbsp' + 'Topic Description (optional)' + '&nbsp&nbsp|&nbsp&nbsp' + 'Topic Link (optional)' + '&nbsp&nbsp|&nbsp&nbsp' + 'Assigned Team (optional)' An option column checkbox (Teams Assigned) has been added to the UI



A new column Assigned Team is added where the columns are being mapped.