statistics_diff.rb 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. # Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/
  2. class Sequencer
  3. class Unit
  4. module Import
  5. module Ldap
  6. module Sources
  7. module Lost
  8. class StatisticsDiff < Sequencer::Unit::Base
  9. include ::Sequencer::Unit::Import::Common::Model::Statistics::Mixin::EmptyDiff
  10. uses :lost_ids
  11. def process
  12. # deactivated count is tracked as a separate number
  13. # since they don't have to be in the sum (e.g. deleted in LDAP)
  14. state.provide(:statistics_diff) do
  15. diff.merge(
  16. role_ids: role_ids,
  17. deactivated: lost_ids.size
  18. )
  19. end
  20. end
  21. def role_ids
  22. lost_ids.each_with_object({}) do |user_id, result|
  23. role_ids = ::User.joins(:roles)
  24. .where(id: user_id)
  25. .pluck(:'roles_users.role_id')
  26. role_ids.each do |role_id|
  27. result[role_id] ||= diff
  28. result[role_id][:deactivated] += 1
  29. end
  30. end
  31. end
  32. end
  33. end
  34. end
  35. end
  36. end
  37. end
  38. end