Description:
fix submission report, when submissions belong no non-existing user
Commit status:
[Not Reviewed]
References:
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r415:8de9a512ac85 - - 1 file changed: 13 inserted, 11 deleted

@@ -6,65 +6,67
6 begin
6 begin
7 @since_time = DateTime.strptime(params[:since_datetime],date_and_time)
7 @since_time = DateTime.strptime(params[:since_datetime],date_and_time)
8 rescue
8 rescue
9 @since_time = DateTime.new(1000,1,1)
9 @since_time = DateTime.new(1000,1,1)
10 end
10 end
11 begin
11 begin
12 @until_time = DateTime.strptime(params[:until_datetime],date_and_time)
12 @until_time = DateTime.strptime(params[:until_datetime],date_and_time)
13 rescue
13 rescue
14 @until_time = DateTime.new(3000,1,1)
14 @until_time = DateTime.new(3000,1,1)
15 end
15 end
16
16
17 User.all.each do |user|
17 User.all.each do |user|
18 @logins << { login: user.login,
18 @logins << { login: user.login,
19 full_name: user.full_name,
19 full_name: user.full_name,
20 count: Login.where("user_id = ? AND created_at >= ? AND created_at <= ?",
20 count: Login.where("user_id = ? AND created_at >= ? AND created_at <= ?",
21 user.id,@since_time,@until_time)
21 user.id,@since_time,@until_time)
22 .count(:id),
22 .count(:id),
23 min: Login.where("user_id = ? AND created_at >= ? AND created_at <= ?",
23 min: Login.where("user_id = ? AND created_at >= ? AND created_at <= ?",
24 user.id,@since_time,@until_time)
24 user.id,@since_time,@until_time)
25 .minimum(:created_at),
25 .minimum(:created_at),
26 max: Login.where("user_id = ? AND created_at >= ? AND created_at <= ?",
26 max: Login.where("user_id = ? AND created_at >= ? AND created_at <= ?",
27 user.id,@since_time,@until_time)
27 user.id,@since_time,@until_time)
28 .maximum(:created_at)
28 .maximum(:created_at)
29 }
29 }
30 end
30 end
31 end
31 end
32
32
33 def submission_stat
33 def submission_stat
34
34
35 date_and_time = '%Y-%m-%d %H:%M'
35 date_and_time = '%Y-%m-%d %H:%M'
36 begin
36 begin
37 @since_time = DateTime.strptime(params[:since_datetime],date_and_time)
37 @since_time = DateTime.strptime(params[:since_datetime],date_and_time)
38 rescue
38 rescue
39 @since_time = DateTime.new(1000,1,1)
39 @since_time = DateTime.new(1000,1,1)
40 end
40 end
41 begin
41 begin
42 @until_time = DateTime.strptime(params[:until_datetime],date_and_time)
42 @until_time = DateTime.strptime(params[:until_datetime],date_and_time)
43 rescue
43 rescue
44 @until_time = DateTime.new(3000,1,1)
44 @until_time = DateTime.new(3000,1,1)
45 end
45 end
46
46
47 @submissions = {}
47 @submissions = {}
48
48
49 User.find_each do |user|
49 User.find_each do |user|
50 @submissions[user.id] = { login: user.login, full_name: user.full_name, count: 0, sub: { } }
50 @submissions[user.id] = { login: user.login, full_name: user.full_name, count: 0, sub: { } }
51 end
51 end
52
52
53 Submission.where("submitted_at >= ? AND submitted_at <= ?",@since_time,@until_time).find_each do |s|
53 Submission.where("submitted_at >= ? AND submitted_at <= ?",@since_time,@until_time).find_each do |s|
54 - if not @submissions[s.user_id][:sub].has_key?(s.problem_id)
54 + if @submissions[s.user_id]
55 - a = nil
55 + if not @submissions[s.user_id][:sub].has_key?(s.problem_id)
56 - begin
57 - a = Problem.find(s.problem_id)
58 - rescue
59 a = nil
56 a = nil
57 + begin
58 + a = Problem.find(s.problem_id)
59 + rescue
60 + a = nil
61 + end
62 + @submissions[s.user_id][:sub][s.problem_id] =
63 + { prob_name: (a ? a.full_name : '(NULL)'),
64 + sub_ids: [s.id] }
65 + else
66 + @submissions[s.user_id][:sub][s.problem_id][:sub_ids] << s.id
60 end
67 end
61 - @submissions[s.user_id][:sub][s.problem_id] =
68 + @submissions[s.user_id][:count] += 1
62 - { prob_name: (a ? a.full_name : '(NULL)'),
63 - sub_ids: [s.id] }
64 - else
65 - @submissions[s.user_id][:sub][s.problem_id][:sub_ids] << s.id
66 end
69 end
67 - @submissions[s.user_id][:count] += 1
68 end
70 end
69 end
71 end
70 end
72 end
You need to be logged in to leave comments. Login now