module Eco module API class UseCases class DefaultCases class UpdateDetailsCase < DefaultCase def process @cases.define("update-details", type: :sync) do |entries, people, session, options, usecase| job = session.job_group("main").new("update", usecase: usecase, type: :update, sets: [:core, :details]) supers = session.job_group("post").new("supers", usecase: usecase, type: :update, sets: :core) strict_search = session.config.people.strict_search? && (!options[:search]&.key?(:strict) || options.dig(:search, :strict)) entries.each.with_index do |entry, i| if person = people.find(entry, strict: strict_search) unless options.dig(:exclude, :core) core_attrs = ["name", "external_id", "email", "filter_tags"] core_excluded = core_attrs.map.select {|attr| options.dig(:exclude, attr.to_sym)} core_excluded.push("supervisor_id") entry.set_core(person, exclude: core_excluded) unless options.dig(:exclude, :core) if session.tagtree && !options.dig(:exclude, :filter_tags) person.filter_tags = session.tagtree.user_tags( initial: ini_tags, final: person.filter_tags, preserve_custom: true, add_custom: true ) end end entry.set_details(person) job.add(person) # set supervisor unless options.dig(:exclude, :core) || options.dig(:exclude, :supervisor) if !(sup_id = entry.supervisor_id) person.supervisor_id = nil else if supervisor = people.person(id: sup_id, external_id: sup_id, email: sup_id) person.supervisor_id = supervisor.id else # delay setting supervisor if does not exit supers.add(person) do |person| person.supervisor_id = sup_id end end end end else session.logger.error("Entry(#{i}) - this person does not exist: #{entry.to_s(:identify)}") end end end end end end end end end