class InventoryDefinition < ApplicationRecord scope :active, -> {where(:is_active => true)} def self.calculate_product_count(saleObj=nil,saleobj_after_req_bill=nil) if !saleObj.nil? saleObj.sale_items.each do |item| found, inventory_definition = find_product_in_inventory(item) if found check_balance(item,inventory_definition) end end else saleobj_after_req_bill.each do |item| found, inventory_definition = find_product_in_inventory(item) if found check_balance(item,inventory_definition) end end end end def self.find_product_in_inventory(item) product = InventoryDefinition.find_by_item_code(item.item_instance_code) if product.nil? return false, nil else stock_check_item = StockCheckItem.find_by_item_code(item.item_instance_code) if stock_check_item.nil? return false, nil else return true, product end end end def self.check_balance(item,inventory_definition) # item => saleItemOBj stock = StockJournal.where('item_code=?', item.item_instance_code).order('created_at desc').take unless stock.nil? modify_balance(item, stock, inventory_definition) else StockJournal.add_to_journal(item, 0, "out of stock", inventory_definition) end end def self.modify_balance(item, stock, inventory_definition) #saleitemObj if stock.balance.to_i >= item.qty puts ">> stock is greater than order qty" StockJournal.add_to_journal(item, stock.balance, "ok", inventory_definition) else puts " << stock is less than order qty" item_data = item if stock.balance.to_i > 0 item_data.qty = item.qty.to_i - stock.balance.to_i StockJournal.add_to_journal(item_data, stock.balance, "out of stock", inventory_definition) item.qty = stock.balance.to_i StockJournal.add_to_journal(item, stock.balance, "ok", inventory_definition) else StockJournal.add_to_journal(item_data, stock.balance, "out of stock", inventory_definition) end end end end