Sha256: 26dd635cf316865f3a57647bd82b09491057cf1f695df106d5d68dc9651f51a2

Contents?: true

Size: 1.42 KB

Versions: 42

Compression:

Stored size: 1.42 KB

Contents

class Mumuki::Domain::ProgressTransfer::Base
  attr_reader *%i(source_organization destination_organization progress_item transferred_item)

  delegate :user, to: :progress_item

  def initialize(progress_item, destination_organization)
    @progress_item = progress_item
    @destination_organization = destination_organization
  end

  def execute!
    ActiveRecord::Base.transaction do
      pre_transfer!
      transfer!
      post_transfer!
    end
  end

  def pre_transfer!
    validate_transferrable!
    @source_organization = progress_item.organization
    progress_item.delete_duplicates_in!(destination_organization)
  end

  def transfer!
    @transferred_item = do_transfer!
  end

  def post_transfer!
    transferred_item.dirty_parent_by_submission!
    notify_transfer!
    transferred_item
  end

  def validate_transferrable!
    raise "Transferred progress' content must be available in destination!" unless progress_item.content_available_in?(destination_organization)
    raise 'User must be student in destination organization' unless user.student_of?(destination_organization)
    raise 'Transfer only supported for guide indicators' unless progress_item.guide_indicator?
  end

  def notify_transfer!
    Mumukit::Nuntius.notify! 'progress-transfers', { from: source_organization.name, to: destination_organization.name, item_type: transferred_item.class.to_s, item_id: transferred_item.id, transfer_type: transfer_type }
  end
end

Version data entries

42 entries across 42 versions & 1 rubygems

Version Path
mumuki-domain-9.23.0 lib/mumuki/domain/progress_transfer/base.rb
mumuki-domain-9.22.1 lib/mumuki/domain/progress_transfer/base.rb
mumuki-domain-9.22.0 lib/mumuki/domain/progress_transfer/base.rb
mumuki-domain-9.21.0 lib/mumuki/domain/progress_transfer/base.rb
mumuki-domain-9.20.0 lib/mumuki/domain/progress_transfer/base.rb
mumuki-domain-9.19.0 lib/mumuki/domain/progress_transfer/base.rb
mumuki-domain-9.18.0 lib/mumuki/domain/progress_transfer/base.rb
mumuki-domain-9.17.0 lib/mumuki/domain/progress_transfer/base.rb
mumuki-domain-9.16.0 lib/mumuki/domain/progress_transfer/base.rb
mumuki-domain-9.15.0 lib/mumuki/domain/progress_transfer/base.rb
mumuki-domain-9.14.1 lib/mumuki/domain/progress_transfer/base.rb
mumuki-domain-9.14.0 lib/mumuki/domain/progress_transfer/base.rb
mumuki-domain-9.13.1 lib/mumuki/domain/progress_transfer/base.rb
mumuki-domain-9.13.0 lib/mumuki/domain/progress_transfer/base.rb
mumuki-domain-9.12.0 lib/mumuki/domain/progress_transfer/base.rb
mumuki-domain-9.11.0 lib/mumuki/domain/progress_transfer/base.rb
mumuki-domain-9.10.0 lib/mumuki/domain/progress_transfer/base.rb
mumuki-domain-9.9.0 lib/mumuki/domain/progress_transfer/base.rb
mumuki-domain-9.8.1 lib/mumuki/domain/progress_transfer/base.rb
mumuki-domain-9.8.0 lib/mumuki/domain/progress_transfer/base.rb