Sha256: aeefb3e5e26e314cc76ee248dfba7da51dc95c19e13ccaf44f125fee63f4c0fe

Contents?: true

Size: 1.98 KB

Versions: 27

Compression:

Stored size: 1.98 KB

Contents

module Eco
  module API
    class MicroCases
      # Unique access point to set the `supervisor_id` value on a person.
      # @param person [Ecoportal::API::V1::Person] the person we want to update, carrying the changes to be done.
      # @param sup_id [nil, String] the **supervisor id** we should set on the `person`.
      # @param people [Eco::API::Organization::People] _People_ involved in the current update.
      # @param options [Hash] the options.
      # @yield [supervisor_id] callback when the supervisor_id is **unknown** (not `nil` nor any one's in `people`).
      # @yieldparam supervisor_id [String] the **unknown** `supervisor_id`.
      def set_supervisor(person, sup_id, people, options)
        unless options.dig(:exclude, :core) || options.dig(:exclude, :supervisor)
          cur_id    = person.supervisor_id
          cur_super = cur_id && with_supervisor(cur_id, people)
          micro.with_supervisor(sup_id, people) do |new_super|
            if !sup_id
              person.supervisor_id = nil
              descrease_subordinates(cur_super)
            elsif new_super && id = new_super.id
              person.supervisor_id = id
              descrease_subordinates(cur_super)
              increase_subordinates(new_super)
            elsif !block_given?
              descrease_subordinates(cur_super)
              person.supervisor_id = sup_id
            else
              yield(sup_id) if block_given?
            end
          end
        end
      end

      private

      def descrease_subordinates(person, by = 1)
        if person.is_a?(Ecoportal::API::V1::Person)
          person.subordinates -= by
          #person.subordinates  = 0 if person.subordinates < 0
        end
      end

      def increase_subordinates(person, by = 1)
        if person.is_a?(Ecoportal::API::V1::Person)
          #person.subordinates  = 0 if person.subordinates < 0
          person.subordinates += by
        end
      end

    end
  end
end

Version data entries

27 entries across 27 versions & 1 rubygems

Version Path
eco-helpers-2.0.52 lib/eco/api/microcases/set_supervisor.rb
eco-helpers-2.0.51 lib/eco/api/microcases/set_supervisor.rb
eco-helpers-2.0.50 lib/eco/api/microcases/set_supervisor.rb
eco-helpers-2.0.49 lib/eco/api/microcases/set_supervisor.rb
eco-helpers-2.0.48 lib/eco/api/microcases/set_supervisor.rb
eco-helpers-2.0.47 lib/eco/api/microcases/set_supervisor.rb
eco-helpers-2.0.46 lib/eco/api/microcases/set_supervisor.rb
eco-helpers-2.0.45 lib/eco/api/microcases/set_supervisor.rb
eco-helpers-2.0.44 lib/eco/api/microcases/set_supervisor.rb
eco-helpers-2.0.43 lib/eco/api/microcases/set_supervisor.rb
eco-helpers-2.0.42 lib/eco/api/microcases/set_supervisor.rb
eco-helpers-2.0.41 lib/eco/api/microcases/set_supervisor.rb
eco-helpers-2.0.40 lib/eco/api/microcases/set_supervisor.rb
eco-helpers-2.0.39 lib/eco/api/microcases/set_supervisor.rb
eco-helpers-2.0.38 lib/eco/api/microcases/set_supervisor.rb
eco-helpers-2.0.37 lib/eco/api/microcases/set_supervisor.rb
eco-helpers-2.0.36 lib/eco/api/microcases/set_supervisor.rb
eco-helpers-2.0.35 lib/eco/api/microcases/set_supervisor.rb
eco-helpers-2.0.34 lib/eco/api/microcases/set_supervisor.rb
eco-helpers-2.0.33 lib/eco/api/microcases/set_supervisor.rb