sis_core 1.0.11 → 1.0.16

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 (54) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/sis/core/utils_controller.rb +19 -0
  3. data/app/models/sis/core/academic_programme.rb +4 -0
  4. data/app/models/sis/core/academic_programme_document.rb +11 -0
  5. data/app/models/sis/core/application.rb +2 -2
  6. data/app/models/sis/core/application_record.rb +4 -0
  7. data/app/models/sis/core/application_setup.rb +22 -3
  8. data/app/models/sis/core/course.rb +2 -4
  9. data/app/models/sis/core/course_offering.rb +19 -0
  10. data/app/models/sis/core/course_offering_sequence.rb +42 -0
  11. data/app/models/sis/core/credit_hour_rate.rb +1 -0
  12. data/app/models/sis/core/curriculum.rb +17 -0
  13. data/app/models/sis/core/curriculum_course.rb +19 -0
  14. data/app/models/sis/core/document_requirement.rb +8 -1
  15. data/app/models/sis/core/document_type.rb +2 -0
  16. data/app/models/sis/core/exam_setup.rb +3 -0
  17. data/app/models/sis/core/level.rb +7 -0
  18. data/app/models/sis/core/prerequisite.rb +16 -0
  19. data/app/models/sis/core/programme.rb +1 -1
  20. data/app/models/sis/core/semester.rb +1 -5
  21. data/app/services/sis/core/util_service.rb +16 -0
  22. data/app/uploaders/sis/core/application_document_uploader.rb +1 -1
  23. data/app/uploaders/sis/core/photo_uploader.rb +1 -1
  24. data/config/routes.rb +2 -0
  25. data/db/migrate/20200105061717_create_sis_core_lookups.rb +3 -1
  26. data/db/migrate/20200105072142_create_sis_core_academic_years.rb +1 -1
  27. data/db/migrate/20200106072246_create_sis_core_semesters.rb +1 -5
  28. data/db/migrate/20200106132521_create_sis_core_application_setups.rb +4 -0
  29. data/db/migrate/20200106133034_create_sis_core_document_requirements.rb +2 -2
  30. data/db/migrate/20200107094449_create_sis_core_applications.rb +0 -4
  31. data/db/migrate/20201019055620_create_sis_core_academic_programme_documents.rb +19 -0
  32. data/db/migrate/20201102134749_create_sis_core_curriculums.rb +20 -0
  33. data/db/migrate/20201102182012_remove_programme_and_add_maximum_class_size_to_course.rb +10 -0
  34. data/db/migrate/20201102192055_create_sis_core_curriculum_courses.rb +17 -0
  35. data/db/migrate/20201104085458_create_sis_core_course_offering_sequences.rb +24 -0
  36. data/db/migrate/20201104111548_create_sis_core_course_offerings.rb +24 -0
  37. data/db/migrate/20201106091250_create_sis_core_prerequisites.rb +15 -0
  38. data/db/migrate/20210310071526_add_minimum_class_size_to_course.rb +6 -0
  39. data/lib/sis/core/engine.rb +0 -1
  40. data/lib/sis/core/version.rb +1 -1
  41. data/spec/factories/sis/core/academic_programme_documents.rb +9 -0
  42. data/spec/factories/sis/core/academic_years.rb +1 -1
  43. data/spec/factories/sis/core/application_setups.rb +1 -0
  44. data/spec/factories/sis/core/applications.rb +0 -1
  45. data/spec/factories/sis/core/course_offering_sequences.rb +8 -0
  46. data/spec/factories/sis/core/course_offerings.rb +8 -0
  47. data/spec/factories/sis/core/courses.rb +3 -1
  48. data/spec/factories/sis/core/curriculum_courses.rb +7 -0
  49. data/spec/factories/sis/core/curriculums.rb +10 -0
  50. data/spec/factories/sis/core/levels.rb +5 -0
  51. data/spec/factories/sis/core/lookups.rb +2 -0
  52. data/spec/factories/sis/core/prerequisites.rb +6 -0
  53. data/spec/factories/sis/core/semesters.rb +1 -2
  54. metadata +28 -10
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 01b7b4d1444769ba3e2953377e0eb99528221ad26f98cae32e88ef57351940c9
4
- data.tar.gz: 4424ba65e6077accf44a1a215f87b4594f79a9c04523cb26660999606945f5be
3
+ metadata.gz: 765cf9bd0e11c73f120a46ef27e7c452f96881e0c360c54ecb697af5a129abb2
4
+ data.tar.gz: 0fc3147cba5580ede372afac7041a727aff0dc09431cd3af9856623ed652b28d
5
5
  SHA512:
6
- metadata.gz: 17ac3d072458f6b74b25e4301ed1ceb4ac3d2b31d1fb1343936d3efa03eec1f9fbe60fa95aa4b6823de7f15fd9d1e0a696040179503428d83c27fc8355342bf9
7
- data.tar.gz: fd114115c828fee511449c65fd6302e91677bd5c4596e9e524413be00bd87bafb9dc2e6929c2592c62acb6141a31cfac28a2baa61004790a86a52e9140079ac4
6
+ metadata.gz: f626f605104d910d210424efb3ab331dd567517577b786999ab3035317059d421ba0a694e0a00a00bc945d228663e908a44c51678eef3c5160de1bcbdf2eea69
7
+ data.tar.gz: 6ffe0155717f44b3c4fb5819e3fa206503cc9a32e6afe273f395667f53de7fd8cb2894c230cbcd07a308cab5382940a8dae0032ec6ba602e57a97c827ce3f025
@@ -0,0 +1,19 @@
1
+ module Sis
2
+ module Core
3
+ class UtilsController < ApplicationController
4
+ skip_before_action :authenticate_request, only: %i[filter]
5
+ before_action :set_util_service, only: %i[filter]
6
+
7
+ def filter
8
+ result = ApplicationRecord.serialize(@service.filter_record(params))
9
+ render json: { success: true, data: result }
10
+ end
11
+
12
+ private
13
+
14
+ def set_util_service
15
+ @service = UtilService.new
16
+ end
17
+ end
18
+ end
19
+ end
@@ -4,6 +4,10 @@ module Sis
4
4
  belongs_to :programme
5
5
  belongs_to :programme_type
6
6
  belongs_to :programme_level
7
+ has_many :academic_programme_documents
8
+
9
+ validates :programme_id, uniqueness: { scope: [:programme_level_id, :programme_type_id],
10
+ message: 'Program has already been created !' }
7
11
 
8
12
  delegate(:name, to: :programme, prefix: true, allow_nil: false)
9
13
  delegate(:name, to: :programme_type, prefix: true, allow_nil: false)
@@ -0,0 +1,11 @@
1
+ module Sis
2
+ module Core
3
+ class AcademicProgrammeDocument < ApplicationRecord
4
+ belongs_to :academic_programme
5
+ belongs_to :document_type
6
+
7
+ delegate(:name, to: :academic_programme, prefix: true, allow_nil: false)
8
+ delegate(:name, to: :document_type, prefix: true, allow_nil: false)
9
+ end
10
+ end
11
+ end
@@ -49,12 +49,12 @@ module Sis
49
49
  validates :payment_information, presence: true, if: :payment_made
50
50
 
51
51
  belongs_to :applicant
52
- belongs_to :academic_programme
53
52
  belongs_to :application_setup
54
53
  has_many :application_documents
55
54
 
56
- delegate(:name, to: :academic_programme, prefix: true, allow_nil: false)
55
+ delegate(:name, to: :application_setup, prefix: true, allow_nil: false)
57
56
  delegate(:full_name, to: :applicant, prefix: true, allow_nil: false)
57
+ delegate(:academic_programme_id, to: :application_setup, prefix: false, allow_nil: false)
58
58
  end
59
59
  end
60
60
  end
@@ -2,6 +2,10 @@ module Sis
2
2
  module Core
3
3
  class ApplicationRecord < ActiveRecord::Base
4
4
  self.abstract_class = true
5
+
6
+ def self.serialize(data)
7
+ ActiveModelSerializers::SerializableResource.new(data)
8
+ end
5
9
  end
6
10
  end
7
11
  end
@@ -6,18 +6,37 @@ module Sis
6
6
 
7
7
  belongs_to :academic_programme
8
8
  belongs_to :target_semester, class_name: 'Sis::Core::Semester'
9
+ belongs_to :academic_year
9
10
  has_many :document_requirements
10
11
  has_many :exam_setups
11
12
 
12
13
  validates :start_date, :end_date, :status, presence: true
13
14
  validates :status, inclusion: [OPEN, CLOSED]
15
+ validates :academic_programme_id, uniqueness: { scope: [:target_semester_id, :academic_year_id],
16
+ message: 'Announcement has already been created for this academic
17
+ program !' }
14
18
 
15
- delegate(:name, to: :target_semester, prefix: true, allow_nil: false)
19
+ delegate(:code, to: :target_semester, prefix: true, allow_nil: false)
20
+ delegate(:year, to: :academic_year, prefix: false , allow_nil: false)
16
21
  delegate(:name, to: :academic_programme, prefix: true, allow_nil: false)
22
+ delegate(:programme_id, to: :academic_programme, prefix: false, allow_nil: false)
23
+ delegate(:programme_type_id, to: :academic_programme, prefix: false, allow_nil: false)
24
+ delegate(:programme_level_id, to: :academic_programme, prefix: false, allow_nil: false)
25
+ def programme_name
26
+ academic_programme.programme.name
27
+ end
28
+
29
+ def programme_type_name
30
+ academic_programme.programme_type.name
31
+ end
32
+
33
+ def programme_level_name
34
+ academic_programme.programme_level.name
35
+ end
17
36
 
18
37
  def name
19
- academic_programme.programme.name.to_s + ' ' + academic_programme.programme_level.name.to_s + ' ' +
20
- academic_programme.programme_type.name.to_s
38
+ "#{academic_programme.programme.name} #{academic_programme.programme_level.name}
39
+ #{academic_programme.programme_type.name}"
21
40
  end
22
41
  end
23
42
  end
@@ -1,10 +1,8 @@
1
1
  module Sis
2
2
  module Core
3
3
  class Course < ApplicationRecord
4
- belongs_to :program
5
-
6
- validates :code, :title, :description, :credit_hours, :ects, :lecture_hours, :lab_hours, presence: true
7
- validates :code, uniqueness: true
4
+ validates :code, :title, :credit_hours, :ects, :lecture_hours, presence: true
5
+ validates :code, uniqueness: { case_sensitive: false }
8
6
  end
9
7
  end
10
8
  end
@@ -0,0 +1,19 @@
1
+ module Sis
2
+ module Core
3
+ class CourseOffering < ApplicationRecord
4
+ belongs_to :course_offering_sequence
5
+ belongs_to :academic_year
6
+ belongs_to :semester
7
+ belongs_to :level
8
+
9
+ delegate(:course_code, to: :course_offering_sequence, prefix: false)
10
+ delegate(:course_title, to: :course_offering_sequence, prefix: false)
11
+ delegate(:course_ects, to: :course_offering_sequence, prefix: false)
12
+ delegate(:course_credit_hours, to: :course_offering_sequence, prefix: false)
13
+ delegate(:course_id, to: :course_offering_sequence, prefix: false)
14
+ delegate(:course_lecture_hours, to: :course_offering_sequence, prefix: false)
15
+ delegate(:course_lab_hours, to: :course_offering_sequence, prefix: false)
16
+ delegate(:course_tutorial_hours, to: :course_offering_sequence, prefix: false)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,42 @@
1
+ module Sis
2
+ module Core
3
+ class CourseOfferingSequence < ApplicationRecord
4
+ belongs_to :curriculum_course
5
+ belongs_to :programme_type
6
+ belongs_to :level
7
+ belongs_to :semester
8
+
9
+ def course_id
10
+ curriculum_course.course.id.to_s
11
+ end
12
+
13
+ def course_code
14
+ curriculum_course.course.code.to_s
15
+ end
16
+
17
+ def course_title
18
+ curriculum_course.course.title.to_s
19
+ end
20
+
21
+ def course_ects
22
+ curriculum_course.course.ects.to_s
23
+ end
24
+
25
+ def course_credit_hours
26
+ curriculum_course.course.credit_hours.to_s
27
+ end
28
+
29
+ def course_lecture_hours
30
+ curriculum_course.course.lecture_hours.to_s
31
+ end
32
+
33
+ def course_lab_hours
34
+ curriculum_course.course.lab_hours.to_s
35
+ end
36
+
37
+ def course_tutorial_hours
38
+ curriculum_course.course.tutorial_hours.to_s
39
+ end
40
+ end
41
+ end
42
+ end
@@ -8,6 +8,7 @@ module Sis
8
8
 
9
9
  delegate(:name, to: :programme_level, prefix: true, allow_nil: false)
10
10
  delegate(:name, to: :currency, prefix: true, allow_nil: false)
11
+ delegate(:code, to: :currency, prefix: true, allow_nil: false)
11
12
  end
12
13
  end
13
14
  end
@@ -0,0 +1,17 @@
1
+ module Sis
2
+ module Core
3
+ class Curriculum < ApplicationRecord
4
+ belongs_to :programme
5
+ belongs_to :programme_level
6
+
7
+ validates :compulsory_course_credit_hours, :elective_course_credit_hours, :thesis_hour, :project_hour,
8
+ presence: true
9
+ delegate(:name, to: :programme, prefix: true)
10
+ delegate(:name, to: :programme_level, prefix: true)
11
+
12
+ def name
13
+ "#{programme.name} #{programme_level.name}"
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,19 @@
1
+ module Sis
2
+ module Core
3
+ class CurriculumCourse < ApplicationRecord
4
+ belongs_to :curriculum
5
+ belongs_to :course
6
+ validates :course_type, presence: true
7
+ has_many :predecessor_prerequisites, foreign_key: :successor_id, class_name: 'Prerequisite'
8
+ has_many :predecessors, through: :predecessor_prerequisites, source: :predecessor
9
+ has_many :successor_prerequisites, foreign_key: :predecessor_id, class_name: 'Prerequisite'
10
+ has_many :successors, through: :successor_prerequisites, source: :successor
11
+
12
+ delegate(:title, to: :course, prefix: true)
13
+ delegate(:code, to: :course, prefix: true)
14
+ delegate(:ects, to: :course, prefix: true)
15
+ delegate(:credit_hours, to: :course, prefix: true)
16
+ delegate(:name, to: :curriculum, prefix: true)
17
+ end
18
+ end
19
+ end
@@ -4,10 +4,17 @@ module Sis
4
4
  belongs_to :document_type
5
5
  belongs_to :application_setup
6
6
 
7
- validates :original, :copy, presence: true
7
+ validates :application_setup_id, uniqueness: { scope: :document_type_id,
8
+ message: 'Document has been already captured !' }
8
9
 
9
10
  delegate(:name, to: :document_type, prefix: true, allow_nil: false)
10
11
  delegate(:name, to: :application_setup, prefix: true, allow_nil: false)
12
+ delegate(:programme_id, to: :application_setup, prefix: false, allow_nil: false)
13
+ delegate(:programme_name, to: :application_setup, prefix: false, allow_nil: false)
14
+ delegate(:programme_level_id, to: :application_setup, prefix: false, allow_nil: false)
15
+ delegate(:programme_level_name, to: :application_setup, prefix: false, allow_nil: false)
16
+ delegate(:programme_type_id, to: :application_setup, prefix: false, allow_nil: false)
17
+ delegate(:programme_type_name, to: :application_setup, prefix: false, allow_nil: false)
11
18
  end
12
19
  end
13
20
  end
@@ -1,6 +1,8 @@
1
1
  module Sis
2
2
  module Core
3
3
  class DocumentType < Lookup
4
+ has_many :academic_programme_documents
5
+ validates :code, :name, uniqueness: { case_sensitive: false }
4
6
  end
5
7
  end
6
8
  end
@@ -11,6 +11,9 @@ module Sis
11
11
  end
12
12
 
13
13
  delegate(:name, to: :application_setup, prefix: true, allow_nil: false)
14
+ delegate(:programme_id, to: :application_setup, prefix: false, allow_nil: false)
15
+ delegate(:programme_type_id, to: :application_setup, prefix: false, allow_nil: false)
16
+ delegate(:programme_level_id, to: :application_setup, prefix: false, allow_nil: false)
14
17
  end
15
18
  end
16
19
  end
@@ -0,0 +1,7 @@
1
+ module Sis
2
+ module Core
3
+ class Level < Lookup
4
+ validates :code, :name, presence: true
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,16 @@
1
+ module Sis
2
+ module Core
3
+ class Prerequisite < ApplicationRecord
4
+ belongs_to :predecessor, foreign_key: 'predecessor_id', class_name: 'CurriculumCourse'
5
+ belongs_to :successor, foreign_key: 'successor_id', class_name: 'CurriculumCourse'
6
+
7
+ def predecessor_name
8
+ predecessor.course.title.to_s
9
+ end
10
+
11
+ def successor_name
12
+ successor.course.name.to_s
13
+ end
14
+ end
15
+ end
16
+ end
@@ -1,7 +1,7 @@
1
1
  module Sis
2
2
  module Core
3
3
  class Programme < ApplicationRecord
4
- validates :code, :name, presence: true, uniqueness: true
4
+ validates :code, :name, presence: true, uniqueness: { case_sensitive: false }
5
5
  end
6
6
  end
7
7
  end
@@ -1,11 +1,7 @@
1
1
  module Sis
2
2
  module Core
3
3
  class Semester < ApplicationRecord
4
- belongs_to :academic_year
5
-
6
- validates :name, presence: true
7
-
8
- delegate(:label, to: :academic_year, prefix: true, allow_nil: false)
4
+ validates :code, presence: true, uniqueness: { case_sensitive: false }
9
5
  end
10
6
  end
11
7
  end
@@ -0,0 +1,16 @@
1
+ module Sis
2
+ module Core
3
+ class UtilService
4
+ def filter_record(params)
5
+ pos = {}
6
+ neg = {}
7
+
8
+ filter = params[:filter] || []
9
+ filter.each do |f|
10
+ f[:cond] == 'P' ? pos[f[:key]] = f[:value] : neg[f[:key]] = f[:value]
11
+ end
12
+ params[:entity].constantize.where(pos).where.not(neg)
13
+ end
14
+ end
15
+ end
16
+ end
@@ -12,7 +12,7 @@ module Sis
12
12
  # Override the directory where uploaded files will be stored.
13
13
  # This is a sensible default for uploaders that are meant to be mounted:
14
14
  def store_dir
15
- "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
15
+ ENV.fetch('UPLOAD_PREFIX') + "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
16
16
  end
17
17
 
18
18
  # Provide a default URL as a default if there hasn't been a file uploaded:
@@ -12,7 +12,7 @@ module Sis
12
12
  # Override the directory where uploaded files will be stored.
13
13
  # This is a sensible default for uploaders that are meant to be mounted:
14
14
  def store_dir
15
- "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
15
+ ENV.fetch('UPLOAD_PREFIX') + "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
16
16
  end
17
17
 
18
18
  # Provide a default URL as a default if there hasn't been a file uploaded:
data/config/routes.rb CHANGED
@@ -5,4 +5,6 @@ Sis::Core::Engine.routes.draw do
5
5
  post '/sign_in', controller: :users, action: :sign_in
6
6
  post '/generate_recovery_token', controller: :users, action: :generate_recovery_token
7
7
  post '/reset_password', controller: :users, action: :reset_password
8
+ resources :user_roles, only: %i[index]
9
+ post '/utils/filter', controller: :utils, action: :filter
8
10
  end
@@ -1,7 +1,9 @@
1
1
  class CreateSisCoreLookups < ActiveRecord::Migration[6.0]
2
2
  def change
3
3
  create_table :sis_core_lookups do |t|
4
- t.string :name, null: false
4
+ t.string :code, null: false
5
+ t.string :name
6
+ t.string :description
5
7
  t.string :type, null: false
6
8
 
7
9
  t.timestamps
@@ -2,7 +2,7 @@ class CreateSisCoreAcademicYears < ActiveRecord::Migration[6.0]
2
2
  def change
3
3
  create_table :sis_core_academic_years do |t|
4
4
  t.string :year, null: false, unique: true
5
- t.string :label
5
+ t.string :description
6
6
 
7
7
  t.timestamps
8
8
  end
@@ -1,12 +1,8 @@
1
1
  class CreateSisCoreSemesters < ActiveRecord::Migration[6.0]
2
2
  def change
3
3
  create_table :sis_core_semesters do |t|
4
- t.string :name, null: false
4
+ t.string :code, null: false
5
5
  t.string :description
6
- t.references :academic_year,
7
- index: { name: 'ay_on_semester_indx' },
8
- null: false,
9
- foreign_key: { to_table: :sis_core_academic_years }
10
6
 
11
7
  t.timestamps
12
8
  end
@@ -12,6 +12,10 @@ class CreateSisCoreApplicationSetups < ActiveRecord::Migration[6.0]
12
12
  null: false,
13
13
  index: { name: 'as_on_ts_indx' },
14
14
  foreign_key: { to_table: :sis_core_semesters }
15
+ t.references :academic_year,
16
+ null: false,
17
+ index: { name: 'ay_on_ts_indx' },
18
+ foreign_key: { to_table: :sis_core_academic_years }
15
19
 
16
20
  t.timestamps
17
21
  end
@@ -1,8 +1,8 @@
1
1
  class CreateSisCoreDocumentRequirements < ActiveRecord::Migration[6.0]
2
2
  def change
3
3
  create_table :sis_core_document_requirements do |t|
4
- t.integer :original, null: false, default: 0
5
- t.integer :copy, null: false, default: 0
4
+ t.integer :original, null: false, default: 1
5
+ t.integer :copy, null: false, default: 1
6
6
  t.string :remark
7
7
  t.references :document_type,
8
8
  null: false,
@@ -9,10 +9,6 @@ class CreateSisCoreApplications < ActiveRecord::Migration[6.0]
9
9
  null: false,
10
10
  index: { name: 'applications_on_applicant_indx' },
11
11
  foreign_key: { to_table: :sis_core_applicants }
12
- t.references :academic_programme,
13
- null: false,
14
- index: { name: 'applications_on_ap_indx' },
15
- foreign_key: { to_table: :sis_core_academic_programmes }
16
12
  t.references :application_setup,
17
13
  null: false,
18
14
  index: { name: 'application_setup_on_ap_indx' },
@@ -0,0 +1,19 @@
1
+ class CreateSisCoreAcademicProgrammeDocuments < ActiveRecord::Migration[6.0]
2
+ def change
3
+ create_table :sis_core_academic_programme_documents do |t|
4
+ t.references :academic_programme,
5
+ null: false,
6
+ index: { name: 'ap_on_ap_doc' },
7
+ foreign_key: { to_table: :sis_core_academic_programmes }
8
+ t.references :document_type,
9
+ null: false,
10
+ index: { name: 'dt_on_ap_doc' },
11
+ foreign_key: { to_table: :sis_core_lookups }
12
+ t.string :remark
13
+ t.integer :original, default: 1
14
+ t.integer :copy, default: 1
15
+
16
+ t.timestamps
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,20 @@
1
+ class CreateSisCoreCurriculums < ActiveRecord::Migration[6.0]
2
+ def change
3
+ create_table :sis_core_curriculums do |t|
4
+ t.references :programme,
5
+ null: false,
6
+ index: { name: 'pr_on_curriculum_indx' },
7
+ foreign_key: { to_table: :sis_core_programmes }
8
+ t.references :programme_level,
9
+ null: false,
10
+ index: { name: 'pr_level_on_curriculum_indx' },
11
+ foreign_key: { to_table: :sis_core_lookups }
12
+ t.float :compulsory_course_credit_hours, null: false
13
+ t.float :elective_course_credit_hours, null: false
14
+ t.float :thesis_hour, null: false
15
+ t.float :project_hour, null: false
16
+
17
+ t.timestamps
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,10 @@
1
+ class RemoveProgrammeAndAddMaximumClassSizeToCourse < ActiveRecord::Migration[6.0]
2
+ def change
3
+ remove_column :sis_core_courses, :academic_programme_id
4
+ add_column :sis_core_courses, :maximum_class_size, :integer
5
+ add_column :sis_core_courses, :has_lab, :boolean, default: false
6
+ add_column :sis_core_courses, :has_tutorial, :boolean, default: false
7
+ add_column :sis_core_courses, :tutorial_hours, :float
8
+ change_column :sis_core_courses, :description, :string, null: true
9
+ end
10
+ end
@@ -0,0 +1,17 @@
1
+ class CreateSisCoreCurriculumCourses < ActiveRecord::Migration[6.0]
2
+ def change
3
+ create_table :sis_core_curriculum_courses do |t|
4
+ t.references :curriculum,
5
+ null: false,
6
+ index: { name: 'cc_on_cc_course_indx' },
7
+ foreign_key: { to_table: :sis_core_curriculums }
8
+ t.references :course,
9
+ null: false,
10
+ index: { name: 'course_on_cc_course_indx' },
11
+ foreign_key: { to_table: :sis_core_courses }
12
+ t.string :course_type
13
+
14
+ t.timestamps
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,24 @@
1
+ class CreateSisCoreCourseOfferingSequences < ActiveRecord::Migration[6.0]
2
+ def change
3
+ create_table :sis_core_course_offering_sequences do |t|
4
+ t.references :curriculum_course,
5
+ null: false,
6
+ index: { name: 'cc_on_course_off_seq' },
7
+ foreign_key: { to_table: :sis_core_curriculum_courses }
8
+ t.references :programme_type,
9
+ null: false,
10
+ index: { name: 'pt_on_course_off_seq' },
11
+ foreign_key: { to_table: :sis_core_lookups }
12
+ t.references :level,
13
+ null: false,
14
+ index: { name: 'level_on_course_off_seq' },
15
+ foreign_key: { to_table: :sis_core_lookups }
16
+ t.references :semester,
17
+ null: false,
18
+ index: { name: 'sem_on_course_off_seq' },
19
+ foreign_key: { to_table: :sis_core_semesters }
20
+
21
+ t.timestamps
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,24 @@
1
+ class CreateSisCoreCourseOfferings < ActiveRecord::Migration[6.0]
2
+ def change
3
+ create_table :sis_core_course_offerings do |t|
4
+ t.references :course_offering_sequence,
5
+ null: false,
6
+ index: { name: 'crs_off_seq_on_crs_off' },
7
+ foreign_key: { to_table: :sis_core_course_offering_sequences }
8
+ t.references :academic_year,
9
+ null: false,
10
+ index: { name: 'ay_on_crs_off' },
11
+ foreign_key: { to_table: :sis_core_academic_years }
12
+ t.references :semester,
13
+ null: false,
14
+ index: { name: 'sem_on_crs_off' },
15
+ foreign_key: { to_table: :sis_core_semesters }
16
+ t.references :level,
17
+ null: false,
18
+ index: { name: 'level_on_crs_off' },
19
+ foreign_key: { to_table: :sis_core_lookups }
20
+
21
+ t.timestamps
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,15 @@
1
+ class CreateSisCorePrerequisites < ActiveRecord::Migration[6.0]
2
+ def change
3
+ create_table :sis_core_prerequisites do |t|
4
+ t.references :predecessor,
5
+ null: false,
6
+ index: { name: 'pred_on_prerequisite' },
7
+ foreign_key: { to_table: :sis_core_curriculum_courses }
8
+ t.references :successor,
9
+ null: false,
10
+ index: { name: 'succ_on_prerequisite' },
11
+ foreign_key: { to_table: :sis_core_curriculum_courses }
12
+ t.timestamps
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,6 @@
1
+ class AddMinimumClassSizeToCourse < ActiveRecord::Migration[6.0]
2
+ def change
3
+ add_column :sis_core_courses, :minimum_class_size, :integer
4
+ change_column :sis_core_courses, :lab_hours, :float, null: true
5
+ end
6
+ end
@@ -4,7 +4,6 @@ module Sis
4
4
  isolate_namespace Sis::Core
5
5
 
6
6
  config.generators.api_only = true
7
- config.eager_load_paths << Sis::Core::Engine.root.join('lib')
8
7
  config.autoload_paths << Sis::Core::Engine.root.join('lib')
9
8
 
10
9
  config.generators do |g|
@@ -1,5 +1,5 @@
1
1
  module Sis
2
2
  module Core
3
- VERSION = '1.0.11'.freeze
3
+ VERSION = '1.0.16'.freeze
4
4
  end
5
5
  end
@@ -0,0 +1,9 @@
1
+ FactoryBot.define do
2
+ factory :academic_programme_document, class: Sis::Core::AcademicProgrammeDocument do
3
+ association :academic_programme
4
+ association :document_type
5
+ remark { FFaker::Name.name }
6
+ original { 1 }
7
+ copy { 1 }
8
+ end
9
+ end
@@ -1,6 +1,6 @@
1
1
  FactoryBot.define do
2
2
  factory :academic_year, class: Sis::Core::AcademicYear do
3
3
  year { FFaker::Name.name }
4
- label { 'Academic year of 2000/01' }
4
+ description { 'Academic year of 2000/01' }
5
5
  end
6
6
  end
@@ -2,6 +2,7 @@ FactoryBot.define do
2
2
  factory :application_setup, class: Sis::Core::ApplicationSetup do
3
3
  association :academic_programme
4
4
  association :target_semester, factory: :semester
5
+ association :academic_year
5
6
  start_date { Date.today - 15.days }
6
7
  end_date { Date.today + 15.days }
7
8
  status { 'Open' }
@@ -5,7 +5,6 @@ FactoryBot.define do
5
5
  payment_information { nil }
6
6
  application_date { Date.today }
7
7
  association :applicant
8
- association :academic_programme
9
8
  association :application_setup
10
9
  end
11
10
  end
@@ -0,0 +1,8 @@
1
+ FactoryBot.define do
2
+ factory :course_offering_sequence, class: Sis::Core::CourseOfferingSequence do
3
+ association :curriculum_course
4
+ association :programme_type
5
+ association :level
6
+ association :semester
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ FactoryBot.define do
2
+ factory :course_offering, class: Sis::Core::CourseOffering do
3
+ association :course_offering_sequence
4
+ association :academic_year
5
+ association :semester
6
+ association :level
7
+ end
8
+ end
@@ -7,6 +7,8 @@ FactoryBot.define do
7
7
  ects { FFaker::Random.rand(1..10) }
8
8
  lecture_hours { FFaker::Random.rand(1..4) }
9
9
  lab_hours { FFaker::Random.rand(1..4) }
10
- association :program
10
+ has_lab { true }
11
+ has_tutorial { false }
12
+ maximum_class_size { 40 }
11
13
  end
12
14
  end
@@ -0,0 +1,7 @@
1
+ FactoryBot.define do
2
+ factory :curriculum_course, class: Sis::Core::CurriculumCourse do
3
+ association :curriculum
4
+ association :course
5
+ course_type { 'Compulsory' }
6
+ end
7
+ end
@@ -0,0 +1,10 @@
1
+ FactoryBot.define do
2
+ factory :curriculum, class: Sis::Core::Curriculum do
3
+ association :programme
4
+ association :programme_level
5
+ compulsory_course_credit_hours { 1.5 }
6
+ elective_course_credit_hours { 1.5 }
7
+ thesis_hour { 1.5 }
8
+ project_hour { 1.5 }
9
+ end
10
+ end
@@ -0,0 +1,5 @@
1
+ FactoryBot.define do
2
+ factory :level, class: Sis::Core::Level, parent: :lookup do
3
+ type { 'Sis::Core::Level' }
4
+ end
5
+ end
@@ -1,6 +1,8 @@
1
1
  FactoryBot.define do
2
2
  factory :lookup, class: 'Sis::Core::Lookup' do
3
+ code { FFaker::Identification.ssn }
3
4
  name { FFaker::Name.name }
5
+ description { FFaker::Lorem.paragraph }
4
6
  type { 'Sis::Core::Lookup' }
5
7
  end
6
8
  end
@@ -0,0 +1,6 @@
1
+ FactoryBot.define do
2
+ factory :prerequisite, class: Sis::Core::Prerequisite do
3
+ association :predecessor, factory: :curriculum_course
4
+ association :successor, factory: :curriculum_course
5
+ end
6
+ end
@@ -1,7 +1,6 @@
1
1
  FactoryBot.define do
2
2
  factory :semester, class: Sis::Core::Semester do
3
- association :academic_year
4
- name { FFaker::Name.name }
3
+ code { FFaker::Name.name }
5
4
  description { FFaker::Name.name }
6
5
  end
7
6
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sis_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.11
4
+ version: 1.0.16
5
5
  platform: ruby
6
6
  authors:
7
7
  - Henock L.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-09-22 00:00:00.000000000 Z
11
+ date: 2021-03-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aasm
@@ -100,20 +100,14 @@ dependencies:
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: 6.0.2
104
- - - ">="
105
- - !ruby/object:Gem::Version
106
- version: 6.0.2.1
103
+ version: 6.0.3
107
104
  type: :runtime
108
105
  prerelease: false
109
106
  version_requirements: !ruby/object:Gem::Requirement
110
107
  requirements:
111
108
  - - "~>"
112
109
  - !ruby/object:Gem::Version
113
- version: 6.0.2
114
- - - ">="
115
- - !ruby/object:Gem::Version
116
- version: 6.0.2.1
110
+ version: 6.0.3
117
111
  - !ruby/object:Gem::Dependency
118
112
  name: sqlite3
119
113
  requirement: !ruby/object:Gem::Requirement
@@ -232,7 +226,9 @@ files:
232
226
  - app/controllers/sis/core/application_controller.rb
233
227
  - app/controllers/sis/core/menus_controller.rb
234
228
  - app/controllers/sis/core/users_controller.rb
229
+ - app/controllers/sis/core/utils_controller.rb
235
230
  - app/models/sis/core/academic_programme.rb
231
+ - app/models/sis/core/academic_programme_document.rb
236
232
  - app/models/sis/core/academic_year.rb
237
233
  - app/models/sis/core/applicant.rb
238
234
  - app/models/sis/core/application.rb
@@ -241,9 +237,13 @@ files:
241
237
  - app/models/sis/core/application_record.rb
242
238
  - app/models/sis/core/application_setup.rb
243
239
  - app/models/sis/core/course.rb
240
+ - app/models/sis/core/course_offering.rb
241
+ - app/models/sis/core/course_offering_sequence.rb
244
242
  - app/models/sis/core/course_registration.rb
245
243
  - app/models/sis/core/credit_hour_rate.rb
246
244
  - app/models/sis/core/currency.rb
245
+ - app/models/sis/core/curriculum.rb
246
+ - app/models/sis/core/curriculum_course.rb
247
247
  - app/models/sis/core/document_requirement.rb
248
248
  - app/models/sis/core/document_type.rb
249
249
  - app/models/sis/core/exam.rb
@@ -252,8 +252,10 @@ files:
252
252
  - app/models/sis/core/field_of_study.rb
253
253
  - app/models/sis/core/instructor.rb
254
254
  - app/models/sis/core/instructor_course.rb
255
+ - app/models/sis/core/level.rb
255
256
  - app/models/sis/core/lookup.rb
256
257
  - app/models/sis/core/menu.rb
258
+ - app/models/sis/core/prerequisite.rb
257
259
  - app/models/sis/core/programme.rb
258
260
  - app/models/sis/core/programme_level.rb
259
261
  - app/models/sis/core/programme_type.rb
@@ -262,6 +264,7 @@ files:
262
264
  - app/models/sis/core/user.rb
263
265
  - app/models/sis/core/user_role.rb
264
266
  - app/services/sis/core/user_service.rb
267
+ - app/services/sis/core/util_service.rb
265
268
  - app/uploaders/sis/core/application_document_uploader.rb
266
269
  - app/uploaders/sis/core/photo_uploader.rb
267
270
  - config/database.ci.yml
@@ -289,6 +292,14 @@ files:
289
292
  - db/migrate/20200511165241_create_sis_core_user_roles.rb
290
293
  - db/migrate/20200511165450_create_sis_core_menus.rb
291
294
  - db/migrate/20200919235516_create_sis_core_credit_hour_rates.rb
295
+ - db/migrate/20201019055620_create_sis_core_academic_programme_documents.rb
296
+ - db/migrate/20201102134749_create_sis_core_curriculums.rb
297
+ - db/migrate/20201102182012_remove_programme_and_add_maximum_class_size_to_course.rb
298
+ - db/migrate/20201102192055_create_sis_core_curriculum_courses.rb
299
+ - db/migrate/20201104085458_create_sis_core_course_offering_sequences.rb
300
+ - db/migrate/20201104111548_create_sis_core_course_offerings.rb
301
+ - db/migrate/20201106091250_create_sis_core_prerequisites.rb
302
+ - db/migrate/20210310071526_add_minimum_class_size_to_course.rb
292
303
  - lib/authorize_request.rb
293
304
  - lib/json_web_token.rb
294
305
  - lib/sis/core.rb
@@ -296,6 +307,7 @@ files:
296
307
  - lib/sis/core/version.rb
297
308
  - lib/sis_core.rb
298
309
  - lib/tasks/sis_core_tasks.rake
310
+ - spec/factories/sis/core/academic_programme_documents.rb
299
311
  - spec/factories/sis/core/academic_programmes.rb
300
312
  - spec/factories/sis/core/academic_years.rb
301
313
  - spec/factories/sis/core/applicants.rb
@@ -303,10 +315,14 @@ files:
303
315
  - spec/factories/sis/core/application_modules.rb
304
316
  - spec/factories/sis/core/application_setups.rb
305
317
  - spec/factories/sis/core/applications.rb
318
+ - spec/factories/sis/core/course_offering_sequences.rb
319
+ - spec/factories/sis/core/course_offerings.rb
306
320
  - spec/factories/sis/core/course_registrations.rb
307
321
  - spec/factories/sis/core/courses.rb
308
322
  - spec/factories/sis/core/credit_hour_rates.rb
309
323
  - spec/factories/sis/core/currencies.rb
324
+ - spec/factories/sis/core/curriculum_courses.rb
325
+ - spec/factories/sis/core/curriculums.rb
310
326
  - spec/factories/sis/core/document_requirements.rb
311
327
  - spec/factories/sis/core/document_types.rb
312
328
  - spec/factories/sis/core/exam_results.rb
@@ -314,8 +330,10 @@ files:
314
330
  - spec/factories/sis/core/exams.rb
315
331
  - spec/factories/sis/core/instructor_courses.rb
316
332
  - spec/factories/sis/core/instructors.rb
333
+ - spec/factories/sis/core/levels.rb
317
334
  - spec/factories/sis/core/lookups.rb
318
335
  - spec/factories/sis/core/menus.rb
336
+ - spec/factories/sis/core/prerequisites.rb
319
337
  - spec/factories/sis/core/programme_levels.rb
320
338
  - spec/factories/sis/core/programme_types.rb
321
339
  - spec/factories/sis/core/programmes.rb