sis_core 1.0.16 → 1.0.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/sis/core/user_roles_controller.rb +11 -0
  3. data/app/models/sis/core/academic_calendar.rb +9 -0
  4. data/app/models/sis/core/academic_programme.rb +2 -2
  5. data/app/models/sis/core/academic_time_line.rb +14 -0
  6. data/app/models/sis/core/applicant.rb +2 -2
  7. data/app/models/sis/core/application_document.rb +1 -2
  8. data/app/models/sis/core/application_setup.rb +2 -2
  9. data/app/models/sis/core/building.rb +7 -0
  10. data/app/models/sis/core/class_schedule.rb +18 -0
  11. data/app/models/sis/core/class_time_table.rb +7 -0
  12. data/app/models/sis/core/classroom.rb +9 -0
  13. data/app/models/sis/core/course_assignment.rb +29 -0
  14. data/app/models/sis/core/course_registration.rb +12 -2
  15. data/app/models/sis/core/document_type.rb +0 -1
  16. data/app/models/sis/core/eligibility_criteria.rb +10 -0
  17. data/app/models/sis/core/entry.rb +7 -0
  18. data/app/models/sis/core/exam_result.rb +0 -1
  19. data/app/models/sis/core/identification_pattern.rb +19 -0
  20. data/app/models/sis/core/instructor.rb +5 -0
  21. data/app/models/sis/core/section.rb +9 -0
  22. data/app/models/sis/core/student.rb +17 -1
  23. data/app/models/sis/core/student_document.rb +12 -0
  24. data/app/models/sis/core/student_eligibility.rb +16 -0
  25. data/app/serializers/sis/core/user_serializer.rb +4 -0
  26. data/db/migrate/20201109064211_create_sis_core_buildings.rb +11 -0
  27. data/db/migrate/20201109070027_create_sis_core_classrooms.rb +21 -0
  28. data/db/migrate/20201109074944_create_sis_core_class_time_tables.rb +11 -0
  29. data/db/migrate/20201110075345_create_sis_core_sections.rb +13 -0
  30. data/db/migrate/20201110080957_create_sis_core_course_assignments.rb +22 -0
  31. data/db/migrate/20201110082516_create_sis_core_class_schedules.rb +22 -0
  32. data/db/migrate/20201130073930_create_sis_core_academic_calendars.rb +19 -0
  33. data/db/migrate/20201130080122_create_sis_core_academic_time_lines.rb +37 -0
  34. data/db/migrate/20201130091430_create_sis_core_eligibility_criteria.rb +13 -0
  35. data/db/migrate/20201130100442_add_fields_to_student.rb +79 -0
  36. data/db/migrate/20201130103634_create_sis_core_student_eligibilities.rb +29 -0
  37. data/db/migrate/20201201055256_add_course_offering_to_course_registration.rb +13 -0
  38. data/db/migrate/20201219073245_remove_full_name_from_instructor.rb +12 -0
  39. data/db/migrate/20201221100413_add_is_current_field_to_academic_year_and_semester.rb +7 -0
  40. data/db/migrate/20210113085806_create_sis_core_student_documents.rb +17 -0
  41. data/db/migrate/20210429112550_create_active_storage_tables.active_storage.rb +37 -0
  42. data/db/migrate/20210429113938_rename_uploaded_fields.rb +6 -0
  43. data/db/migrate/20210504115132_create_sis_core_identification_patterns.rb +23 -0
  44. data/lib/sis/core/version.rb +1 -1
  45. data/lib/sis_core.rb +0 -1
  46. data/spec/factories/sis/core/academic_calendars.rb +9 -0
  47. data/spec/factories/sis/core/academic_time_lines.rb +21 -0
  48. data/spec/factories/sis/core/applicants.rb +1 -1
  49. data/spec/factories/sis/core/application_documents.rb +1 -1
  50. data/spec/factories/sis/core/buildings.rb +7 -0
  51. data/spec/factories/sis/core/class_schedules.rb +8 -0
  52. data/spec/factories/sis/core/class_time_tables.rb +7 -0
  53. data/spec/factories/sis/core/classrooms.rb +11 -0
  54. data/spec/factories/sis/core/course_assignments.rb +9 -0
  55. data/spec/factories/sis/core/course_registrations.rb +3 -2
  56. data/spec/factories/sis/core/eligibility_criteria.rb +6 -0
  57. data/spec/factories/sis/core/entries.rb +5 -0
  58. data/spec/factories/sis/core/identification_patterns.rb +8 -0
  59. data/spec/factories/sis/core/instructor_courses.rb +2 -2
  60. data/spec/factories/sis/core/instructors.rb +3 -2
  61. data/spec/factories/sis/core/sections.rb +6 -0
  62. data/spec/factories/sis/core/student_documents.rb +6 -0
  63. data/spec/factories/sis/core/student_eligibilities.rb +10 -0
  64. data/spec/factories/sis/core/students.rb +11 -5
  65. metadata +70 -54
  66. data/app/uploaders/sis/core/application_document_uploader.rb +0 -51
  67. data/app/uploaders/sis/core/photo_uploader.rb +0 -51
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 765cf9bd0e11c73f120a46ef27e7c452f96881e0c360c54ecb697af5a129abb2
4
- data.tar.gz: 0fc3147cba5580ede372afac7041a727aff0dc09431cd3af9856623ed652b28d
3
+ metadata.gz: 0d8a574613ba77eb8db366949b723433df9c035de960d7d751f5969fcd7d4831
4
+ data.tar.gz: 3cddd57d65c9adae22464705f5ea560cc6b183674be4c2505056278c068e575e
5
5
  SHA512:
6
- metadata.gz: f626f605104d910d210424efb3ab331dd567517577b786999ab3035317059d421ba0a694e0a00a00bc945d228663e908a44c51678eef3c5160de1bcbdf2eea69
7
- data.tar.gz: 6ffe0155717f44b3c4fb5819e3fa206503cc9a32e6afe273f395667f53de7fd8cb2894c230cbcd07a308cab5382940a8dae0032ec6ba602e57a97c827ce3f025
6
+ metadata.gz: e29ee68bec9b045abe13f23813b7260a7ade6d61ade5edc385e1e9188872b37185bb7633e2c750b74757b2949ca01b148a6c0c63bb4c3ba9d9dda8579593a385
7
+ data.tar.gz: 1bf5e1c9957b2b6eaf00492d0c48b2fa1ce343280afcb07963a32e700d18181b743ee6f577c9766a07b4b794d54aacb84eefcdb62140bae0960ec5ff41ea63eb
@@ -0,0 +1,11 @@
1
+ module Sis
2
+ module Core
3
+ class UserRolesController < ApplicationController
4
+ skip_before_action :authenticate_request, only: %i[index]
5
+ def index
6
+ user_roles = UserRole.all
7
+ render json: { success: true, data: user_roles }
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,9 @@
1
+ module Sis
2
+ module Core
3
+ class AcademicCalendar < ApplicationRecord
4
+ belongs_to :academic_year
5
+ belongs_to :semester
6
+ validates :start_date, :end_date, :event, presence: true
7
+ end
8
+ end
9
+ end
@@ -6,7 +6,7 @@ module Sis
6
6
  belongs_to :programme_level
7
7
  has_many :academic_programme_documents
8
8
 
9
- validates :programme_id, uniqueness: { scope: [:programme_level_id, :programme_type_id],
9
+ validates :programme_id, uniqueness: { scope: %i[programme_level_id programme_type_id],
10
10
  message: 'Program has already been created !' }
11
11
 
12
12
  delegate(:name, to: :programme, prefix: true, allow_nil: false)
@@ -14,7 +14,7 @@ module Sis
14
14
  delegate(:name, to: :programme_level, prefix: true, allow_nil: false)
15
15
 
16
16
  def name
17
- programme.name.to_s + ' ' + programme_level.name.to_s + ' ' + programme_type.name.to_s
17
+ "#{programme.name} #{programme_level.name} #{programme_type.name}"
18
18
  end
19
19
  end
20
20
  end
@@ -0,0 +1,14 @@
1
+ module Sis
2
+ module Core
3
+ class AcademicTimeLine < ApplicationRecord
4
+ belongs_to :academic_year
5
+ belongs_to :semester
6
+ belongs_to :programme_type
7
+ belongs_to :programme_level
8
+ validates :registration_start_date, :registration_end_date, :penalty_registration_start_date,
9
+ :penalty_registration_end_date, :add_and_drop_start_date, :add_and_drop_end_date,
10
+ :penalty_add_and_drop_start_date, :penalty_add_and_drop_end_date, :mid_exam_start_date,
11
+ :mid_exam_end_date, :final_exam_start_date, :final_exam_end_date, :grade_reporting_date, presence: true
12
+ end
13
+ end
14
+ end
@@ -1,16 +1,16 @@
1
1
  module Sis
2
2
  module Core
3
3
  class Applicant < ApplicationRecord
4
- mount_base64_uploader :photo, PhotoUploader
5
4
  validates :first_name, :middle_name, :last_name, :email, presence: true
6
5
  validates :email, uniqueness: true
7
6
 
8
7
  has_many :applications
8
+ has_one_attached :photo
9
9
 
10
10
  has_secure_password
11
11
 
12
12
  def full_name
13
- first_name + ' ' + middle_name + ' ' + last_name
13
+ "#{first_name} #{middle_name} #{last_name}"
14
14
  end
15
15
 
16
16
  scope :by_application_setup, (lambda do |app_setup_id|
@@ -1,10 +1,9 @@
1
1
  module Sis
2
2
  module Core
3
3
  class ApplicationDocument < ApplicationRecord
4
- mount_base64_uploader :document, ApplicationDocumentUploader
5
-
6
4
  belongs_to :application
7
5
  belongs_to :document_requirement
6
+ has_one_attached :document
8
7
 
9
8
  delegate(:name, to: :document_requirement, prefix: true, allow_nil: false)
10
9
  end
@@ -12,12 +12,12 @@ module Sis
12
12
 
13
13
  validates :start_date, :end_date, :status, presence: true
14
14
  validates :status, inclusion: [OPEN, CLOSED]
15
- validates :academic_programme_id, uniqueness: { scope: [:target_semester_id, :academic_year_id],
15
+ validates :academic_programme_id, uniqueness: { scope: %i[target_semester_id academic_year_id],
16
16
  message: 'Announcement has already been created for this academic
17
17
  program !' }
18
18
 
19
19
  delegate(:code, to: :target_semester, prefix: true, allow_nil: false)
20
- delegate(:year, to: :academic_year, prefix: false , allow_nil: false)
20
+ delegate(:year, to: :academic_year, prefix: false, allow_nil: false)
21
21
  delegate(:name, to: :academic_programme, prefix: true, allow_nil: false)
22
22
  delegate(:programme_id, to: :academic_programme, prefix: false, allow_nil: false)
23
23
  delegate(:programme_type_id, to: :academic_programme, prefix: false, allow_nil: false)
@@ -0,0 +1,7 @@
1
+ module Sis
2
+ module Core
3
+ class Building < ApplicationRecord
4
+ validates :code, :name, :location, presence: true
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,18 @@
1
+ module Sis
2
+ module Core
3
+ class ClassSchedule < ApplicationRecord
4
+ belongs_to :classroom, optional: true
5
+ belongs_to :class_time_table, optional: true
6
+ belongs_to :course_assignment
7
+
8
+ delegate(:room_number, to: :classroom, prefix: true, allow_nil: true)
9
+ delegate(:name, to: :class_time_table, prefix: true, allow_nil: true)
10
+ delegate(:course_code, to: :course_assignment, prefix: false)
11
+ delegate(:course_title, to: :course_assignment, prefix: false)
12
+
13
+ def instructor_full_name
14
+ course_assignment.instructor.full_name
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,7 @@
1
+ module Sis
2
+ module Core
3
+ class ClassTimeTable < ApplicationRecord
4
+ validates :name, :from, :to, presence: true
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,9 @@
1
+ module Sis
2
+ module Core
3
+ class Classroom < ApplicationRecord
4
+ belongs_to :building
5
+ belongs_to :programme_level
6
+ validates :room_number, :floor, :class_type, presence: true
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,29 @@
1
+ module Sis
2
+ module Core
3
+ class CourseAssignment < ApplicationRecord
4
+ belongs_to :course_offering
5
+ belongs_to :section
6
+ belongs_to :instructor
7
+ belongs_to :lab_instructor, class_name: 'Sis::Core::Instructor', optional: true
8
+ belongs_to :tutorial_instructor, class_name: 'Sis::Core::Instructor', optional: true
9
+
10
+ delegate(:course_code, to: :course_offering, prefix: false)
11
+ delegate(:course_title, to: :course_offering, prefix: false)
12
+ delegate(:course_ects, to: :course_offering, prefix: false)
13
+ delegate(:course_credit_hours, to: :course_offering, prefix: false)
14
+ delegate(:course_id, to: :course_offering, prefix: false)
15
+ delegate(:course_lecture_hours, to: :course_offering, prefix: false)
16
+ delegate(:course_lab_hours, to: :course_offering, prefix: false)
17
+ delegate(:course_tutorial_hours, to: :course_offering, prefix: false)
18
+ delegate(:first_name, to: :instructor, prefix: true, allow_nil: true)
19
+ delegate(:middle_name, to: :instructor, prefix: true, allow_nil: true)
20
+ delegate(:last_name, to: :instructor, prefix: true, allow_nil: true)
21
+ delegate(:first_name, to: :lab_instructor, prefix: true, allow_nil: true)
22
+ delegate(:middle_name, to: :lab_instructor, prefix: true, allow_nil: true)
23
+ delegate(:last_name, to: :lab_instructor, prefix: true, allow_nil: true)
24
+ delegate(:first_name, to: :tutorial_instructor, prefix: true, allow_nil: true)
25
+ delegate(:middle_name, to: :tutorial_instructor, prefix: true, allow_nil: true)
26
+ delegate(:last_name, to: :tutorial_instructor, prefix: true, allow_nil: true)
27
+ end
28
+ end
29
+ end
@@ -1,9 +1,19 @@
1
1
  module Sis
2
2
  module Core
3
3
  class CourseRegistration < ApplicationRecord
4
- belongs_to :course
4
+ belongs_to :course_offering
5
5
  belongs_to :student
6
- belongs_to :semester
6
+ belongs_to :section
7
+
8
+ delegate(:course_code, to: :course_offering, prefix: false)
9
+ delegate(:course_title, to: :course_offering, prefix: false)
10
+ delegate(:course_ects, to: :course_offering, prefix: false)
11
+ delegate(:course_credit_hours, to: :course_offering, prefix: false)
12
+ delegate(:first_name, to: :student, prefix: true)
13
+ delegate(:middle_name, to: :student, prefix: true)
14
+ delegate(:last_name, to: :student, prefix: true)
15
+ delegate(:name, to: :section, prefix: true)
16
+ delegate(:programme_level_id, to: :student, prefix: true)
7
17
  end
8
18
  end
9
19
  end
@@ -2,7 +2,6 @@ module Sis
2
2
  module Core
3
3
  class DocumentType < Lookup
4
4
  has_many :academic_programme_documents
5
- validates :code, :name, uniqueness: { case_sensitive: false }
6
5
  end
7
6
  end
8
7
  end
@@ -0,0 +1,10 @@
1
+ module Sis
2
+ module Core
3
+ class EligibilityCriteria < ApplicationRecord
4
+ belongs_to :clearing_role, class_name: 'Sis::Core::UserRole'
5
+ validates :description, presence: true
6
+
7
+ delegate(:name, to: :clearing_role, prefix: true)
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,7 @@
1
+ module Sis
2
+ module Core
3
+ # this class is used to identify entry/ batch of a student like 2020 or 2021
4
+ class Entry < Lookup
5
+ end
6
+ end
7
+ end
@@ -10,7 +10,6 @@ module Sis
10
10
  validates :points, presence: true
11
11
  validates_uniqueness_of :application_id, scope: %i[exam_id]
12
12
 
13
-
14
13
  before_validation :set_status
15
14
 
16
15
  def set_status
@@ -0,0 +1,19 @@
1
+ module Sis
2
+ module Core
3
+ class IdentificationPattern < ApplicationRecord
4
+ belongs_to :programme_level
5
+ belongs_to :programme_type
6
+ belongs_to :programme
7
+
8
+ validates :id_pattern, presence: true
9
+ validates :id_pattern, uniqueness: true
10
+
11
+ validates :programme_id, uniqueness: { scope: %i[programme_level_id programme_type_id],
12
+ message: 'This combination is already taken !' }
13
+
14
+ delegate(:name, to: :programme, prefix: true)
15
+ delegate(:name, to: :programme_level, prefix: true)
16
+ delegate(:name, to: :programme_type, prefix: true)
17
+ end
18
+ end
19
+ end
@@ -1,6 +1,11 @@
1
1
  module Sis
2
2
  module Core
3
3
  class Instructor < ApplicationRecord
4
+ belongs_to :user
5
+
6
+ def full_name
7
+ "#{first_name} #{middle_name} #{last_name}"
8
+ end
4
9
  end
5
10
  end
6
11
  end
@@ -0,0 +1,9 @@
1
+ module Sis
2
+ module Core
3
+ class Section < ApplicationRecord
4
+ belongs_to :entry
5
+ validates :name, presence: true
6
+ validates :name, uniqueness: { scope: %i[entry_id] }
7
+ end
8
+ end
9
+ end
@@ -1,7 +1,23 @@
1
1
  module Sis
2
2
  module Core
3
3
  class Student < ApplicationRecord
4
- belongs_to :program
4
+ has_one_attached :picture
5
+ belongs_to :user
6
+ belongs_to :level, optional: true
7
+ belongs_to :semester, optional: true
8
+ belongs_to :entry, optional: true
9
+ belongs_to :programme
10
+ belongs_to :programme_level
11
+ belongs_to :programme_type
12
+ belongs_to :advisor, class_name: 'Sis::Core::Instructor', optional: true
13
+ has_many :course_registrations
14
+
15
+ delegate(:first_name, to: :user, prefix: false)
16
+ delegate(:last_name, to: :user, prefix: false)
17
+ delegate(:email, to: :user, prefix: false)
18
+ delegate(:first_name, to: :advisor, prefix: true, allow_nil: true)
19
+ delegate(:middle_name, to: :advisor, prefix: true, allow_nil: true)
20
+ delegate(:last_name, to: :advisor, prefix: true, allow_nil: true)
5
21
  end
6
22
  end
7
23
  end
@@ -0,0 +1,12 @@
1
+ module Sis
2
+ module Core
3
+ class StudentDocument < ApplicationRecord
4
+ has_one_attached :file
5
+ belongs_to :document_type, optional: true
6
+ belongs_to :student
7
+
8
+ delegate(:code, to: :document_type, prefix: true, allow_nil: true)
9
+ delegate(:name, to: :document_type, prefix: true)
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,16 @@
1
+ module Sis
2
+ module Core
3
+ class StudentEligibility < ApplicationRecord
4
+ belongs_to :student
5
+ belongs_to :academic_year
6
+ belongs_to :semester
7
+ belongs_to :eligibility_criteria
8
+ belongs_to :cleared_by, class_name: 'Sis::Core::User'
9
+
10
+ delegate(:first_name, to: :student, prefix: true)
11
+ delegate(:middle_name, to: :student, prefix: true)
12
+ delegate(:last_name, to: :student, prefix: true)
13
+ delegate(:description, to: :eligibility_criteria, prefix: true)
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,4 @@
1
+ class UserSerializer < ActiveModel::Serializer
2
+ attributes :id, :first_name, :last_name, :email, :active
3
+ has_many :user_roles
4
+ end
@@ -0,0 +1,11 @@
1
+ class CreateSisCoreBuildings < ActiveRecord::Migration[6.0]
2
+ def change
3
+ create_table :sis_core_buildings do |t|
4
+ t.string :code, null: false
5
+ t.string :name, null: false
6
+ t.string :location, null: false
7
+
8
+ t.timestamps
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,21 @@
1
+ class CreateSisCoreClassrooms < ActiveRecord::Migration[6.0]
2
+ def change
3
+ create_table :sis_core_classrooms do |t|
4
+ t.references :building,
5
+ null: false,
6
+ index: { name: 'bldg_on_cls_rm' },
7
+ foreign_key: { to_table: :sis_core_buildings }
8
+ t.references :programme_level,
9
+ null: false,
10
+ index: { name: 'pl_on_cls_rm' },
11
+ foreign_key: { to_table: :sis_core_lookups }
12
+ t.float :square_meter
13
+ t.string :room_number, null: false
14
+ t.string :floor, null: false
15
+ t.integer :class_size
16
+ t.string :class_type, null: false
17
+
18
+ t.timestamps
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,11 @@
1
+ class CreateSisCoreClassTimeTables < ActiveRecord::Migration[6.0]
2
+ def change
3
+ create_table :sis_core_class_time_tables do |t|
4
+ t.string :name, null: false
5
+ t.string :from, null: false
6
+ t.string :to, null: false
7
+
8
+ t.timestamps
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,13 @@
1
+ class CreateSisCoreSections < ActiveRecord::Migration[6.0]
2
+ def change
3
+ create_table :sis_core_sections do |t|
4
+ t.string :name, null: false
5
+ t.references :entry,
6
+ null: false,
7
+ index: { name: 'entry_on_sec' },
8
+ foreign_key: { to_table: :sis_core_lookups }
9
+
10
+ t.timestamps
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,22 @@
1
+ class CreateSisCoreCourseAssignments < ActiveRecord::Migration[6.0]
2
+ def change
3
+ create_table :sis_core_course_assignments do |t|
4
+ t.references :course_offering,
5
+ null: false,
6
+ index: { name: 'crs_off_on_crs_ass' },
7
+ foreign_key: { to_table: :sis_core_course_offerings }
8
+ t.references :section,
9
+ null: false,
10
+ index: { name: 'sec_on_crs_ass' },
11
+ foreign_key: { to_table: :sis_core_sections }
12
+ t.references :instructor,
13
+ null: false,
14
+ index: { name: 'ins_on_crs_ass' },
15
+ foreign_key: { to_table: :sis_core_instructors }
16
+ t.integer :lab_instructor_id, null: true
17
+ t.integer :tutorial_instructor_id, null: true
18
+
19
+ t.timestamps
20
+ end
21
+ end
22
+ end