Browse Source

Moved back to compact module/class definition to prevent "superclass mismatch for class Ticket (TypeError)".

Martin Edenhofer 10 years ago
parent
commit
ba1d7abf91

+ 21 - 23
app/models/ticket/activity_stream_log.rb

@@ -1,7 +1,6 @@
 # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
 # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
-
-class Ticket
-  module ActivityStreamLog
+# rubocop:disable ClassAndModuleChildren
+module Ticket::ActivityStreamLog
 
 
 =begin
 =begin
 
 
@@ -16,25 +15,24 @@ returns
 
 
 =end
 =end
 
 
-    def activity_stream_log (type, user_id)
-
-      # return if we run import mode
-      return if Setting.get('import_mode')
-
-      # return if we run on init mode
-      return if !Setting.get('system_init_done')
-
-      return if !self.class.activity_stream_support_config
-      role = self.class.activity_stream_support_config[:role]
-      ActivityStream.add(
-        o_id: self['id'],
-        type: type,
-        object: self.class.name,
-        group_id: self['group_id'],
-        role: role,
-        created_at: self.updated_at,
-        created_by_id: user_id,
-      )
-    end
+  def activity_stream_log (type, user_id)
+
+    # return if we run import mode
+    return if Setting.get('import_mode')
+
+    # return if we run on init mode
+    return if !Setting.get('system_init_done')
+
+    return if !self.class.activity_stream_support_config
+    role = self.class.activity_stream_support_config[:role]
+    ActivityStream.add(
+      o_id: self['id'],
+      type: type,
+      object: self.class.name,
+      group_id: self['group_id'],
+      role: role,
+      created_at: self.updated_at,
+      created_by_id: user_id,
+    )
   end
   end
 end
 end

+ 43 - 45
app/models/ticket/article.rb

@@ -1,52 +1,50 @@
 # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
 # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
-
-class Ticket
-  class Article < ApplicationModel
-    load 'ticket/article/assets.rb'
-    include Ticket::Article::Assets
-    load 'ticket/article/history_log.rb'
-    include Ticket::Article::HistoryLog
-    load 'ticket/article/activity_stream_log.rb'
-    include Ticket::Article::ActivityStreamLog
-
-    belongs_to    :ticket
-    belongs_to    :type,        class_name: 'Ticket::Article::Type'
-    belongs_to    :sender,      class_name: 'Ticket::Article::Sender'
-    belongs_to    :created_by,  class_name: 'User'
-    belongs_to    :updated_by,  class_name: 'User'
-    before_create :check_subject
-    before_update :check_subject
-    notify_clients_support
-
-    activity_stream_support ignore_attributes: {
-      type_id: true,
-      sender_id: true,
-    }
-
-    history_support ignore_attributes: {
-      type_id: true,
-      sender_id: true,
-    }
-
-    private
-
-    def check_subject
-      if self.subject
-        self.subject.gsub!(/\s|\t|\r/, ' ')
-      end
+# rubocop:disable ClassAndModuleChildren
+class Ticket::Article < ApplicationModel
+  load 'ticket/article/assets.rb'
+  include Ticket::Article::Assets
+  load 'ticket/article/history_log.rb'
+  include Ticket::Article::HistoryLog
+  load 'ticket/article/activity_stream_log.rb'
+  include Ticket::Article::ActivityStreamLog
+
+  belongs_to    :ticket
+  belongs_to    :type,        class_name: 'Ticket::Article::Type'
+  belongs_to    :sender,      class_name: 'Ticket::Article::Sender'
+  belongs_to    :created_by,  class_name: 'User'
+  belongs_to    :updated_by,  class_name: 'User'
+  before_create :check_subject
+  before_update :check_subject
+  notify_clients_support
+
+  activity_stream_support ignore_attributes: {
+    type_id: true,
+    sender_id: true,
+  }
+
+  history_support ignore_attributes: {
+    type_id: true,
+    sender_id: true,
+  }
+
+  private
+
+  def check_subject
+    if self.subject
+      self.subject.gsub!(/\s|\t|\r/, ' ')
     end
     end
+  end
 
 
-    class Flag < ApplicationModel
-    end
+  class Flag < ApplicationModel
+  end
 
 
-    class Sender < ApplicationModel
-      validates   :name, presence: true
-      latest_change_support
-    end
+  class Sender < ApplicationModel
+    validates   :name, presence: true
+    latest_change_support
+  end
 
 
-    class Type < ApplicationModel
-      validates   :name, presence: true
-      latest_change_support
-    end
+  class Type < ApplicationModel
+    validates   :name, presence: true
+    latest_change_support
   end
   end
 end
 end

+ 22 - 26
app/models/ticket/article/activity_stream_log.rb

@@ -1,8 +1,6 @@
 # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
 # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
-
-class Ticket
-  class Article
-    module ActivityStreamLog
+# rubocop:disable ClassAndModuleChildren
+module Ticket::Article::ActivityStreamLog
 
 
 =begin
 =begin
 
 
@@ -17,27 +15,25 @@ returns
 
 
 =end
 =end
 
 
-      def activity_stream_log (type, user_id)
-
-        # return if we run import mode
-        return if Setting.get('import_mode')
-
-        # return if we run on init mode
-        return if !Setting.get('system_init_done')
-
-        return if !self.class.activity_stream_support_config
-        role = self.class.activity_stream_support_config[:role]
-        ticket = Ticket.lookup( id: self.ticket_id )
-        ActivityStream.add(
-          o_id: self['id'],
-          type: type,
-          object: self.class.name,
-          group_id: ticket.group_id,
-          role: role,
-          created_at: self.updated_at,
-          created_by_id: user_id,
-        )
-      end
-    end
+  def activity_stream_log (type, user_id)
+
+    # return if we run import mode
+    return if Setting.get('import_mode')
+
+    # return if we run on init mode
+    return if !Setting.get('system_init_done')
+
+    return if !self.class.activity_stream_support_config
+    role = self.class.activity_stream_support_config[:role]
+    ticket = Ticket.lookup( id: self.ticket_id )
+    ActivityStream.add(
+      o_id: self['id'],
+      type: type,
+      object: self.class.name,
+      group_id: ticket.group_id,
+      role: role,
+      created_at: self.updated_at,
+      created_by_id: user_id,
+    )
   end
   end
 end
 end

+ 28 - 32
app/models/ticket/article/assets.rb

@@ -1,8 +1,6 @@
 # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
 # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
 
 
-class Ticket
-  class Article
-    module Assets
+module Ticket::Article::Assets
 
 
 =begin
 =begin
 
 
@@ -23,35 +21,33 @@ returns
 
 
 =end
 =end
 
 
-      def assets (data)
-
-        if !data[ Ticket.to_app_model ]
-          data[ Ticket.to_app_model ] = {}
-        end
-        if !data[ Ticket.to_app_model ][ self.ticket_id ]
-          ticket = Ticket.find( self.ticket_id )
-          data = ticket.assets(data)
-        end
-
-        if !data[ Ticket::Article.to_app_model ]
-          data[ Ticket::Article.to_app_model ] = {}
-        end
-        if !data[ Ticket::Article.to_app_model ][ self.id ]
-          data[ Ticket::Article.to_app_model ][ self.id ] = self.attributes
-
-          # add attachment list to article
-          data[ Ticket::Article.to_app_model ][ self.id ]['attachments'] = self.attachments
-        end
-
-        ['created_by_id', 'updated_by_id'].each {|item|
-          next if !self[ item ]
-          if !data[ User.to_app_model ] || !data[ User.to_app_model ][ self[ item ] ]
-            user = User.lookup( id: self[ item ] )
-            data = user.assets( data )
-          end
-        }
-        data
-      end
+  def assets (data)
+
+    if !data[ Ticket.to_app_model ]
+      data[ Ticket.to_app_model ] = {}
+    end
+    if !data[ Ticket.to_app_model ][ self.ticket_id ]
+      ticket = Ticket.find( self.ticket_id )
+      data = ticket.assets(data)
+    end
+
+    if !data[ Ticket::Article.to_app_model ]
+      data[ Ticket::Article.to_app_model ] = {}
     end
     end
+    if !data[ Ticket::Article.to_app_model ][ self.id ]
+      data[ Ticket::Article.to_app_model ][ self.id ] = self.attributes
+
+      # add attachment list to article
+      data[ Ticket::Article.to_app_model ][ self.id ]['attachments'] = self.attachments
+    end
+
+    ['created_by_id', 'updated_by_id'].each {|item|
+      next if !self[ item ]
+      if !data[ User.to_app_model ] || !data[ User.to_app_model ][ self[ item ] ]
+        user = User.lookup( id: self[ item ] )
+        data = user.assets( data )
+      end
+    }
+    data
   end
   end
 end
 end

+ 12 - 16
app/models/ticket/article/history_log.rb

@@ -1,8 +1,6 @@
 # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
 # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
 
 
-class Ticket
-  class Article
-    module HistoryLog
+module Ticket::Article::HistoryLog
 
 
 =begin
 =begin
 
 
@@ -17,18 +15,16 @@ returns
 
 
 =end
 =end
 
 
-      def history_log (type, user_id, data = {})
-
-        # if Ticketdata[:data[:Article has changed, remember related ticket to be able
-        # to show article changes in ticket history
-        data[:o_id]                   = self['id']
-        data[:history_type]           = type
-        data[:history_object]         = self.class.name
-        data[:related_o_id]           = self['ticket_id']
-        data[:related_history_object] = 'Ticket'
-        data[:created_by_id]          = user_id
-        History.add(data)
-      end
-    end
+  def history_log (type, user_id, data = {})
+
+    # if Ticketdata[:data[:Article has changed, remember related ticket to be able
+    # to show article changes in ticket history
+    data[:o_id]                   = self['id']
+    data[:history_type]           = type
+    data[:history_object]         = self.class.name
+    data[:related_o_id]           = self['ticket_id']
+    data[:related_history_object] = 'Ticket'
+    data[:created_by_id]          = user_id
+    History.add(data)
   end
   end
 end
 end

+ 16 - 18
app/models/ticket/assets.rb

@@ -1,7 +1,6 @@
 # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
 # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
-
-class Ticket
-  module Assets
+# rubocop:disable ClassAndModuleChildren
+module Ticket::Assets
 
 
 =begin
 =begin
 
 
@@ -22,22 +21,21 @@ returns
 
 
 =end
 =end
 
 
-    def assets (data)
+  def assets (data)
 
 
-      if !data[ Ticket.to_app_model ]
-        data[ Ticket.to_app_model ] = {}
-      end
-      if !data[ Ticket.to_app_model ][ self.id ]
-        data[ Ticket.to_app_model ][ self.id ] = self.attributes_with_associations
-      end
-      ['created_by_id', 'updated_by_id', 'owner_id', 'customer_id'].each {|item|
-        next if !self[ item ]
-        if !data[ User.to_app_model ] || !data[ User.to_app_model ][ self[ item ] ]
-          user = User.lookup( id: self[ item ] )
-          data = user.assets( data )
-        end
-      }
-      data
+    if !data[ Ticket.to_app_model ]
+      data[ Ticket.to_app_model ] = {}
     end
     end
+    if !data[ Ticket.to_app_model ][ self.id ]
+      data[ Ticket.to_app_model ][ self.id ] = self.attributes_with_associations
+    end
+    ['created_by_id', 'updated_by_id', 'owner_id', 'customer_id'].each {|item|
+      next if !self[ item ]
+      if !data[ User.to_app_model ] || !data[ User.to_app_model ][ self[ item ] ]
+        user = User.lookup( id: self[ item ] )
+        data = user.assets( data )
+      end
+    }
+    data
   end
   end
 end
 end

+ 2 - 4
app/models/ticket/counter.rb

@@ -1,6 +1,4 @@
 # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
 # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
-
-class Ticket
-  class Counter < ApplicationModel
-  end
+# rubocop:disable ClassAndModuleChildren
+class Ticket::Counter < ApplicationModel
 end
 end

+ 230 - 232
app/models/ticket/escalation.rb

@@ -1,7 +1,6 @@
 # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
 # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
-
-class Ticket
-  module Escalation
+# rubocop:disable ClassAndModuleChildren
+module Ticket::Escalation
 
 
 =begin
 =begin
 
 
@@ -15,14 +14,14 @@ returns
 
 
 =end
 =end
 
 
-    def self.rebuild_all
-      state_list_open = Ticket::State.by_category( 'open' )
+  def self.rebuild_all
+    state_list_open = Ticket::State.by_category( 'open' )
 
 
-      tickets = Ticket.where( state_id: state_list_open )
-      tickets.each {|ticket|
-        ticket.escalation_calculation
-      }
-    end
+    tickets = Ticket.where( state_id: state_list_open )
+    tickets.each {|ticket|
+      ticket.escalation_calculation
+    }
+  end
 
 
 =begin
 =begin
 
 
@@ -37,127 +36,127 @@ returns
 
 
 =end
 =end
 
 
-    def escalation_calculation
-
-      # set escalation off if ticket is already closed
-      state = Ticket::State.lookup( id: self.state_id )
-      if state.ignore_escalation?
+  def escalation_calculation
 
 
-        # nothing to change
-        return true if !self.escalation_time
+    # set escalation off if ticket is already closed
+    state = Ticket::State.lookup( id: self.state_id )
+    if state.ignore_escalation?
 
 
-        self.escalation_time            = nil
-        #      self.first_response_escal_date  = nil
-        #      self.close_time_escal_date      = nil
-        self.callback_loop = true
-        self.save
-        return true
-      end
+      # nothing to change
+      return true if !self.escalation_time
 
 
-      # get sla for ticket
-      sla_selected = escalation_calculation_get_sla
+      self.escalation_time            = nil
+      #      self.first_response_escal_date  = nil
+      #      self.close_time_escal_date      = nil
+      self.callback_loop = true
+      self.save
+      return true
+    end
 
 
-      # reset escalation if no sla is set
-      if !sla_selected
+    # get sla for ticket
+    sla_selected = escalation_calculation_get_sla
 
 
-        # nothing to change
-        return true if !self.escalation_time
+    # reset escalation if no sla is set
+    if !sla_selected
 
 
-        self.escalation_time            = nil
-        #      self.first_response_escal_date  = nil
-        #      self.close_time_escal_date      = nil
-        self.callback_loop = true
-        self.save
-        return true
-      end
+      # nothing to change
+      return true if !self.escalation_time
 
 
-      #    puts sla_selected.inspect
-      #    puts days.inspect
       self.escalation_time            = nil
       self.escalation_time            = nil
-      self.first_response_escal_date  = nil
-      self.update_time_escal_date     = nil
-      self.close_time_escal_date      = nil
+      #      self.first_response_escal_date  = nil
+      #      self.close_time_escal_date      = nil
+      self.callback_loop = true
+      self.save
+      return true
+    end
 
 
-      # first response
-      if sla_selected.first_response_time
+    #    puts sla_selected.inspect
+    #    puts days.inspect
+    self.escalation_time            = nil
+    self.first_response_escal_date  = nil
+    self.update_time_escal_date     = nil
+    self.close_time_escal_date      = nil
 
 
-        # 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 )
+    # first response
+    if sla_selected.first_response_time
 
 
-        # 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, sla_selected.first_response_time )
+      # 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 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 )
+      # 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, sla_selected.first_response_time )
 
 
-        # set ticket escalation
-        self.escalation_time = calculation_higher_time( self.escalation_time, self.first_response_escal_date, self.first_response )
-      end
-      if self.first_response# && !self.first_response_in_min
+      # 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 )
 
 
-        # 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 )
+      # set ticket escalation
+      self.escalation_time = calculation_higher_time( self.escalation_time, self.first_response_escal_date, self.first_response )
+    end
+    if self.first_response# && !self.first_response_in_min
 
 
-      end
+      # 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 )
 
 
-      # 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
+    end
 
 
-      # update time
-      last_update = self.last_contact_agent
-      if !last_update
-        last_update = self.created_at
-      end
-      if sla_selected.update_time
-        self.update_time_escal_date = TimeCalculation.dest_time( last_update, sla_selected.update_time, sla_selected.data, sla_selected.timezone  )
+    # 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
 
 
-        # get pending time between created and update escal. time
-        time_in_pending = escalation_suspend( last_update, self.update_time_escal_date, 'relative', sla_selected, sla_selected.update_time )
+    # update time
+    last_update = self.last_contact_agent
+    if !last_update
+      last_update = self.created_at
+    end
+    if sla_selected.update_time
+      self.update_time_escal_date = TimeCalculation.dest_time( last_update, sla_selected.update_time, sla_selected.data, sla_selected.timezone  )
 
 
-        # get new escalation time (original escal_date + time_in_pending)
-        self.update_time_escal_date = TimeCalculation.dest_time( self.update_time_escal_date, time_in_pending.to_i, sla_selected.data, sla_selected.timezone )
+      # get pending time between created and update escal. time
+      time_in_pending = escalation_suspend( last_update, self.update_time_escal_date, 'relative', sla_selected, sla_selected.update_time )
 
 
-        # set ticket escalation
-        self.escalation_time = calculation_higher_time( self.escalation_time, self.update_time_escal_date, false )
-      end
-      if self.last_contact_agent
-        self.update_time_in_min = TimeCalculation.business_time_diff( self.created_at, self.last_contact_agent, sla_selected.data, sla_selected.timezone  )
-      end
+      # get new escalation time (original escal_date + time_in_pending)
+      self.update_time_escal_date = TimeCalculation.dest_time( self.update_time_escal_date, time_in_pending.to_i, sla_selected.data, sla_selected.timezone )
 
 
-      # set sla time
-      if sla_selected.update_time && self.update_time_in_min
-        self.update_time_diff_in_min = sla_selected.update_time - self.update_time_in_min
-      end
+      # set ticket escalation
+      self.escalation_time = calculation_higher_time( self.escalation_time, self.update_time_escal_date, false )
+    end
+    if self.last_contact_agent
+      self.update_time_in_min = TimeCalculation.business_time_diff( self.created_at, self.last_contact_agent, sla_selected.data, sla_selected.timezone  )
+    end
 
 
-      # close time
-      if sla_selected.close_time
+    # set sla time
+    if sla_selected.update_time && self.update_time_in_min
+      self.update_time_diff_in_min = sla_selected.update_time - self.update_time_in_min
+    end
 
 
-        # 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  )
+    # close time
+    if sla_selected.close_time
 
 
-        # get pending time between created and close escal. time
-        extended_escalation = escalation_suspend( self.created_at, self.close_time_escal_date, 'relative', sla_selected, 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 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 )
+      # get pending time between created and close escal. time
+      extended_escalation = escalation_suspend( self.created_at, self.close_time_escal_date, 'relative', sla_selected, sla_selected.close_time )
 
 
-        # set ticket escalation
-        self.escalation_time = 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 = 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
-        self.close_time_diff_in_min = sla_selected.close_time - self.close_time_in_min
-      end
-      if self.changed?
-        self.callback_loop = true
-        self.save
-      end
+      # 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 = 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 = 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
+      self.close_time_diff_in_min = sla_selected.close_time - self.close_time_in_min
+    end
+    if self.changed?
+      self.callback_loop = true
+      self.save
     end
     end
+  end
 
 
 =begin
 =begin
 
 
@@ -172,154 +171,153 @@ returns
 
 
 =end
 =end
 
 
-    def escalation_calculation_get_sla
-      sla_selected = nil
-      sla_list = Cache.get( 'SLA::List::Active' )
-      if sla_list == nil
-        sla_list = Sla.where( active: true )
-        Cache.write( 'SLA::List::Active', sla_list, { expires_in: 1.hour } )
-      end
-      sla_list.each {|sla|
-        if !sla.condition || sla.condition.empty?
-          sla_selected = sla
-        elsif sla.condition
-          hit = false
-          map = [
-            [ 'tickets.priority_id', 'priority_id' ],
-            [ 'tickets.group_id', 'group_id' ]
-          ]
-          map.each {|item|
-            if sla.condition[ item[0] ]
-              if sla.condition[ item[0] ].class == String
-                sla.condition[ item[0] ] = [ sla.condition[ item[0] ] ]
-              end
-              if sla.condition[ item[0] ].include?( self[ item[1] ].to_s )
-                hit = true
-              else
-                hit = false
-              end
+  def escalation_calculation_get_sla
+    sla_selected = nil
+    sla_list = Cache.get( 'SLA::List::Active' )
+    if sla_list == nil
+      sla_list = Sla.where( active: true )
+      Cache.write( 'SLA::List::Active', sla_list, { expires_in: 1.hour } )
+    end
+    sla_list.each {|sla|
+      if !sla.condition || sla.condition.empty?
+        sla_selected = sla
+      elsif sla.condition
+        hit = false
+        map = [
+          [ 'tickets.priority_id', 'priority_id' ],
+          [ 'tickets.group_id', 'group_id' ]
+        ]
+        map.each {|item|
+          if sla.condition[ item[0] ]
+            if sla.condition[ item[0] ].class == String
+              sla.condition[ item[0] ] = [ sla.condition[ item[0] ] ]
+            end
+            if sla.condition[ item[0] ].include?( self[ item[1] ].to_s )
+              hit = true
+            else
+              hit = false
             end
             end
-          }
-          if hit
-            sla_selected = sla
           end
           end
+        }
+        if hit
+          sla_selected = sla
         end
         end
-      }
-      sla_selected
-    end
-
-    private
-
-    #type could be:
-    # real - time without supsend state
-    # relative - only suspend time
-
-    def escalation_suspend (start_time, end_time, type, sla_selected, sla_time = 0)
-      if type == 'relative'
-        end_time += sla_time * 60
       end
       end
-      total_time_without_pending = 0
-      total_time = 0
-      #get history for ticket
-      history_list = self.history_get
-
-      #loop through hist. changes and get time
-      last_state            = nil
-      last_state_change     = nil
-      last_state_is_pending = false
-      history_list.each { |history_item|
-
-        # ignore if it isn't a state change
-        next if !history_item['attribute']
-        next if history_item['attribute'] != 'state'
-
-        # ignore all newer state before start_time
-        next if history_item['created_at'] < start_time
-
-        # ignore all older state changes after end_time
-        next if last_state_change && last_state_change > end_time
-
-        # 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
-        if !last_state
-          last_state        = history_item['value_from']
-          last_state_change = start_time
-        end
+    }
+    sla_selected
+  end
 
 
-        # check if time need to be counted
-        counted = true
-        if history_item['value_from'] == 'pending reminder'
-          counted = false
-        elsif history_item['value_from'] == 'close'
-          counted = false
-        end
+  private
 
 
-        diff = escalation_time_diff( last_state_change, history_item['created_at'], sla_selected )
-        if counted
-          # puts "Diff count #{history_item['value_from']} -> #{history_item['value_to']} / #{last_state_change} -> #{history_item['created_at']}"
-          total_time_without_pending = total_time_without_pending + diff
-        else
-        # puts "Diff not count #{history_item['value_from']} -> #{history_item['value_to']} / #{last_state_change} -> #{history_item['created_at']}"
-        end
-        total_time = total_time + diff
+  #type could be:
+  # real - time without supsend state
+  # relative - only suspend time
 
 
-        if history_item['value_to'] == 'pending reminder'
-          last_state_is_pending = true
-        else
-          last_state_is_pending = false
-        end
+  def escalation_suspend (start_time, end_time, type, sla_selected, sla_time = 0)
+    if type == 'relative'
+      end_time += sla_time * 60
+    end
+    total_time_without_pending = 0
+    total_time = 0
+    #get history for ticket
+    history_list = self.history_get
+
+    #loop through hist. changes and get time
+    last_state            = nil
+    last_state_change     = nil
+    last_state_is_pending = false
+    history_list.each { |history_item|
+
+      # ignore if it isn't a state change
+      next if !history_item['attribute']
+      next if history_item['attribute'] != 'state'
+
+      # ignore all newer state before start_time
+      next if history_item['created_at'] < start_time
+
+      # ignore all older state changes after end_time
+      next if last_state_change && last_state_change > end_time
+
+      # 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
 
 
-        # remember for next loop last state
-        last_state        = history_item['value_to']
-        last_state_change = history_item['created_at']
-      }
+      # get initial state and time
+      if !last_state
+        last_state        = history_item['value_from']
+        last_state_change = start_time
+      end
 
 
-      # if last state isnt pending, count rest
-      if !last_state_is_pending && last_state_change && last_state_change < end_time
-        diff = escalation_time_diff( last_state_change, end_time, sla_selected )
-        # 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
+      # check if time need to be counted
+      counted = true
+      if history_item['value_from'] == 'pending reminder'
+        counted = false
+      elsif history_item['value_from'] == 'close'
+        counted = false
       end
       end
 
 
-      # if we have not had any state change
-      if !last_state_change
-        diff = escalation_time_diff( start_time, end_time, sla_selected )
-        # puts 'Diff state has not changed ' + diff.to_s
+      diff = escalation_time_diff( last_state_change, history_item['created_at'], sla_selected )
+      if counted
+        # puts "Diff count #{history_item['value_from']} -> #{history_item['value_to']} / #{last_state_change} -> #{history_item['created_at']}"
         total_time_without_pending = total_time_without_pending + diff
         total_time_without_pending = total_time_without_pending + diff
-        total_time = total_time + diff
+      else
+      # puts "Diff not count #{history_item['value_from']} -> #{history_item['value_to']} / #{last_state_change} -> #{history_item['created_at']}"
       end
       end
+      total_time = total_time + diff
 
 
-      #return sum
-      if type == 'real'
-        return total_time_without_pending
-      elsif type == 'relative'
-        relative = total_time - total_time_without_pending
-        return relative
+      if history_item['value_to'] == 'pending reminder'
+        last_state_is_pending = true
       else
       else
-        raise "ERROR: Unknown type #{type}"
+        last_state_is_pending = false
       end
       end
+
+      # remember for next loop last state
+      last_state        = history_item['value_to']
+      last_state_change = history_item['created_at']
+    }
+
+    # if last state isnt pending, count rest
+    if !last_state_is_pending && last_state_change && last_state_change < end_time
+      diff = escalation_time_diff( last_state_change, end_time, sla_selected )
+      # 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
     end
 
 
-    def escalation_time_diff( start_time, end_time, sla_selected )
-      if sla_selected
-        diff = TimeCalculation.business_time_diff( start_time, end_time, sla_selected.data, sla_selected.timezone)
-      else
-        diff = TimeCalculation.business_time_diff( start_time, end_time )
-      end
-      diff
+    # if we have not had any state change
+    if !last_state_change
+      diff = escalation_time_diff( start_time, end_time, sla_selected )
+      # puts 'Diff state has not changed ' + diff.to_s
+      total_time_without_pending = total_time_without_pending + diff
+      total_time = total_time + diff
     end
     end
 
 
-    def calculation_higher_time(escalation_time, check_time, done_time)
-      return escalation_time if done_time
-      return check_time if !escalation_time
-      return escalation_time if !check_time
-      return check_time if escalation_time > check_time
-      escalation_time
+    #return sum
+    if type == 'real'
+      return total_time_without_pending
+    elsif type == 'relative'
+      relative = total_time - total_time_without_pending
+      return relative
+    else
+      raise "ERROR: Unknown type #{type}"
     end
     end
   end
   end
+
+  def escalation_time_diff( start_time, end_time, sla_selected )
+    if sla_selected
+      diff = TimeCalculation.business_time_diff( start_time, end_time, sla_selected.data, sla_selected.timezone)
+    else
+      diff = TimeCalculation.business_time_diff( start_time, end_time )
+    end
+    diff
+  end
+
+  def calculation_higher_time(escalation_time, check_time, done_time)
+    return escalation_time if done_time
+    return check_time if !escalation_time
+    return escalation_time if !check_time
+    return check_time if escalation_time > check_time
+    escalation_time
+  end
 end
 end

+ 1 - 3
app/models/ticket/flag.rb

@@ -1,6 +1,4 @@
 # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
 # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
 
 
-class Ticket
-  class Flag < ApplicationModel
-  end
+class Ticket::Flag < ApplicationModel
 end
 end

+ 28 - 30
app/models/ticket/history_log.rb

@@ -1,7 +1,6 @@
 # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
 # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
-
-class Ticket
-  module HistoryLog
+# rubocop:disable ClassAndModuleChildren
+module Ticket::HistoryLog
 
 
 =begin
 =begin
 
 
@@ -16,15 +15,15 @@ returns
 
 
 =end
 =end
 
 
-    def history_log (type, user_id, data = {})
-      data[:o_id]                   = self['id']
-      data[:history_type]           = type
-      data[:history_object]         = self.class.name
-      data[:related_o_id]           = nil
-      data[:related_history_object] = nil
-      data[:created_by_id]          = user_id
-      History.add(data)
-    end
+  def history_log (type, user_id, data = {})
+    data[:o_id]                   = self['id']
+    data[:history_type]           = type
+    data[:history_object]         = self.class.name
+    data[:related_o_id]           = nil
+    data[:related_history_object] = nil
+    data[:created_by_id]          = user_id
+    History.add(data)
+  end
 
 
 =begin
 =begin
 
 
@@ -58,25 +57,24 @@ returns
 
 
 =end
 =end
 
 
-    def history_get(fulldata = false)
-      list = History.list( self.class.name, self['id'], 'Ticket::Article' )
-      return list if !fulldata
+  def history_get(fulldata = false)
+    list = History.list( self.class.name, self['id'], 'Ticket::Article' )
+    return list if !fulldata
 
 
-      # get related objects
-      assets = {}
-      list.each {|item|
-        record = Kernel.const_get( item['object'] ).find( item['o_id'] )
-        assets = record.assets(assets)
+    # get related objects
+    assets = {}
+    list.each {|item|
+      record = Kernel.const_get( item['object'] ).find( item['o_id'] )
+      assets = record.assets(assets)
 
 
-        if item['related_object']
-          record = Kernel.const_get( item['related_object'] ).find( item['related_o_id'] )
-          assets = record.assets(assets)
-        end
-      }
-      {
-        history: list,
-        assets: assets,
-      }
-    end
+      if item['related_object']
+        record = Kernel.const_get( item['related_object'] ).find( item['related_o_id'] )
+        assets = record.assets(assets)
+      end
+    }
+    {
+      history: list,
+      assets: assets,
+    }
   end
   end
 end
 end

Some files were not shown because too many files changed in this diff