50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
# File 'app/models/concerns/act_as_sequenced.rb', line 50
def set_sequential_ids(options)
return if send(options[:column]).present?
prefix_id = options[:prefix_column] ? self[options[:prefix_column]] : self.sequence_generator_id
if prefix_id.present?
sequence = Sequence.find(prefix_id)
if sequence.scope.to_s == send(options[:scope]).to_s
assign_attributes(options[:column]=> sequence.generate_sequence_number)
else
errors.add(:sequential_id, 'Sequence is not associated with your branch')
end
else
date_to_consider = Time.now
if options[:date_column] && send(options[:date_column])
date_to_consider = send(options[:date_column])
end
sequence = Sequence.where(purpose: options[:purpose], scope: send(options[:scope]))
.where('valid_from <= ? AND valid_till >= ?', date_to_consider, date_to_consider).first
unless self.as_json[options[:column]].present?
if sequence
sequence.lock!
assign_attributes(options[:column]=> sequence.generate_sequence_number)
else
errors.add(:sequential_id, 'Sequence is not created')
end
end
end
end
|