94 lines
2.4 KiB
Ruby
94 lines
2.4 KiB
Ruby
class SeedGenerator < ApplicationRecord
|
|
# Generate ID for Tables
|
|
def self.generate_id(model, prefix)
|
|
cur_val, next_val = self.update_seed(model)
|
|
|
|
if (cur_val == 0)
|
|
cur_val, next_val = self.execute_query(model)
|
|
end
|
|
|
|
padding_len = 15 - prefix.length
|
|
saleOrderId = prefix +"-"+ cur_val.to_s.to_s.rjust((14-prefix.length)+1,'0')
|
|
return saleOrderId
|
|
end
|
|
|
|
# Generate Receipt No
|
|
def self.new_receipt_no
|
|
# Only return seed no
|
|
cur_val, next_val = self.update_seed("sale")
|
|
|
|
if (cur_val == 0)
|
|
cur_val, next_val = self.execute_query("sale")
|
|
end
|
|
|
|
return cur_val
|
|
end
|
|
|
|
# Generate for 4 digit Code
|
|
def self.generate_code(model, prefix)
|
|
seed = SeedGenerator.find_by_model(model)
|
|
new_code = 0
|
|
|
|
if (seed.nil?)
|
|
seed = SeedGenerator.new()
|
|
seed.model = model
|
|
new_code = seed.next
|
|
seed.save
|
|
else
|
|
current_no = seed.next
|
|
seed.next = seed.next + seed.increase_by
|
|
seed.current = current_no
|
|
seed.save
|
|
end
|
|
|
|
|
|
if prefix.length == 1
|
|
padding_len = 5 - prefix.length
|
|
count = 4-prefix.length
|
|
else prefix.length == 2
|
|
padding_len = 6 - prefix.length
|
|
count = 5-prefix.length
|
|
end
|
|
next_code = prefix + seed.current.to_s.to_s.rjust((count)+1,'0')
|
|
return next_code
|
|
end
|
|
|
|
def self.execute_query(model)
|
|
current = 0
|
|
nex = 0
|
|
|
|
sql = "INSERT INTO seed_generators (model, created_at, updated_at)
|
|
VALUES('#{ model }', NOW(), NOW())
|
|
ON DUPLICATE KEY UPDATE current = current + 1, next = next + 1;"
|
|
|
|
select_sql = "select * from seed_generators where model='#{model}';"
|
|
ActiveRecord::Base.connection.execute(sql);
|
|
select_result = ActiveRecord::Base.connection.execute(select_sql);
|
|
|
|
select_result.each do |row|
|
|
current = row [3]
|
|
nex = row[4]
|
|
end
|
|
|
|
return current, nex
|
|
end
|
|
|
|
def self.update_seed(model)
|
|
current = 0
|
|
nex = 0
|
|
|
|
update_sql = "UPDATE seed_generators set current = current + 1, next = next + 1 WHERE model='#{model}';"
|
|
select_sql = "select * from seed_generators where model='#{model}';"
|
|
update_result = ActiveRecord::Base.connection.execute(update_sql);
|
|
|
|
select_result = ActiveRecord::Base.connection.execute(select_sql);
|
|
|
|
select_result.each do |row|
|
|
current = row [3]
|
|
nex = row[4]
|
|
end
|
|
|
|
return current, nex
|
|
end
|
|
end
|