76 lines
2.8 KiB
Ruby
Executable File
76 lines
2.8 KiB
Ruby
Executable File
class StockJournal < ApplicationRecord
|
|
|
|
SALES_TRANS = "sale"
|
|
ORDER_TRANS = "order"
|
|
STOCK_CHECK_TRANS = "stock_check"
|
|
|
|
def self.add_to_journal(item_instance_code, qty, old_balance, stock_message, inventory_definition, trans_ref, trans_type) # item => saleObj | balance => Stock journal
|
|
|
|
balance = calculate_balance(old_balance, qty)
|
|
|
|
if balance < old_balance
|
|
credit = 0
|
|
debit = qty.abs
|
|
else
|
|
credit = qty.abs
|
|
debit = 0
|
|
end
|
|
|
|
journal = StockJournal.create(
|
|
item_code: item_instance_code,
|
|
credit: credit,
|
|
debit: debit,
|
|
balance: balance,
|
|
inventory_definition_id: inventory_definition.id,
|
|
remark: stock_message,
|
|
trans_ref: trans_ref,
|
|
trans_type: trans_type
|
|
)
|
|
end
|
|
|
|
def self.calculate_balance(balance, qty)
|
|
return balance.to_i - qty.to_i
|
|
end
|
|
|
|
def self.from_stock_check(item)
|
|
stock_journal = StockJournal.where('item_code=?', item.item_code).order("id DESC").first
|
|
if stock_journal.nil?
|
|
old_blance = 0
|
|
else
|
|
old_blance = stock_journal.balance
|
|
end
|
|
definition_id = InventoryDefinition.find_by_item_code(item.item_code)
|
|
journal = StockJournal.new
|
|
journal.item_code = item.item_code
|
|
journal.inventory_definition_id = definition_id.id
|
|
journal.debit = 0
|
|
journal.credit = item.stock_count
|
|
journal.balance = item.stock_count + old_blance.to_i
|
|
journal.remark = StockJournal::STOCK_CHECK_TRANS
|
|
journal.trans_ref = item.id
|
|
journal.trans_type = StockJournal::STOCK_CHECK_TRANS
|
|
journal.save
|
|
end
|
|
|
|
def self.inventory_balances(today,from,to,from_time,to_time)
|
|
if !from.nil? && !to.nil?
|
|
query = StockJournal.select("mii.item_instance_name as item_instance_name,balance")
|
|
.joins("join menu_item_instances mii on mii.item_instance_code=stock_journals.item_code")
|
|
if !from_time.nil? && !to_time.nil?
|
|
query = query.where("DATE_FORMAT(CONVERT_TZ(stock_journals.created_at,'+00:00','+06:30'),'%Y-%m-%d') between '#{from}' and '#{to}'")
|
|
else
|
|
query = query.where("DATE_FORMAT(CONVERT_TZ(stock_journals.created_at,'+00:00','+06:30'),'%Y-%m-%d') between '#{from}' and '#{to}' and DATE_FORMAT(CONVERT_TZ(stock_journals.created_at,'+00:00','+06:30'),'%H:%M') between '#{from_time}' and '#{to_time}'")
|
|
end
|
|
query = query.group("mii.item_instance_name")
|
|
.order("mii.item_instance_name ASC")
|
|
else
|
|
query = StockJournal.select("mii.item_instance_name as item_instance_name,balance")
|
|
.joins("join menu_item_instances mii on mii.item_instance_code=stock_journals.item_code")
|
|
.where("DATE_FORMAT(stock_journals.created_at,'%Y-%m-%d') = '#{today}'")
|
|
.group("mii.item_instance_name")
|
|
.order("mii.item_instance_name ASC")
|
|
end
|
|
end
|
|
|
|
end
|