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:
parent
5099c8afc3
commit
d5eff95ba0
19
vendor/plugins/account_reports/app/views/accounts/_unused_courses_csv_description.html.erb
vendored
Normal file
19
vendor/plugins/account_reports/app/views/accounts/_unused_courses_csv_description.html.erb
vendored
Normal 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>
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue