diff --git a/app/models/channel/email_parser.rb b/app/models/channel/email_parser.rb index b64818d65..12208abb6 100644 --- a/app/models/channel/email_parser.rb +++ b/app/models/channel/email_parser.rb @@ -333,7 +333,7 @@ class Channel::EmailParser UserInfo.current_user_id = user.id # get ticket# from subject - ticket = Ticket.number_check( mail[:subject] ) + ticket = Ticket::Number.check( mail[:subject] ) # set ticket state to open if not new if ticket diff --git a/app/models/ticket.rb b/app/models/ticket.rb index 2b29a0611..bd02c8859 100644 --- a/app/models/ticket.rb +++ b/app/models/ticket.rb @@ -4,7 +4,7 @@ require 'time_calculation' require 'sla' class Ticket < ApplicationModel - before_create :number_generate, :check_defaults + before_create :check_generate, :check_defaults before_update :check_defaults before_destroy :destroy_dependencies after_create :notify_clients_after_create @@ -24,10 +24,6 @@ class Ticket < ApplicationModel attr_accessor :callback_loop - def self.number_check (string) - self.number_adapter.number_check_item(string) - end - def agent_of_group Group.find( self.group_id ).users.where( :active => true ).joins(:roles).where( 'roles.name' => 'Agent', 'roles.active' => true ).uniq() end @@ -504,21 +500,6 @@ class Ticket < ApplicationModel return bind end - def self.number_adapter - - # load backend based on config - adapter_name = Setting.get('ticket_number') - adapter = nil - case adapter_name - when Symbol, String - require "ticket/number/#{adapter_name.to_s.downcase}" - adapter = Ticket::Number.const_get("#{adapter_name.to_s.capitalize}") - else - raise "Missing number_adapter '#{adapter_name}'" - end - return adapter - end - def self.escalation_calculation_rebuild ticket_state_list_open = Ticket::State.by_category( 'open' ) @@ -731,21 +712,11 @@ returns private - def number_generate + def check_generate return if self.number - - # generate number - (1..25_000).each do |i| - number = Ticket.number_adapter.number_generate_item() - ticket = Ticket.where( :number => number ).first - if ticket != nil - number = Ticket.number_adapter.number_generate_item() - else - self.number = number - return number - end - end + self.number = Ticket::Number.generate end + def check_defaults if !self.owner_id self.owner_id = 1 @@ -874,7 +845,4 @@ returns diff end - class Number - end - end diff --git a/app/models/ticket/number/date.rb b/app/models/ticket/number/date.rb index 57869822e..f0e2be455 100644 --- a/app/models/ticket/number/date.rb +++ b/app/models/ticket/number/date.rb @@ -3,7 +3,7 @@ module Ticket::Number::Date extend self - def number_generate_item + def generate # get config config = Setting.get('ticket_number_date') @@ -64,7 +64,7 @@ module Ticket::Number::Date end return number end - def number_check_item (string) + def check(string) # get config system_id = Setting.get('system_id') || '' diff --git a/app/models/ticket/number/increment.rb b/app/models/ticket/number/increment.rb index 8a9706c5f..d530785b8 100644 --- a/app/models/ticket/number/increment.rb +++ b/app/models/ticket/number/increment.rb @@ -3,7 +3,7 @@ module Ticket::Number::Increment extend self - def number_generate_item + def generate # get config config = Setting.get('ticket_number_increment') @@ -68,7 +68,7 @@ module Ticket::Number::Increment return number end - def number_check_item (string) + def check(string) # get config system_id = Setting.get('system_id') || '' diff --git a/db/migrate/20130815000002_update_ticket_number.rb b/db/migrate/20130815000002_update_ticket_number.rb new file mode 100644 index 000000000..05910c7cb --- /dev/null +++ b/db/migrate/20130815000002_update_ticket_number.rb @@ -0,0 +1,34 @@ +class UpdateTicketNumber < ActiveRecord::Migration + def up + Setting.create_or_update( + :title => 'Ticket Number Format', + :name => 'ticket_number', + :area => 'Ticket::Number', + :description => 'Selects the ticket number generator module. "Increment" increments the ticket + number, the SystemID and the counter are used with SystemID.Counter format (e.g. 1010138, 1010139). + With "Date" the ticket numbers will be generated by the current date, the SystemID and the counter. + The format looks like Year.Month.Day.SystemID.counter (e.g. 201206231010138, 201206231010139). + With param "Checksum => true" the counter will be appended as checksum to the string. The format + looks like SystemID.Counter.CheckSum (e. g. 10101384, 10101392) or Year.Month.Day.SystemID.Counter.CheckSum (e.g. 2012070110101520, 2012070110101535).', + :options => { + :form => [ + { + :display => '', + :null => true, + :name => 'ticket_number', + :tag => 'select', + :options => { + 'Ticket::Number::Increment' => 'Increment (SystemID.Counter)', + 'Ticket::Number::Date' => 'Date (Year.Month.Day.SystemID.Counter)', + }, + }, + ], + }, + :state => 'Ticket::Number::Increment', + :frontend => false + ) + end + def down + end +end + diff --git a/db/seeds.rb b/db/seeds.rb index b245f8cb3..0e373b66f 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -712,13 +712,13 @@ Setting.create_if_not_exists( :name => 'ticket_number', :tag => 'select', :options => { - 'increment' => 'Increment (SystemID.Counter)', - 'date' => 'Date (Year.Month.Day.SystemID.Counter)', + 'Ticket::Number::Increment' => 'Increment (SystemID.Counter)', + 'Ticket::Number::Date' => 'Date (Year.Month.Day.SystemID.Counter)', }, }, ], }, - :state => 'increment', + :state => 'Ticket::Number::Increment', :frontend => false ) Setting.create_if_not_exists(