Merge branch 'r-1902001-01-dev' into r-1902001-01
This commit is contained in:
@@ -308,7 +308,7 @@ class Origami::PaymentsController < BaseOrigamiController
|
||||
logger.debug saleObj.to_json
|
||||
if !saleObj.nil?
|
||||
# InventoryJob.perform_now(self.id)
|
||||
InventoryDefinition.calculate_product_count(saleObj)
|
||||
# InventoryDefinition.calculate_product_count(saleObj)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -749,7 +749,7 @@ class Origami::PaymentsController < BaseOrigamiController
|
||||
# end
|
||||
if !saleObj.nil?
|
||||
#InventoryJob.perform_now(self.id)
|
||||
InventoryDefinition.calculate_product_count(saleObj)
|
||||
# InventoryDefinition.calculate_product_count(saleObj)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -40,17 +40,17 @@ class Origami::SaleEditController < BaseOrigamiController
|
||||
saleObj = Sale.find(saleitemObj.sale_id)
|
||||
|
||||
|
||||
booking = Booking.find_by_sale_id(saleitemObj.sale_id)
|
||||
booking.booking_orders.each do |bo|
|
||||
order = Order.find(bo.order_id)
|
||||
order.order_items.each do |o|
|
||||
if saleitemObj.product_code == o.item_code
|
||||
o.qty = saleitemObj.qty * -1
|
||||
o.price = saleitemObj.price * -1
|
||||
o.save
|
||||
end
|
||||
end
|
||||
end
|
||||
# booking = Booking.find_by_sale_id(saleitemObj.sale_id)
|
||||
# booking.booking_orders.each do |bo|
|
||||
# order = Order.find(bo.order_id)
|
||||
# order.order_items.each do |o|
|
||||
# if saleitemObj.product_code == o.item_code
|
||||
# o.qty = saleitemObj.qty * -1
|
||||
# o.price = saleitemObj.price * -1
|
||||
# o.save
|
||||
# end
|
||||
# end
|
||||
# end
|
||||
# FOr Sale Audit
|
||||
action_by = current_user.name
|
||||
if access_code != "null" && current_user.role == "cashier"
|
||||
@@ -74,7 +74,6 @@ class Origami::SaleEditController < BaseOrigamiController
|
||||
saleitemObj.save
|
||||
@newsaleitem = SaleItem.new
|
||||
@newsaleitem = saleitemObj.dup
|
||||
@newsaleitem.save
|
||||
@newsaleitem.qty = saleitemObj.qty * -1
|
||||
@newsaleitem.unit_price = saleitemObj.unit_price * 1
|
||||
@newsaleitem.taxable_price = saleitemObj.taxable_price * -1
|
||||
@@ -156,13 +155,13 @@ class Origami::SaleEditController < BaseOrigamiController
|
||||
order_id = SaleOrder.find_by_sale_id(saleitemObj.sale_id).order_id
|
||||
order = Order.find(order_id)
|
||||
|
||||
order.order_items.each do |o|
|
||||
if saleitemObj.product_code == o.item_code
|
||||
o.qty = update_qty
|
||||
o.price = update_price
|
||||
o.save
|
||||
end
|
||||
end
|
||||
# order.order_items.each do |o|
|
||||
# if saleitemObj.product_code == o.item_code
|
||||
# o.qty = update_qty
|
||||
# o.price = update_price
|
||||
# o.save
|
||||
# end
|
||||
# end
|
||||
|
||||
saleObj.compute_by_sale_items(saleObj.sale_id, saleObj.sale_items, saleObj.total_discount,order_source)
|
||||
|
||||
|
||||
@@ -3,6 +3,9 @@ class InventoryDefinition < ApplicationRecord
|
||||
scope :active, -> {where(:is_active => true)}
|
||||
|
||||
def self.calculate_product_count(saleObj=nil,saleobj_after_req_bill=nil)
|
||||
# check_sj = StockJournal.where('item_code=?', item.item_instance_code).order("id DESC").first
|
||||
logger.debug 'saleObj<<<<<<<<<<<<<<<<<<<<<<<<<<<'
|
||||
logger.debug saleObj.sale_items.to_json
|
||||
if !saleObj.nil?
|
||||
saleObj.sale_items.each do |item|
|
||||
found, inventory_definition = find_product_in_inventory(item)
|
||||
@@ -34,81 +37,41 @@ class InventoryDefinition < ApplicationRecord
|
||||
end
|
||||
end
|
||||
|
||||
def self.check_balance(item,inventory_definition) # item => saleItemOBj
|
||||
def self.check_balance(item, inventory_definition) # item => saleItemOBj
|
||||
stock = StockJournal.where('item_code=?', item.item_instance_code).order("id DESC").first
|
||||
unless stock.nil?
|
||||
modify_balance(item, stock, inventory_definition)
|
||||
else
|
||||
StockJournal.add_to_journal(item, 0, "out of stock", inventory_definition)
|
||||
puts "<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< OUT OF STOCK >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
|
||||
StockJournal.add_to_journal(item.item_instance_code, item.qty, 0, "out of stock", inventory_definition, item.id, StockJournal::SALES_TRANS)
|
||||
end
|
||||
end
|
||||
|
||||
def self.modify_balance(item, stock, inventory_definition) #saleitemObj
|
||||
void_qty = 0
|
||||
if item.product_name.downcase.include?("void")
|
||||
void_qty = item.qty.abs.to_i
|
||||
end
|
||||
check_item = StockCheckItem.where('item_code=?', item.item_instance_code).order("id DESC").first
|
||||
if stock.balance.to_i >= item.qty
|
||||
if item.qty.to_i >= 0
|
||||
qty = item.qty - item.qty_was
|
||||
if !item.id_was.nil?
|
||||
remark = "edit"
|
||||
elsif stock.balance.to_i >= qty
|
||||
puts ">> stock is greater than order qty"
|
||||
if item.qty.to_i > 0
|
||||
StockJournal.add_to_journal(item, stock.balance, "ok", inventory_definition)
|
||||
if !void_qty.nil? | void_qty != 0
|
||||
check_item.different = check_item.different - item.qty
|
||||
check_item.save
|
||||
end
|
||||
else
|
||||
if item.product_name.downcase.include?("void")
|
||||
StockJournal.add_to_journal(item, stock.balance, "void", inventory_definition)
|
||||
check_item.different = check_item.different + void_qty
|
||||
check_item.save
|
||||
end
|
||||
end
|
||||
remark = "ok"
|
||||
else
|
||||
puts " << stock is less than order qty"
|
||||
data = item
|
||||
extra_qty = item.qty.to_i - stock.balance.to_i
|
||||
if stock.balance.to_i > 0
|
||||
item.qty = stock.balance.to_i
|
||||
if item.qty.to_i > 0
|
||||
StockJournal.add_to_journal(item, stock.balance, "ok", inventory_definition)
|
||||
check_item.different = check_item.different - item.qty
|
||||
remark = "out of stock"
|
||||
end
|
||||
else # item.qty < 0
|
||||
qty = item.qty
|
||||
remark = "void"
|
||||
end
|
||||
if item.is_a? OrderItem
|
||||
trans_type = StockJournal::ORDER_TRANS
|
||||
elsif item.is_a? SaleItem
|
||||
trans_type = StockJournal::SALES_TRANS
|
||||
end
|
||||
StockJournal.add_to_journal(item.item_instance_code, qty, stock.balance, remark, inventory_definition, item.id, trans_type)
|
||||
check_item.different = check_item.different - qty
|
||||
check_item.save
|
||||
data.qty = extra_qty
|
||||
StockJournal.add_to_journal(data, 0, "out of stock", inventory_definition)
|
||||
if !void_qty.nil? | void_qty != 0
|
||||
check_item.different = check_item.different - item.qty
|
||||
check_item.save
|
||||
else
|
||||
check_item.different = check_item.different + void_qty
|
||||
check_item.save
|
||||
end
|
||||
else
|
||||
if item.product_name.downcase.include?("void")
|
||||
StockJournal.add_to_journal(item, stock.balance, "void", inventory_definition)
|
||||
check_item.different = check_item.different + void_qty
|
||||
check_item.save
|
||||
end
|
||||
end
|
||||
else
|
||||
if item.qty.to_i > 0
|
||||
StockJournal.add_to_journal(item, stock.balance, "out of stock", inventory_definition)
|
||||
if !void_qty.nil? | void_qty != 0
|
||||
check_item.different = check_item.different - item.qty
|
||||
check_item.save
|
||||
else
|
||||
check_item.different = check_item.different + void_qty
|
||||
check_item.save
|
||||
end
|
||||
else
|
||||
if item.product_name.downcase.include?("void")
|
||||
StockJournal.add_to_journal(item, stock.balance, "void", inventory_definition)
|
||||
check_item.different = check_item.different + void_qty
|
||||
check_item.save
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def self.search_by_category(cat_id)
|
||||
|
||||
@@ -13,6 +13,15 @@ class OrderItem < ApplicationRecord
|
||||
# validates :qty, numericality: { :greater_than => 0 }
|
||||
validates_associated :order
|
||||
|
||||
after_save :update_stock_journal
|
||||
|
||||
# after_update :update_stock_journal
|
||||
|
||||
# after_save :add_to_journal, if: Proc.new { !self.id_changed? }
|
||||
# after_save :update_stock_journal, if: Proc.new { self.id_changed? }
|
||||
|
||||
|
||||
|
||||
#This Method - handle how items is added into order
|
||||
# order_item : {
|
||||
# order_item_code : "",
|
||||
@@ -101,4 +110,49 @@ class OrderItem < ApplicationRecord
|
||||
self.order_items_id = SeedGenerator.generate_id(self.class.name, "ODI")
|
||||
end
|
||||
end
|
||||
|
||||
def add_to_journal
|
||||
defination = InventoryDefinition.find_by_item_code(self.item_instance_code)
|
||||
stock = StockJournal.where('item_code = ?', self.item_instance_code).order("id DESC").first
|
||||
journal = StockJournal.create(
|
||||
item_code: self.item_instance_code,
|
||||
credit: 0,
|
||||
debit: self.qty,
|
||||
balance: stock.balance - self.qty,
|
||||
inventory_definition_id: defination.id,
|
||||
remark: 'ok',
|
||||
trans_ref: self.order.id,
|
||||
trans_type: StockJournal::SALES_TRANS
|
||||
)
|
||||
end
|
||||
|
||||
def update_stock_journal
|
||||
if self.qty != self.qty_was
|
||||
found, inventory_definition = InventoryDefinition.find_product_in_inventory(self)
|
||||
if found
|
||||
InventoryDefinition.check_balance(self, inventory_definition)
|
||||
end
|
||||
end
|
||||
# if self.qty > self.qty_was
|
||||
# credit = 0
|
||||
# debit = self.qty.to_i - self.qty_was.to_i
|
||||
# else
|
||||
# credit = self.qty_was.to_i - self.qty.to_i
|
||||
# debit = 0
|
||||
# end
|
||||
# if credit != debit
|
||||
# defination = InventoryDefinition.find_by_item_code(self.item_instance_code)
|
||||
# stock = StockJournal.where('item_code = ?', self.item_instance_code).order("id DESC").first
|
||||
# journal = StockJournal.create(
|
||||
# item_code: self.item_instance_code,
|
||||
# credit: credit,
|
||||
# debit: debit,
|
||||
# balance: stock.balance - debit + credit,
|
||||
# inventory_definition_id: defination.id,
|
||||
# remark: 'ok',
|
||||
# trans_ref: self.order.id,
|
||||
# trans_type: StockJournal::SALES_TRANS
|
||||
# )
|
||||
# end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -16,6 +16,8 @@ class Sale < ApplicationRecord
|
||||
has_many :bookings
|
||||
has_many :product_commissions
|
||||
|
||||
after_update :update_stock_journal
|
||||
|
||||
scope :open_invoices, -> { where("sale_status = 'new' and receipt_date BETWEEN '#{DateTime.now.utc.end_of_day}' AND '#{DateTime.now.utc.beginning_of_day}'") }
|
||||
scope :complete_sale, -> { where("sale_status = 'completed' and receipt_date BETWEEN '#{DateTime.now.utc.beginning_of_day}' AND '#{DateTime.now.utc.end_of_day}'") }
|
||||
|
||||
@@ -2970,4 +2972,21 @@ private
|
||||
self.sale_id = SeedGenerator.generate_id(self.class.name, "SAL")
|
||||
end
|
||||
end
|
||||
|
||||
def update_stock_journal
|
||||
if self.sale_status == "void" && self.sale_status_was != "void"
|
||||
self.sale_items.each do |item|
|
||||
found, inventory_definition = InventoryDefinition.find_product_in_inventory(item)
|
||||
if found
|
||||
stock = StockJournal.where('item_code=?', item.item_instance_code).order("id DESC").first
|
||||
unless stock.nil?
|
||||
check_item = StockCheckItem.where('item_code=?', item.item_instance_code).order("id DESC").first
|
||||
StockJournal.add_to_journal(item.item_instance_code, -item.qty, stock.balance, "void", inventory_definition, item.id, StockJournal::SALES_TRANS)
|
||||
check_item.different = check_item.different + item.qty
|
||||
check_item.save
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -11,6 +11,8 @@ class SaleItem < ApplicationRecord
|
||||
def compute_item
|
||||
end
|
||||
|
||||
after_update :update_stock_journal
|
||||
|
||||
# Add Sale Items
|
||||
def self.add_sale_items(sale_items)
|
||||
sale_items.each do|saleitemObj|
|
||||
@@ -229,4 +231,32 @@ class SaleItem < ApplicationRecord
|
||||
self.sale_item_id = SeedGenerator.generate_id(self.class.name, "SLI")
|
||||
end
|
||||
end
|
||||
|
||||
def update_stock_journal
|
||||
is_void = self.status == "void" && self.status_was != "void"
|
||||
cancel_void = self.status_was == "void" && self.status.nil?
|
||||
is_edit = self.qty >= 0 && self.qty != self.qty_was
|
||||
if is_void or cancel_void or is_edit
|
||||
found, inventory_definition = InventoryDefinition.find_product_in_inventory(self)
|
||||
if found
|
||||
stock = StockJournal.where('item_code=?', self.item_instance_code).order("id DESC").first
|
||||
unless stock.nil?
|
||||
check_item = StockCheckItem.where('item_code=?', self.item_instance_code).order("id DESC").first
|
||||
if is_void
|
||||
qty = -self.qty
|
||||
remark = "void"
|
||||
elsif cancel_void
|
||||
qty = self.qty
|
||||
remark = "cancel void"
|
||||
elsif is_edit
|
||||
qty = self.qty - self.qty_was
|
||||
remark = "edit"
|
||||
end
|
||||
StockJournal.add_to_journal(self.item_instance_code, qty, stock.balance, remark, inventory_definition, self.id, StockJournal::SALES_TRANS)
|
||||
check_item.different = check_item.different + qty
|
||||
check_item.save
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,44 +1,35 @@
|
||||
class StockJournal < ApplicationRecord
|
||||
|
||||
SALES_TRANS = "sale"
|
||||
ORDER_TRANS = "order"
|
||||
STOCK_CHECK_TRANS = "stock_check"
|
||||
|
||||
def self.add_to_journal(item, balance, stock_message, inventory_definition) # item => saleObj | balance => Stock journal
|
||||
journal = StockJournal.new
|
||||
if item.qty < 0
|
||||
credit_balance = item.qty.abs.to_i
|
||||
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
|
||||
else
|
||||
credit_balance = balance
|
||||
debit = item.qty
|
||||
end
|
||||
|
||||
journal.credit = credit_balance
|
||||
balance = calculate_balance(balance, item)
|
||||
|
||||
journal.item_code = item.item_instance_code
|
||||
journal.inventory_definition_id = inventory_definition.id
|
||||
journal.debit = debit
|
||||
journal.balance = balance
|
||||
journal.remark = stock_message
|
||||
journal.trans_ref = item.id
|
||||
journal.trans_type = StockJournal::SALES_TRANS
|
||||
journal.save
|
||||
|
||||
|
||||
|
||||
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, item)
|
||||
if item.product_name.downcase.include?("void")
|
||||
logger.debug 'balance++++++++++++++++++'
|
||||
logger.debug balance
|
||||
logger.debug 'qty+++++++++++++++++++++++'
|
||||
logger.debug item.qty
|
||||
return balance.to_i + item.qty.abs.to_i
|
||||
else
|
||||
return balance.to_i - item.qty.to_i
|
||||
end
|
||||
def self.calculate_balance(balance, qty)
|
||||
return balance.to_i - qty.to_i
|
||||
end
|
||||
|
||||
def self.from_stock_check(item)
|
||||
|
||||
@@ -340,7 +340,7 @@
|
||||
if ($.isNumeric(value)) {
|
||||
$('#product_qty').val(value);
|
||||
}else{
|
||||
swal("Opps","Please enter number for qty","warning");
|
||||
// swal("Opps","Please enter number for qty","warning");
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user