create unused courses report

closes PS-442

test plan
 - create an empty course shell
 - courses should show on report
 - add something to the courses
 - courses should not show on the report

Change-Id: If2f47cbb343eee64ad9b485b635f7bf7e8d6f42a
Reviewed-on: https://gerrit.instructure.com/21691
Tested-by: Jenkins <jenkins@instructure.com>
Reviewed-by: Nathan Mills <nathanm@instructure.com>
QA-Review: Adam Phillipps <adam@instructure.com>
Product-Review: Rob Orton <rob@instructure.com>
This commit is contained in:
Rob Orton 2013-07-22 00:09:09 -06:00
parent 5099c8afc3
commit d5eff95ba0
5 changed files with 170 additions and 2 deletions

View File

@ -0,0 +1,19 @@
<p><%= t('account_reports.unused_courses.main.text',
%{This is a report of all courses that have none of the following
items: assignments, announcements, discussions, files, modules,
pages, or quizzes.}) %></p>
<h3><%= t('account_reports.unused_courses.description.header', %{Example}) %></h3>
<table class="report_example">
<thead>
<tr><th>course id</th><th>course sis id</th><th>short name</th>
<th>long name</th><th>status</th><th>created at</th></tr>
</thead>
<tbody>
<tr><td>423945</td><td>c96872</td><td>MAT101</td><td>Math 101</td>
<td>unpublished</td><td>2013-02-26T11:50:36-07:00</td></tr>
<tr><td>423948</td><td>c94378</td><td>SCI101</td><td>Science 101</td>
<td>unpublished</td><td>2013-02-24T08:43:38-07:00</td></tr>
</tbody>
</table>

View File

@ -193,6 +193,17 @@ Rails.configuration.to_prepare do
}
}
},
'unused_courses_csv'=> {
:title => 'Unused Courses',
:description_partial => true,
:parameters_partial => 'term_selector_parameters',
:parameters => {
:enrollment_term_id => {
:required => false,
:description => 'The canvas id of the term to get courses from'
}
}
},
'zero_activity_csv'=> {
:title => 'Zero Activity',
:description_partial => true,

View File

@ -81,6 +81,70 @@ module Canvas::AccountReports
send_report(filename)
end
def unused_courses()
file = Canvas::AccountReports.generate_file(@account_report)
CSV.open(file, "w") do |csv|
courses = root_account.all_courses.active.
select("courses.id, courses.name, courses.course_code,
courses.sis_source_id, courses.created_at,
CASE WHEN courses.workflow_state = 'claimed' THEN 'unpublished'
WHEN courses.workflow_state = 'created' THEN 'unpublished'
WHEN courses.workflow_state = 'completed' THEN 'concluded'
WHEN courses.workflow_state = 'available' THEN 'active'
END AS course_state").
where("NOT EXISTS (SELECT NULL
FROM assignments a
WHERE a.context_id = courses.id
AND a.context_type = 'Course'
AND a.workflow_state <> 'deleted')
AND NOT EXISTS (SELECT NULL
FROM attachments at
WHERE at.context_id = courses.id
AND at.context_type = 'Course'
AND at.workflow_state <> 'deleted')
AND NOT EXISTS (SELECT NULL
FROM discussion_topics d
WHERE d.context_id = courses.id
AND d.context_type = 'Course'
AND d.workflow_state <> 'deleted')
AND NOT EXISTS (SELECT NULL
FROM context_modules m
WHERE m.context_id = courses.id
AND m.context_type = 'Course'
AND m.workflow_state <> 'deleted')
AND NOT EXISTS (SELECT NULL
FROM quizzes q
WHERE q.context_id = courses.id
AND q.context_type = 'Course'
AND q.workflow_state <> 'deleted')
AND NOT EXISTS (SELECT NULL
FROM wiki_pages w
WHERE w.wiki_id = courses.wiki_id
AND w.workflow_state <> 'deleted')")
courses = add_term_scope(courses)
courses = add_course_sub_account_scope(courses)
csv << ['course id','course sis id','short name','long name','status',
'created at']
Shackles.activate(:slave) do
courses.find_each do |c|
row = []
row << c["id"]
row << c["sis_source_id"]
row << c["course_code"]
row << c["name"]
row << c["course_state"]
row << default_timezone_format(c["created_at"])
csv << row
end
end
end
send_report(file)
end
end
end

View File

@ -39,6 +39,10 @@ module Canvas::AccountReports
CourseReports.new(account_report).unpublished_courses
end
def self.unused_courses_csv(account_report)
CourseReports.new(account_report).unused_courses
end
def self.recently_deleted_courses_csv(account_report)
CourseReports.new(account_report).recently_deleted
end

View File

@ -76,7 +76,7 @@ describe "Course Account Reports" do
it "should run unpublished courses report on a term" do
parameters = {}
parameters["enrollment_term"] = @default_term.id
parameters["enrollment_term_id"] = @default_term.id
parsed = ReportSpecHelper.run_report(@account, @report, parameters)
parsed.length.should == 1
@ -114,7 +114,7 @@ describe "Course Account Reports" do
it "should run recently deleted courses report on a term" do
@course1.destroy
parameters = {}
parameters["enrollment_term"] = @default_term.id
parameters["enrollment_term_id"] = @default_term.id
parsed = ReportSpecHelper.run_report(@account, @report, parameters)
parsed.length.should == 1
@ -145,4 +145,74 @@ describe "Course Account Reports" do
"Math 101", nil, nil]
end
end
describe "Unused Course report" do
before(:each) do
@type = 'unused_courses_csv'
@course6 = Course.create(:name => 'Theology 101', :course_code => 'THE01',
:account => @account)
@assignment = @course1.assignments.create(:title => "some assignment",
:points_possible => "5")
@discussion = @course2.discussion_topics.create!(:message => "hi")
@attachment = attachment_model(:context => @course3)
@module = @course4.context_modules.create!(:name => "some module")
@quiz = @course5.quizzes.create!(:title => "new quiz")
end
it "should find courses with no active objects" do
@assignment.destroy
parsed = ReportSpecHelper.run_report(@account,@type,{},3)
parsed.length.should == 2
parsed[0].should == [@course1.id.to_s, "SIS_COURSE_ID_1", "ENG101",
"English 101", "unpublished",
@course1.created_at.iso8601]
parsed[1].should == [@course6.id.to_s, nil, "THE01",
"Theology 101", "unpublished",
@course6.created_at.iso8601]
end
it "should not find courses with objects" do
@wiki_page = @course6.wiki.wiki_pages.create(
:title => "Some random wiki page",
:body => "wiki page content")
parsed = ReportSpecHelper.run_report(@account,@type,{},3)
parsed.length.should == 0
end
it "should run unused courses report with a term" do
@term1 = @account.enrollment_terms.create(:name => 'Fall')
@assignment.destroy
@course5.enrollment_term = @term1
@course5.save
@course6.enrollment_term = @term1
@course6.save
parameters = {}
parameters["enrollment_term_id"] = @term1.id
parsed = ReportSpecHelper.run_report(@account,@type,parameters,3)
parsed.length.should == 1
parsed[0].should == [@course6.id.to_s, nil, "THE01",
"Theology 101", "unpublished",
@course6.created_at.iso8601]
end
it "should run unused courses report on a sub account" do
sub_account = Account.create(:parent_account => @account,
:name => 'English')
@course3.account = sub_account
@course3.save
@course4.account = sub_account
@course4.save
@module.destroy
parsed = ReportSpecHelper.run_report(sub_account,@type,{},3)
parsed.length.should == 1
parsed[0].should == [@course4.id.to_s, nil, "self",
"self help", "active",
@course4.created_at.iso8601]
end
end
end