43 lines
862 B
Ruby
43 lines
862 B
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
module CustomerRelations
|
||
|
class ContactStateCounts
|
||
|
include Gitlab::Utils::StrongMemoize
|
||
|
|
||
|
attr_reader :group
|
||
|
|
||
|
def self.declarative_policy_class
|
||
|
'CustomerRelations::ContactPolicy'
|
||
|
end
|
||
|
|
||
|
def initialize(current_user, group, params)
|
||
|
@current_user = current_user
|
||
|
@group = group
|
||
|
@params = params
|
||
|
end
|
||
|
|
||
|
# Define method for each state
|
||
|
::CustomerRelations::Contact.states.each_key do |state|
|
||
|
define_method(state) { counts[state] }
|
||
|
end
|
||
|
|
||
|
def all
|
||
|
counts.values.sum
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
attr_reader :current_user, :params
|
||
|
|
||
|
def counts
|
||
|
strong_memoize(:counts) do
|
||
|
Hash.new(0).merge(counts_by_state)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def counts_by_state
|
||
|
::Crm::ContactsFinder.counts_by_state(current_user, params.merge({ group: group }))
|
||
|
end
|
||
|
end
|
||
|
end
|