Skip to content

Commit

Permalink
Fixing issue: #248
Browse files Browse the repository at this point in the history
  • Loading branch information
professor committed Nov 27, 2013
1 parent 7a0a5f3 commit 250949d
Show file tree
Hide file tree
Showing 8 changed files with 21 additions and 129 deletions.
65 changes: 1 addition & 64 deletions app/controllers/effort_logs_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,41 +13,16 @@ def create_midweek_warning_email
if (!EffortLog.log_effort_week?(Date.today.cwyear, Date.today.cweek))
#We skip weeks that students aren't taking courses
logger.info "There is no class this week, so we won't remind students to log effort"
# flash[:error] = 'Students are taking courses this week'
# redirect_to(root_path)
return
end

@people_with_effort = Array.new
@people_without_effort = Array.new
random_scotty_saying = ScottyDogSaying.all.sample.saying

courses = Course.remind_about_effort_course_list
courses.each do |course_id|
create_midweek_warning_email_for_course(random_scotty_saying, course_id)
end

#No longer required for all SE students
#(with_effort, without_effort) = create_midweek_warning_email_for_se_students(random_scotty_saying)
#@people_with_effort = @people_with_effort + with_effort
#@people_without_effort = @people_without_effort + without_effort

EffortLogMailer.midweek_warning_admin_report(random_scotty_saying, @people_without_effort, @people_with_effort).deliver

logger.info "There were #{@people_without_effort.size} without effort."
@people_without_effort.each do |user|
logger.debug "#{user}"
end
logger.info "There were #{@people_with_effort.size} with effort."
@people_with_effort.each do |user|
logger.debug "#{user}"
end

# respond_to do |format|
# format.html # index.html.erb
# end
# render(:text => "E-Mail sent")

end

def create_midweek_warning_email_for_course(random_scotty_saying, course_id)
Expand All @@ -60,49 +35,11 @@ def create_midweek_warning_email_for_course(random_scotty_saying, course_id)
logger.debug "** user #{user.human_name}"
effort_log = EffortLog.where(:user_id => user.id, :week_number => week_number, :year => year).first
if (!user.emailed_recently(:effort_log))
if ((effort_log.nil? || effort_log.sum == 0)&&(!user.emailed_recently(:effort_log)))
# logger.debug "** sent email to #{user.human_name} (#{user.id}) for #{week_number} of #{year} in course #{course_id}"
create_midweek_warning_email_send_it(random_scotty_saying, user.id)
@people_without_effort << user.human_name
else
logger.debug "** no email to #{user.human_name} (#{user.id}) for #{week_number} of #{year} in course #{course_id}"
@people_with_effort << user.human_name
end
user.effort_log_warning_email = Time.now
user.save
end
end
end

def create_midweek_warning_email_for_se_students(random_scotty_saying)
users_without_effort = []
users_with_effort = []
year = Date.today.cwyear
week_number = Date.today.cweek
users = User.where(:masters_program => "SE", :is_active => true, :is_alumnus => false)

users.each do |user|
effort_log = EffortLog.latest_for_user(user.id, week_number, year)
if (!user.emailed_recently(:effort_log))
if ((effort_log.nil? || effort_log.sum == 0)&&(!user.emailed_recently(:effort_log)))
create_midweek_warning_email_send_it(random_scotty_saying, user.id)
users_without_effort << user.human_name
else
users_with_effort << user.human_name
end
EffortLogMailer.midweek_warning(random_scotty_saying, user).deliver
user.effort_log_warning_email = Time.now
user.save
end
end
return users_without_effort, users_with_effort
end


def create_midweek_warning_email_send_it(random_scotty_saying, id)
user = User.find_by_id(id)
EffortLogMailer.midweek_warning(random_scotty_saying, user).deliver
#render(:text => "<pre>" + email.encoded + "</pre>")

end

def create_endweek_faculty_email
Expand Down
12 changes: 0 additions & 12 deletions app/mailers/effort_log_mailer.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,23 +5,11 @@ class EffortLogMailer < ActionMailer::Base

def midweek_warning(saying, user)
@user = user
email_with_name = @user.human_name + ' <' + @user.email + '>'

attachments["ScottyDogLandscape.jpg"] = File.read("#{Rails.root}/public/images/ScottyDogLandscape.jpg")
mail(:to => @user.email, :subject => "Scotty Dog says: #{saying}", :date => Time.now)

end

def midweek_warning_admin_report(saying, people_without_effort, people_with_effort)
@saying = saying
@people_without_effort = people_without_effort
@people_with_effort = people_with_effort
#consider using an list array for this up e.g EmailsArray.all.map(&:email).join(", ")
faculty = ['[email protected]', '[email protected]', '[email protected]']

mail(:to => faculty, :subject => "Scotty Dog Midweek Warning Email Summary", :date => Time.now)
end

def endweek_admin_report(course_id, course_name, faculty_emails)
@course_id = course_id
@course_name = course_name
Expand Down
3 changes: 2 additions & 1 deletion app/views/effort_log_mailer/midweek_warning.html.erb
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
<p>To <%= @user.human_name %>,</p>
<p>This is a friendly reminder that you have not created an effort log or logged effort for this week.</p>
<p>Please update your effort logs today. Effort logs are due each week on Sunday by midnight (Pacific Time). You have a 24 hour grace period. You will not be able to create or edit after logs after the grace period.
We don't remember what we had for lunch yesterday and we don't think you'll remember what you were doing last week.</p>
<p><a href="http://whiteboard.sv.cmu.edu/effort_logs">To log effort</a></p>
<br/>
<br/>
Expand Down
3 changes: 2 additions & 1 deletion app/views/effort_log_mailer/midweek_warning.text.erb
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
To <%= @user.human_name %>,

This is a friendly reminder that you have not created an effort log or logged effort for this week.
Please update your effort logs today. Effort logs are due each week on Sunday by midnight (Pacific Time). You have a 24 hour grace period. You will not be able to create or edit after logs after the grace period.
We don't remember what we had for lunch yesterday and we don't think you'll remember what you were doing last week.

href=http://whiteboard.sv.cmu.edu/effort_logs

Expand Down
14 changes: 8 additions & 6 deletions app/views/effort_logs/index.html.erb
Original file line number Diff line number Diff line change
@@ -1,6 +1,14 @@
<% content_for :title, 'Effort Logs' %>
<h1>Listing Effort Logs</h1>

<br/>

<p>Note: Every week, you'll be able to create a new effort log entry. Effort logs are due each week on Sunday by
midnight (Pacific Time).
You have a 24 hour grace period. You will not be able to create or edit after logs after the grace period. We don't
remember what we had for lunch yesterday and we don't think you'll remember what you were doing last week.</p>
<br/>

<table>
<tr>
<th>Week number</th>
Expand Down Expand Up @@ -53,11 +61,5 @@
</table>

<br/>

<p>Note: Every week, you'll be able to create a new effort log entry. Effort logs are due each week on Sunday by
midnight (Pacific Time).
You have a 24 hour grace period. You will not be able to create or edit after logs after the grace period. We don't
remember what we had for lunch yesterday and we don't think you'll remember what you were doing last week.</p>
<br/>
<p><%= link_to 'Back', '/' %></p>
<br/>
2 changes: 1 addition & 1 deletion lib/tasks/cron.rake
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ task :cron do

puts "---Running task :cron"

if Date.today.wday == 5 # run on Fridays
if Date.today.wday == 5 || Date.today.wday == 0 # run on Fridays and Sundays
puts "----Updating cmu:effort_log_midweek_warning_email"
Rake::Task['cmu:effort_log_midweek_warning_email'].invoke
puts "----done."
Expand Down
6 changes: 0 additions & 6 deletions lib/tasks/effort_log_midweek_warning_email.rake
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,6 @@ require 'rake'
namespace :cmu do
desc "Create midweek Scotty Dog warning emails"
task(:effort_log_midweek_warning_email => :environment) do
## RAILS_ENV = ENV['RAILS_ENV'] = 'test'

#if !File.exists?(Dir.pwd+"/config/database.yml")
# FileUtils.copy(Dir.pwd+"/config/database.cc.yml", Dir.pwd+"/config/database.yml")
#end

a = EffortLogsController.new()
a.create_midweek_warning_email()

Expand Down
45 changes: 7 additions & 38 deletions spec/controllers/effort_logs_controller_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@
context "and there are courses that have students" do
before do
Course.stub(:remind_about_effort_course_list).and_return([FactoryGirl.create(:mfse)])
@person = User.new(:first_name => "Frodo", :last_name => "Baggins", :human_name => "")
@person = User.new(:first_name => "Frodo", :last_name => "Baggins", :human_name => "Frodo Baggins")
Course.any_instance.stub(:registered_students).and_return([@person])
end

Expand All @@ -137,19 +137,19 @@

it "it should send an email if the person has never been emailed" do
@person.effort_log_warning_email = nil
subject.should_receive(:create_midweek_warning_email_send_it)
EffortLogMailer.should_receive(:midweek_warning).and_return(double(EffortLogMailer, :deliver => true))
subject.create_midweek_warning_email
end

it "it should send an email if the person not been emailed recently " do
@person.effort_log_warning_email = Time.now - 3.day
subject.should_receive(:create_midweek_warning_email_send_it)
EffortLogMailer.should_receive(:midweek_warning).and_return(double(EffortLogMailer, :deliver => true))
subject.create_midweek_warning_email
end

it "it should not send an email if the person has been emailed recently" do
@person.effort_log_warning_email = Time.now
subject.should_not_receive(:create_midweek_warning_email_send_it)
EffortLogMailer.should_not_receive(:midweek_warning)
subject.create_midweek_warning_email
end
end
Expand All @@ -162,19 +162,19 @@

it "it should send an email if the person has never been emailed" do
@person.effort_log_warning_email = nil
subject.should_receive(:create_midweek_warning_email_send_it)
EffortLogMailer.should_receive(:midweek_warning).and_return(double(EffortLogMailer, :deliver => true))
subject.create_midweek_warning_email
end

it "it should send an email if the person not been emailed recently " do
@person.effort_log_warning_email = Time.now - 3.day
subject.should_receive(:create_midweek_warning_email_send_it)
EffortLogMailer.should_receive(:midweek_warning).and_return(double(EffortLogMailer, :deliver => true))
subject.create_midweek_warning_email
end

it "it should not send an email if the person has been emailed recently" do
@person.effort_log_warning_email = Time.now
subject.should_not_receive(:create_midweek_warning_email_send_it)
EffortLogMailer.should_not_receive(:midweek_warning)
subject.create_midweek_warning_email
end
end
Expand All @@ -189,36 +189,5 @@
end
end

context "it should send midweekly reminder email to SE students" do
it "who have not logged effort" do
person_who_needs_reminder = FactoryGirl.create(:student_sam, :effort_log_warning_email => Date.today - 1.day)
User.stub(:where).and_return([person_who_needs_reminder])
EffortLog.stub!(:latest_for_user).and_return(nil)

(people_without_effort, people_with_effort) = subject.create_midweek_warning_email_for_se_students("random saying")
people_without_effort[0].should == person_who_needs_reminder.human_name
people_with_effort.size.should == 0
end

it "but skip those who have already been emailed" do
person_whose_been_reminded = FactoryGirl.create(:faculty_frank, :effort_log_warning_email => Date.today)
User.stub(:where).and_return([person_whose_been_reminded])
EffortLog.stub!(:latest_for_user).and_return(nil)

(people_without_effort, people_with_effort) = subject.create_midweek_warning_email_for_se_students("random saying")
people_without_effort.size.should == 0
people_with_effort.size.should == 0
end

it "and not bother people who have logged effort" do
person_who_has_logged_effort = FactoryGirl.create(:admin_andy, :effort_log_warning_email => Date.today - 7.days)
User.stub(:where).and_return([person_who_has_logged_effort])
EffortLog.stub(:latest_for_user).and_return(mock_model(EffortLog, :sum => 1))

(people_without_effort, people_with_effort) = subject.create_midweek_warning_email_for_se_students("random saying")
people_without_effort.size.should == 0
people_with_effort[0].should == person_who_has_logged_effort.human_name
end

end
end

0 comments on commit 250949d

Please sign in to comment.