123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- module Ticket::Number::Increment
- extend self
- def generate
-
- config = Setting.get('ticket_number_increment')
-
- min_digs = config[:min_size] || 4;
- counter_increment = nil
- Ticket::Counter.transaction do
- counter = Ticket::Counter.where( :generator => 'Increment' ).lock(true).first
- if !counter
- counter = Ticket::Counter.new( :generator => 'Increment', :content => '0' )
- end
- counter_increment = counter.content.to_i
-
- counter_increment += 1
-
- counter.content = counter_increment.to_s
- counter.save
- end
-
- if config[:checksum]
- min_digs = min_digs.to_i - 1
- end
- fillup = Setting.get('system_id') || '1'
- ( 1..100 ).each do |i|
- if ( fillup.length.to_i + counter_increment.to_s.length.to_i ) < min_digs.to_i
- fillup = fillup + '0'
- end
- end
- number = fillup.to_s + counter_increment.to_s
-
-
-
-
-
-
-
-
-
- if config[:checksum]
- chksum = 0
- mult = 1
- (1..number.length).each do |i|
- digit = number.to_s[i, 1]
- chksum = chksum + ( mult * digit.to_i )
- mult += 1
- if mult == 3
- mult = 1
- end
- end
- chksum %= 10
- chksum = 10 - chksum
- if chksum == 10
- chksum = 1
- end
- number += chksum.to_s
- end
- return number
- end
- def check(string)
-
- system_id = Setting.get('system_id') || ''
- ticket_hook = Setting.get('ticket_hook')
- ticket_hook_divider = Setting.get('ticket_hook_divider') || ''
- ticket = nil
-
- if string =~ /#{ticket_hook}#{ticket_hook_divider}(#{system_id}\d{2,48})/i then
- ticket = Ticket.where( :number => $1 ).first
- elsif string =~ /#{ticket_hook}\s{0,2}(#{system_id}\d{2,48})/i then
- ticket = Ticket.where( :number => $1 ).first
- end
- return ticket
- end
- end
|