diff --git a/app/controllers/origami/sale_edit_controller.rb b/app/controllers/origami/sale_edit_controller.rb index 8c98d25e..40f79afd 100755 --- a/app/controllers/origami/sale_edit_controller.rb +++ b/app/controllers/origami/sale_edit_controller.rb @@ -173,18 +173,18 @@ class Origami::SaleEditController < BaseOrigamiController saleitemId = params[:sale_item_id] access_code = params[:access_code] order_source = params[:type] - saleitemObj = SaleItem.find(saleitemId) - both = SaleItem.where('product_code=?', saleitemObj.product_code) - both.each do |item| - if item.qty.to_i > 0 - item.status = nil - item.save - end - end - saleitemObj.destroy + saleitemObj = SaleItem.find(saleitemId) + + saleObj = saleitemObj.sale + + saleObj.sale_items.where(product_code: saleitemObj.product_code) + .where(qty: saleitemObj.qty.abs) + .where(unit_price: saleitemObj.unit_price) + .where(status: saleitemObj.status).first.update(status: nil, remark: nil) + + saleitemObj.destroy # re-calc tax - saleObj = Sale.find(saleitemObj.sale_id) order_id = SaleOrder.find_by_sale_id(saleitemObj.sale_id).order_id order = Order.find(order_id) diff --git a/app/models/order_item.rb b/app/models/order_item.rb index e2129cca..f265be2b 100755 --- a/app/models/order_item.rb +++ b/app/models/order_item.rb @@ -15,8 +15,6 @@ class OrderItem < ApplicationRecord 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? } @@ -127,7 +125,7 @@ class OrderItem < ApplicationRecord end def update_stock_journal - if self.qty != self.qty_was + if self.qty != self.qty_before_last_save found, inventory_definition = InventoryDefinition.find_product_in_inventory(self) if found InventoryDefinition.check_balance(self, inventory_definition) diff --git a/app/models/sale.rb b/app/models/sale.rb index b045f36e..55fcd9ad 100644 --- a/app/models/sale.rb +++ b/app/models/sale.rb @@ -2940,7 +2940,7 @@ private end def update_stock_journal - if self.sale_status == "void" && self.sale_status_was != "void" + if self.sale_status == "void" && self.sale_status_before_last_save != "void" self.sale_items.each do |item| found, inventory_definition = InventoryDefinition.find_product_in_inventory(item) if found diff --git a/app/models/sale_item.rb b/app/models/sale_item.rb index a064bce6..d17edc6e 100755 --- a/app/models/sale_item.rb +++ b/app/models/sale_item.rb @@ -18,7 +18,6 @@ class SaleItem < ApplicationRecord sale_items.each do|saleitemObj| @newsaleitem = SaleItem.new @newsaleitem = saleitemObj.dup - @newsaleitem.save @newsaleitem.qty = saleitemObj.qty * (-1) @newsaleitem.unit_price = saleitemObj.unit_price * (-1) @newsaleitem.taxable_price = (saleitemObj.unit_price * saleitemObj.qty) * (-1) @@ -233,12 +232,12 @@ class SaleItem < ApplicationRecord 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 - is_foc = self.status == "foc" && self.status_was != "foc" - cancel_foc = self.status_was == "foc" - + is_void = self.status == "void" && self.status_before_last_save != "void" + cancel_void = self.status_before_last_save == "void" && self.status.nil? + is_edit = self.qty >= 0 && self.qty != self.qty_before_last_save + is_foc = self.status == "foc" && self.status_before_last_save != "foc" + cancel_foc = self.status_before_last_save == "foc" + if is_void or cancel_void or is_edit or is_foc or cancel_foc found, inventory_definition = InventoryDefinition.find_product_in_inventory(self) if found @@ -253,7 +252,7 @@ class SaleItem < ApplicationRecord qty = self.qty remark = "cancel void" elsif is_edit - qty = self.qty - self.qty_was + qty = self.qty - self.qty_before_last_save remark = "edit" end StockJournal.add_to_journal(self.item_instance_code, qty, stock.balance, remark, inventory_definition, self.id, StockJournal::SALES_TRANS) @@ -275,4 +274,5 @@ class SaleItem < ApplicationRecord end end end + end