Class: Readiness::TicketProcessor::Weighting

Inherits:
Client
  • Object
show all
Defined in:
lib/support_readiness/ticket_processor/weighting.rb

Overview

Defines the class Weighting within the module Zendesk.

Author:

  • Jason Colyer

Since:

  • 1.0.44

Class Method Summary collapse

Methods inherited from Client

auth_error, bad_request_error, convert_actions, convert_conditions, convert_standard_names_to_ids, convert_ticket_form_agent_conditions, convert_ticket_form_brands, convert_ticket_form_end_user_conditions, convert_ticket_form_names_to_ids, convert_view_names_to_ids, convert_view_restrictions, covert_ticket_form_field_ids, create_package!, erb_renderer, handle_request_error, not_found_error, not_processible_error, put_into_archive, recursively_deflate_directory, timestamp_filename, to_clean_json, to_clean_json_with_key, to_hash, to_nearly_clean_json, to_nearly_clean_json_with_key, to_param_string, write_entries

Class Method Details

.acc_type_modifierObject

Since:

  • 1.0.44



77
78
79
80
81
82
83
84
# File 'lib/support_readiness/ticket_processor/weighting.rb', line 77

def self.acc_type_modifier
  return 0 if @organization.nil?
  return 17 if @organization.organization_fields['account_type'] == 'alliance_partner'
  return 10 if @organization.organization_fields['account_type'] == 'select_partner'
  return 10 if @organization.organization_fields['account_type'] == 'open_partner'

  0
end

.arr_modifierObject

Since:

  • 1.0.44



61
62
63
64
65
66
67
68
69
# File 'lib/support_readiness/ticket_processor/weighting.rb', line 61

def self.arr_modifier
  arr = arr_to_use
  return 17 if arr >= 1000000
  return 12 if arr >= 300000
  return 10 if arr >= 30000
  return 8 if arr > 0

  0
end

.arr_to_useObject

Since:

  • 1.0.44



122
123
124
125
126
127
# File 'lib/support_readiness/ticket_processor/weighting.rb', line 122

def self.arr_to_use
  field = @ticket.custom_fields.detect { |f| f['id'] == @ticket_arr_field.id }['value'].to_f
  return field if @organization.nil?

  [field, @organization.organization_fields['aar'].to_f].max
end

.calculate_weightObject

Since:

  • 1.0.44



50
51
52
53
54
55
56
57
58
59
# File 'lib/support_readiness/ticket_processor/weighting.rb', line 50

def self.calculate_weight
  final = 0
  final += arr_modifier unless @ticket.ticket_form_id == @lnr_form.id
  final += form_modifier unless @ticket.ticket_form_id == @lnr_form.id        
  final += acc_type_modifier
  final += ticket_priority_modifier
  final += customer_priority_modifier
  final += sla_breach_modifier
  final
end

.customer_priority_modifierObject

Since:

  • 1.0.44



94
95
96
97
98
99
100
101
# File 'lib/support_readiness/ticket_processor/weighting.rb', line 94

def self.customer_priority_modifier
  field = @ticket.custom_fields.detect { |f| f['id'] == @customer_priority_field.id }['value']
  return 8 if field == 'urgent'
  return 5 if field == 'high'
  return 3 if field == 'medium'

  1
end

.form_modifierObject

Since:

  • 1.0.44



71
72
73
74
75
# File 'lib/support_readiness/ticket_processor/weighting.rb', line 71

def self.form_modifier
  return 100 if @ticket.ticket_form_id == @emergency_form.id

  0
end

.process!(zendesk_client, ticket_id) ⇒ Object

Process a Weighting request

Author:

  • Jason Colyer

Since:

  • 1.0.44



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/support_readiness/ticket_processor/weighting.rb', line 18

def self.process!(zendesk_client, ticket_id)
  @zendesk_client = zendesk_client
  @ticket_id = ticket_id
  @ticket_fields = Readiness::Zendesk::TicketFields.list(@zendesk_client)
  @ticket_forms = Readiness::Zendesk::TicketForms.list(@zendesk_client)        
  @ticket = Readiness::Zendesk::Tickets.find(@zendesk_client, @ticket_id)
  @organization = if @ticket.organization_id.nil?
                    nil
                  else
                    Readiness::Zendesk::Organizations.find!(@zendesk_client, @ticket.organization_id)
                  end
  puts 'No ticket found, so no STAR actions to do' if @ticket.is_a? Hash
  exit 0 if @ticket.is_a? Hash

  time_diff = Time.parse('9999-12-31T23:59:59Z') - Time.parse(@ticket.created_at)
  @ticket_weight_field = Readiness::Zendesk::TicketFields.find_by_name(@zendesk_client, 'Ticket Weight', @ticket_fields)
  @ticket_weight_sorting_field = Readiness::Zendesk::TicketFields.find_by_name(@zendesk_client, 'Ticket Weight for Sorting', @ticket_fields)
  @customer_priority_field = Readiness::Zendesk::TicketFields.find_by_name(@zendesk_client, 'Customer Priority', @ticket_fields)
  @ticket_stage_field = Readiness::Zendesk::TicketFields.find_by_name(@zendesk_client, 'Ticket Stage', @ticket_fields)
  @ticket_arr_field = Readiness::Zendesk::TicketFields.find_by_name(@zendesk_client, 'Ticket ARR', @ticket_fields)
  @lnr_form = Readiness::Zendesk::TicketForms.find_by_name(@zendesk_client, 'L&R', @ticket_forms)
  @emergency_form = Readiness::Zendesk::TicketForms.find_by_name(@zendesk_client, 'Emergencies', @ticket_forms)        
  weight = calculate_weight
  new_ticket = Readiness::Zendesk::Tickets.new
  new_ticket.id = @ticket.id
  new_ticket.custom_fields = [
    { id: @ticket_weight_field.id, value: weight },
    { id: @ticket_weight_sorting_field.id, value: "#{format('%03d', weight)} - #{format('%.5f', time_diff)}" }
  ]
  Readiness::Zendesk::Tickets.update!(@zendesk_client, new_ticket)
end

.sla_breach_modifierObject

Since:

  • 1.0.44



103
104
105
106
107
108
109
110
111
112
113
114
# File 'lib/support_readiness/ticket_processor/weighting.rb', line 103

def self.sla_breach_modifier
  breach_level = ENV.fetch('SLA_BREACH_LEVEL', 0).to_i
  field = @ticket.custom_fields.detect { |f| f['id'] == @ticket_stage_field.id }['value']
  return 19 if field == 'stage-frt' && breach_level == 1
  return 38 if field == 'stage-frt' && breach_level == 2
  return 57 if field == 'stage-frt' && breach_level == 3
  return 9 if field == 'stage-nrt' && breach_level == 1
  return 18 if field == 'stage-nrt' && breach_level == 2
  return 27 if field == 'stage-nrt' && breach_level == 3

  0
end

.star_modifierObject

Since:

  • 1.0.44



116
117
118
119
120
# File 'lib/support_readiness/ticket_processor/weighting.rb', line 116

def self.star_modifier
  return 20 if @ticket.tags.include? 'star_submitted'

  0
end

.ticket_priority_modifierObject

Since:

  • 1.0.44



86
87
88
89
90
91
92
# File 'lib/support_readiness/ticket_processor/weighting.rb', line 86

def self.ticket_priority_modifier
  return 22 if @ticket.priority == 'urgent'
  return 15 if @ticket.priority == 'high'
  return 8 if @ticket.priority == 'medium'

  2
end