Sha256: 50add1e3b72f56f80ace0398318e3594c25b4b27f9f235b816a82cb167773c76

Contents?: true

Size: 1.21 KB

Versions: 3

Compression:

Stored size: 1.21 KB

Contents

##
# As Superior Post 是上级岗位的领域逻辑关注点。

module Unidom::Position::Concerns::AsSuperiorPost

  extend  ActiveSupport::Concern
  include Unidom::Common::Concerns::ArgumentValidation

  included do |includer|

    has_many :inferior_post_reporting_structures, class_name: 'Unidom::Position::PostReportingStructure', source: :superior_post, foreign_key: :superior_post_id
    has_many :inferior_posts,                     through:    :inferior_post_reporting_structures,        source: :inferior_post

    ##
    # 以上级岗位的身份与下级岗位 by 建立岗位间的上下级汇报关系。
    # 主要汇报标志是 primary ,缺省为 true 。建立时间是 at ,缺省为当前时间。如:
    # project_manager.is_reported_to! by: rails_developer, primary: false
    def is_reported_to!(by: nil, at: Time.now, primary: true)

      assert_present! :by, by

      inferior_post_reporting_structures.inferior_post_is(by).valid_at(now: at).alive.first_or_create! elemental: primary, opened_at: at
    end

    def is_reported_to?(by: nil, at: Time.now, primary: true)
      inferior_post_reporting_structures.inferior_post_is(by).valid_at(now: at).alive.primary(primary).exists?
    end

  end

end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
unidom-position-2.0 app/models/unidom/position/concerns/as_superior_post.rb
unidom-position-1.5.9 app/models/unidom/position/concerns/as_superior_post.rb
unidom-position-1.5.8 app/models/unidom/position/concerns/as_superior_post.rb