1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- module Ticket::Number::Date
- extend Ticket::Number::Base
- def self.generate
- date = Time.zone.now.strftime('%F')
- counter = Ticket::Counter.create_with(content: '0')
- .find_or_create_by(generator: 'Date')
- counter.with_lock do
- counter_increment = if counter.content.end_with?(date)
- counter.content.split(';').first.to_i.next
- else
- 1
- end
- counter.update(content: "#{counter_increment};#{date}")
- end
- number = date.delete('-') + Setting.get('system_id').to_s + format('%<counter>04d', counter: counter.content.split(';').first)
- number += checksum(number) if config[:checksum]
- number
- end
- def self.check(string)
- return if string.blank?
-
- system_id = Setting.get('system_id') || ''
- ticket_hook = Setting.get('ticket_hook')
- ticket_hook_divider = Setting.get('ticket_hook_divider') || ''
- ticket = nil
- if Setting.get('ticket_number_ignore_system_id') == true
- system_id = ''
- end
-
-
-
- string.scan(%r{(?<=\W|^)#{Regexp.quote(ticket_hook)}#{Regexp.quote(ticket_hook_divider)}(\d{4,10}
- ticket = Ticket.find_by(number: $1)
- break if ticket
- end
- if !ticket
- string.scan(%r{(?<=\W|^)#{Regexp.quote(ticket_hook)}\s{0,2}(\d{4,10}
- ticket = Ticket.find_by(number: $1)
- break if ticket
- end
- end
- ticket
- end
- def self.config
- config = Setting.get('ticket_number_date')
- return config if !config.in?([true, false])
-
- { checksum: config }
- end
- private_class_method :config
- end
|