Improve completed_on generation for steps/my_modules [SCI-4776]

This commit is contained in:
Oleksii Kriuchykhin 2020-07-07 09:34:51 +02:00
parent 3af20c96c7
commit aa38d92982
3 changed files with 16 additions and 7 deletions

View file

@ -319,11 +319,6 @@ class StepsController < ApplicationController
changed = @step.completed != completed changed = @step.completed != completed
@step.completed = completed @step.completed = completed
# Update completed_on
if changed
@step.completed_on = completed ? Time.current : nil
end
if @step.save if @step.save
if @protocol.in_module? if @protocol.in_module?
ready_to_complete = @protocol.my_module.check_completness_status ready_to_complete = @protocol.my_module.check_completness_status

View file

@ -7,7 +7,7 @@ class MyModule < ApplicationRecord
enum state: Extends::TASKS_STATES enum state: Extends::TASKS_STATES
before_create :create_blank_protocol before_create :create_blank_protocol
before_save -> { self.completed_on = completed? ? DateTime.now : nil }, if: :state_changed? before_validation :set_completed_on, if: :state_changed?
auto_strip_attributes :name, :description, nullify: false auto_strip_attributes :name, :description, nullify: false
validates :name, validates :name,
@ -18,6 +18,7 @@ class MyModule < ApplicationRecord
validates :experiment, presence: true validates :experiment, presence: true
validates :my_module_group, presence: true, if: proc { |mm| !mm.my_module_group_id.nil? } validates :my_module_group, presence: true, if: proc { |mm| !mm.my_module_group_id.nil? }
validate :coordinates_uniqueness_check, if: :active? validate :coordinates_uniqueness_check, if: :active?
validates :completed_on, presence: true, if: proc { |mm| mm.completed? }
belongs_to :created_by, belongs_to :created_by,
foreign_key: 'created_by_id', foreign_key: 'created_by_id',
@ -536,6 +537,12 @@ class MyModule < ApplicationRecord
private private
def set_completed_on
return if completed? && completed_on.present?
self.completed_on = completed? ? DateTime.now : nil
end
def create_blank_protocol def create_blank_protocol
protocols << Protocol.new_blank_for_module(self) protocols << Protocol.new_blank_for_module(self)
end end

View file

@ -14,9 +14,10 @@ class Step < ApplicationRecord
validates :user, :protocol, presence: true validates :user, :protocol, presence: true
validates :completed_on, presence: true, if: proc { |s| s.completed? } validates :completed_on, presence: true, if: proc { |s| s.completed? }
before_validation :set_completed_on, if: :completed_changed?
before_save :set_last_modified_by
before_destroy :cascade_before_destroy before_destroy :cascade_before_destroy
before_destroy :adjust_positions_on_destroy before_destroy :adjust_positions_on_destroy
before_save :set_last_modified_by
belongs_to :user, inverse_of: :steps belongs_to :user, inverse_of: :steps
belongs_to :last_modified_by, foreign_key: 'last_modified_by_id', class_name: 'User', optional: true belongs_to :last_modified_by, foreign_key: 'last_modified_by_id', class_name: 'User', optional: true
@ -135,6 +136,12 @@ class Step < ApplicationRecord
tables.each(&:destroy) tables.each(&:destroy)
end end
def set_completed_on
return if completed? && completed_on.present?
self.completed_on = completed? ? DateTime.now : nil
end
def set_last_modified_by def set_last_modified_by
if @current_user&.is_a?(User) if @current_user&.is_a?(User)
self.tables.each do |t| self.tables.each do |t|