request bill error on promotion. fix for compute sale's totals on promotion.

This commit is contained in:
Thein Lin Kyaw
2019-11-08 20:35:26 +06:30
parent 1e2ff8b1be
commit 8046b7210b
13 changed files with 117 additions and 127 deletions

View File

@@ -8,7 +8,7 @@ class Api::VoidController < Api::ApiController
if sale.discount_type == "member_discount" if sale.discount_type == "member_discount"
sale.update_attributes(total_discount: 0) sale.update_attributes(total_discount: 0)
sale.compute_by_sale_items(sale_id, sale.sale_items,0,order_source) sale.compute_by_sale_items(0, nil, order_source)
end end
# update count for shift sale # update count for shift sale
@@ -39,4 +39,3 @@ class Api::VoidController < Api::ApiController
end end
end end
end end

View File

@@ -154,7 +154,7 @@ class Origami::CustomersController < BaseOrigamiController
if status == true if status == true
render json: JSON.generate({:status => true}) render json: JSON.generate({:status => true})
if(id == "SAL") if(id == "SAL")
sale.compute_by_sale_items(sale.sale_id, sale.sale_items, sale.total_discount, nil, order_source) sale.compute_by_sale_items(sale.total_discount, nil, order_source)
end end
else else
render json: JSON.generate({:status => false, :error_message => "Record not found"}) render json: JSON.generate({:status => false, :error_message => "Record not found"})

View File

@@ -33,7 +33,6 @@ class Origami::DiscountsController < BaseOrigamiController
overall_discount = params[:overall_discount] overall_discount = params[:overall_discount]
sub_total = params[:sub_total] sub_total = params[:sub_total]
if Sale.exists?(sale_id) if Sale.exists?(sale_id)
sale = Sale.find(sale_id) sale = Sale.find(sale_id)
if sale.bookings[0].dining_facility_id.to_i > 0 if sale.bookings[0].dining_facility_id.to_i > 0
@@ -103,7 +102,7 @@ class Origami::DiscountsController < BaseOrigamiController
sale_audit = SaleAudit.record_audit_discount(sale.sale_id,sale.cashier_name, action_by,remark,"OVERALLDISCOUNT" ) sale_audit = SaleAudit.record_audit_discount(sale.sale_id,sale.cashier_name, action_by,remark,"OVERALLDISCOUNT" )
end end
sale.compute_by_sale_items(sale_id, sale.sale_items, overall_discount.to_f, nil,order_source) sale.compute_by_sale_items(overall_discount.to_f, nil,order_source)
if !table.nil? if !table.nil?
result = {:status=> "Success", :table_id => table_id, :table_type => table.type } result = {:status=> "Success", :table_id => table_id, :table_type => table.type }
else else
@@ -158,7 +157,7 @@ class Origami::DiscountsController < BaseOrigamiController
# sale.grand_total = (sale.total_amount - sale.total_discount) + sale.total_tax; # sale.grand_total = (sale.total_amount - sale.total_discount) + sale.total_tax;
# sale.save # sale.save
# Re-calc All Amount in Sale # Re-calc All Amount in Sale
sale.compute_by_sale_items(sale_id, sale.sale_items, sale.total_discount, nil, order_source) sale.compute_by_sale_items(sale.total_discount, nil, order_source)
if table.nil? if table.nil?
result = {:status=> "Success"} result = {:status=> "Success"}
else else
@@ -220,7 +219,7 @@ class Origami::DiscountsController < BaseOrigamiController
sale_audit = SaleAudit.record_audit_discount(sale.sale_id,sale.cashier_name, action_by,remark,"REMOVEALLDISCOUNT" ) sale_audit = SaleAudit.record_audit_discount(sale.sale_id,sale.cashier_name, action_by,remark,"REMOVEALLDISCOUNT" )
# Re-calc All Amount in Sale # Re-calc All Amount in Sale
sale.compute_by_sale_items(sale_id, sale.sale_items, 0, nil, order_source) sale.compute_by_sale_items(0, nil, order_source)
if table.nil? if table.nil?
result = {:status=> "Success"} result = {:status=> "Success"}
else else
@@ -321,7 +320,7 @@ class Origami::DiscountsController < BaseOrigamiController
if response["discount_bonus_earned"] if response["discount_bonus_earned"]
discount_amount = discount_amount + response["discount_bonus_earned"] discount_amount = discount_amount + response["discount_bonus_earned"]
end end
sale.compute_by_sale_items(sale_id, sale.sale_items, discount_amount, 'member_discount', order_source, tax_type) sale.compute_by_sale_items(discount_amount, 'member_discount', order_source, tax_type)
result = {:status=> "Success",:title=>"Member Discount", :table_id => table_id,:table_type => table_type } result = {:status=> "Success",:title=>"Member Discount", :table_id => table_id,:table_type => table_type }
elsif response["status"] == "500" elsif response["status"] == "500"
result = {:status=> response["error"],:title=>"Alert", :table_id => table_id,:table_type => table_type } result = {:status=> response["error"],:title=>"Alert", :table_id => table_id,:table_type => table_type }

View File

@@ -75,7 +75,7 @@ class Origami::OtherChargesController < BaseOrigamiController
end end
# Re-calc All Amount in Sale # Re-calc All Amount in Sale
sale.compute_by_sale_items(sale_id, sale.sale_items, sale.total_discount, nil, cashier_type) sale.compute_by_sale_items(sale.total_discount, nil, cashier_type)
end end
if !table.nil? if !table.nil?
dining = {:table_id => table_id, :table_type => table.type } dining = {:table_id => table_id, :table_type => table.type }

View File

@@ -643,7 +643,7 @@ class Origami::PaymentsController < BaseOrigamiController
if saleObj.discount_type == "member_discount" if saleObj.discount_type == "member_discount"
saleObj.update_attributes(grand_total: 0, rounding_adjustment: 0, amount_received: 0, amount_changed: 0) saleObj.update_attributes(grand_total: 0, rounding_adjustment: 0, amount_received: 0, amount_changed: 0)
saleObj.compute_by_sale_items(sale_id, saleObj.sale_items,0,order_source) saleObj.compute_by_sale_items(0, nil, order_source)
end end
saleObj.update_attributes(grand_total: 0, rounding_adjustment: 0, amount_received: 0, amount_changed: 0) saleObj.update_attributes(grand_total: 0, rounding_adjustment: 0, amount_received: 0, amount_changed: 0)
@@ -818,7 +818,7 @@ class Origami::PaymentsController < BaseOrigamiController
order_source = params[:cashier_type] order_source = params[:cashier_type]
tax_type = params[:tax_type] tax_type = params[:tax_type]
sale = Sale.find(sale_id) sale = Sale.find(sale_id)
sale.compute_by_sale_items(sale.sale_id, sale.sale_items, sale.total_discount,nil,order_source,tax_type) sale.compute_by_sale_items(sale.total_discount, nil, order_source, tax_type)
render json: JSON.generate({:status => true}) render json: JSON.generate({:status => true})
end end

View File

@@ -59,7 +59,7 @@ class Origami::SaleEditController < BaseOrigamiController
remark = "Void Sale Item ID #{saleitemObj.sale_item_id} | Receipt No #{saleObj.receipt_no} | Item Name ->#{saleitemObj.product_name}-Product Code ->#{saleitemObj.product_code}-Instance Code ->#{saleitemObj.item_instance_code}" remark = "Void Sale Item ID #{saleitemObj.sale_item_id} | Receipt No #{saleObj.receipt_no} | Item Name ->#{saleitemObj.product_name}-Product Code ->#{saleitemObj.product_code}-Instance Code ->#{saleitemObj.item_instance_code}"
sale_audit = SaleAudit.record_audit_for_edit(saleitemObj.sale_id,current_user.name, action_by,remark,"SALEITEMVOID" ) sale_audit = SaleAudit.record_audit_for_edit(saleitemObj.sale_id,current_user.name, action_by,remark,"SALEITEMVOID" )
saleObj.compute_by_sale_items(saleObj.sale_id, saleObj.sale_items, saleObj.total_discount,order_source) saleObj.compute_by_sale_items(saleObj.total_discount, nil, order_source)
ProductCommission.create_product_commission(@newsaleitem, saleitemObj) ProductCommission.create_product_commission(@newsaleitem, saleitemObj)
end end
@@ -95,7 +95,7 @@ class Origami::SaleEditController < BaseOrigamiController
remark = "FOC Sale Item ID #{saleitemObj.sale_item_id} | Receipt No #{saleObj.receipt_no} | Item Name ->#{saleitemObj.product_name}-Product Code ->#{saleitemObj.product_code}-Instance Code ->#{saleitemObj.item_instance_code}Receipt No #{saleObj.receipt_no}" remark = "FOC Sale Item ID #{saleitemObj.sale_item_id} | Receipt No #{saleObj.receipt_no} | Item Name ->#{saleitemObj.product_name}-Product Code ->#{saleitemObj.product_code}-Instance Code ->#{saleitemObj.item_instance_code}Receipt No #{saleObj.receipt_no}"
sale_audit = SaleAudit.record_audit_for_edit(saleitemObj.sale_id,current_user.name, action_by,remark,"SALEITEMFOC" ) sale_audit = SaleAudit.record_audit_for_edit(saleitemObj.sale_id,current_user.name, action_by,remark,"SALEITEMFOC" )
saleObj.compute_by_sale_items(saleObj.sale_id, saleObj.sale_items, saleObj.total_discount,order_source) saleObj.compute_by_sale_items(saleObj.total_discount, nil, order_source)
ProductCommission.create_product_commission(@newsaleitem, saleitemObj) ProductCommission.create_product_commission(@newsaleitem, saleitemObj)
end end
@@ -150,10 +150,10 @@ class Origami::SaleEditController < BaseOrigamiController
saleitemObj.save saleitemObj.save
# re-calc tax # re-calc tax
saleObj = Sale.find(saleitemObj.sale_id) # saleObj = Sale.find(saleitemObj.sale_id)
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
@@ -163,7 +163,7 @@ class Origami::SaleEditController < BaseOrigamiController
# end # end
# end # end
saleObj.compute_by_sale_items(saleObj.sale_id, saleObj.sale_items, saleObj.total_discount,order_source) sale.compute_by_sale_items(saleObj.total_discount, nil, order_source)
ProductCommission.edit_product_commission(saleitemObj) ProductCommission.edit_product_commission(saleitemObj)
end end
@@ -196,7 +196,7 @@ class Origami::SaleEditController < BaseOrigamiController
remark = "Cancle Void Sale Item ID #{saleitemObj.sale_item_id} | Item Name ->#{saleitemObj.product_name}-Product Code ->#{saleitemObj.product_code}-Instance Code ->#{saleitemObj.item_instance_code}|Receipt No #{saleObj.receipt_no}" remark = "Cancle Void Sale Item ID #{saleitemObj.sale_item_id} | Item Name ->#{saleitemObj.product_name}-Product Code ->#{saleitemObj.product_code}-Instance Code ->#{saleitemObj.item_instance_code}|Receipt No #{saleObj.receipt_no}"
sale_audit = SaleAudit.record_audit_for_edit(saleitemObj.sale_id,current_user.name, action_by,remark,"ITEMCANCELVOID" ) sale_audit = SaleAudit.record_audit_for_edit(saleitemObj.sale_id,current_user.name, action_by,remark,"ITEMCANCELVOID" )
saleObj.compute_by_sale_items(saleObj.sale_id, saleObj.sale_items, saleObj.total_discount, order_source) saleObj.compute_by_sale_items(saleObj.total_discount, nil, order_source)
ProductCommission.remove_product_commission(saleitemObj) ProductCommission.remove_product_commission(saleitemObj)
end end
@@ -214,9 +214,9 @@ class Origami::SaleEditController < BaseOrigamiController
item.save item.save
ProductCommission.remove_product_commission(item) ProductCommission.remove_product_commission(item)
end end
saleObj.sale_items.reset
# re-calc tax # re-calc tax
saleObj.compute_by_sale_items(saleObj.sale_id, saleObj.sale_items, saleObj.total_discount,order_source) saleObj.compute_by_sale_items(saleObj.total_discount,nil, order_source)
end end
def apply_void def apply_void

View File

@@ -10,7 +10,7 @@ class Origami::VoidController < BaseOrigamiController
sale = Sale.find_by_sale_id(sale_id) sale = Sale.find_by_sale_id(sale_id)
if sale.discount_type == "member_discount" if sale.discount_type == "member_discount"
sale.update_attributes(total_discount: 0) sale.update_attributes(total_discount: 0)
sale.compute_by_sale_items(sale_id, sale.sale_items,0,order_source) sale.compute_by_sale_items(0, nil, order_source)
end end
# update count for shift sale # update count for shift sale

View File

@@ -15,7 +15,6 @@ class Origami::WasteSpoileController < BaseOrigamiController
sale.sale_status = remark sale.sale_status = remark
sale.save sale.save
# sale.compute_by_sale_items(sale_id, sale.sale_items,0,order_source)
# add to sale item with foc # add to sale item with foc
# sale_items = SaleItem.where("sale_id='#{ sale_id }' and status is null") # sale_items = SaleItem.where("sale_id='#{ sale_id }' and status is null")

View File

@@ -248,7 +248,7 @@ class Transactions::SalesController < ApplicationController
if sale.discount_type == "member_discount" if sale.discount_type == "member_discount"
sale.update_attributes(total_discount: 0) sale.update_attributes(total_discount: 0)
sale.compute_by_sale_items(sale_id, sale.sale_items,0,order_source) sale.compute_by_sale_items(0, nil, order_source)
end end
# update count for shift sale # update count for shift sale

View File

@@ -109,7 +109,7 @@ class Promotion < ApplicationRecord
item = saleObj.order_items.where(item_instance_code: promo_product).first item = saleObj.order_items.where(item_instance_code: promo_product).first
if !item.nil? if !item.nil?
update_existing_item(foc_qty, item, sale_id, "promotion", item[:price], source) update_existing_item(foc_qty, item, saleObj, "promotion", item[:price], source)
end end
end end
# AA - 10 # 3 # BB # orderList, #S34345 # AA - 10 # 3 # BB # orderList, #S34345
@@ -128,7 +128,7 @@ class Promotion < ApplicationRecord
item = saleObj.order_items.where(item_instance_code: promo_product).first item = saleObj.order_items.where(item_instance_code: promo_product).first
if !item.nil? if !item.nil?
update_existing_item(promotion_qty, item, sale_id, "promotion", item[:price],source) update_existing_item(promotion_qty, item, saleObj, "promotion", item[:price],source)
end end
end end
@@ -158,7 +158,8 @@ class Promotion < ApplicationRecord
sale_item.sale = saleObj sale_item.sale = saleObj
sale_item.save sale_item.save
saleObj.compute_by_sale_items(saleObj.id, saleObj.sale_items, saleObj.total_discount,nil,source) saleObj.sale_items << sale_item
saleObj.compute_by_sale_items(saleObj.total_discount, nil, source)
end end
end end
@@ -180,7 +181,7 @@ class Promotion < ApplicationRecord
item = saleObj.order_items.where(item_instance_code: promo_product.item_code).first item = saleObj.order_items.where(item_instance_code: promo_product.item_code).first
if !item.nil? if !item.nil?
update_existing_item(foc_qty, item, sale_id, "promotion nett off", promo_product.net_off,source) update_existing_item(foc_qty, item, saleObj, "promotion nett off", promo_product.net_off,source)
end end
end end

View File

@@ -361,8 +361,8 @@ class Sale < ApplicationRecord
sale_item.save sale_item.save
# Re-calc # Re-calc
sale = Sale.find(self.id) self.sale_items << sale_item
self.compute_by_sale_items(self.id, sale.sale_items, self.total_discount, nil, order_source) self.compute_by_sale_items(self.total_discount, nil, order_source)
end end
def create_saleitem_indutycharges(chargeObj, current_checkin_induties_count, induties_pay_amount, dining_name, dining_time, order_source = nil, basic_pay_amount) def create_saleitem_indutycharges(chargeObj, current_checkin_induties_count, induties_pay_amount, dining_name, dining_time, order_source = nil, basic_pay_amount)
sale_item = SaleItem.new sale_item = SaleItem.new
@@ -380,8 +380,8 @@ class Sale < ApplicationRecord
sale_item.price = induties_pay_amount sale_item.price = induties_pay_amount
sale_item.save sale_item.save
# Re-calc # Re-calc
sale = Sale.find(self.id) self.sale_items << sale_item
self.compute_by_sale_items(self.id, sale.sale_items, self.total_discount, nil, order_source) self.compute_by_sale_items(self.total_discount, nil, order_source)
end end
def update_item (item) def update_item (item)
#save sale_audit #save sale_audit
@@ -403,14 +403,12 @@ class Sale < ApplicationRecord
#compute - invoice total #compute - invoice total
def compute(order_source = nil, tax_type = nil) def compute(order_source = nil, tax_type = nil)
sales_items = self.sale_items
#Computation Fields #Computation Fields
subtotal_price = 0 subtotal_price = 0
total_taxable = 0 total_taxable = 0
rounding_adjustment = 0 rounding_adjustment = 0
sales_items.each do |item| self.sale_items.each do |item|
#compute each item and added to total #compute each item and added to total
subtotal_price = subtotal_price + item.price subtotal_price = subtotal_price + item.price
@@ -429,23 +427,19 @@ class Sale < ApplicationRecord
# self.grand_total_round # self.grand_total_round
#compute rounding adjustment #compute rounding adjustment
# adjust_rounding # adjust_rounding
self.save! self.save!
end end
#compute - invoice total #compute - invoice total
def compute_by_sale_items(sale_id, sale_itemss, total_discount,discount_type=nil,order_source=nil,tax_type=nil,type=nil) def compute_by_sale_items(total_discount, discount_type=nil, order_source=nil, tax_type=nil, type=nil)
shop = Shop.first shop = Shop.first
sale = Sale.find(sale_id)
sales_items = sale_itemss
#Computation Fields #Computation Fields
subtotal_price = 0 subtotal_price = 0
total_taxable = 0 total_taxable = 0
rounding_adjustment = 0 rounding_adjustment = 0
sales_items.each do |item| self.sale_items.each do |item|
#compute each item and added to total #compute each item and added to total
subtotal_price = subtotal_price + item.price subtotal_price = subtotal_price + item.price
@@ -454,35 +448,33 @@ class Sale < ApplicationRecord
total_taxable = total_taxable + item.taxable_price total_taxable = total_taxable + item.taxable_price
end end
end end
compute_tax(sale, total_taxable, total_discount, order_source, tax_type)
sale.total_amount = subtotal_price compute_tax(total_taxable, total_discount, order_source, tax_type)
sale.total_discount = total_discount self.total_amount = subtotal_price
self.total_discount = total_discount
if type =="foc" if type =="foc"
sale.grand_total = 0 self.grand_total = 0
else else
sale.grand_total = (sale.total_amount - sale.total_discount) + sale.total_tax self.grand_total = (self.total_amount - self.total_discount) + self.total_tax
# sale.grand_total_round # sale.grand_total_round
end end
if discount_type == "member_discount" if discount_type == "member_discount"
sale.discount_type = discount_type self.discount_type = discount_type
end end
#compute rounding adjustment #compute rounding adjustment
# adjust_rounding # adjust_rounding
self.save!
sale.save!
end end
# No Use too many wrong # No Use too many wrong
def compute_without_void(order_source = nil) def compute_without_void(order_source = nil)
sales_items = self.sale_items
#Computation Fields #Computation Fields
subtotal_price = 0 subtotal_price = 0
total_taxable = 0 total_taxable = 0
rounding_adjustment = 0 rounding_adjustment = 0
sales_items.each do |item| self.sale_items.each do |item|
if item.status != 'void' && item.status != 'foc' if item.status != 'void' && item.status != 'foc'
#compute each item and added to total #compute each item and added to total
subtotal_price = subtotal_price + item.price subtotal_price = subtotal_price + item.price
@@ -506,7 +498,7 @@ class Sale < ApplicationRecord
end end
# Tax Re-Calculte # Tax Re-Calculte
def compute_tax(sale, total_taxable, total_discount = 0, order_source = nil, tax_type=nil) def compute_tax(total_taxable, total_discount = 0, order_source = nil, tax_type=nil)
shop = Shop.first shop = Shop.first
#if tax is not apply create new record #if tax is not apply create new record
@@ -529,9 +521,9 @@ class Sale < ApplicationRecord
tax_profiles = unique_tax_profiles(order_source, self.customer_id) tax_profiles = unique_tax_profiles(order_source, self.customer_id)
# #Creat new tax records # #Creat new tax records
if sale.payment_status != 'foc' if self.payment_status != 'foc'
tax_profiles.each do |tax| tax_profiles.each do |tax|
sale_tax = SaleTax.new(:sale => sale) sale_tax = SaleTax.new(:sale => self)
sale_tax.tax_name = tax.name sale_tax.tax_name = tax.name
sale_tax.tax_rate = tax.rate sale_tax.tax_rate = tax.rate
@@ -555,8 +547,8 @@ class Sale < ApplicationRecord
sale_tax.save sale_tax.save
end end
end end
sale.tax_type = tax_incl_exec self.tax_type = tax_incl_exec
sale.total_tax = total_tax_amount self.total_tax = total_tax_amount
end end
# Tax Calculate # Tax Calculate

View File

@@ -89,7 +89,7 @@ class SaleItem < ApplicationRecord
# sale_item.save # sale_item.save
if type != "foc" if type != "foc"
sale = Sale.find(sale_id) sale = Sale.find(sale_id)
sale.compute_by_sale_items(sale.id, sale.sale_items, sale.total_discount) sale.compute_by_sale_items(sale.total_discount)
end end
end end

View File

@@ -419,7 +419,7 @@ class SalePayment < ApplicationRecord
SaleItem.update_existing_item(item.qty, item, self.sale.sale_id, "foc", item.unit_price, item.price) SaleItem.update_existing_item(item.qty, item, self.sale.sale_id, "foc", item.unit_price, item.price)
end end
sale = Sale.find(self.sale.sale_id) sale = Sale.find(self.sale.sale_id)
sale.compute_by_sale_items(sale.id, sale.sale_items, sale.total_discount,'','','',"foc") sale.compute_by_sale_items(sale.total_discount,'','','',"foc")
self.payment_method = "foc" self.payment_method = "foc"
self.payment_amount = self.received_amount self.payment_amount = self.received_amount