sis_core 1.0.11 → 1.0.16

Sign up to get free protection for your applications and to get access to all the features.
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