gaku_core 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/controllers/gaku/core_controller.rb +3 -8
- data/app/decorators/gaku/course_decorator.rb +1 -2
- data/app/decorators/gaku/guardian_decorator.rb +1 -1
- data/app/decorators/gaku/person_decorator.rb +8 -12
- data/app/decorators/gaku/student_decorator.rb +0 -2
- data/app/decorators/gaku/teacher_decorator.rb +1 -1
- data/app/models/concerns/addresses.rb +6 -6
- data/app/models/concerns/contacts.rb +6 -6
- data/app/models/concerns/enrollmentable.rb +9 -0
- data/app/models/concerns/gradable.rb +14 -0
- data/app/models/concerns/notes.rb +1 -2
- data/app/models/concerns/pagination.rb +1 -2
- data/app/models/concerns/person.rb +0 -2
- data/app/models/concerns/picture.rb +1 -3
- data/app/models/concerns/semesterable.rb +12 -0
- data/app/models/concerns/student_reviewable.rb +7 -0
- data/app/models/gaku/ability.rb +2 -4
- data/app/models/gaku/address.rb +11 -10
- data/app/models/gaku/admin_ability.rb +0 -1
- data/app/models/gaku/assignment.rb +0 -2
- data/app/models/gaku/assignment_score.rb +0 -1
- data/app/models/gaku/attachment.rb +1 -4
- data/app/models/gaku/attendance.rb +0 -2
- data/app/models/gaku/attendance_type.rb +0 -2
- data/app/models/gaku/badge.rb +0 -2
- data/app/models/gaku/badge_type.rb +0 -1
- data/app/models/gaku/class_group.rb +13 -13
- data/app/models/gaku/commute_method_type.rb +0 -2
- data/app/models/gaku/contact.rb +6 -36
- data/app/models/gaku/contact_type.rb +0 -2
- data/app/models/gaku/country.rb +0 -3
- data/app/models/gaku/course.rb +11 -25
- data/app/models/gaku/course_group.rb +0 -2
- data/app/models/gaku/course_group_enrollment.rb +3 -4
- data/app/models/gaku/department.rb +0 -2
- data/app/models/gaku/enrollment.rb +85 -0
- data/app/models/gaku/enrollment_status.rb +0 -2
- data/app/models/gaku/exam.rb +17 -22
- data/app/models/gaku/exam_portion.rb +2 -6
- data/app/models/gaku/exam_portion_score.rb +0 -2
- data/app/models/gaku/exam_schedule.rb +0 -1
- data/app/models/gaku/exam_session.rb +14 -0
- data/app/models/gaku/exam_syllabus.rb +2 -6
- data/app/models/gaku/external_school_record.rb +1 -9
- data/app/models/gaku/extracurricular_activity.rb +1 -2
- data/app/models/gaku/faculty.rb +0 -2
- data/app/models/gaku/grading_method.rb +14 -2
- data/app/models/gaku/grading_method_connector.rb +35 -0
- data/app/models/gaku/grading_method_set.rb +6 -4
- data/app/models/gaku/grading_method_set_item.rb +4 -5
- data/app/models/gaku/guardian.rb +1 -3
- data/app/models/gaku/install.rb +0 -2
- data/app/models/gaku/lesson.rb +0 -1
- data/app/models/gaku/lesson_plan.rb +0 -2
- data/app/models/gaku/level.rb +0 -2
- data/app/models/gaku/preset.rb +18 -18
- data/app/models/gaku/program.rb +0 -2
- data/app/models/gaku/program_level.rb +0 -2
- data/app/models/gaku/program_specialty.rb +0 -2
- data/app/models/gaku/program_syllabus.rb +0 -2
- data/app/models/gaku/role.rb +0 -2
- data/app/models/gaku/schedule.rb +0 -1
- data/app/models/gaku/scholarship_status.rb +0 -2
- data/app/models/gaku/school.rb +0 -2
- data/app/models/gaku/school_role.rb +0 -2
- data/app/models/gaku/school_year.rb +4 -2
- data/app/models/gaku/semester.rb +21 -6
- data/app/models/gaku/semester_attendance.rb +14 -0
- data/app/models/gaku/semester_connector.rb +27 -0
- data/app/models/gaku/simple_grade.rb +0 -2
- data/app/models/gaku/simple_grade_type.rb +0 -1
- data/app/models/gaku/specialty.rb +0 -2
- data/app/models/gaku/state.rb +0 -3
- data/app/models/gaku/student.rb +47 -45
- data/app/models/gaku/student_exam_session.rb +11 -0
- data/app/models/gaku/student_guardian.rb +0 -2
- data/app/models/gaku/student_review.rb +11 -0
- data/app/models/gaku/student_review_category.rb +13 -0
- data/app/models/gaku/student_specialty.rb +2 -5
- data/app/models/gaku/syllabus.rb +0 -4
- data/app/models/gaku/teacher.rb +0 -2
- data/app/models/gaku/template.rb +7 -9
- data/app/models/gaku/user.rb +10 -22
- data/app/models/gaku/user_role.rb +0 -2
- data/app/services/gaku/contact_creation.rb +49 -0
- data/app/services/gaku/contact_updation.rb +41 -0
- data/app/services/gaku/student_selection.rb +57 -0
- data/app/services/gaku/user_creator.rb +31 -0
- data/config/initializers/devise.rb +1 -1
- data/config/initializers/redis.rb +5 -0
- data/config/locales/en.yml +79 -15
- data/config/routes.rb +5 -10
- data/db/default/gaku/attendance_types.rb +14 -16
- data/db/default/gaku/commute_method_types.rb +2 -4
- data/db/default/gaku/enrollment_status.rb +3 -3
- data/db/default/gaku/master_school.rb +7 -6
- data/db/default/gaku/presets.rb +6 -9
- data/db/default/gaku/scholarship_statuses.rb +1 -1
- data/db/migrate/20140128141752_change_grading_methods_arguments_field.rb +5 -0
- data/db/migrate/20140213113405_create_grading_method_connectors_table.rb +9 -0
- data/db/migrate/20140304094422_create_gaku_exam_sessions_table.rb +10 -0
- data/db/migrate/20140304101025_create_gaku_student_exam_session_table.rb +8 -0
- data/db/migrate/20140325073941_add_time_format_24_to_presets_table.rb +5 -0
- data/db/migrate/20140408111314_remove_semester_join_tables.rb +6 -0
- data/db/migrate/20140408111358_create_semester_connectors_table.rb +8 -0
- data/db/migrate/20140423093155_create_enrollments_table.rb +11 -0
- data/db/migrate/20140423100114_clean_enrollments_join_models.rb +8 -0
- data/db/migrate/20140429112725_add_counters_to_enrollmentable.rb +11 -0
- data/db/migrate/20140604104210_rename_method_to_grading_method.rb +5 -0
- data/db/migrate/20140604113045_add_default_value_to_curved.rb +5 -0
- data/db/migrate/20140610091053_add_seat_number_to_enrollments.rb +5 -0
- data/db/migrate/20140701104700_change_hstore_to_string_criteria.rb +5 -0
- data/db/migrate/20140715135152_create_semester_attendance_table.rb +16 -0
- data/db/migrate/20140718105226_create_student_review_categories_table.rb +13 -0
- data/db/migrate/20140728121353_create_student_review_table.rb +12 -0
- data/db/seeds.rb +1 -1
- data/lib/gaku/core.rb +2 -1
- data/lib/gaku/core/engine.rb +7 -5
- data/lib/gaku/core/url_helpers.rb +1 -1
- data/lib/gaku/grading/collection/base_method.rb +30 -0
- data/lib/gaku/grading/collection/calculations.rb +36 -0
- data/lib/gaku/grading/collection/interval.rb +55 -0
- data/lib/gaku/grading/collection/ordinal.rb +10 -0
- data/lib/gaku/grading/collection/percentage.rb +10 -0
- data/lib/gaku/grading/collection/result.rb +18 -0
- data/lib/gaku/grading/collection/score.rb +10 -0
- data/lib/gaku/grading/single/base_method.rb +30 -0
- data/lib/gaku/grading/single/calculations.rb +42 -0
- data/lib/gaku/grading/single/interval.rb +7 -0
- data/lib/gaku/grading/single/ordinal.rb +30 -0
- data/lib/gaku/grading/single/pass_fail.rb +2 -0
- data/lib/gaku/grading/single/percentage.rb +26 -0
- data/lib/gaku/grading/single/ratio.rb +2 -0
- data/lib/gaku/grading/single/result.rb +18 -0
- data/lib/gaku/grading/single/score.rb +15 -0
- data/lib/gaku/migrations.rb +1 -1
- data/lib/gaku/streamer/sse.rb +5 -5
- data/lib/gaku/testing/auth_helpers.rb +6 -2
- data/lib/gaku/testing/common_rake.rb +9 -3
- data/lib/gaku/testing/controller_helpers.rb +17 -12
- data/lib/gaku/testing/coverage.rb +1 -1
- data/lib/gaku/testing/deferred_garbage_collection.rb +3 -3
- data/lib/gaku/testing/factories/attachment_factory.rb +0 -1
- data/lib/gaku/testing/factories/attendance_type_factory.rb +1 -1
- data/lib/gaku/testing/factories/class_group_factory.rb +12 -1
- data/lib/gaku/testing/factories/contact_creation_factory.rb +18 -0
- data/lib/gaku/testing/factories/course_enrollment_factory.rb +9 -9
- data/lib/gaku/testing/factories/course_factory.rb +2 -4
- data/lib/gaku/testing/factories/course_group_factory.rb +2 -4
- data/lib/gaku/testing/factories/enrollment_factory.rb +10 -0
- data/lib/gaku/testing/factories/exam_factory.rb +1 -1
- data/lib/gaku/testing/factories/exam_portion_factory.rb +2 -4
- data/lib/gaku/testing/factories/exam_score_factory.rb +1 -1
- data/lib/gaku/testing/factories/exam_session_factory.rb +14 -0
- data/lib/gaku/testing/factories/extracurricular_activity_factory.rb +1 -1
- data/lib/gaku/testing/factories/grading_method_connector_factory.rb +11 -0
- data/lib/gaku/testing/factories/grading_method_factory.rb +3 -2
- data/lib/gaku/testing/factories/guardian_factory.rb +2 -4
- data/lib/gaku/testing/factories/lesson_plan_factory.rb +2 -2
- data/lib/gaku/testing/factories/preset_factory.rb +7 -7
- data/lib/gaku/testing/factories/program_factory.rb +0 -1
- data/lib/gaku/testing/factories/school_factory.rb +3 -3
- data/lib/gaku/testing/factories/semester_attendance_factory.rb +8 -0
- data/lib/gaku/testing/factories/semester_connectors_factory.rb +11 -0
- data/lib/gaku/testing/factories/semester_factory.rb +16 -0
- data/lib/gaku/testing/factories/simple_grade_type_factory.rb +1 -1
- data/lib/gaku/testing/factories/state_factory.rb +2 -1
- data/lib/gaku/testing/factories/student_exam_session_factory.rb +8 -0
- data/lib/gaku/testing/factories/student_factory.rb +15 -5
- data/lib/gaku/testing/factories/student_review_category_factory.rb +7 -0
- data/lib/gaku/testing/factories/student_review_factory.rb +13 -0
- data/lib/gaku/testing/factories/teacher_factory.rb +1 -1
- data/lib/gaku/testing/factories/template_factory.rb +5 -7
- data/lib/gaku/testing/factories/traits.rb +32 -4
- data/lib/gaku/testing/factories/user_factory.rb +0 -1
- data/lib/gaku_core.rb +1 -1
- data/lib/generators/gaku/dummy/dummy_generator.rb +5 -4
- data/lib/generators/gaku/install/install_generator.rb +16 -14
- data/lib/tasks/admin_user.rake +2 -1
- metadata +310 -264
- data/app/models/gaku/class_group_course_enrollment.rb +0 -17
- data/app/models/gaku/class_group_enrollment.rb +0 -31
- data/app/models/gaku/course_enrollment.rb +0 -23
- data/app/models/gaku/disposal.rb +0 -45
- data/app/models/gaku/extracurricular_activity_enrollment.rb +0 -15
- data/app/models/gaku/semester_class_group.rb +0 -21
- data/app/models/gaku/semester_course.rb +0 -21
- data/lib/gaku/grading/calculations.rb +0 -279
- data/lib/gaku/grading/grade.rb +0 -17
- data/lib/gaku/grading/japanese_hs_standard.rb +0 -8
- data/lib/gaku/testing/factories/class_group_course_enrollment_factory.rb +0 -8
- data/lib/gaku/testing/factories/class_group_enrollment_factory.rb +0 -9
- data/lib/gaku/testing/factories/semester_class_group_factory.rb +0 -8
- data/lib/gaku/testing/factories/semester_course.rb +0 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 20342fcdfd2861a72ac472b2686b6c4b94cf0db3
|
4
|
+
data.tar.gz: f5a1482fcf966d496f04d53c8e497675594c4b6a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7c2cc6b3fc11c5dfa6560dc7067d6d6d3d954254c1c894f4d6a7fbab03962c7791852b7351125ea65e4baba19e75aebd9cd83f68df67c88ff60da111b4753f75
|
7
|
+
data.tar.gz: afe4fb7cbc4ced2ff729c5abe92d20c0f2a256c1731c21079abe1d18b02569af9049a8a0404c13535d4bef54abd9f0bd4eb95d24e6842f2baf703a12348eae97
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Gaku
|
2
2
|
class CoreController < ActionController::Base
|
3
3
|
protect_from_forgery
|
4
|
-
#check_authorization
|
4
|
+
# check_authorization
|
5
5
|
|
6
6
|
rescue_from CanCan::AccessDenied do |exception|
|
7
7
|
session[:previous_url] = request.fullpath unless request.fullpath =~ /\/users/
|
@@ -15,7 +15,6 @@ module Gaku
|
|
15
15
|
# user_signed_in? ? current_user : 'Public user' # or whatever
|
16
16
|
# end
|
17
17
|
|
18
|
-
|
19
18
|
protected
|
20
19
|
|
21
20
|
def get_resource_name(object)
|
@@ -46,19 +45,15 @@ module Gaku
|
|
46
45
|
end
|
47
46
|
|
48
47
|
def users_check
|
49
|
-
if User.count == 0
|
50
|
-
redirect_to set_up_admin_account_path
|
51
|
-
end
|
48
|
+
redirect_to set_up_admin_account_path if User.count == 0
|
52
49
|
end
|
53
50
|
|
54
51
|
def extract_locale_from_accept_language_header
|
55
52
|
request.env['HTTP_ACCEPT_LANGUAGE'].scan(/^[a-z]{2}/).first
|
56
53
|
end
|
57
54
|
|
58
|
-
|
59
|
-
def after_sign_out_path_for(resource_or_scope)
|
55
|
+
def after_sign_out_path_for(_resource_or_scope)
|
60
56
|
root_path
|
61
57
|
end
|
62
|
-
|
63
58
|
end
|
64
59
|
end
|
@@ -1,11 +1,10 @@
|
|
1
1
|
module Gaku
|
2
2
|
class PersonDecorator < Draper::Decorator
|
3
|
-
|
4
3
|
def sex_and_birth
|
5
4
|
[h.gender(object), object.birth_date.to_s].reject(&:empty?).join(', ')
|
6
5
|
end
|
7
6
|
|
8
|
-
#returns full name complete with formatting [if any]
|
7
|
+
# returns full name complete with formatting [if any]
|
9
8
|
def formatted_name
|
10
9
|
student_names
|
11
10
|
end
|
@@ -14,10 +13,8 @@ module Gaku
|
|
14
13
|
student_names reading: true
|
15
14
|
end
|
16
15
|
|
17
|
-
# return full name without formatting but in order,
|
18
|
-
# with spaces between portions
|
19
16
|
def full_name
|
20
|
-
|
17
|
+
"#{object.surname} #{object.name}"
|
21
18
|
end
|
22
19
|
|
23
20
|
def full_name_reading
|
@@ -30,18 +27,18 @@ module Gaku
|
|
30
27
|
|
31
28
|
if options[:without_formating]
|
32
29
|
preset_without_format = ''
|
33
|
-
preset.gsub(/%(\w+)/) {|n| preset_without_format << n + ' '}
|
30
|
+
preset.gsub(/%(\w+)/) { |n| preset_without_format << n + ' ' }
|
34
31
|
preset = preset_without_format.strip
|
35
32
|
end
|
36
33
|
|
37
|
-
if options[:reading] && object.name_reading.blank? &&
|
34
|
+
if options[:reading] && object.name_reading.blank? &&
|
35
|
+
object.surname_reading.blank? &&
|
36
|
+
object.middle_name_reading.blank?
|
38
37
|
return ''
|
39
38
|
end
|
40
39
|
|
41
40
|
reading = options[:reading]
|
42
|
-
if preset.blank?
|
43
|
-
return reading ? object.phonetic_reading : object.to_s
|
44
|
-
end
|
41
|
+
return reading ? object.phonetic_reading : object.to_s if preset.blank?
|
45
42
|
result = preset.gsub(/%(\w+)/) do |name|
|
46
43
|
case name
|
47
44
|
when '%first' then proper_name(:name, reading)
|
@@ -58,6 +55,5 @@ module Gaku
|
|
58
55
|
def proper_name(attribute, reading)
|
59
56
|
reading ? object.send(attribute.to_s + '_reading') : object.send(attribute)
|
60
57
|
end
|
61
|
-
|
62
58
|
end
|
63
|
-
end
|
59
|
+
end
|
@@ -3,15 +3,15 @@ module Addresses
|
|
3
3
|
|
4
4
|
included do
|
5
5
|
has_many :addresses, as: :addressable
|
6
|
+
has_one :primary_address, -> { where(primary: true) }, class_name: 'Gaku::Address', as: :addressable
|
6
7
|
|
7
|
-
def
|
8
|
-
|
9
|
-
end
|
8
|
+
# def primary_address
|
9
|
+
# addresses.where(primary: true).first
|
10
|
+
# end
|
10
11
|
|
11
12
|
def address_widget
|
12
|
-
"#{
|
13
|
-
"#{
|
13
|
+
"#{primary_address.city}, " \
|
14
|
+
"#{primary_address.address1}" if primary_address
|
14
15
|
end
|
15
16
|
end
|
16
|
-
|
17
17
|
end
|
@@ -3,15 +3,15 @@ module Contacts
|
|
3
3
|
|
4
4
|
included do
|
5
5
|
has_many :contacts, as: :contactable
|
6
|
+
has_one :primary_contact, -> { where(primary: true) }, class_name: 'Gaku::Contact', as: :contactable
|
6
7
|
|
7
|
-
|
8
|
-
|
9
|
-
|
8
|
+
|
9
|
+
# def primary_contact
|
10
|
+
# contacts.where(primary: true).first
|
11
|
+
# end
|
10
12
|
|
11
13
|
def contact_widget
|
12
|
-
"#{
|
14
|
+
"#{primary_contact.contact_type}: #{primary_contact.data}" if primary_contact
|
13
15
|
end
|
14
16
|
end
|
15
|
-
|
16
17
|
end
|
17
|
-
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Gradable
|
2
|
+
extend ActiveSupport::Concern
|
3
|
+
|
4
|
+
included do
|
5
|
+
has_many :grading_method_connectors, as: :gradable
|
6
|
+
has_many :grading_methods, through: :grading_method_connectors
|
7
|
+
end
|
8
|
+
|
9
|
+
def use_primary_grading_method_set
|
10
|
+
if Gaku::GradingMethodSet.primary
|
11
|
+
grading_methods << Gaku::GradingMethodSet.primary.grading_methods
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Semesterable
|
2
|
+
extend ActiveSupport::Concern
|
3
|
+
|
4
|
+
included do
|
5
|
+
has_many :semester_connectors, as: :semesterable, dependent: :destroy
|
6
|
+
has_many :semesters, through: :semester_connectors, source: :semester
|
7
|
+
|
8
|
+
scope :without_semester,
|
9
|
+
-> { includes(:semester_connectors).where(gaku_semester_connectors: { semesterable_id: nil }) }
|
10
|
+
|
11
|
+
end
|
12
|
+
end
|
data/app/models/gaku/ability.rb
CHANGED
@@ -26,7 +26,7 @@ module Gaku
|
|
26
26
|
clear_aliased_actions
|
27
27
|
|
28
28
|
# override cancan default aliasing
|
29
|
-
#(we don't want to differentiate between read and index)
|
29
|
+
# (we don't want to differentiate between read and index)
|
30
30
|
alias_action :edit, to: :update
|
31
31
|
alias_action :new, to: :create
|
32
32
|
alias_action :new_action, to: :create
|
@@ -47,13 +47,11 @@ module Gaku
|
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
|
-
|
51
|
-
#include any abilities registered by extensions, etc.
|
50
|
+
# include any abilities registered by extensions, etc.
|
52
51
|
Ability.abilities.each do |clazz|
|
53
52
|
ability = clazz.send(:new, user)
|
54
53
|
@rules = rules + ability.send(:rules)
|
55
54
|
end
|
56
|
-
|
57
55
|
end
|
58
56
|
end
|
59
57
|
end
|
data/app/models/gaku/address.rb
CHANGED
@@ -4,24 +4,26 @@ module Gaku
|
|
4
4
|
belongs_to :state
|
5
5
|
belongs_to :addressable, polymorphic: true, counter_cache: true
|
6
6
|
|
7
|
-
scope :deleted, -> { where(deleted: true) }
|
8
7
|
scope :students, -> { where(addressable_type: 'Gaku::Student') }
|
9
8
|
scope :teachers, -> { where(addressable_type: 'Gaku::Teacher') }
|
10
9
|
scope :guardians, -> { where(addressable_type: 'Gaku::Guardian') }
|
11
10
|
|
12
|
-
|
13
11
|
validates :address1, :country, :city, presence: true
|
14
12
|
|
15
13
|
accepts_nested_attributes_for :country
|
16
14
|
|
17
15
|
before_create :ensure_first_primary, on: :create
|
18
|
-
after_save :update_primary_address_field
|
16
|
+
# after_save :update_primary_address_field
|
19
17
|
after_destroy :reset_counter_cache
|
20
18
|
|
19
|
+
def to_s
|
20
|
+
"#{city} #{address1}"
|
21
|
+
end
|
22
|
+
|
21
23
|
def make_primary
|
22
24
|
addresses.where.not(id: id).update_all(primary: false)
|
23
25
|
update_attribute(:primary, true)
|
24
|
-
update_primary_address_field
|
26
|
+
# update_primary_address_field
|
25
27
|
end
|
26
28
|
|
27
29
|
def primary?
|
@@ -79,11 +81,10 @@ module Gaku
|
|
79
81
|
end
|
80
82
|
end
|
81
83
|
|
82
|
-
def update_primary_address_field
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
end
|
87
|
-
|
84
|
+
# def update_primary_address_field
|
85
|
+
# if addressable && addressable.has_attribute?(:primary_address)
|
86
|
+
# addressable.update_attribute(:primary_address, addressable.address_widget)
|
87
|
+
# end
|
88
|
+
# end
|
88
89
|
end
|
89
90
|
end
|
@@ -1,12 +1,10 @@
|
|
1
1
|
module Gaku
|
2
2
|
class Attachment < ActiveRecord::Base
|
3
|
-
|
4
3
|
belongs_to :attachable, polymorphic: true
|
5
4
|
|
6
5
|
has_attached_file :asset
|
7
6
|
|
8
|
-
validates_associated
|
9
|
-
message: I18n.t(:'attachment.associated')
|
7
|
+
validates_associated :attachable, message: I18n.t(:'attachment.associated')
|
10
8
|
|
11
9
|
validates :name, presence: true
|
12
10
|
validates :asset, presence: true, on: :create
|
@@ -14,6 +12,5 @@ module Gaku
|
|
14
12
|
def to_s
|
15
13
|
name
|
16
14
|
end
|
17
|
-
|
18
15
|
end
|
19
16
|
end
|
data/app/models/gaku/badge.rb
CHANGED
@@ -1,23 +1,23 @@
|
|
1
1
|
module Gaku
|
2
2
|
class ClassGroup < ActiveRecord::Base
|
3
3
|
|
4
|
-
include Notes, Pagination
|
4
|
+
include Notes, Pagination, Enrollmentable, Semesterable, StudentReviewable
|
5
5
|
|
6
|
-
|
7
|
-
has_many :students, through: :enrollments
|
8
|
-
|
9
|
-
has_many :class_group_course_enrollments, dependent: :destroy
|
10
|
-
has_many :courses, through: :class_group_course_enrollments
|
6
|
+
validates :name, presence: true
|
11
7
|
|
12
|
-
|
13
|
-
|
8
|
+
def self.for_select
|
9
|
+
%w(active upcomming).map do |state|
|
10
|
+
[state.humanize, send(state).map { |cg| [cg.to_s, cg.id] }]
|
11
|
+
end
|
12
|
+
end
|
14
13
|
|
15
|
-
|
14
|
+
def self.active
|
15
|
+
@active = joins(:semesters).merge(Gaku::Semester.active).uniq
|
16
|
+
end
|
16
17
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
}
|
18
|
+
def self.upcomming
|
19
|
+
@upcomming = joins(:semesters).merge(Gaku::Semester.upcomming).uniq - active
|
20
|
+
end
|
21
21
|
|
22
22
|
def to_s
|
23
23
|
"#{grade} - #{name}"
|