diff --git a/README.md b/README.md index 2ce799e1e..7730cc9c5 100644 --- a/README.md +++ b/README.md @@ -64,16 +64,6 @@ idiario | * Listening on tcp://0.0.0.0:3000 idiario | Use Ctrl-C to stop ``` -Após finalizada a instalação, descubra em qual endereço o i-Diário está rodando, basta executar o comando: - -``` -docker-compose port app 3000 -``` - -Acesse o endereço que será exibido após rodar o comando acima. - -O usuário padrão é: `admin` / A senha padrão é: `123456789` - #### Personalizando a instalação via Docker Você pode criar um arquivo `docker-compose.override.yml` para personalizar sua instalação do i-Diário, mudando as portas diff --git a/app/controllers/discipline_content_records_controller.rb b/app/controllers/discipline_content_records_controller.rb index e40c350f4..eefe77a9a 100644 --- a/app/controllers/discipline_content_records_controller.rb +++ b/app/controllers/discipline_content_records_controller.rb @@ -4,6 +4,8 @@ class DisciplineContentRecordsController < ApplicationController before_action :require_current_teacher before_action :require_allow_to_modify_prev_years, only: [:create, :update, :destroy, :clone] + before_action :set_number_of_classes, only: [:new, :create, :edit, :show] + before_action :allow_class_number, only: [:index, :new, :edit, :show] def index params[:filter] ||= {} @@ -38,6 +40,7 @@ def new record_date: Time.zone.now, unity_id: current_unity.id ) + @class_numbers = [] authorize @discipline_content_record end @@ -53,10 +56,31 @@ def create authorize @discipline_content_record - if @discipline_content_record.save - respond_with @discipline_content_record, location: discipline_content_records_path + if allow_class_number + @class_numbers = resource_params[:class_number].split(',').sort + @discipline_content_record.class_number = @class_numbers.first + + @class_numbers.each do |class_number| + @discipline_content_record.class_number = class_number + + return render :new if @discipline_content_record.invalid? + end + + multiple_content_creator = CreateMultipleContents.new(@class_numbers, @discipline_content_record) + + if multiple_content_creator.call + respond_with @discipline_content_record, location: discipline_content_records_path + else + render :new + end else - render :new + if @discipline_content_record.save + return unless validate_class_numbers + + respond_with @discipline_content_record, location: discipline_content_records_path + else + render :new + end end end @@ -111,6 +135,24 @@ def clone private + def allow_class_number + @allow_class_number ||= GeneralConfiguration.first.allow_class_number_on_content_records + end + + def set_number_of_classes + @number_of_classes = current_school_calendar.number_of_classes + end + + def validate_class_numbers + return true unless allow_class_number + return true if @class_numbers.present? + + @error_on_class_numbers = true + flash.now[:alert] = t('errors.daily_frequencies.class_numbers_required_when_not_global_absence') + + false + end + def content_ids param_content_ids = params[:discipline_content_record][:content_record_attributes][:content_ids] || [] content_descriptions = params[:discipline_content_record][:content_record_attributes][:content_descriptions] || [] @@ -120,6 +162,7 @@ def content_ids def resource_params params.require(:discipline_content_record).permit( + :class_number, :discipline_id, content_record_attributes: [ :id, diff --git a/app/controllers/general_configurations_controller.rb b/app/controllers/general_configurations_controller.rb index 67b246f73..a01cbfea5 100644 --- a/app/controllers/general_configurations_controller.rb +++ b/app/controllers/general_configurations_controller.rb @@ -55,6 +55,7 @@ def permitted_attributes :days_to_disable_access, :show_inactive_enrollments, :show_percentage_on_attendance_record_report, + :allow_class_number_on_content_records, :require_daily_activities_record ) diff --git a/app/models/discipline_content_record.rb b/app/models/discipline_content_record.rb index 26c04b41f..7cd5f0492 100644 --- a/app/models/discipline_content_record.rb +++ b/app/models/discipline_content_record.rb @@ -40,18 +40,25 @@ class DisciplineContentRecord < ActiveRecord::Base joins(:content_record).merge(ContentRecord.where.not(teacher_id: current_teacher_id)) end } + scope :by_class_number, lambda { |class_number| where(class_number: class_number) } + validates :class_number, presence: true, if: -> { allow_class_number? } validates :content_record, presence: true validates :discipline, presence: true validate :uniqueness_of_discipline_content_record validate :ensure_is_school_day + validate :uniqueness_of_class_number, if: -> { allow_class_number? } delegate :contents, :record_date, :classroom, to: :content_record delegate :grades, to: :classroom private + def allow_class_number? + GeneralConfiguration.first.allow_class_number_on_content_records + end + def valid_for_destruction? @valid_for_destruction if defined?(@valid_for_destruction) @valid_for_destruction = begin @@ -68,6 +75,7 @@ def valid_for_destruction? end def uniqueness_of_discipline_content_record + return if allow_class_number? return unless content_record.present? && content_record.classroom.present? && content_record.record_date.present? discipline_content_records = DisciplineContentRecord.by_teacher_id(content_record.teacher_id) @@ -82,6 +90,20 @@ def uniqueness_of_discipline_content_record end end + def uniqueness_of_class_number + discipline_content_record = DisciplineContentRecord.by_teacher_id(content_record.teacher_id) + .by_classroom_id(content_record.classroom_id) + .by_discipline_id(discipline_id) + .by_date(content_record.record_date) + .by_class_number(class_number) + .exists? + + if discipline_content_record + errors.add(:class_number, I18n.t('activerecord.errors.models.discipline_content_record.attributes.discipline_id.class_number_in_use')) + end + end + + def ensure_is_school_day return unless content_record.present? && content_record.school_calendar.present? && diff --git a/app/services/create_multiple_contents.rb b/app/services/create_multiple_contents.rb new file mode 100644 index 000000000..b9216053a --- /dev/null +++ b/app/services/create_multiple_contents.rb @@ -0,0 +1,25 @@ +class CreateMultipleContents + attr_accessor :lessons_to_create, :base_content + + def initialize(lessons_to_create, base_content) + @lessons_to_create = lessons_to_create + @base_content = base_content + end + + def call + create_multiple + end + + private + + def create_multiple + ActiveRecord::Base.transaction do + lessons_to_create.each do |class_number| + discipline_content = base_content.dup + discipline_content.content_record = base_content.content_record.dup + discipline_content.class_number = class_number + discipline_content.save + end + end + end +end diff --git a/app/views/discipline_content_records/_form.html.erb b/app/views/discipline_content_records/_form.html.erb index 8ec1632d1..835a522b4 100644 --- a/app/views/discipline_content_records/_form.html.erb +++ b/app/views/discipline_content_records/_form.html.erb @@ -31,6 +31,16 @@