Class: QueueCallLog

Inherits:
ApplicationRecord show all
Defined in:
app/models/queue_call_log.rb

Overview

== Schema Information

Table name: queue_call_logs
Database name: primary

id :integer not null, primary key
abandon_position :integer
caller_id_name :string
caller_id_number :string
enter_position :integer
exit_position :integer
member_extension :integer
member_misses :integer
member_name :string
origination :string
outcome :string
queue_extension :integer
queue_name :string
result_member_extension :integer
result_member_name :string
result_type :string
ring_time :integer
start_date_cst :date
start_time :datetime
talk_time :integer
wait_time :integer
caller_party_id :integer
member_account_id :integer
member_party_id :integer
queue_account_id :integer
result_member_account_id :integer
unique_id :string

Indexes

idx_outcome_st_rt (outcome,start_time,ring_time)
idx_queue_call_logs (unique_id, start_time, outcome, COALESCE(member_extension, 0), queue_extension) UNIQUE
index_queue_call_logs_caller_party_id (caller_party_id)
index_queue_call_logs_on_member_extension (member_extension)
index_queue_call_logs_on_queue_extension (queue_extension)
index_queue_call_logs_on_start_date_cst (start_date_cst) USING brin
index_queue_call_logs_on_start_time (start_time)
member_party_id_st_rt (member_party_id,start_time,ring_time)

Belongs to collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from ApplicationRecord

ransackable_associations, ransackable_attributes, ransackable_scopes, ransortable_attributes, #to_relation

Methods included from Models::EventPublishable

#publish_event

Class Method Details

.create_from_log_entries(les) ⇒ Object



89
90
91
92
93
94
95
96
97
98
99
100
# File 'app/models/queue_call_log.rb', line 89

def self.create_from_log_entries(les)
  new_queue_call_logs = []
  les.each do |le|
    new_queue_call_logs << create_from_log_entry(le)
  end
  Rails.logger.info "New Queue Call Log to Import #{new_queue_call_logs.size}"
  #Bulk import
  require 'activerecord-import/base'
  require 'activerecord-import/active_record/adapters/postgresql_adapter'
  res = QueueCallLog.import new_queue_call_logs, on_duplicate_key_ignore: true
  Rails.logger.info "New Queue Call Log actually imported: #{res}"
end

.create_from_log_entry(le) ⇒ Object



102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
# File 'app/models/queue_call_log.rb', line 102

def self.create_from_log_entry(le)

  qcl = new(
    caller_id_name: le.caller_id_name,
    queue_extension: le.queue_extension,
    enter_position: le.enter_position,
    abandon_position: le.abandon_position ,
    origination: le.origination,
    member_account_id: le.,
    wait_time: le.wait_time,
    queue_name: le.queue_name,
    caller_id_number: le.caller_id_number,
    start_time: le.start_time,
    unique_id: le.uniqueid,
    member_extension: le.member_extension,
    member_name: le.member_name,
    talk_time: le.talk_time,
    outcome: le.type, #type
    member_misses: le.member_misses,
    queue_account_id: le.,
    exit_position: le.exit_position,
    result_type: le.result_type,
    ring_time: le.ring_time,
    result_member_account_id: le.,
    result_member_name: le.result_member_name,
    result_member_extension: le.result_member_extension
  )
  qcl.match_caller_party
  qcl.match_member_party
  return qcl
end

.import_member_queue_call_logs(start_time, end_time) ⇒ Object



76
77
78
79
80
81
82
83
84
85
86
87
# File 'app/models/queue_call_log.rb', line 76

def self.import_member_queue_call_logs(start_time, end_time)
  pbx = Phone::Pbx.instance
  params = {
    'start_date': start_time,
    'end_date': end_time
  }
  # Retrieve member account ids once
  res = pbx.member_queue_log_search(params) do |results|
    create_from_log_entries(results)
  end
  res
end

.import_new_queue_call_logs(start_time_override: nil, end_time_override: nil) ⇒ Object



52
53
54
55
56
57
58
59
60
61
# File 'app/models/queue_call_log.rb', line 52

def self.import_new_queue_call_logs(start_time_override: nil, end_time_override: nil)
  #Find last import date
  start_time = start_time_override || QueueCallLog.maximum(:start_time) - 1.hour
  end_time = [end_time_override || Date.current.end_of_day, start_time].max

  Rails.logger.info "Queue Call Log import will start from #{start_time} until #{end_time}"
  import_queue_call_logs(start_time, end_time)
  #insert queue member log search
  import_member_queue_call_logs(start_time, end_time)
end

.import_queue_call_logs(start_time, end_time) ⇒ Object



63
64
65
66
67
68
69
70
71
72
73
74
# File 'app/models/queue_call_log.rb', line 63

def self.import_queue_call_logs(start_time, end_time)
  pbx = Phone::Pbx.instance
  params = {
    'start_date': start_time,
    'end_date': end_time
  }
  Rails.logger.info "Starting import_queue_call_logs"
  res = pbx.queue_log_search(params) do |results|
    create_from_log_entries(results)
  end
  res
end

.queue_name_select_optionsObject



159
160
161
# File 'app/models/queue_call_log.rb', line 159

def self.queue_name_select_options
  where.not(queue_name: 'test').order('queue_name').distinct.pluck(:queue_name)
end

Instance Method Details

#caller_partyParty

Returns:

See Also:



47
# File 'app/models/queue_call_log.rb', line 47

belongs_to :caller_party, class_name: 'Party', inverse_of: :queue_call_logs, optional: true

#find_party_using_account_id(account_id) ⇒ Object



146
147
148
149
# File 'app/models/queue_call_log.rb', line 146

def ()
  return unless 
  EmployeePhoneStatus.find_by(switchvox_account_id: ).try(:employee)
end

#find_party_using_number(number) ⇒ Object



151
152
153
154
155
156
157
# File 'app/models/queue_call_log.rb', line 151

def find_party_using_number(number)
  return unless number.present?
  Party.joins(:contact_points).
        merge(ContactPoint.voice_callable).
        where(contact_points: { detail: number }).first

end

#match_caller_partyObject



134
135
136
137
138
# File 'app/models/queue_call_log.rb', line 134

def match_caller_party
  if caller_id_number and caller_party.nil?
    self.caller_party = find_party_using_number(caller_id_number)
  end
end

#match_member_partyObject



140
141
142
143
144
# File 'app/models/queue_call_log.rb', line 140

def match_member_party
  if  and member_party.nil?
    self.member_party = ()
  end
end

#member_partyParty

Returns:

See Also:



48
# File 'app/models/queue_call_log.rb', line 48

belongs_to :member_party, class_name: "Party", optional: true