Fixed "self.close_time_in_min == escalation_suspend(" issue.

This commit is contained in:
Martin Edenhofer 2013-06-13 17:03:08 +02:00
parent 02c2713856
commit d313170d87
2 changed files with 47 additions and 33 deletions

View file

@ -609,20 +609,27 @@ class Ticket < ApplicationModel
# first response
if sla_selected.first_response_time
self.first_response_escal_date = TimeCalculation.dest_time( created_at, sla_selected.first_response_time, sla_selected.data, sla_selected.timezone )
extended_escalation = escalation_suspend( self.first_response_escal_date, 'relative', sla_selected )
self.first_response_escal_date = TimeCalculation.dest_time( self.first_response_escal_date, extended_escalation.to_i, sla_selected.data, sla_selected.timezone )
# get escalation date without pending time
self.first_response_escal_date = TimeCalculation.dest_time( self.created_at, sla_selected.first_response_time, sla_selected.data, sla_selected.timezone )
# get pending time between created and first response escal. time
time_in_pending = escalation_suspend( self.created_at, self.first_response_escal_date, 'relative', sla_selected )
# get new escalation time (original escal_date + time_in_pending)
self.first_response_escal_date = TimeCalculation.dest_time( self.first_response_escal_date, time_in_pending.to_i, sla_selected.data, sla_selected.timezone )
# set ticket escalation
self.escalation_time = self._escalation_calculation_higher_time( self.escalation_time, self.first_response_escal_date, self.first_response )
end
if self.first_response# && !self.first_response_in_min
self.first_response_in_min = TimeCalculation.business_time_diff( self.created_at, self.first_response, sla_selected.data, sla_selected.timezone )
self.first_response_in_min = escalation_suspend( self.first_response, 'real', sla_selected )
#self.first_response_in_min = TimeCalculation.business_time_diff( self.first_response_in_min, extended_escalation.to_i, sla_selected.data, sla_selected.timezone )
# get response time in min between created and first response
self.first_response_in_min = escalation_suspend( self.created_at, self.first_response, 'real', sla_selected )
end
# set sla time
# set time to show if sla is raised ot in
if sla_selected.first_response_time && self.first_response_in_min
self.first_response_diff_in_min = sla_selected.first_response_time - self.first_response_in_min
end
@ -651,20 +658,24 @@ class Ticket < ApplicationModel
# close time
if sla_selected.close_time
# get escalation date without pending time
self.close_time_escal_date = TimeCalculation.dest_time( self.created_at, sla_selected.close_time, sla_selected.data, sla_selected.timezone )
# get pending time between created and close escal. time
extended_escalation = escalation_suspend( self.created_at, self.close_time_escal_date, 'relative', sla_selected )
# get new escalation time (original escal_date + time_in_pending)
self.close_time_escal_date = TimeCalculation.dest_time( self.close_time_escal_date, extended_escalation.to_i, sla_selected.data, sla_selected.timezone )
# set ticket escalation
self.escalation_time = self._escalation_calculation_higher_time( self.escalation_time, self.close_time_escal_date, self.close_time )
end
if self.close_time# && !self.close_time_in_min
self.close_time_in_min = TimeCalculation.business_time_diff( self.created_at, self.close_time, sla_selected.data, sla_selected.timezone )
puts '#### 1 ' + self.close_time_in_min.to_s
self.close_time_in_min == escalation_suspend( self.close_time, 'real', sla_selected )
puts '#### 2 ' + self.close_time_in_min.to_s
if self.close_time # && !self.close_time_in_min
self.close_time_in_min = escalation_suspend( self.created_at, self.close_time, 'real', sla_selected )
end
# set sla time
if sla_selected.close_time && self.close_time_in_min
puts '#### 3 ' + sla_selected.close_time.to_s + ' - ' + self.close_time_in_min.to_s
self.close_time_diff_in_min = sla_selected.close_time - self.close_time_in_min
end
self.callback_loop = true
@ -713,8 +724,8 @@ class Ticket < ApplicationModel
# real - time without supsend state
# relative - only suspend time
def escalation_suspend (end_time, type, sla_selected)
sum_temp = 0
def escalation_suspend (start_time, end_time, type, sla_selected)
total_time_without_pending = 0
total_time = 0
#get history for ticket
history_list = History.history_list( 'Ticket', self.id, 'Ticket' )
@ -728,12 +739,12 @@ def escalation_suspend (end_time, type, sla_selected)
# ignore if it isn't a state change
next if history_item['history_attribute'] != 'ticket_state'
# ignore all older state changes after first_response
next if last_state_change && last_state_change > self.first_response
# ignore all older state changes after end_time
next if last_state_change && last_state_change > end_time
# if created_at is later then first_response, use first_response as last time
if history_item['created_at'] > self.first_response
history_item['created_at'] = self.first_response
# if created_at is later then end_time, use end_time as last time
if history_item['created_at'] > end_time
history_item['created_at'] = end_time
end
# get initial state and time
@ -749,8 +760,8 @@ def escalation_suspend (end_time, type, sla_selected)
else
diff = TimeCalculation.business_time_diff( last_state_change, history_item['created_at'] )
end
puts 'Diff count !=pending -> ==pending ' + diff.to_s
sum_temp = sum_temp + diff
puts "Diff count !=pending -> ==pending #{diff.to_s} - #{last_state_change} - #{history_item['created_at']}"
total_time_without_pending = total_time_without_pending + diff
total_time = total_time + diff
last_state_is_pending = true
@ -761,8 +772,8 @@ def escalation_suspend (end_time, type, sla_selected)
else
diff = TimeCalculation.business_time_diff( last_state_change, history_item['created_at'] )
end
puts 'Diff count !=pending -> !=pending ' + diff.to_s
sum_temp = sum_temp + diff
puts "Diff count !=pending -> !=pending #{diff.to_s} - #{last_state_change} - #{history_item['created_at']}"
total_time_without_pending = total_time_without_pending + diff
total_time = total_time + diff
last_state_is_pending = false
elsif history_item['value_from'] == 'pending' && history_item['value_to'] != 'pending'
@ -771,7 +782,7 @@ def escalation_suspend (end_time, type, sla_selected)
else
diff = TimeCalculation.business_time_diff( last_state_change, history_item['created_at'] )
end
puts 'Diff count !=pending -> !=pending ' + diff.to_s
puts "Diff not count ==pending -> !=pending #{diff.to_s} - #{last_state_change} - #{history_item['created_at']}"
total_time = total_time + diff
last_state_is_pending = false
# no pending state, do not count
@ -792,7 +803,8 @@ def escalation_suspend (end_time, type, sla_selected)
else
diff = TimeCalculation.business_time_diff( last_state_change, end_time )
end
sum_temp = sum_temp + diff
puts "Diff count last state was not pending #{diff.to_s} - #{last_state_change} - #{end_time}"
total_time_without_pending = total_time_without_pending + diff
total_time = total_time + diff
end
@ -803,17 +815,19 @@ def escalation_suspend (end_time, type, sla_selected)
else
diff = TimeCalculation.business_time_diff( self.created_at, end_time )
end
sum_temp = sum_temp + diff
puts 'Diff state has not changed ' + diff.to_s
total_time_without_pending = total_time_without_pending + diff
total_time = total_time + diff
end
puts total_time
#return sum
if (type == 'real')
return sum_temp
return total_time_without_pending
elsif (type == 'relative')
return total_time - sum_temp
relative = total_time - total_time_without_pending
return relative
else
return nil
raise "ERROR: Unknown type #{type}"
end
end

View file

@ -680,7 +680,7 @@ class TicketTest < ActiveSupport::TestCase
#assert_equal( ticket.update_time_escal_date.gmtime.to_s, '2013-06-04 12:30:00 UTC', 'ticket.update_time_escal_date verify 1' )
#assert_equal( ticket.close_time_escal_date.gmtime.to_s, '2013-06-04 13:30:00 UTC', 'ticket.close_time_escal_date verify 1' )
assert_equal( ticket.close_time_in_min, 150, 'ticket.close_time_in_min verify 3' )
assert_equal( ticket.close_time_diff_in_min, 150, 'ticket.close_time_diff_in_min# verify 3' )
assert_equal( ticket.close_time_diff_in_min, 90, 'ticket.close_time_diff_in_min# verify 3' )
delete = sla.destroy
assert( delete, "sla destroy" )