From 90d0a4ebb1e5168912e538cca66d0ea80fd2a184 Mon Sep 17 00:00:00 2001 From: NyanLinHtut Date: Wed, 11 Sep 2019 13:26:01 +0630 Subject: [PATCH] fixed inventory --- .../reports/stock_check_controller.rb | 3 +- app/models/inventory_definition.rb | 38 +++++++++++++------ app/models/stock_check_item.rb | 23 +++++++---- app/models/stock_journal.rb | 12 ++++-- .../inventory/_inventory_list.html.erb | 12 +++--- 5 files changed, 57 insertions(+), 31 deletions(-) diff --git a/app/controllers/reports/stock_check_controller.rb b/app/controllers/reports/stock_check_controller.rb index c2f2cf0d..71fc389e 100755 --- a/app/controllers/reports/stock_check_controller.rb +++ b/app/controllers/reports/stock_check_controller.rb @@ -46,6 +46,5 @@ class Reports::StockCheckController < BaseReportController format.json { render json: out } end end - -end +end diff --git a/app/models/inventory_definition.rb b/app/models/inventory_definition.rb index 189d8dc7..dc2e1052 100755 --- a/app/models/inventory_definition.rb +++ b/app/models/inventory_definition.rb @@ -35,7 +35,7 @@ class InventoryDefinition < ApplicationRecord end def self.check_balance(item,inventory_definition) # item => saleItemOBj - stock = StockJournal.where('item_code=?', item.item_instance_code).order("id DESC").first + stock = StockJournal.where('item_code=?', item.item_instance_code).order("id DESC").first unless stock.nil? modify_balance(item, stock, inventory_definition) else @@ -44,9 +44,12 @@ class InventoryDefinition < ApplicationRecord end def self.modify_balance(item, stock, inventory_definition) #saleitemObj + check_item = StockCheckItem.where('item_code=?', item.item_instance_code).order("id DESC").first if stock.balance.to_i >= item.qty puts ">> stock is greater than order qty" StockJournal.add_to_journal(item, stock.balance, "ok", inventory_definition) + check_item.different = check_item.different - item.qty + check_item.save else puts " << stock is less than order qty" data = item @@ -56,8 +59,12 @@ class InventoryDefinition < ApplicationRecord StockJournal.add_to_journal(item, stock.balance, "ok", inventory_definition) data.qty = extra_qty StockJournal.add_to_journal(data, 0, "out of stock", inventory_definition) + check_item.different = check_item.different - item.qty + check_item.save else StockJournal.add_to_journal(item, stock.balance, "out of stock", inventory_definition) + check_item.different = check_item.different - item.qty + check_item.save end end end @@ -72,17 +79,24 @@ class InventoryDefinition < ApplicationRecord " JOIN menu_categories mc ON mc.id = mi.menu_category_id ") .where("mc.id=#{cat_id}") .group("mi.menu_category_id,inventory_definitions.item_code") - .order("mi.menu_category_id desc") + .order("mi.menu_category_id desc") end def self.get_by_category(filter) - least_stock = "SELECT (CASE WHEN stock_journals.remark != 'out of stock' - THEN (SELECT min(balance) FROM stock_journals - WHERE item_code = inventory_definitions.item_code AND remark != 'out of stock' - ORDER BY created_at DESC LIMIT 1) ELSE 0 END) - FROM stock_journals - WHERE stock_journals.item_code = inventory_definitions.item_code - ORDER BY stock_journals.created_at DESC LIMIT 1" + # THEN (SELECT min(balance) FROM stock_journals + # least_stock = "SELECT (CASE WHEN stock_journals.remark != 'out of stock' + # THEN (SELECT balance FROM stock_journals + # WHERE item_code = inventory_definitions.item_code AND remark != 'out of stock' + # ORDER BY created_at DESC LIMIT 1) ELSE 0 END) + # FROM stock_journals + # WHERE stock_journals.item_code = inventory_definitions.item_code + # ORDER BY stock_journals.created_at DESC LIMIT 1" + least_stock = "(SELECT + (SELECT balance FROM stock_journals WHERE item_code = inventory_definitions.item_code + ORDER BY created_at DESC LIMIT 1) + FROM stock_journals + WHERE stock_journals.item_code = inventory_definitions.item_code + ORDER BY stock_journals.created_at DESC LIMIT 1)" @inventory_definitions = InventoryDefinition.select("inventory_definitions.*, (CASE WHEN sj.credit IS NULL THEN 0 ELSE sj.credit END) as credit, @@ -92,13 +106,13 @@ class InventoryDefinition < ApplicationRecord mii.item_instance_name as instance_name," + "mc.name as menu_category_name,mc.id as menu_category_id " ) - .joins(" LEFT JOIN stock_journals sj ON sj.inventory_definition_id=inventory_definitions.id") + .joins(" LEFT JOIN stock_journals sj ON sj.inventory_definition_id=inventory_definitions.id") .joins("JOIN menu_item_instances mii ON mii.item_instance_code = inventory_definitions.item_code" + " JOIN menu_items mi ON mi.id = mii.menu_item_id" + " JOIN menu_categories mc ON mc.id = mi.menu_category_id ") .joins(" JOIN accounts acc ON acc.id = mi.account_id") - .where("inventory_definitions.item_code LIKE ? OR inventory_definitions.min_order_level LIKE ? - OR inventory_definitions.max_stock_level LIKE ? OR sj.balance LIKE ? OR mi.name LIKE ? + .where("inventory_definitions.item_code LIKE ? OR inventory_definitions.min_order_level LIKE ? + OR inventory_definitions.max_stock_level LIKE ? OR sj.balance LIKE ? OR mi.name LIKE ? OR mii.item_instance_name LIKE ? OR mc.name LIKE ?","%#{filter}%","%#{filter}%","%#{filter}%", "%#{filter}%","%#{filter}%","%#{filter}%","%#{filter}%") .group("mi.menu_category_id,inventory_definitions.item_code") diff --git a/app/models/stock_check_item.rb b/app/models/stock_check_item.rb index 67e8b3aa..f596740a 100755 --- a/app/models/stock_check_item.rb +++ b/app/models/stock_check_item.rb @@ -2,7 +2,13 @@ class StockCheckItem < ApplicationRecord belongs_to :stock_check def create(stock_id, item) - journal_id, balance = StockCheckItem.find_journal(item['sku']) + check_item = StockCheckItem.find_by_item_code(item['sku']) + if check_item.nil? + balance = 0 + else + balance = StockCheckItem.last.different + end + journal_id = StockCheckItem.find_journal(item['sku']) remark, different = StockCheckItem.stock_different(item['qty'], balance ) self.stock_check_id = stock_id self.item_code = item['sku'] @@ -24,13 +30,14 @@ class StockCheckItem < ApplicationRecord end def self.stock_different(stock_check_qty, journal_balance) - if stock_check_qty.to_i == journal_balance.to_i - return 'match', stock_check_qty - elsif stock_check_qty.to_i > journal_balance.to_i - return 'missing order item', stock_check_qty.to_i - journal_balance.to_i - elsif stock_check_qty.to_i < journal_balance.to_i - return 'missing stock', stock_check_qty.to_i - journal_balance.to_i - end + # if stock_check_qty.to_i == journal_balance.to_i + # return 'match', stock_check_qty + # elsif stock_check_qty.to_i > journal_balance.to_i + # return 'missing order item', stock_check_qty.to_i - journal_balance.to_i + # elsif stock_check_qty.to_i < journal_balance.to_i + # return 'missing stock', stock_check_qty.to_i - journal_balance.to_i + # end + return 'add new stock', stock_check_qty.to_i + journal_balance.to_i end def self.get_transaction(from, to, item_code) diff --git a/app/models/stock_journal.rb b/app/models/stock_journal.rb index 9a30d3b0..fc969199 100755 --- a/app/models/stock_journal.rb +++ b/app/models/stock_journal.rb @@ -8,7 +8,7 @@ class StockJournal < ApplicationRecord journal.credit = balance balance = calculate_balance(balance, item.qty) - + journal.item_code = item.item_instance_code journal.inventory_definition_id = inventory_definition.id journal.debit = item.qty @@ -24,13 +24,19 @@ class StockJournal < ApplicationRecord 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 + 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 @@ -43,7 +49,7 @@ class StockJournal < ApplicationRecord .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 + 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") diff --git a/app/views/inventory/inventory/_inventory_list.html.erb b/app/views/inventory/inventory/_inventory_list.html.erb index 0f4813f2..682188cd 100755 --- a/app/views/inventory/inventory/_inventory_list.html.erb +++ b/app/views/inventory/inventory/_inventory_list.html.erb @@ -10,16 +10,16 @@ - <% cate_arr = Array.new %> + <% cate_arr = Array.new %> <% - count = 0 - @inventory_definitions.each do |item| + count = 0 + @inventory_definitions.each do |item| count += 1 - %> + %> - <% if !cate_arr.include?(item.menu_category_id) %> + <% if !cate_arr.include?(item.menu_category_id) %> <%= item.menu_category_name %> <% cate_arr.push(item.menu_category_id) %> <% else %> @@ -72,4 +72,4 @@ window.location.href = '/inventory/'+ID+'/show'; }); - \ No newline at end of file +