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
|
logger.debug saleObj.to_json
|
||||||
if !saleObj.nil?
|
if !saleObj.nil?
|
||||||
# InventoryJob.perform_now(self.id)
|
# InventoryJob.perform_now(self.id)
|
||||||
InventoryDefinition.calculate_product_count(saleObj)
|
# InventoryDefinition.calculate_product_count(saleObj)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -749,7 +749,7 @@ class Origami::PaymentsController < BaseOrigamiController
|
|||||||
# end
|
# end
|
||||||
if !saleObj.nil?
|
if !saleObj.nil?
|
||||||
#InventoryJob.perform_now(self.id)
|
#InventoryJob.perform_now(self.id)
|
||||||
InventoryDefinition.calculate_product_count(saleObj)
|
# InventoryDefinition.calculate_product_count(saleObj)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ class Origami::SaleEditController < BaseOrigamiController
|
|||||||
@table_id = nil
|
@table_id = nil
|
||||||
@table_type = nil
|
@table_type = nil
|
||||||
end
|
end
|
||||||
|
|
||||||
@cashier_type = params[:type]
|
@cashier_type = params[:type]
|
||||||
@saleobj = Sale.find(sale_id)
|
@saleobj = Sale.find(sale_id)
|
||||||
end
|
end
|
||||||
@@ -39,19 +39,19 @@ class Origami::SaleEditController < BaseOrigamiController
|
|||||||
# re-calc tax
|
# re-calc tax
|
||||||
saleObj = Sale.find(saleitemObj.sale_id)
|
saleObj = Sale.find(saleitemObj.sale_id)
|
||||||
|
|
||||||
|
|
||||||
booking = Booking.find_by_sale_id(saleitemObj.sale_id)
|
# booking = Booking.find_by_sale_id(saleitemObj.sale_id)
|
||||||
booking.booking_orders.each do |bo|
|
# booking.booking_orders.each do |bo|
|
||||||
order = Order.find(bo.order_id)
|
# order = Order.find(bo.order_id)
|
||||||
order.order_items.each do |o|
|
# order.order_items.each do |o|
|
||||||
if saleitemObj.product_code == o.item_code
|
# if saleitemObj.product_code == o.item_code
|
||||||
o.qty = saleitemObj.qty * -1
|
# o.qty = saleitemObj.qty * -1
|
||||||
o.price = saleitemObj.price * -1
|
# o.price = saleitemObj.price * -1
|
||||||
o.save
|
# o.save
|
||||||
end
|
# end
|
||||||
end
|
# end
|
||||||
end
|
# end
|
||||||
# FOr Sale Audit
|
# FOr Sale Audit
|
||||||
action_by = current_user.name
|
action_by = current_user.name
|
||||||
if access_code != "null" && current_user.role == "cashier"
|
if access_code != "null" && current_user.role == "cashier"
|
||||||
action_by = Employee.find_by_emp_id(access_code).name
|
action_by = Employee.find_by_emp_id(access_code).name
|
||||||
@@ -74,8 +74,7 @@ class Origami::SaleEditController < BaseOrigamiController
|
|||||||
saleitemObj.save
|
saleitemObj.save
|
||||||
@newsaleitem = SaleItem.new
|
@newsaleitem = SaleItem.new
|
||||||
@newsaleitem = saleitemObj.dup
|
@newsaleitem = saleitemObj.dup
|
||||||
@newsaleitem.save
|
@newsaleitem.qty = saleitemObj.qty * -1
|
||||||
@newsaleitem.qty = saleitemObj.qty * -1
|
|
||||||
@newsaleitem.unit_price = saleitemObj.unit_price * 1
|
@newsaleitem.unit_price = saleitemObj.unit_price * 1
|
||||||
@newsaleitem.taxable_price = saleitemObj.taxable_price * -1
|
@newsaleitem.taxable_price = saleitemObj.taxable_price * -1
|
||||||
@newsaleitem.price = saleitemObj.price * -1
|
@newsaleitem.price = saleitemObj.price * -1
|
||||||
@@ -147,7 +146,7 @@ class Origami::SaleEditController < BaseOrigamiController
|
|||||||
unless saleitemObj.product_name.include? 'updated'
|
unless saleitemObj.product_name.include? 'updated'
|
||||||
saleitemObj.product_name = saleitemObj.product_name + ' (UPDATED)'
|
saleitemObj.product_name = saleitemObj.product_name + ' (UPDATED)'
|
||||||
end
|
end
|
||||||
|
|
||||||
saleitemObj.save
|
saleitemObj.save
|
||||||
|
|
||||||
# re-calc tax
|
# re-calc tax
|
||||||
@@ -156,13 +155,13 @@ class Origami::SaleEditController < BaseOrigamiController
|
|||||||
order_id = SaleOrder.find_by_sale_id(saleitemObj.sale_id).order_id
|
order_id = SaleOrder.find_by_sale_id(saleitemObj.sale_id).order_id
|
||||||
order = Order.find(order_id)
|
order = Order.find(order_id)
|
||||||
|
|
||||||
order.order_items.each do |o|
|
# order.order_items.each do |o|
|
||||||
if saleitemObj.product_code == o.item_code
|
# if saleitemObj.product_code == o.item_code
|
||||||
o.qty = update_qty
|
# o.qty = update_qty
|
||||||
o.price = update_price
|
# o.price = update_price
|
||||||
o.save
|
# o.save
|
||||||
end
|
# end
|
||||||
end
|
# end
|
||||||
|
|
||||||
saleObj.compute_by_sale_items(saleObj.sale_id, saleObj.sale_items, saleObj.total_discount,order_source)
|
saleObj.compute_by_sale_items(saleObj.sale_id, saleObj.sale_items, saleObj.total_discount,order_source)
|
||||||
|
|
||||||
@@ -229,5 +228,5 @@ class Origami::SaleEditController < BaseOrigamiController
|
|||||||
ProductCommission.remove_product_commission(item)
|
ProductCommission.remove_product_commission(item)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -75,4 +75,4 @@ class Origami::SalesController < BaseOrigamiController
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -3,6 +3,9 @@ class InventoryDefinition < ApplicationRecord
|
|||||||
scope :active, -> {where(:is_active => true)}
|
scope :active, -> {where(:is_active => true)}
|
||||||
|
|
||||||
def self.calculate_product_count(saleObj=nil,saleobj_after_req_bill=nil)
|
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?
|
if !saleObj.nil?
|
||||||
saleObj.sale_items.each do |item|
|
saleObj.sale_items.each do |item|
|
||||||
found, inventory_definition = find_product_in_inventory(item)
|
found, inventory_definition = find_product_in_inventory(item)
|
||||||
@@ -34,81 +37,41 @@ class InventoryDefinition < ApplicationRecord
|
|||||||
end
|
end
|
||||||
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
|
stock = StockJournal.where('item_code=?', item.item_instance_code).order("id DESC").first
|
||||||
unless stock.nil?
|
unless stock.nil?
|
||||||
modify_balance(item, stock, inventory_definition)
|
modify_balance(item, stock, inventory_definition)
|
||||||
else
|
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
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.modify_balance(item, stock, inventory_definition) #saleitemObj
|
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
|
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
|
||||||
puts ">> stock is greater than order qty"
|
qty = item.qty - item.qty_was
|
||||||
if item.qty.to_i > 0
|
if !item.id_was.nil?
|
||||||
StockJournal.add_to_journal(item, stock.balance, "ok", inventory_definition)
|
remark = "edit"
|
||||||
if !void_qty.nil? | void_qty != 0
|
elsif stock.balance.to_i >= qty
|
||||||
check_item.different = check_item.different - item.qty
|
puts ">> stock is greater than order qty"
|
||||||
check_item.save
|
remark = "ok"
|
||||||
end
|
else
|
||||||
else
|
puts " << stock is less than order qty"
|
||||||
if item.product_name.downcase.include?("void")
|
remark = "out of stock"
|
||||||
StockJournal.add_to_journal(item, stock.balance, "void", inventory_definition)
|
end
|
||||||
check_item.different = check_item.different + void_qty
|
else # item.qty < 0
|
||||||
check_item.save
|
qty = item.qty
|
||||||
end
|
remark = "void"
|
||||||
end
|
end
|
||||||
else
|
if item.is_a? OrderItem
|
||||||
puts " << stock is less than order qty"
|
trans_type = StockJournal::ORDER_TRANS
|
||||||
data = item
|
elsif item.is_a? SaleItem
|
||||||
extra_qty = item.qty.to_i - stock.balance.to_i
|
trans_type = StockJournal::SALES_TRANS
|
||||||
if stock.balance.to_i > 0
|
end
|
||||||
item.qty = stock.balance.to_i
|
StockJournal.add_to_journal(item.item_instance_code, qty, stock.balance, remark, inventory_definition, item.id, trans_type)
|
||||||
if item.qty.to_i > 0
|
check_item.different = check_item.different - qty
|
||||||
StockJournal.add_to_journal(item, stock.balance, "ok", inventory_definition)
|
check_item.save
|
||||||
check_item.different = check_item.different - item.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
|
end
|
||||||
|
|
||||||
def self.search_by_category(cat_id)
|
def self.search_by_category(cat_id)
|
||||||
|
|||||||
@@ -13,6 +13,15 @@ class OrderItem < ApplicationRecord
|
|||||||
# validates :qty, numericality: { :greater_than => 0 }
|
# validates :qty, numericality: { :greater_than => 0 }
|
||||||
validates_associated :order
|
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
|
#This Method - handle how items is added into order
|
||||||
# order_item : {
|
# order_item : {
|
||||||
# order_item_code : "",
|
# order_item_code : "",
|
||||||
@@ -101,4 +110,49 @@ class OrderItem < ApplicationRecord
|
|||||||
self.order_items_id = SeedGenerator.generate_id(self.class.name, "ODI")
|
self.order_items_id = SeedGenerator.generate_id(self.class.name, "ODI")
|
||||||
end
|
end
|
||||||
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
|
end
|
||||||
|
|||||||
@@ -16,6 +16,8 @@ class Sale < ApplicationRecord
|
|||||||
has_many :bookings
|
has_many :bookings
|
||||||
has_many :product_commissions
|
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 :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}'") }
|
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")
|
self.sale_id = SeedGenerator.generate_id(self.class.name, "SAL")
|
||||||
end
|
end
|
||||||
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
|
end
|
||||||
|
|||||||
@@ -11,19 +11,21 @@ class SaleItem < ApplicationRecord
|
|||||||
def compute_item
|
def compute_item
|
||||||
end
|
end
|
||||||
|
|
||||||
|
after_update :update_stock_journal
|
||||||
|
|
||||||
# Add Sale Items
|
# Add Sale Items
|
||||||
def self.add_sale_items(sale_items)
|
def self.add_sale_items(sale_items)
|
||||||
sale_items.each do|saleitemObj|
|
sale_items.each do|saleitemObj|
|
||||||
@newsaleitem = SaleItem.new
|
@newsaleitem = SaleItem.new
|
||||||
@newsaleitem = saleitemObj.dup
|
@newsaleitem = saleitemObj.dup
|
||||||
@newsaleitem.save
|
@newsaleitem.save
|
||||||
@newsaleitem.qty = saleitemObj.qty * (-1)
|
@newsaleitem.qty = saleitemObj.qty * (-1)
|
||||||
@newsaleitem.unit_price = saleitemObj.unit_price * (-1)
|
@newsaleitem.unit_price = saleitemObj.unit_price * (-1)
|
||||||
@newsaleitem.taxable_price = (saleitemObj.unit_price * saleitemObj.qty) * (-1)
|
@newsaleitem.taxable_price = (saleitemObj.unit_price * saleitemObj.qty) * (-1)
|
||||||
@newsaleitem.price = (saleitemObj.unit_price * saleitemObj.qty) * (-1)
|
@newsaleitem.price = (saleitemObj.unit_price * saleitemObj.qty) * (-1)
|
||||||
@newsaleitem.product_name = saleitemObj.product_name + ' (FOC)'
|
@newsaleitem.product_name = saleitemObj.product_name + ' (FOC)'
|
||||||
@newsaleitem.save
|
@newsaleitem.save
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.sync_sale_item_records(sale_items)
|
def self.sync_sale_item_records(sale_items)
|
||||||
@@ -118,7 +120,7 @@ class SaleItem < ApplicationRecord
|
|||||||
|
|
||||||
# Check for actual sale items
|
# Check for actual sale items
|
||||||
sale_items.each do |si|
|
sale_items.each do |si|
|
||||||
if si.account_id == a.id
|
if si.account_id == a.id
|
||||||
account_price[:price] = account_price[:price] + si.price
|
account_price[:price] = account_price[:price] + si.price
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -190,7 +192,7 @@ class SaleItem < ApplicationRecord
|
|||||||
total = 0
|
total = 0
|
||||||
# Check for actual sale items
|
# Check for actual sale items
|
||||||
sale_items.each do |si|
|
sale_items.each do |si|
|
||||||
if si.product_code == "Other Charges" && si.item_instance_code == nil
|
if si.product_code == "Other Charges" && si.item_instance_code == nil
|
||||||
total = total + si.price
|
total = total + si.price
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -229,4 +231,32 @@ class SaleItem < ApplicationRecord
|
|||||||
self.sale_item_id = SeedGenerator.generate_id(self.class.name, "SLI")
|
self.sale_item_id = SeedGenerator.generate_id(self.class.name, "SLI")
|
||||||
end
|
end
|
||||||
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
|
end
|
||||||
|
|||||||
@@ -1,44 +1,35 @@
|
|||||||
class StockJournal < ApplicationRecord
|
class StockJournal < ApplicationRecord
|
||||||
|
|
||||||
SALES_TRANS = "sale"
|
SALES_TRANS = "sale"
|
||||||
|
ORDER_TRANS = "order"
|
||||||
STOCK_CHECK_TRANS = "stock_check"
|
STOCK_CHECK_TRANS = "stock_check"
|
||||||
|
|
||||||
def self.add_to_journal(item, balance, stock_message, inventory_definition) # item => saleObj | balance => Stock journal
|
def self.add_to_journal(item_instance_code, qty, old_balance, stock_message, inventory_definition, trans_ref, trans_type) # item => saleObj | balance => Stock journal
|
||||||
journal = StockJournal.new
|
|
||||||
if item.qty < 0
|
balance = calculate_balance(old_balance, qty)
|
||||||
credit_balance = item.qty.abs.to_i
|
|
||||||
debit = 0
|
if balance < old_balance
|
||||||
|
credit = 0
|
||||||
|
debit = qty.abs
|
||||||
else
|
else
|
||||||
credit_balance = balance
|
credit = qty.abs
|
||||||
debit = item.qty
|
debit = 0
|
||||||
end
|
end
|
||||||
|
|
||||||
journal.credit = credit_balance
|
journal = StockJournal.create(
|
||||||
balance = calculate_balance(balance, item)
|
item_code: item_instance_code,
|
||||||
|
credit: credit,
|
||||||
journal.item_code = item.item_instance_code
|
debit: debit,
|
||||||
journal.inventory_definition_id = inventory_definition.id
|
balance: balance,
|
||||||
journal.debit = debit
|
inventory_definition_id: inventory_definition.id,
|
||||||
journal.balance = balance
|
remark: stock_message,
|
||||||
journal.remark = stock_message
|
trans_ref: trans_ref,
|
||||||
journal.trans_ref = item.id
|
trans_type: trans_type
|
||||||
journal.trans_type = StockJournal::SALES_TRANS
|
)
|
||||||
journal.save
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.calculate_balance(balance, item)
|
def self.calculate_balance(balance, qty)
|
||||||
if item.product_name.downcase.include?("void")
|
return balance.to_i - qty.to_i
|
||||||
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
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.from_stock_check(item)
|
def self.from_stock_check(item)
|
||||||
|
|||||||
@@ -5,15 +5,15 @@
|
|||||||
<div id="oqs_loading"></div>
|
<div id="oqs_loading"></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row m-t">
|
<div class="row m-t">
|
||||||
<div class="col-lg-2 col-md-2 col-sm-2" id="">
|
<div class="col-lg-2 col-md-2 col-sm-2" id="">
|
||||||
<div id="menu1-slimscroll" data-height="0">
|
<div id="menu1-slimscroll" data-height="0">
|
||||||
<ul class="nav nav-tabs flex-column category_list m-t-10" role="tablist" id="ul-navbar">
|
<ul class="nav nav-tabs flex-column category_list m-t-10" role="tablist" id="ul-navbar">
|
||||||
<% @category.each do |cat| %>
|
<% @category.each do |cat| %>
|
||||||
<li class="nav-item ">
|
<li class="nav-item ">
|
||||||
<p class="hidden cat-id"><%= cat.id %></p>
|
<p class="hidden cat-id"><%= cat.id %></p>
|
||||||
<a class="nav-link menu_category sub_click first_46" data-toggle="tab" href="" role="tab" data-id="<%=cat.id%>" ><%= cat.name%>
|
<a class="nav-link menu_category sub_click first_46" data-toggle="tab" href="" role="tab" data-id="<%=cat.id%>" ><%= cat.name%>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<%end %>
|
<%end %>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
@@ -30,7 +30,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-md-3 col-lg-3 col-sm-3">
|
<div class="col-md-3 col-lg-3 col-sm-3">
|
||||||
<button type="button" class="btn btn-lg btn-block btn-default waves-effect m-t-5" id='back'>
|
<button type="button" class="btn btn-lg btn-block btn-default waves-effect m-t-5" id='back'>
|
||||||
<i class="material-icons">reply</i>Back
|
<i class="material-icons">reply</i>Back
|
||||||
@@ -71,7 +71,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="control-label" for="attribute">Item</label>
|
<label class="control-label" for="attribute">Item</label>
|
||||||
<input type='text' id='item' class='form-control' readonly="true" value=''/>
|
<input type='text' id='item' class='form-control' readonly="true" value=''/>
|
||||||
@@ -84,12 +84,12 @@
|
|||||||
<input type="hidden" id="item_code" value="">
|
<input type="hidden" id="item_code" value="">
|
||||||
<input type="hidden" id="item_name" value="">
|
<input type="hidden" id="item_name" value="">
|
||||||
<input type="hidden" id="instance_name" value="">
|
<input type="hidden" id="instance_name" value="">
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="control-label" for="attribute">Stock Check Reason</label>
|
<label class="control-label" for="attribute">Stock Check Reason</label>
|
||||||
<input type='text' id='stock_check_reason' class='form-control' placeholder="Set Stock Check Reason" value=''/>
|
<input type='text' id='stock_check_reason' class='form-control' placeholder="Set Stock Check Reason" value=''/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-actions">
|
<div class="form-actions">
|
||||||
<button type="button" class="btn btn-primary" data-dismiss="modal" id="save_to_stock_check">Save</button>
|
<button type="button" class="btn btn-primary" data-dismiss="modal" id="save_to_stock_check">Save</button>
|
||||||
<!-- <button type="button" class="btn btn-primary add_to_order " data-dismiss="modal" id="add_to_order">Add to Order<div class="ripple-container"></div></button> -->
|
<!-- <button type="button" class="btn btn-primary add_to_order " data-dismiss="modal" id="add_to_order">Add to Order<div class="ripple-container"></div></button> -->
|
||||||
@@ -186,18 +186,18 @@
|
|||||||
var menu_id = $(this).attr("data-id");
|
var menu_id = $(this).attr("data-id");
|
||||||
var url = "/inventory/get_menu_category/"+menu_id;
|
var url = "/inventory/get_menu_category/"+menu_id;
|
||||||
show_menu_item_list(url,menu_id);
|
show_menu_item_list(url,menu_id);
|
||||||
});
|
});
|
||||||
//End menu category Click
|
//End menu category Click
|
||||||
|
|
||||||
//show menu item list when click menu category
|
//show menu item list when click menu category
|
||||||
function show_menu_item_list(url_item,menu_id){
|
function show_menu_item_list(url_item,menu_id){
|
||||||
var menu_list = $('.menu_items_list');
|
var menu_list = $('.menu_items_list');
|
||||||
menu_list.empty();
|
menu_list.empty();
|
||||||
console.log(url_item);
|
console.log(url_item);
|
||||||
//Start Ajax
|
//Start Ajax
|
||||||
$.ajax({
|
$.ajax({
|
||||||
type: "GET",
|
type: "GET",
|
||||||
url: url_item,
|
url: url_item,
|
||||||
data: {},
|
data: {},
|
||||||
dataType: "json",
|
dataType: "json",
|
||||||
success: function(data) {
|
success: function(data) {
|
||||||
@@ -208,34 +208,34 @@
|
|||||||
show_menu_list(menu_items);
|
show_menu_list(menu_items);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
//end Ajax
|
//end Ajax
|
||||||
}
|
}
|
||||||
//end show list function
|
//end show list function
|
||||||
function show_menu_list(items) {
|
function show_menu_list(items) {
|
||||||
var menu_list = $('.menu_items_list');
|
var menu_list = $('.menu_items_list');
|
||||||
menu_list.empty();
|
menu_list.empty();
|
||||||
|
|
||||||
for(var i in items) {
|
for(var i in items) {
|
||||||
|
|
||||||
fa_plus = 'material-icons';
|
fa_plus = 'material-icons';
|
||||||
add = 'view_list'
|
add = 'view_list'
|
||||||
menu_item_box = 'menu_item_box';
|
menu_item_box = 'menu_item_box';
|
||||||
data_target = 'sx_item_detailModal';
|
data_target = 'sx_item_detailModal';
|
||||||
data_modal = ''
|
data_modal = ''
|
||||||
add_icon = "add_icon"
|
add_icon = "add_icon"
|
||||||
if (items[i].image) {
|
if (items[i].image) {
|
||||||
image_path = items[i].image;
|
image_path = items[i].image;
|
||||||
|
|
||||||
}else{
|
}else{
|
||||||
image_path = "image/logo.png";
|
image_path = "image/logo.png";
|
||||||
}
|
}
|
||||||
|
|
||||||
row = '<div class="col-md-3">'
|
row = '<div class="col-md-3">'
|
||||||
+'<div class="card custom-card testimonial-card fadeInRight card-box"'
|
+'<div class="card custom-card testimonial-card fadeInRight card-box"'
|
||||||
+'item_name="'+items[i]["item_name"]+'"'
|
+'item_name="'+items[i]["item_name"]+'"'
|
||||||
+'item_code="'+items[i]["item_code"]+'"'
|
+'item_code="'+items[i]["item_code"]+'"'
|
||||||
+'instance_name="'+items[i]["instance_name"]+'" '
|
+'instance_name="'+items[i]["instance_name"]+'" '
|
||||||
+'instance_code="'+items[i]["instance_code"]+'"'
|
+'instance_code="'+items[i]["instance_code"]+'"'
|
||||||
+'data-toggle="modal" data-target=".'+data_target+'" '
|
+'data-toggle="modal" data-target=".'+data_target+'" '
|
||||||
+'style="height:100%;background-image:url(../../'+image_path+');background-repeat: no-repeat;">'
|
+'style="height:100%;background-image:url(../../'+image_path+');background-repeat: no-repeat;">'
|
||||||
+'<div class="custom-card-head card-head row" style="line-height:14px;margin:0px;" style="">'
|
+'<div class="custom-card-head card-head row" style="line-height:14px;margin:0px;" style="">'
|
||||||
@@ -254,9 +254,9 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
//click item row for add order
|
//click item row for add order
|
||||||
$(document).on('click', '.card-box', function(event){
|
$(document).on('click', '.card-box', function(event){
|
||||||
$("#product_qty").val(1);
|
$("#product_qty").val(1);
|
||||||
$('#product_qty').empty();
|
$('#product_qty').empty();
|
||||||
$("#stock_check_reason").val('');
|
$("#stock_check_reason").val('');
|
||||||
$('#item_code').val($(this).attr('item_code'));
|
$('#item_code').val($(this).attr('item_code'));
|
||||||
$('#instance_code').val($(this).attr('instance_code'));
|
$('#instance_code').val($(this).attr('instance_code'));
|
||||||
@@ -267,7 +267,7 @@
|
|||||||
|
|
||||||
|
|
||||||
$('#save_to_stock_check').on('click', function () {
|
$('#save_to_stock_check').on('click', function () {
|
||||||
|
|
||||||
if ($("#product_qty").val()>0) {
|
if ($("#product_qty").val()>0) {
|
||||||
item_name = $('#item_name').val();
|
item_name = $('#item_name').val();
|
||||||
instance_name = $('#instance_name').val();
|
instance_name = $('#instance_name').val();
|
||||||
@@ -285,8 +285,8 @@
|
|||||||
+item_code+ "' data-instance-code='"+instance_code+"' data-row ='"+rowCount+ "' data-reason ='"+reason+ "'>"
|
+item_code+ "' data-instance-code='"+instance_code+"' data-row ='"+rowCount+ "' data-reason ='"+reason+ "'>"
|
||||||
+'<td class="item-cell-no">'+rowCount+'</td>'
|
+'<td class="item-cell-no">'+rowCount+'</td>'
|
||||||
+'<td class="item-cell-name" id="item_name" >' + item_name+ ' ' + instance_name +'</td>'
|
+'<td class="item-cell-name" id="item_name" >' + item_name+ ' ' + instance_name +'</td>'
|
||||||
+'<td class="item-cell-qty" id="item_qty">' + product_qty + '</td>'
|
+'<td class="item-cell-qty" id="item_qty">' + product_qty + '</td>'
|
||||||
+'<td class="" id="remove"><i class="material-icons" id="remove_row" style="cursor:pointer;">delete_forever</i></td>'
|
+'<td class="" id="remove"><i class="material-icons" id="remove_row" style="cursor:pointer;">delete_forever</i></td>'
|
||||||
+'</tr>';
|
+'</tr>';
|
||||||
$(".summary-items tbody").append(row);
|
$(".summary-items tbody").append(row);
|
||||||
}else{
|
}else{
|
||||||
@@ -313,19 +313,19 @@
|
|||||||
});
|
});
|
||||||
|
|
||||||
//click close
|
//click close
|
||||||
$('#sx_itemModal').on('click','#close', function(){
|
$('#sx_itemModal').on('click','#close', function(){
|
||||||
$(".item_box").removeAttr("data-active");
|
$(".item_box").removeAttr("data-active");
|
||||||
});
|
});
|
||||||
//click save buttom after change qty
|
//click save buttom after change qty
|
||||||
$('#sx_itemModal').on('click','#save', function(){
|
$('#sx_itemModal').on('click','#save', function(){
|
||||||
if ($('#modal-qty').val()>0) {
|
if ($('#modal-qty').val()>0) {
|
||||||
summary_items_filter();
|
summary_items_filter();
|
||||||
}else{
|
}else{
|
||||||
swal("Opps", "Please enter number for qty ","warning");
|
swal("Opps", "Please enter number for qty ","warning");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// $(document).on('click', '#remove_row', function(event){
|
// $(document).on('click', '#remove_row', function(event){
|
||||||
// console.log( $(this).parent().parent())
|
// console.log( $(this).parent().parent())
|
||||||
// $($(this).parent().parent()).attr('data-active',true);
|
// $($(this).parent().parent()).attr('data-active',true);
|
||||||
// $('.summary-items tr').filter(function(){
|
// $('.summary-items tr').filter(function(){
|
||||||
@@ -340,7 +340,7 @@
|
|||||||
if ($.isNumeric(value)) {
|
if ($.isNumeric(value)) {
|
||||||
$('#product_qty').val(value);
|
$('#product_qty').val(value);
|
||||||
}else{
|
}else{
|
||||||
swal("Opps","Please enter number for qty","warning");
|
// swal("Opps","Please enter number for qty","warning");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -380,12 +380,12 @@
|
|||||||
})
|
})
|
||||||
// window.location.href = '/inventory/stock_checks/' + data['stock_id'];
|
// window.location.href = '/inventory/stock_checks/' + data['stock_id'];
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}else{
|
}else{
|
||||||
swal("Opps","Please add item ","warning");
|
swal("Opps","Please add item ","warning");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
$(document).on('click', '.cashier_number', function(event){
|
$(document).on('click', '.cashier_number', function(event){
|
||||||
@@ -409,9 +409,9 @@
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'add':
|
case 'add':
|
||||||
|
|
||||||
case 'del' :
|
case 'del' :
|
||||||
|
|
||||||
case 'clr':
|
case 'clr':
|
||||||
$('#modal-qty').val(1);
|
$('#modal-qty').val(1);
|
||||||
$('#modal-qty').attr('data-value',0);
|
$('#modal-qty').attr('data-value',0);
|
||||||
@@ -426,7 +426,7 @@
|
|||||||
|
|
||||||
$("#back").on("click", function(){
|
$("#back").on("click", function(){
|
||||||
window.location.href = "/inventory";
|
window.location.href = "/inventory";
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -438,8 +438,8 @@
|
|||||||
total_price = parseFloat(price*qty).toFixed(2);
|
total_price = parseFloat(price*qty).toFixed(2);
|
||||||
|
|
||||||
$(this).find('#item_qty').text(qty);
|
$(this).find('#item_qty').text(qty);
|
||||||
$(this).find('.item-cell-price').text(total_price);
|
$(this).find('.item-cell-price').text(total_price);
|
||||||
|
|
||||||
$(this).removeAttr('data-active');
|
$(this).removeAttr('data-active');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -447,19 +447,19 @@
|
|||||||
|
|
||||||
/* Get Item rows */
|
/* Get Item rows */
|
||||||
function get_order_item_rows(){
|
function get_order_item_rows(){
|
||||||
var items = [];
|
var items = [];
|
||||||
var item_row = $('.summary-items tbody tr');
|
var item_row = $('.summary-items tbody tr');
|
||||||
$(item_row).each(function(i){
|
$(item_row).each(function(i){
|
||||||
var item_list = {};
|
var item_list = {};
|
||||||
|
|
||||||
item_list.remark = $(item_row[i]).attr('data-reason');
|
item_list.remark = $(item_row[i]).attr('data-reason');
|
||||||
item_list.sku = $(item_row[i]).attr('data-instance-code');
|
item_list.sku = $(item_row[i]).attr('data-instance-code');
|
||||||
item_list.qty = $(item_row[i]).children('#item_qty').text();
|
item_list.qty = $(item_row[i]).children('#item_qty').text();
|
||||||
|
|
||||||
items.push(item_list);
|
items.push(item_list);
|
||||||
});
|
});
|
||||||
return items;
|
return items;
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
Reference in New Issue
Block a user