fixed conflict
This commit is contained in:
2
Gemfile
2
Gemfile
@@ -1,5 +1,5 @@
|
||||
source 'https://rubygems.org'
|
||||
|
||||
ruby '2.4.1'
|
||||
git_source(:github) do |repo_name|
|
||||
repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
|
||||
"https://github.com/#{repo_name}.git"
|
||||
|
||||
@@ -375,5 +375,8 @@ DEPENDENCIES
|
||||
web-console (>= 3.3.0)
|
||||
whenever
|
||||
|
||||
|
||||
RUBY VERSION
|
||||
ruby 2.4.1p111
|
||||
BUNDLED WITH
|
||||
2.0.2
|
||||
|
||||
@@ -7,9 +7,9 @@ class Origami::DiscountsController < BaseOrigamiController
|
||||
@print_settings = PrintSetting.get_precision_delimiter()
|
||||
@webview = false
|
||||
if check_mobile
|
||||
@webview = true
|
||||
@webview = true
|
||||
end
|
||||
|
||||
|
||||
sale_id = params[:id]
|
||||
@cashier_type = params[:type]
|
||||
if Sale.exists?(sale_id)
|
||||
@@ -32,7 +32,7 @@ class Origami::DiscountsController < BaseOrigamiController
|
||||
discount_items = JSON.parse(params[:discount_items])
|
||||
overall_discount = params[:overall_discount]
|
||||
sub_total = params[:sub_total]
|
||||
|
||||
|
||||
|
||||
if Sale.exists?(sale_id)
|
||||
sale = Sale.find(sale_id)
|
||||
@@ -44,26 +44,29 @@ class Origami::DiscountsController < BaseOrigamiController
|
||||
table_id = nil
|
||||
end
|
||||
|
||||
|
||||
# sale.total_discount = overall_discount.to_f
|
||||
|
||||
# sale.total_discount = overall_discount.to_f
|
||||
# sale.total_amount = sub_total.to_f
|
||||
# sale.grand_total = (sub_total.to_f - overall_discount.to_f) + sale.total_tax;
|
||||
# sale.save
|
||||
# sale.grand_total = (sub_total.to_f - overall_discount.to_f) + sale.total_tax;
|
||||
# sale.save
|
||||
if discount_items.length > 0
|
||||
|
||||
#save sale item for discount
|
||||
discount_items.each do |di|
|
||||
origin_sale_item = SaleItem.find(di["id"])
|
||||
|
||||
|
||||
sale_item = SaleItem.new
|
||||
|
||||
if !origin_sale_item.nil?
|
||||
menu_category = MenuCategory.get_menu_category(origin_sale_item.product_code) #get menu category for menu items
|
||||
if !menu_category.nil?
|
||||
sale_item.menu_category_code = menu_category.code
|
||||
sale_item.menu_category_name = menu_category.name
|
||||
end
|
||||
end
|
||||
# if !origin_sale_item.nil?
|
||||
# menu_category = MenuCategory.get_menu_category(origin_sale_item.product_code) #get menu category for menu items
|
||||
# if !menu_category.nil?
|
||||
# sale_item.menu_category_code = menu_category.code
|
||||
# sale_item.menu_category_name = menu_category.name
|
||||
# end
|
||||
# end
|
||||
|
||||
sale_item.menu_category_code = origin_sale_item.menu_category_code
|
||||
sale_item.menu_category_name = origin_sale_item.menu_category_name
|
||||
|
||||
sale_item.sale_id = sale_id
|
||||
sale_item.product_code = origin_sale_item != nil ? origin_sale_item.product_code : sale_id
|
||||
@@ -73,7 +76,7 @@ class Origami::DiscountsController < BaseOrigamiController
|
||||
sale_item.status = "Discount"
|
||||
|
||||
sale_item.qty = -1
|
||||
sale_item.unit_price = di["price"].to_f * (-1)
|
||||
sale_item.unit_price = di["price"].to_f * -1
|
||||
sale_item.taxable_price = di["price"]
|
||||
sale_item.is_taxable = 1
|
||||
sale_item.account_id = origin_sale_item.account_id
|
||||
@@ -83,11 +86,11 @@ class Origami::DiscountsController < BaseOrigamiController
|
||||
|
||||
action_by = current_user.name
|
||||
remark = "Discount Item Name ->#{sale_item.product_name}-Product Code ->#{sale_item.product_code} | Price [#{sale_item.price}] | Receipt No #{sale.receipt_no} "
|
||||
|
||||
|
||||
sale_audit = SaleAudit.record_audit_discount(sale_item.sale_id,sale.cashier_name, action_by,remark,"ITEMDISCOUNT" )
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
# Re-calc All Amount in Sale
|
||||
if overall_discount.to_f > 0
|
||||
@@ -97,24 +100,24 @@ class Origami::DiscountsController < BaseOrigamiController
|
||||
else
|
||||
remark = "Discount Overall Price [#{overall_discount}]| Receipt No #{sale.receipt_no} | Table- #{table.name} "
|
||||
end
|
||||
|
||||
|
||||
sale_audit = SaleAudit.record_audit_discount(sale.sale_id,sale.cashier_name, action_by,remark,"OVERALLDISCOUNT" )
|
||||
end
|
||||
sale.compute_by_sale_items(sale_id, sale.sale_items, overall_discount.to_f, nil,order_source)
|
||||
end
|
||||
sale.compute_by_sale_items(sale_id, sale.sale_items, overall_discount.to_f, nil,order_source)
|
||||
if !table.nil?
|
||||
result = {:status=> "Success", :table_id => table_id, :table_type => table.type }
|
||||
else
|
||||
result = {:status=> "Success" }
|
||||
end
|
||||
else
|
||||
else
|
||||
if !table.nil?
|
||||
result = {:status=> "Please, Check Again!", :table_id => table_id, :table_type => table.type }
|
||||
else
|
||||
result = {:status=> "Please, Check Again!" }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
render :json => result.to_json
|
||||
end
|
||||
|
||||
@@ -131,45 +134,45 @@ class Origami::DiscountsController < BaseOrigamiController
|
||||
else
|
||||
table_id = nil
|
||||
table = nil
|
||||
end
|
||||
|
||||
|
||||
if discount_items.length > 0
|
||||
end
|
||||
|
||||
|
||||
if discount_items.length > 0
|
||||
#destroy sale item for discount
|
||||
discount_items.each do |di|
|
||||
sale_item = SaleItem.find(di["id"])
|
||||
discount_items.each do |di|
|
||||
sale_item = SaleItem.find(di["id"])
|
||||
sale.total_amount = (sale.total_amount + sale_item.price.abs)
|
||||
|
||||
action_by = current_user.name
|
||||
if table.nil?
|
||||
remark = "Remove Item Discount Item Name ->#{sale_item.product_name}-Product Code ->#{sale_item.product_code} | Price [#{sale_item.price}] | Receipt No #{sale.receipt_no} | Table- No Table "
|
||||
else
|
||||
remark = "Remove Item Discount Item Name ->#{sale_item.product_name}-Product Code ->#{sale_item.product_code} | Price [#{sale_item.price}] | Receipt No #{sale.receipt_no} | Table- #{table.name} "
|
||||
remark = "Remove Item Discount Item Name ->#{sale_item.product_name}-Product Code ->#{sale_item.product_code} | Price [#{sale_item.price}] | Receipt No #{sale.receipt_no} | Table- #{table.name} "
|
||||
end
|
||||
sale_audit = SaleAudit.record_audit_discount(sale.sale_id,sale.cashier_name, action_by,remark,"REMOVEITEMDISCOUNT" )
|
||||
|
||||
sale_item.destroy
|
||||
end
|
||||
end
|
||||
|
||||
# sale.grand_total = (sale.total_amount - sale.total_discount) + sale.total_tax;
|
||||
sale_item.destroy
|
||||
end
|
||||
end
|
||||
|
||||
# sale.grand_total = (sale.total_amount - sale.total_discount) + sale.total_tax;
|
||||
# sale.save
|
||||
# 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_id, sale.sale_items, sale.total_discount, nil, order_source)
|
||||
if table.nil?
|
||||
result = {:status=> "Success"}
|
||||
else
|
||||
result = {:status=> "Success", :table_id => table_id, :table_type => table.type }
|
||||
end
|
||||
|
||||
else
|
||||
|
||||
else
|
||||
if table.nil?
|
||||
result = {:status=> "Please, Check Again!"}
|
||||
else
|
||||
result = {:status=> "Please, Check Again!", :table_id => table_id, :table_type => table.type }
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
render :json => result.to_json
|
||||
end
|
||||
@@ -180,29 +183,29 @@ class Origami::DiscountsController < BaseOrigamiController
|
||||
order_source = params[:type]
|
||||
|
||||
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
|
||||
table_id = sale.bookings[0].dining_facility_id
|
||||
table = DiningFacility.find(table_id)
|
||||
table_type = table.type
|
||||
table_type = table.type
|
||||
else
|
||||
table_id = nil
|
||||
table = nil
|
||||
table_type = nil
|
||||
end
|
||||
end
|
||||
|
||||
discount_items = []
|
||||
discount_items = []
|
||||
#destroy all discount sale item
|
||||
sale.sale_items.each do |si|
|
||||
if si.status == "Discount" && si.price < 0
|
||||
sale.total_amount = (sale.total_amount + si.price.abs)
|
||||
discount_items.push(si)
|
||||
sale.sale_items.each do |si|
|
||||
if si.status == "Discount" && si.price < 0
|
||||
sale.total_amount = (sale.total_amount + si.price.abs)
|
||||
discount_items.push(si)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# sale.total_discount = 0
|
||||
# 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
|
||||
|
||||
#destroy in sale.sale_items
|
||||
@@ -215,23 +218,23 @@ class Origami::DiscountsController < BaseOrigamiController
|
||||
remark = "Remove Discount Sale Id [#{sale.sale_id}]| Receipt No #{sale.receipt_no} | Table- #{table.name} "
|
||||
end
|
||||
sale_audit = SaleAudit.record_audit_discount(sale.sale_id,sale.cashier_name, action_by,remark,"REMOVEALLDISCOUNT" )
|
||||
|
||||
|
||||
# Re-calc All Amount in Sale
|
||||
sale.compute_by_sale_items(sale_id, sale.sale_items, 0, nil, order_source)
|
||||
if table.nil?
|
||||
result = {:status=> "Success"}
|
||||
else
|
||||
result = {:status=> "Success", :table_id => table_id, :dining => table.name, :table_type => table_type }
|
||||
result = {:status=> "Success", :table_id => table_id, :dining => table.name, :table_type => table_type }
|
||||
end
|
||||
|
||||
else
|
||||
|
||||
else
|
||||
if table.nil?
|
||||
result = {:status=> "Please, Check Again!"}
|
||||
else
|
||||
result = {:status=> "Please, Check Again!", :table_id => table_id, :dining => table.name, :table_type => table_type }
|
||||
result = {:status=> "Please, Check Again!", :table_id => table_id, :dining => table.name, :table_type => table_type }
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
render :json => result.to_json
|
||||
end
|
||||
@@ -251,7 +254,7 @@ class Origami::DiscountsController < BaseOrigamiController
|
||||
end
|
||||
# Check for Card Payment
|
||||
is_card_payment = SalePayment.get_sale_payments_by_card(sale.sale_payments)
|
||||
|
||||
|
||||
# if is_card != "true"
|
||||
account_types = Account.where("discount=?",true)
|
||||
table_id = sale.bookings[0].dining_facility_id
|
||||
@@ -267,9 +270,9 @@ class Origami::DiscountsController < BaseOrigamiController
|
||||
str={type:pc[:name],amount:pc[:price]}
|
||||
acc_prices.push(str)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
generic_customer_id = sale.customer.membership_id
|
||||
generic_customer_id = sale.customer.membership_id
|
||||
receipt_no = sale.receipt_no
|
||||
membership = MembershipSetting.find_by_membership_type("paypar_url")
|
||||
memberaction = MembershipAction.find_by_membership_type("member_discount")
|
||||
@@ -282,7 +285,7 @@ class Origami::DiscountsController < BaseOrigamiController
|
||||
# Check for items for Paypar Cloud
|
||||
if acc_prices.length > 0
|
||||
begin
|
||||
response = HTTParty.post(url,
|
||||
response = HTTParty.post(url,
|
||||
:body => { account_no: account_no,
|
||||
generic_customer_id:generic_customer_id ,
|
||||
campaign_type_id: campaign_type_id,
|
||||
@@ -307,7 +310,7 @@ class Origami::DiscountsController < BaseOrigamiController
|
||||
rescue SocketError
|
||||
response = {"status": false, "message": "Can't open membership server " }
|
||||
end
|
||||
else
|
||||
else
|
||||
response = {"status": false, "message": "You have no selected discount item" }
|
||||
end
|
||||
Rails.logger.debug "-------------- Member Discount Osaka ---------"
|
||||
@@ -325,7 +328,7 @@ class Origami::DiscountsController < BaseOrigamiController
|
||||
else
|
||||
result = {:status=> response["message"],:title=>"Alert", :table_id => table_id,:table_type => table_type }
|
||||
end
|
||||
|
||||
|
||||
render :json => result.to_json
|
||||
|
||||
# end #end Is Card Payment
|
||||
@@ -376,5 +379,5 @@ class Origami::DiscountsController < BaseOrigamiController
|
||||
|
||||
# redirect_to origami_path(sale_id)
|
||||
# end
|
||||
|
||||
|
||||
end
|
||||
|
||||
@@ -64,15 +64,9 @@ class Origami::PaymentsController < BaseOrigamiController
|
||||
customer = Customer.find(sale_data.customer_id)
|
||||
# rounding adjustment
|
||||
if shop_detail.is_rounding_adj
|
||||
a = sale_data.grand_total % 25 # Modulus
|
||||
b = sale_data.grand_total / 25 # Division
|
||||
#not calculate rounding if modulus is 0 and division is even
|
||||
#calculate rounding if modulus is zero or not zero and division are not even
|
||||
if (a != 0.0 && b%2 != 0.0) || (a==0.0 && b%2 !=0)
|
||||
new_total = Sale.get_rounding_adjustment(sale_data.grand_total)
|
||||
rounding_adj = new_total-sale_data.grand_total
|
||||
sale_data.update_attributes(grand_total: new_total,old_grand_total: sale_data.grand_total,rounding_adjustment:rounding_adj)
|
||||
end
|
||||
new_total = Sale.get_rounding_adjustment(sale_data.grand_total)
|
||||
rounding_adj = new_total - sale_data.grand_total
|
||||
sale_data.update_attributes(grand_total: new_total,old_grand_total: sale_data.grand_total,rounding_adjustment:rounding_adj) if rounding_adj > 0
|
||||
end
|
||||
#end rounding adjustment
|
||||
#record for sale audit
|
||||
@@ -151,15 +145,9 @@ class Origami::PaymentsController < BaseOrigamiController
|
||||
# rounding adjustment
|
||||
if !path.include? ("credit_payment")
|
||||
if shop_detail.is_rounding_adj
|
||||
a = saleObj.grand_total % 25 # Modulus
|
||||
b = saleObj.grand_total / 25 # Division
|
||||
#not calculate rounding if modulus is 0 and division is even
|
||||
#calculate rounding if modulus is zero or not zero and division are not even
|
||||
if (a != 0.0 && b%2 != 0.0) || (a==0.0 && b%2 !=0)
|
||||
new_total = Sale.get_rounding_adjustment(saleObj.grand_total)
|
||||
rounding_adj = new_total-saleObj.grand_total
|
||||
saleObj.update_attributes(grand_total: new_total,old_grand_total: saleObj.grand_total,rounding_adjustment:rounding_adj)
|
||||
end
|
||||
new_total = Sale.get_rounding_adjustment(saleObj.grand_total)
|
||||
rounding_adj = new_total - saleObj.grand_total
|
||||
saleObj.update_attributes(grand_total: new_total,old_grand_total: saleObj.grand_total,rounding_adjustment:rounding_adj) if rounding_adj > 0
|
||||
end
|
||||
end
|
||||
#end rounding adjustment
|
||||
|
||||
@@ -72,7 +72,7 @@ class Origami::SaleEditController < BaseOrigamiController
|
||||
saleitemObj.status = 'foc'
|
||||
saleitemObj.remark = remark
|
||||
saleitemObj.save
|
||||
@newsaleitem = SaleItem.new
|
||||
|
||||
@newsaleitem = saleitemObj.dup
|
||||
@newsaleitem.qty = saleitemObj.qty * -1
|
||||
@newsaleitem.unit_price = saleitemObj.unit_price * 1
|
||||
@@ -143,7 +143,7 @@ class Origami::SaleEditController < BaseOrigamiController
|
||||
sale_audit = SaleAudit.record_audit_for_edit(saleitemObj.sale_id,current_user.name, action_by,remark,"SALEITEMEDIT" )
|
||||
# saleitemObj.remark = 'edit'
|
||||
|
||||
unless saleitemObj.product_name.include? 'updated'
|
||||
unless saleitemObj.product_name.include? 'UPDATED'
|
||||
saleitemObj.product_name = saleitemObj.product_name + ' (UPDATED)'
|
||||
end
|
||||
|
||||
|
||||
@@ -11,37 +11,23 @@ class Promotion < ApplicationRecord
|
||||
PROMO_TYPE3 = "Net_price" # 1800 => 1000 => 1000
|
||||
PROMO_TYPE4 = "Percentage"
|
||||
|
||||
def is_promo_day
|
||||
promo_day.include? Date.today.wday.to_s
|
||||
end
|
||||
|
||||
def self.promo_activate(saleObj)
|
||||
array_same =[]
|
||||
current_day = Time.now.strftime("%Y-%m-%d")
|
||||
current_time = Time.now.strftime('%H:%M:%S')
|
||||
day = Date.today.wday
|
||||
promoList = is_between_promo_datetime(current_day,current_time)
|
||||
puts "promoList - " + promoList.size.to_s
|
||||
if promoList.size > 0
|
||||
itemList = combine_item(saleObj)
|
||||
itemList.each do|list|
|
||||
list.each do |l|
|
||||
array_same.push({
|
||||
item_instance_code: l.item_instance_code,
|
||||
order_id:l.order_id,
|
||||
qty:l.qty
|
||||
})
|
||||
|
||||
promoList.each do |promo|
|
||||
if promo.is_promo_day
|
||||
if item = saleObj.qty_of(promo.original_product)
|
||||
check_promo_type(promo, item, saleObj)
|
||||
end
|
||||
end
|
||||
end
|
||||
item_list =[]
|
||||
array_same.group_by do |same|
|
||||
same.values_at :item_instance_code
|
||||
end.map do |(item_instance_code), array_same|
|
||||
quantities = array_same.map { |p| p[:qty] }
|
||||
qty = quantities.all? ? quantities.reduce(:+) : nil
|
||||
item_list.push({ item_instance_code: item_instance_code, qty: qty })
|
||||
end
|
||||
Rails.logger.debug "-------promo_activate array_same-------"
|
||||
puts item_list.to_json
|
||||
is_promo_day(promoList,day, item_list, saleObj.sale_id)
|
||||
|
||||
end
|
||||
|
||||
def self.is_between_promo_datetime(current_day,current_time) #database is not local time
|
||||
@@ -49,45 +35,7 @@ class Promotion < ApplicationRecord
|
||||
return promoList
|
||||
end
|
||||
|
||||
def self.combine_item(saleObj)
|
||||
# order_id = saleObj.sale_orders[0][0].order_id
|
||||
# itemList = OrderItem.where("order_id = ?", order_id).group(:item_instance_code).sum(:qty)
|
||||
# array_same =[]
|
||||
itemList = []
|
||||
saleObj.sale_orders.each do |so|
|
||||
# itemList << OrderItem.where("order_id = ?",so.order_id).group(["item_instance_code", "order_id"]).sum(:qty)
|
||||
itemList << OrderItem.where("order_id = ?",so.order_id).select(:item_instance_code,:order_id,:qty)
|
||||
end
|
||||
|
||||
return itemList
|
||||
end
|
||||
|
||||
def self.is_promo_day(promoList, day, orderitemList, sale_id)
|
||||
puts "Today date - " + day.to_s
|
||||
promoList.each do |promo|
|
||||
dayresult = promo.promo_day.include?(day.to_s)
|
||||
if dayresult
|
||||
orderitemList.each do |item|
|
||||
find_promo_item(promo, item, sale_id)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def self.find_promo_item(promo, orderitem, sale_id)
|
||||
item_code = OrderItem.find_by_item_instance_code(orderitem[:item_instance_code]).item_code
|
||||
# orderitem.each do |odr_item|
|
||||
if promo.original_product.downcase.to_s == orderitem[:item_instance_code]
|
||||
if promo.min_qty.to_i > orderitem[:qty].to_i
|
||||
return false
|
||||
else
|
||||
check_promo_type(promo,orderitem, sale_id)
|
||||
end
|
||||
end
|
||||
# end
|
||||
end
|
||||
|
||||
def self.check_promo_type(promo, orderitem, sale_id)
|
||||
def self.check_promo_type(promo, orderitem, saleObj)
|
||||
promo.promotion_products.each do |promo_product|
|
||||
if promo_product.item_code.downcase == orderitem[:item_instance_code]
|
||||
same = true
|
||||
@@ -97,20 +45,20 @@ class Promotion < ApplicationRecord
|
||||
end
|
||||
# same, promo_product = check_giveaway_product(promo, orderitem[0][0])
|
||||
if promo.promo_type == Promotion::PROMO_TYPE1
|
||||
if same
|
||||
give_promotion_same_product(orderitem[:qty], promo.min_qty, promo_product.min_qty, orderitem, sale_id,promo_product.item_code)
|
||||
else
|
||||
give_promotion_second_product(orderitem[:qty], promo.min_qty, promo_product.item_code, orderitem, sale_id)
|
||||
if same
|
||||
give_promotion_same_product(orderitem[:qty], promo.min_qty, promo_product.min_qty, orderitem, saleObj, promo_product.item_code)
|
||||
else
|
||||
give_promotion_second_product(orderitem[:qty], promo.min_qty, promo_product.item_code, orderitem, saleObj)
|
||||
end
|
||||
|
||||
elsif promo.promo_type == Promotion::PROMO_TYPE2
|
||||
give_promotion_nett_off(same,promo_product,promo.min_qty, orderitem, sale_id)
|
||||
give_promotion_nett_off(same,promo_product,promo.min_qty, orderitem, saleObj)
|
||||
|
||||
elsif promo.promo_type == Promotion::PROMO_TYPE3
|
||||
give_promotion_nett_price(same,promo_product,promo.min_qty, orderitem, sale_id)
|
||||
give_promotion_nett_price(same,promo_product,promo.min_qty, orderitem, saleObj)
|
||||
|
||||
elsif promo.promo_type == Promotion::PROMO_TYPE4
|
||||
give_promotion_discount(same,promo_product,promo.min_qty, orderitem, sale_id)
|
||||
give_promotion_discount(same,promo_product,promo.min_qty, orderitem, saleObj)
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -128,106 +76,66 @@ class Promotion < ApplicationRecord
|
||||
# end
|
||||
end
|
||||
|
||||
def self.give_promotion_same_product(qty, promoqty, foc_min_qty, orderitem, sale_id,promo_product)
|
||||
item =''
|
||||
puts " Order qty: " + qty.to_s + " / promoqty: " + promoqty.to_s + " / giveaway: " + foc_min_qty.to_s
|
||||
multiple = qty.to_i / promoqty.to_i # loop count
|
||||
charge_qty = 0
|
||||
foc_qty = 0
|
||||
if multiple > 0
|
||||
multiple.times.each do |key|
|
||||
if qty > promoqty
|
||||
charge_qty += promoqty
|
||||
different = qty - promoqty
|
||||
qty = different
|
||||
if different == 0
|
||||
foc_qty += foc_min_qty
|
||||
else
|
||||
foc_qty += foc_min_qty
|
||||
qty = qty - foc_min_qty
|
||||
end
|
||||
def self.give_promotion_same_product(qty, promoqty, foc_min_qty, orderitem, saleObj,promo_product)
|
||||
puts " Order qty: " + qty.to_s + " / promoqty: " + promoqty.to_s + " / giveaway: " + foc_min_qty.to_s
|
||||
multiple = qty.to_i / promoqty.to_i # loop count
|
||||
charge_qty = 0
|
||||
foc_qty = 0
|
||||
if multiple > 0
|
||||
multiple.times.each do |key|
|
||||
if qty > promoqty
|
||||
charge_qty += promoqty
|
||||
different = qty - promoqty
|
||||
qty = different
|
||||
if different == 0
|
||||
foc_qty += foc_min_qty
|
||||
else
|
||||
charge_qty += qty
|
||||
foc_qty += foc_min_qty
|
||||
qty = qty - foc_min_qty
|
||||
end
|
||||
else
|
||||
charge_qty += qty
|
||||
end
|
||||
if multiple == foc_qty
|
||||
charge_qty += qty
|
||||
end
|
||||
else
|
||||
end
|
||||
if multiple == foc_qty
|
||||
charge_qty += qty
|
||||
end
|
||||
sale_order =SaleOrder.where("sale_id=?",sale_id)
|
||||
price =0
|
||||
source =''
|
||||
sale_order.each do|order|
|
||||
source = Order.find(order.order_id).source
|
||||
end
|
||||
else
|
||||
charge_qty += qty
|
||||
end
|
||||
|
||||
item = OrderItem.where("item_instance_code = ?",orderitem[:item_instance_code]).order("order_items_id DESC").first
|
||||
item ={
|
||||
item_code:item.item_code,
|
||||
item_instance_code:item.item_instance_code,
|
||||
item_name:item.item_name,
|
||||
alt_name:item.alt_name,
|
||||
account_id:item.account_id,
|
||||
price:item.price
|
||||
}
|
||||
if promo_product.downcase != item[:item_instance_code]
|
||||
price = 0
|
||||
source = saleObj.orders.first.source
|
||||
item = saleObj.order_items.where(item_instance_code: promo_product).first
|
||||
|
||||
sale_order.each do|order|
|
||||
source = Order.find(order.order_id).source
|
||||
end
|
||||
item = OrderItem.where("item_code = ?",promo_product).order("order_items_id DESC").first
|
||||
item ={
|
||||
item_code:item.item_code,
|
||||
item_instance_code:item.item_instance_code,
|
||||
item_name:item.item_name,
|
||||
alt_name:item.alt_name,
|
||||
account_id:item.account_id,
|
||||
price:item.price
|
||||
}
|
||||
end
|
||||
if !item.nil?
|
||||
update_existing_item(foc_qty, item, sale_id, "promotion", item[:price],source)
|
||||
end
|
||||
if !item.nil?
|
||||
update_existing_item(foc_qty, item, sale_id, "promotion", item[:price], source)
|
||||
end
|
||||
end
|
||||
# AA - 10 # 3 # BB # orderList, #S34345
|
||||
def self.give_promotion_second_product(orderitem_count, foc_min_qty, promo_product, orderitem, sale_id)
|
||||
source =''
|
||||
item =''
|
||||
def self.give_promotion_second_product(orderitem_count, foc_min_qty, promo_product, orderitem, saleObj)
|
||||
puts "..... orderitem_count: " + orderitem_count.to_s + " / foc_min_qty: " + foc_min_qty.to_s + " /promo_product: " + promo_product + " orderitem: " + orderitem.to_s
|
||||
|
||||
promotion_qty = orderitem_count.to_i / foc_min_qty.to_i # get foc item qty
|
||||
foc_qty = find_second_item_qty(sale_id, promo_product)
|
||||
foc_qty = saleObj.qty_of(promo_product).qty rescue 0
|
||||
if (foc_qty < promotion_qty)
|
||||
promotion_qty = foc_qty
|
||||
end
|
||||
# item = OrderItem.find_by_item_instance_code(promo_product)
|
||||
sale_order =SaleOrder.where("sale_id=?",sale_id)
|
||||
price =0
|
||||
sale_order.each do|order|
|
||||
source = Order.find(order.order_id).source
|
||||
end
|
||||
item = OrderItem.where("item_instance_code = ?",promo_product).order("order_items_id DESC").first
|
||||
item ={
|
||||
item_code:item.item_code,
|
||||
item_instance_code:item.item_instance_code,
|
||||
item_name:item.item_name,
|
||||
alt_name:item.alt_name,
|
||||
account_id:item.account_id,
|
||||
price:item.price
|
||||
}
|
||||
# item = OrderItem.where("item_instance_code = '#{promo_product}' and order_id = '#{orderitem[0][1]}'").first
|
||||
|
||||
price = 0
|
||||
source = saleObj.orders.first.source
|
||||
item = saleObj.order_items.where(item_instance_code: promo_product).first
|
||||
|
||||
if !item.nil?
|
||||
# source = Order.find(item.order_id).source
|
||||
update_existing_item(promotion_qty, item, sale_id, "promotion", item[:price],source)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
def self.update_existing_item(qty, item, sale_id, type, item_price,source)
|
||||
if qty >0
|
||||
def self.update_existing_item(qty, item, saleObj, type, item_price,source)
|
||||
if qty > 0
|
||||
menu_category = MenuCategory.get_menu_category(item[:item_code]) #get menu category for menu items
|
||||
|
||||
|
||||
sale_item = SaleItem.new
|
||||
if !menu_category.nil?
|
||||
sale_item.menu_category_code = menu_category.code
|
||||
@@ -247,216 +155,84 @@ class Promotion < ApplicationRecord
|
||||
sale_item.price = qty * item_price * (-1)
|
||||
|
||||
sale_item.is_taxable = 1
|
||||
sale_item.sale_id = sale_id
|
||||
sale_item.sale = saleObj
|
||||
sale_item.save
|
||||
sale = Sale.find(sale_id)
|
||||
sale.compute_by_sale_items(sale.id, sale.sale_items, sale.total_discount,nil,source)
|
||||
|
||||
saleObj.compute_by_sale_items(saleObj.id, saleObj.sale_items, saleObj.total_discount,nil,source)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
def self.give_promotion_nett_off(same, promo_product, foc_min_qty, orderitem, sale_id)
|
||||
item =''
|
||||
source =''
|
||||
def self.give_promotion_nett_off(same, promo_product, foc_min_qty, orderitem, saleObj)
|
||||
puts " same: " + same.to_s + " promo_product: " + promo_product.item_code.to_s + " foc_min_qty: " + foc_min_qty.to_s + " orderitem: " + orderitem.to_s
|
||||
sale_order =SaleOrder.where("sale_id=?",sale_id)
|
||||
if same
|
||||
foc_qty = orderitem[:qty].to_i / foc_min_qty
|
||||
# item = OrderItem.find_by_item_instance_code(orderitem[0][0])
|
||||
|
||||
price =0
|
||||
sale_order.each do|order|
|
||||
source = Order.find(order.order_id).source
|
||||
end
|
||||
item = OrderItem.where("item_instance_code = ?",orderitem[:item_instance_code]).order("order_items_id DESC").first
|
||||
item ={
|
||||
item_code:item.item_code,
|
||||
item_instance_code:item.item_instance_code,
|
||||
item_name:item.item_name,
|
||||
alt_name:item.alt_name,
|
||||
account_id:item.account_id,
|
||||
price:item.price
|
||||
}
|
||||
# item = OrderItem.where("item_instance_code = '#{orderitem[0][0]}' and order_id = '#{orderitem[0][1]}'").first
|
||||
if !item.nil?
|
||||
# source = Order.find(item.order_id).source
|
||||
update_existing_item(foc_qty, item, sale_id, "promotion nett off", promo_product.net_off,source)
|
||||
end
|
||||
|
||||
else
|
||||
foc_qty = orderitem[:qty].to_i / foc_min_qty
|
||||
# foc_qty = find_second_item_qty(sale_id, promo_product.item_code)
|
||||
# item = OrderItem.find_by_item_instance_code(promo_product.item_code)
|
||||
# item = OrderItem.where("item_instance_code = '#{promo_product.item_code}' and order_id = '#{orderitem[0][1]}'").first
|
||||
sale_order.each do|order|
|
||||
source = Order.find(order.order_id).source
|
||||
end
|
||||
item = OrderItem.where("item_instance_code = ?",promo_product.item_code).order("order_items_id DESC").first
|
||||
item ={
|
||||
item_code:item.item_code,
|
||||
item_instance_code:item.item_instance_code,
|
||||
item_name:item.item_name,
|
||||
alt_name:item.alt_name,
|
||||
account_id:item.account_id,
|
||||
price:item.price
|
||||
}
|
||||
if !item.nil?
|
||||
# source = Order.find(item.order_id).source
|
||||
update_existing_item(foc_qty, item, sale_id, "promotion nett off", promo_product.net_off,source)
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
def self.give_promotion_nett_price(same, promo_product, foc_min_qty, orderitem, sale_id)
|
||||
puts " same: " + same.to_s + " promo_product: " + promo_product.item_code.to_s + " foc_min_qty: " + foc_min_qty.to_s + " orderitem: " + orderitem.to_s
|
||||
sale_order =SaleOrder.where("sale_id=?",sale_id)
|
||||
source =''
|
||||
item =''
|
||||
if same
|
||||
foc_qty = orderitem[:qty].to_i / foc_min_qty
|
||||
# item = OrderItem.find_by_item_instance_code(orderitem[0][0]) # need to specify with menu item instance
|
||||
# item = OrderItem.where("item_instance_code = '#{orderitem[0][0]}' and order_id = '#{orderitem[0][1]}'").first
|
||||
sale_order.each do|order|
|
||||
source = Order.find(order.order_id).source
|
||||
end
|
||||
item = OrderItem.where("item_instance_code = ?",orderitem[:item_instance_code]).order("order_items_id DESC").first
|
||||
item ={
|
||||
item_code:item.item_code,
|
||||
item_instance_code:item.item_instance_code,
|
||||
item_name:item.item_name,
|
||||
alt_name:item.alt_name,
|
||||
account_id:item.account_id,
|
||||
price:item.price
|
||||
}
|
||||
if !item.nil?
|
||||
price = item[:price].to_i - promo_product.net_price.to_i
|
||||
# source = Order.find(item.order_id).source
|
||||
update_existing_item(foc_qty, item, sale_id, "promotion nett price", price,source)
|
||||
end
|
||||
|
||||
else
|
||||
order_qty = find_second_item_qty(sale_id, promo_product.item_code)# need to check for qty
|
||||
foc_qty = orderitem[:qty].to_i / foc_min_qty
|
||||
if !same
|
||||
order_qty = saleObj.qty_of(promo_product.item_code).qty rescue 0
|
||||
foc_qty = orderitem[:qty].to_i / foc_min_qty
|
||||
|
||||
if foc_qty > order_qty
|
||||
foc_qty = order_qty
|
||||
end
|
||||
# item = OrderItem.find_by_item_instance_code(promo_product.item_code)
|
||||
# item = OrderItem.where("item_instance_code = '#{promo_product.item_code}' and order_id = '#{orderitem[0][1]}'").first
|
||||
sale_order.each do|order|
|
||||
source = Order.find(order.order_id).source
|
||||
end
|
||||
item = OrderItem.where("item_instance_code",promo_product.item_code).order("order_items_id DESC").first
|
||||
item ={
|
||||
item_code:item.item_code,
|
||||
item_instance_code:item.item_instance_code,
|
||||
item_name:item.item_name,
|
||||
alt_name:item.alt_name,
|
||||
account_id:item.account_id,
|
||||
price:item.price
|
||||
}
|
||||
end
|
||||
|
||||
if !item.nil?
|
||||
price = item[:price].to_i - promo_product.net_price.to_i
|
||||
# source = Order.find(item.order_id).source
|
||||
update_existing_item(foc_qty, item, sale_id, "promotion nett price", price,source)
|
||||
end
|
||||
|
||||
source = saleObj.orders.first.source
|
||||
item = saleObj.order_items.where(item_instance_code: promo_product.item_code).first
|
||||
|
||||
if !item.nil?
|
||||
update_existing_item(foc_qty, item, sale_id, "promotion nett off", promo_product.net_off,source)
|
||||
end
|
||||
end
|
||||
|
||||
def self.give_promotion_discount(same, promo_product, foc_min_qty, orderitem, sale_id)
|
||||
def self.give_promotion_nett_price(same, promo_product, foc_min_qty, orderitem, saleObj)
|
||||
puts " same: " + same.to_s + " promo_product: " + promo_product.item_code.to_s + " foc_min_qty: " + foc_min_qty.to_s + " orderitem: " + orderitem.to_s
|
||||
sale_order =SaleOrder.where("sale_id=?",sale_id)
|
||||
source =''
|
||||
item =''
|
||||
if same
|
||||
|
||||
foc_qty = orderitem[:qty].to_i / foc_min_qty
|
||||
if !same
|
||||
order_qty = saleObj.qty_of(promo_product.item_code).qty rescue 0
|
||||
foc_qty = orderitem[:qty].to_i / foc_min_qty
|
||||
# item = OrderItem.find_by_item_instance_code(orderitem[0][0])
|
||||
# item = OrderItem.where("item_instance_code = '#{orderitem[0][0]}' and order_id = '#{orderitem[0][1]}'").first
|
||||
sale_order.each do|order|
|
||||
source = Order.find(order.order_id).source
|
||||
end
|
||||
item = OrderItem.where("item_instance_code = ?",orderitem[:item_instance_code]).order("order_items_id DESC").first
|
||||
item ={
|
||||
item_code:item.item_code,
|
||||
item_instance_code:item.item_instance_code,
|
||||
item_name:item.item_name,
|
||||
alt_name:item.alt_name,
|
||||
account_id:item.account_id,
|
||||
price:item.price
|
||||
}
|
||||
# total = orderitem[1].to_i * item.price
|
||||
if !item.nil?
|
||||
total = item[:price]
|
||||
price = calculate_discount(total, promo_product.percentage)
|
||||
# source = Order.find(item.order_id).source
|
||||
update_existing_item(foc_qty, item, sale_id, "promotion discount", price,source)
|
||||
end
|
||||
|
||||
else
|
||||
order_qty = find_second_item_qty(sale_id, promo_product.item_code) #need to check
|
||||
foc_qty = orderitem[:qty].to_i / foc_min_qty
|
||||
# give total qty is 1
|
||||
#foc_qty = (foc_qty - foc_qty) + 1
|
||||
|
||||
if foc_qty > order_qty
|
||||
foc_qty = order_qty
|
||||
end
|
||||
# item = OrderItem.find_by_item_instance_code(promo_product.item_code)
|
||||
# item = OrderItem.where("item_instance_code = '#{promo_product.item_code}' and order_id = '#{orderitem[0][1]}'").first
|
||||
sale_order.each do|order|
|
||||
source = Order.find(order.order_id).source
|
||||
end
|
||||
item = OrderItem.where("item_instance_code = ?",promo_product.item_code).order("order_items_id DESC").first
|
||||
item ={
|
||||
item_code:item.item_code,
|
||||
item_instance_code:item.item_instance_code,
|
||||
item_name:item.item_name,
|
||||
alt_name:item.alt_name,
|
||||
account_id:item.account_id,
|
||||
price:item.price
|
||||
}
|
||||
# total = item.price * foc_qty
|
||||
if !item.nil?
|
||||
total = item[:price]
|
||||
price = calculate_discount(total, promo_product.percentage)
|
||||
# source = Order.find(item.order_id).source
|
||||
update_existing_item(foc_qty, item, sale_id, "promotion discount", price,source)
|
||||
end
|
||||
end
|
||||
|
||||
source = saleObj.orders.first.source
|
||||
item = saleObj.order_items.where(item_instance_code: promo_product.item_code).first
|
||||
|
||||
if !item.nil?
|
||||
price = item[:price].to_i - promo_product.net_price.to_i
|
||||
update_existing_item(foc_qty, item, saleObj, "promotion nett price", price,source)
|
||||
end
|
||||
end
|
||||
|
||||
def self.find_second_item_qty(sale_id, promo_item)
|
||||
array_same =[]
|
||||
saleObj = Sale.find_by_sale_id(sale_id)
|
||||
itemList = combine_item(saleObj)
|
||||
itemList.each do|list|
|
||||
list.each do |l|
|
||||
array_same.push({
|
||||
item_instance_code: l.item_instance_code,
|
||||
order_id:l.order_id,
|
||||
qty:l.qty
|
||||
})
|
||||
def self.give_promotion_discount(same, promo_product, foc_min_qty, orderitem, saleObj)
|
||||
puts " same: " + same.to_s + " promo_product: " + promo_product.item_code.to_s + " foc_min_qty: " + foc_min_qty.to_s + " orderitem: " + orderitem.to_s
|
||||
|
||||
foc_qty = orderitem[:qty].to_i / foc_min_qty
|
||||
if !same
|
||||
order_qty = saleObj.qty_of(promo_product.item_code).qty rescue 0
|
||||
foc_qty = orderitem[:qty].to_i / foc_min_qty
|
||||
|
||||
if foc_qty > order_qty
|
||||
foc_qty = order_qty
|
||||
end
|
||||
end
|
||||
item_list =[]
|
||||
array_same.group_by do |same|
|
||||
same.values_at :item_instance_code
|
||||
end.map do |(item_instance_code), array_same|
|
||||
quantities = array_same.map { |p| p[:qty] }
|
||||
qty = quantities.all? ? quantities.reduce(:+) : nil
|
||||
item_list.push({ item_instance_code: item_instance_code, qty: qty })
|
||||
end
|
||||
item_list.each do |item|
|
||||
if item[:item_instance_code] == promo_item.downcase
|
||||
return item[:qty].to_i
|
||||
end
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
def self.calculate_discount(total, percentage)
|
||||
return (total.to_i * percentage.to_i) / 100
|
||||
end
|
||||
source = saleObj.orders.first.source
|
||||
item = saleObj.order_items.where(item_instance_code: promo_product.item_code).first
|
||||
puts saleObj
|
||||
puts item
|
||||
# total = orderitem[1].to_i * item.price
|
||||
if item
|
||||
total = item[:price]
|
||||
price = calculate_discount(total, promo_product.percentage)
|
||||
# source = Order.find(item.order_id).source
|
||||
update_existing_item(foc_qty, item, saleObj, "promotion discount", price,source)
|
||||
end
|
||||
end
|
||||
|
||||
def self.calculate_discount(total, percentage)
|
||||
return (total * percentage) / 100
|
||||
end
|
||||
end
|
||||
|
||||
@@ -14,14 +14,20 @@ class Sale < ApplicationRecord
|
||||
has_many :sale_payments
|
||||
has_many :sale_orders
|
||||
has_many :orders, through: :sale_orders
|
||||
has_many :order_items, through: :sale_orders
|
||||
has_many :bookings
|
||||
has_many :product_commissions
|
||||
|
||||
before_validation :round_to_precision
|
||||
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}'") }
|
||||
|
||||
def qty_of(item_instance_code)
|
||||
order_items.select(:order_items_id, :item_instance_code, 'SUM(qty) as qty').where(item_instance_code: item_instance_code).group(:item_instance_code).first
|
||||
end
|
||||
|
||||
REPORT_TYPE = {
|
||||
"daily" => 0,
|
||||
"monthly" => 1,
|
||||
@@ -418,11 +424,11 @@ class Sale < ApplicationRecord
|
||||
apply_tax(total_taxable, order_source, tax_type)
|
||||
|
||||
self.total_amount = subtotal_price
|
||||
self.total_discount = total_discount
|
||||
# self.total_discount = total_discount
|
||||
self.grand_total = (self.total_amount - self.total_discount) + self.total_tax
|
||||
self.grand_total_round
|
||||
# self.grand_total_round
|
||||
#compute rounding adjustment
|
||||
adjust_rounding
|
||||
# adjust_rounding
|
||||
|
||||
self.save!
|
||||
|
||||
@@ -455,7 +461,7 @@ class Sale < ApplicationRecord
|
||||
sale.grand_total = 0
|
||||
else
|
||||
sale.grand_total = (sale.total_amount - sale.total_discount) + sale.total_tax
|
||||
sale.grand_total_round
|
||||
# sale.grand_total_round
|
||||
end
|
||||
|
||||
if discount_type == "member_discount"
|
||||
@@ -463,7 +469,6 @@ class Sale < ApplicationRecord
|
||||
end
|
||||
#compute rounding adjustment
|
||||
# adjust_rounding
|
||||
sale.rounding_adjustment = compute_adjust_rounding(sale.grand_total)
|
||||
|
||||
sale.save!
|
||||
end
|
||||
@@ -491,11 +496,11 @@ class Sale < ApplicationRecord
|
||||
|
||||
apply_tax(total_taxable, order_source)
|
||||
self.total_amount = subtotal_price
|
||||
self.total_discount = total_discount
|
||||
# self.total_discount = total_discount
|
||||
self.grand_total = (self.total_amount - self.total_discount) + self.total_tax
|
||||
self.grand_total_round
|
||||
# self.grand_total_round
|
||||
#compute rounding adjustment
|
||||
adjust_rounding
|
||||
# adjust_rounding
|
||||
|
||||
self.save!
|
||||
end
|
||||
@@ -509,89 +514,45 @@ class Sale < ApplicationRecord
|
||||
# #delete existing and create new
|
||||
# existing_tax.delete
|
||||
# end
|
||||
taxes = SaleTax.where("sale_id='#{sale.sale_id}'").pluck(:sale_tax_id)
|
||||
SaleTax.where("sale_tax_id IN (?)", taxes).destroy_all
|
||||
taxes = SaleTax.where("sale_id='#{self.sale_id}'").destroy_all
|
||||
|
||||
total_tax_amount = 0
|
||||
tax_incl_exec = "exclusive"
|
||||
#tax_profile - list by order_by
|
||||
# tax_profiles = TaxProfile.all.order("order_by asc")
|
||||
# customer = Customer.find(sale.customer_id)
|
||||
arr_tax = []
|
||||
arr_tax = unique_tax_profiles(order_source, self.customer_id)
|
||||
|
||||
if !arr_tax.empty?
|
||||
if tax_type.nil?
|
||||
tax_profiles = TaxProfile.where(:id => arr_tax)
|
||||
else
|
||||
tax_profiles = TaxProfile.where("group_type=?",order_source)
|
||||
end
|
||||
else
|
||||
tax_profiles = TaxProfile.where("group_type=?",order_source)
|
||||
end
|
||||
|
||||
# #Creat new tax records
|
||||
if order_source.to_s == "emenu"
|
||||
order_source = "cashier"
|
||||
end
|
||||
|
||||
tax_profiles = unique_tax_profiles(order_source, self.customer_id)
|
||||
|
||||
# #Creat new tax records
|
||||
if sale.payment_status != 'foc'
|
||||
tax_profiles.each do |tax|
|
||||
if tax.group_type.to_s == order_source.to_s
|
||||
if tax_type
|
||||
if tax_type.to_s == tax.name.to_s || tax_type == 'all'
|
||||
sale_tax = SaleTax.new(:sale => sale)
|
||||
sale_tax.tax_name = tax.name
|
||||
sale_tax.tax_rate = tax.rate
|
||||
sale_tax = SaleTax.new(:sale => sale)
|
||||
sale_tax.tax_name = tax.name
|
||||
sale_tax.tax_rate = tax.rate
|
||||
|
||||
# substract , to give after discount
|
||||
total_tax = total_taxable - total_discount
|
||||
#include or execulive
|
||||
if tax.inclusive
|
||||
tax_incl_exec = "inclusive"
|
||||
rate = tax.rate
|
||||
divided_value = (100 + rate)/rate
|
||||
sale_tax.tax_payable_amount = total_tax / divided_value
|
||||
else
|
||||
sale_tax.tax_payable_amount = total_tax * tax.rate / 100
|
||||
total_tax_amount = total_tax_amount + sale_tax.tax_payable_amount
|
||||
end
|
||||
#new taxable amount is standard rule for step by step
|
||||
if shop.calc_tax_order
|
||||
total_taxable = total_taxable + sale_tax.tax_payable_amount
|
||||
end
|
||||
sale_tax.inclusive = tax.inclusive
|
||||
sale_tax.save
|
||||
end
|
||||
else
|
||||
# customer.tax_profiles.each do |cus_tax|
|
||||
# if cus_tax.to_i == tax.id
|
||||
sale_tax = SaleTax.new(:sale => sale)
|
||||
sale_tax.tax_name = tax.name
|
||||
sale_tax.tax_rate = tax.rate
|
||||
|
||||
# substract , to give after discount
|
||||
total_tax = total_taxable - total_discount
|
||||
#include or execulive
|
||||
if tax.inclusive
|
||||
tax_incl_exec = "inclusive"
|
||||
rate = tax.rate
|
||||
divided_value = (100 + rate)/rate
|
||||
sale_tax.tax_payable_amount = total_tax / divided_value
|
||||
else
|
||||
sale_tax.tax_payable_amount = total_tax * tax.rate / 100
|
||||
total_tax_amount = total_tax_amount + sale_tax.tax_payable_amount
|
||||
end
|
||||
#new taxable amount is standard rule for step by step
|
||||
if shop.calc_tax_order
|
||||
total_taxable = total_taxable + sale_tax.tax_payable_amount
|
||||
end
|
||||
sale_tax.inclusive = tax.inclusive
|
||||
sale_tax.save
|
||||
# end
|
||||
# end
|
||||
end
|
||||
# substract , to give after discount
|
||||
total_tax = total_taxable - total_discount
|
||||
#include or execulive
|
||||
if tax.inclusive
|
||||
tax_incl_exec = "inclusive"
|
||||
rate = tax.rate
|
||||
divided_value = (100 + rate)/rate
|
||||
sale_tax.tax_payable_amount = total_tax / divided_value
|
||||
else
|
||||
sale_tax.tax_payable_amount = total_tax * tax.rate / 100
|
||||
total_tax_amount = total_tax_amount + sale_tax.tax_payable_amount
|
||||
end
|
||||
#new taxable amount is standard rule for step by step
|
||||
if shop.calc_tax_order
|
||||
total_taxable = total_taxable + sale_tax.tax_payable_amount
|
||||
end
|
||||
sale_tax.inclusive = tax.inclusive
|
||||
sale_tax.save
|
||||
end
|
||||
end
|
||||
sale.tax_type = tax_incl_exec
|
||||
@@ -608,8 +569,7 @@ class Sale < ApplicationRecord
|
||||
# existing_tax.delete
|
||||
# end
|
||||
|
||||
taxes = SaleTax.where("sale_id='#{self.sale_id}'").pluck(:sale_tax_id)
|
||||
SaleTax.where("sale_tax_id IN (?)", taxes).destroy_all
|
||||
taxes = SaleTax.where("sale_id='#{self.sale_id}'").destroy_all
|
||||
|
||||
total_tax_amount = 0
|
||||
tax_incl_exec = "exclusive"
|
||||
@@ -622,77 +582,34 @@ class Sale < ApplicationRecord
|
||||
# tax_data = TaxProfile.unscoped.where("group_type=?",order_source).pluck(:id)
|
||||
# customer = Customer.find(self.customer_id).tax_profiles
|
||||
|
||||
arr_tax = []
|
||||
arr_tax = unique_tax_profiles(order_source, self.customer_id)
|
||||
tax_profiles = unique_tax_profiles(order_source, self.customer_id)
|
||||
|
||||
if !arr_tax.empty?
|
||||
if tax_type.nil?
|
||||
tax_profiles = TaxProfile.where(:id => arr_tax)
|
||||
else
|
||||
tax_profiles = TaxProfile.where("group_type=?",order_source)
|
||||
end
|
||||
else
|
||||
tax_profiles = TaxProfile.where("group_type=?",order_source)
|
||||
end
|
||||
#Create new tax records
|
||||
tax_profiles.each do |tax|
|
||||
if tax.group_type.to_s == order_source.to_s
|
||||
if tax_type
|
||||
if tax_type.to_s == tax.name.to_s || tax_type == 'all'
|
||||
sale_tax = SaleTax.new(:sale => self)
|
||||
sale_tax.tax_name = tax.name
|
||||
sale_tax.tax_rate = tax.rate
|
||||
sale_tax = SaleTax.new(:sale => self)
|
||||
sale_tax.tax_name = tax.name
|
||||
sale_tax.tax_rate = tax.rate
|
||||
|
||||
# substract , to give after discount
|
||||
total_tax = total_taxable - total_discount
|
||||
#include or execulive
|
||||
if tax.inclusive
|
||||
tax_incl_exec = "inclusive"
|
||||
rate = tax.rate
|
||||
divided_value = (100 + rate)/rate
|
||||
sale_tax.tax_payable_amount = total_tax / divided_value
|
||||
else
|
||||
sale_tax.tax_payable_amount = total_tax * tax.rate / 100
|
||||
total_tax_amount = total_tax_amount + sale_tax.tax_payable_amount
|
||||
end
|
||||
#new taxable amount is standard rule for step by step
|
||||
if shop.calc_tax_order
|
||||
total_taxable = total_taxable + sale_tax.tax_payable_amount
|
||||
end
|
||||
sale_tax.inclusive = tax.inclusive
|
||||
sale_tax.save
|
||||
end
|
||||
else
|
||||
# customer.tax_profiles.each do |cus_tax|
|
||||
# if cus_tax.to_i == tax.id
|
||||
sale_tax = SaleTax.new(:sale => self)
|
||||
sale_tax.tax_name = tax.name
|
||||
sale_tax.tax_rate = tax.rate
|
||||
|
||||
# substract , to give after discount
|
||||
total_tax = total_taxable - self.total_discount
|
||||
#include or execulive
|
||||
if tax.inclusive
|
||||
tax_incl_exec = "inclusive"
|
||||
rate = tax.rate
|
||||
divided_value = (100 + rate)/rate
|
||||
sale_tax.tax_payable_amount = total_tax / divided_value
|
||||
else
|
||||
sale_tax.tax_payable_amount = total_tax * tax.rate / 100
|
||||
total_tax_amount = total_tax_amount + sale_tax.tax_payable_amount
|
||||
end
|
||||
|
||||
#new taxable amount is standard rule for step by step
|
||||
if shop.calc_tax_order
|
||||
total_taxable = total_taxable + sale_tax.tax_payable_amount
|
||||
end
|
||||
|
||||
sale_tax.inclusive = tax.inclusive
|
||||
sale_tax.save
|
||||
# end
|
||||
# end
|
||||
end
|
||||
# substract , to give after discount
|
||||
total_tax = total_taxable - self.total_discount
|
||||
#include or execulive
|
||||
if tax.inclusive
|
||||
tax_incl_exec = "inclusive"
|
||||
rate = tax.rate
|
||||
divided_value = (100 + rate)/rate
|
||||
sale_tax.tax_payable_amount = total_tax / divided_value
|
||||
else
|
||||
sale_tax.tax_payable_amount = total_tax * tax.rate / 100
|
||||
total_tax_amount = total_tax_amount + sale_tax.tax_payable_amount
|
||||
end
|
||||
|
||||
#new taxable amount is standard rule for step by step
|
||||
if shop.calc_tax_order
|
||||
total_taxable = total_taxable + sale_tax.tax_payable_amount
|
||||
end
|
||||
|
||||
sale_tax.inclusive = tax.inclusive
|
||||
sale_tax.save
|
||||
end
|
||||
self.tax_type = tax_incl_exec
|
||||
self.total_tax = total_tax_amount
|
||||
@@ -727,42 +644,16 @@ class Sale < ApplicationRecord
|
||||
shop_details = Shop.first
|
||||
# rounding adjustment
|
||||
if shop_details.is_rounding_adj
|
||||
a = self.grand_total % 25 # Modulus
|
||||
b = self.grand_total / 25 # Division
|
||||
#not calculate rounding if modulus is 0 and division is even
|
||||
#calculate rounding if modulus is zero or not zero and division are not even
|
||||
if (a != 0.0 && b%2 != 0.0) || (a==0.0 && b%2 !=0)
|
||||
new_total = Sale.get_rounding_adjustment(self.grand_total)
|
||||
self.rounding_adjustment = new_total - self.grand_total
|
||||
else
|
||||
self.rounding_adjustment = 0.00
|
||||
end
|
||||
new_total = Sale.get_rounding_adjustment(self.grand_total)
|
||||
self.rounding_adjustment = new_total - self.grand_total
|
||||
self.old_grand_total = self.grand_total
|
||||
self.grand_total = new_total
|
||||
else
|
||||
self.rounding_adjustment = 0.00
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
def compute_adjust_rounding(grand_total)
|
||||
shop_details = Shop.first
|
||||
# rounding adjustment
|
||||
if shop_details.is_rounding_adj
|
||||
a = grand_total % 25 # Modulus
|
||||
b = grand_total / 25 # Division
|
||||
#not calculate rounding if modulus is 0 and division is even
|
||||
#calculate rounding if modulus is zero or not zero and division are not even
|
||||
if (a != 0.0 && b%2 != 0.0) || (a==0.0 && b%2 !=0)
|
||||
new_total = Sale.get_rounding_adjustment(grand_total)
|
||||
rounding_adjustment = new_total - grand_total
|
||||
else
|
||||
rounding_adjustment = 0.00
|
||||
end
|
||||
else
|
||||
rounding_adjustment = 0.00
|
||||
end
|
||||
return rounding_adjustment
|
||||
end
|
||||
|
||||
#Generate new Receipt No when it is not assigned
|
||||
def generate_receipt_no
|
||||
#shop_code and client_code
|
||||
@@ -857,36 +748,16 @@ class Sale < ApplicationRecord
|
||||
# if get_rounded_amt == true
|
||||
value = 0
|
||||
|
||||
num = num.to_f.round
|
||||
get_last_no = num.to_s.last(2).to_f
|
||||
if get_last_no.between?(0,25)
|
||||
## down to 0
|
||||
num -= get_last_no
|
||||
else
|
||||
if get_last_no.between?(26,50)
|
||||
## up to 50
|
||||
value = 50 - get_last_no.to_f
|
||||
num += value
|
||||
puts 'up to 50'
|
||||
else
|
||||
if get_last_no.between?(51, 75)
|
||||
## down to 50
|
||||
value = get_last_no.to_f - 50
|
||||
num -= value
|
||||
puts 'down to 50'
|
||||
else
|
||||
## up to 100
|
||||
value = 100 - get_last_no.to_f
|
||||
num += value
|
||||
puts 'up to 100'
|
||||
end
|
||||
end
|
||||
# num = num.to_f.round
|
||||
mod = num % 50
|
||||
if mod > 0 && mod <= 25
|
||||
num -= mod
|
||||
elsif mod > 25
|
||||
num += 50 - mod
|
||||
end
|
||||
# end
|
||||
return num
|
||||
end
|
||||
|
||||
|
||||
def self.daily_sales_list(from,to)
|
||||
sub_query = "SELECT (CASE WHEN SUM(sale_payments.payment_amount) > 0 THEN
|
||||
(SUM(sale_payments.payment_amount) + SUM(sale_payments.outstanding_amount)) ELSE 0 END)
|
||||
@@ -2646,20 +2517,15 @@ def self.get_sale_data_for_other_payment_credit(sale_id)
|
||||
end
|
||||
|
||||
def unique_tax_profiles(order_source, customer_id)
|
||||
tax_data = TaxProfile.where("group_type='#{order_source}'").pluck(:id)
|
||||
customer_tax_profiles = Customer.find(customer_id).tax_profiles
|
||||
tax_data = TaxProfile
|
||||
.where(group_type: order_source)
|
||||
|
||||
arr_data = []
|
||||
if !customer_tax_profiles.empty?
|
||||
customer_tax_profiles.each do |value1|
|
||||
if tax_data.include? value1.to_i
|
||||
arr_data.push(value1.to_i)
|
||||
end
|
||||
end
|
||||
return arr_data
|
||||
else
|
||||
return tax_data
|
||||
customer_tax_profiles = Customer.select(:tax_profiles).where(customer_id: customer_id).first
|
||||
if customer_tax_profiles.present?
|
||||
tax_data = tax_data.where(id: customer_tax_profiles.tax_profiles)
|
||||
end
|
||||
|
||||
return tax_data
|
||||
end
|
||||
|
||||
def self.top_bottom(today,shift=nil,from=nil,to=nil,from_time=nil,to_time=nil)
|
||||
@@ -2893,6 +2759,20 @@ private
|
||||
end
|
||||
end
|
||||
|
||||
def round_to_precision
|
||||
if (self.total_amount != self.total_amount_was || self.total_discount != self.total_discount_was || self.total_tax != self.total_tax_was)
|
||||
if (self.total_amount % 1 > 0 || self.total_discount % 1 > 0 || self.total_tax % 1 > 0)
|
||||
precision = PrintSetting.get_precision_delimiter().precision.to_i
|
||||
|
||||
self.total_amount = self.total_amount.round(precision)
|
||||
self.total_discount = self.total_discount.round(precision)
|
||||
self.total_tax = self.total_tax.round(precision)
|
||||
self.grand_total = (self.total_amount - self.total_discount) + self.total_tax
|
||||
end
|
||||
adjust_rounding
|
||||
end
|
||||
end
|
||||
|
||||
def update_stock_journal
|
||||
if self.sale_status == "void" && self.sale_status_before_last_save != "void"
|
||||
self.sale_items.each do |item|
|
||||
|
||||
@@ -11,6 +11,7 @@ class SaleItem < ApplicationRecord
|
||||
def compute_item
|
||||
end
|
||||
|
||||
before_validation :round_to_precision
|
||||
after_update :update_stock_journal
|
||||
|
||||
# Add Sale Items
|
||||
@@ -231,6 +232,24 @@ class SaleItem < ApplicationRecord
|
||||
end
|
||||
end
|
||||
|
||||
def round_to_precision
|
||||
unit_price_fraction = self.unit_price % 1
|
||||
price_fraction = self.unit_price % 1
|
||||
# is_dining_charge = self.menu_category_code == 'DingingCharge'
|
||||
|
||||
if self.unit_price != self.unit_price_was || self.price != self.price_was
|
||||
if unit_price_fraction > 0 || price_fraction > 0
|
||||
if ['Discount', 'promotion'].include?(self.status)
|
||||
precision = PrintSetting.get_precision_delimiter().precision.to_i
|
||||
|
||||
self.unit_price = self.unit_price.round(precision)
|
||||
self.price = (self.unit_price * self.qty).round(precision)
|
||||
self.taxable_price = self.price
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def update_stock_journal
|
||||
is_void = self.status == "void" && self.status_before_last_save != "void"
|
||||
cancel_void = self.status_before_last_save == "void" && self.status.nil?
|
||||
|
||||
@@ -6,8 +6,9 @@ class SaleOrder < ApplicationRecord
|
||||
|
||||
belongs_to :sale
|
||||
belongs_to :order
|
||||
has_many :order_items, foreign_key: "order_id", primary_key: "order_id"
|
||||
|
||||
def create_sale_order(sale_id, order_id)
|
||||
def create_sale_order(sale_id, order_id)
|
||||
# sale_order = SaleOrder.new
|
||||
self.sale_id = sale_id
|
||||
self.order_id = order_id
|
||||
@@ -37,6 +38,6 @@ class SaleOrder < ApplicationRecord
|
||||
if self.sale_order_id.nil?
|
||||
self.sale_order_id = SeedGenerator.generate_id(self.class.name, 'SOI')
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
@@ -5,6 +5,8 @@ class SaleTax < ApplicationRecord
|
||||
before_create :generate_custom_id
|
||||
belongs_to :sale
|
||||
|
||||
before_validation :round_to_precision
|
||||
|
||||
def self.sync_sale_tax_records(sale_taxes)
|
||||
if !sale_taxes.nil?
|
||||
sale_taxes.each do |t|
|
||||
@@ -38,4 +40,13 @@ class SaleTax < ApplicationRecord
|
||||
self.sale_tax_id = SeedGenerator.generate_id(self.class.name, "STI")
|
||||
end
|
||||
end
|
||||
|
||||
def round_to_precision
|
||||
if self.tax_payable_amount != self.tax_payable_amount_was
|
||||
if self.tax_payable_amount % 1 > 0
|
||||
precision = PrintSetting.get_precision_delimiter().precision.to_i
|
||||
self.tax_payable_amount = self.tax_payable_amount.round(precision)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -129,7 +129,7 @@ class OrderItemCustomisePdf < Prawn::Document
|
||||
|
||||
# add option
|
||||
y_position = cursor
|
||||
bounding_box([0,y_position], :width => self.item_width, :height => self.item_height) do
|
||||
bounding_box([0,y_position], :width => self.item_width) do
|
||||
text "#{options}", :size => self.item_font_size,:align => :left
|
||||
end
|
||||
end
|
||||
|
||||
@@ -130,7 +130,7 @@ class OrderItemPdf < Prawn::Document
|
||||
|
||||
# add option
|
||||
y_position = cursor
|
||||
bounding_box([0,y_position], :width => self.item_width, :height => self.item_height) do
|
||||
bounding_box([0,y_position], :width => self.item_width) do
|
||||
text "#{options}", :size => self.item_font_size,:align => :left
|
||||
end
|
||||
end
|
||||
|
||||
@@ -130,7 +130,7 @@ class OrderItemSlimPdf < Prawn::Document
|
||||
|
||||
# add option
|
||||
y_position = cursor
|
||||
bounding_box([0,y_position], :width => self.item_width, :height => self.item_height) do
|
||||
bounding_box([0,y_position], :width => self.item_width) do
|
||||
text "#{options}", :size => self.item_font_size,:align => :left
|
||||
end
|
||||
end
|
||||
|
||||
@@ -130,7 +130,7 @@ class OrderItemStarPdf < Prawn::Document
|
||||
|
||||
# add option
|
||||
y_position = cursor
|
||||
bounding_box([0,y_position], :width => self.item_width, :height => self.item_height) do
|
||||
bounding_box([0,y_position], :width => self.item_width) do
|
||||
text "#{options}", :size => self.item_font_size,:align => :left
|
||||
end
|
||||
end
|
||||
|
||||
@@ -144,7 +144,7 @@ class OrderSetItemCustomisePdf < Prawn::Document
|
||||
|
||||
# add option
|
||||
y_position = cursor
|
||||
bounding_box([0,y_position], :width => self.item_width, :height => self.item_height) do
|
||||
bounding_box([0,y_position], :width => self.item_width) do
|
||||
text "#{options}", :size => self.item_font_size,:align => :left
|
||||
end
|
||||
end
|
||||
|
||||
@@ -143,7 +143,7 @@ class OrderSetItemPdf < Prawn::Document
|
||||
|
||||
# add option
|
||||
y_position = cursor
|
||||
bounding_box([0,y_position], :width => self.item_width, :height => self.item_height) do
|
||||
bounding_box([0,y_position], :width => self.item_width) do
|
||||
text "#{options}", :size => self.item_font_size,:align => :left
|
||||
end
|
||||
end
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
<span class="hidden" id ="table_id" value="<%=@table%>"><%=@table%></span>
|
||||
<span class="hidden" id="table_type" value="<%=@table%>"><%=@table%></span>
|
||||
<%end%>
|
||||
|
||||
|
||||
<p id="sale-id" class="hidden"><%=@sale_data.sale_id %></p>
|
||||
<p class="m-l-10">Receipt No: <span id="receipt_no"><%=@sale_data.receipt_no rescue ' '%></span></p>
|
||||
<!-- <p>Cashier: <span id="cashier"><%=@sale_data.cashier_name rescue ' '%></span></p> -->
|
||||
@@ -44,24 +44,22 @@
|
||||
</div>
|
||||
</div>
|
||||
<div id="order-detail-slimscroll" data-height="160">
|
||||
<div class="card-text dining">
|
||||
<span id="discount_itemsErr" style="color:red;"></span>
|
||||
<table class="table table-default" id="order-items-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="item-name">Items</th>
|
||||
<th class="item-attr">QTY</th>
|
||||
<div class="card-text dining">
|
||||
<span id="discount_itemsErr" style="color:red;"></span>
|
||||
<table class="table table-default" id="order-items-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="item-name">Items</th>
|
||||
<th class="item-attr">QTY</th>
|
||||
<th class="item-attr">Price</th>
|
||||
</tr>
|
||||
</thead>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<% sub_total = 0 %>
|
||||
<% @sale_data.sale_items.each do |sale_item| %>
|
||||
<%
|
||||
sub_total += sale_item.qty*sale_item.unit_price
|
||||
if sale_item.price != 0 && sale_item.status != "void" && sale_item.status != "foc"
|
||||
%>
|
||||
<tr class="item-row" id=<%= sale_item.sale_item_id %> >
|
||||
<% sub_total += sale_item.qty * sale_item.unit_price %>
|
||||
<% if sale_item.price > 0 && sale_item.status.blank? %>
|
||||
<tr class="item-row item" id=<%= sale_item.sale_item_id %> >
|
||||
<td style="width:60%; text-align:left">
|
||||
<span id="item-account-type" class="hidden"><%=sale_item.account_id%></span>
|
||||
<span id="item-account-qty" class="hidden"><%=sale_item.qty%></span>
|
||||
@@ -74,14 +72,26 @@
|
||||
<span id="item-total-price"><%=(sale_item.qty*sale_item.unit_price)%></span>
|
||||
</td>
|
||||
</tr>
|
||||
<%
|
||||
end
|
||||
end
|
||||
%>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<% elsif sale_item.price < 0 && sale_item.status == "Discount" %>
|
||||
<tr class="item-row discount" id=<%= sale_item.sale_item_id %> >
|
||||
<td style="width:60%; text-align:left">
|
||||
<span id="item-account-type" class="hidden"><%=sale_item.account_id%></span>
|
||||
<span id="item-account-qty" class="hidden"><%=sale_item.qty%></span>
|
||||
<span id="item-name-price"><%=sale_item.product_name%>@<%=sale_item.unit_price%></span>
|
||||
</td>
|
||||
<td style="width:20%; text-align:right">
|
||||
<span id="item-qty"><%=sale_item.qty.abs%></span>
|
||||
</td>
|
||||
<td style="width:20%; text-align:right">
|
||||
<span id="item-total-price"><%=(sale_item.qty*sale_item.unit_price)%></span>
|
||||
</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
<% end %>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-footer">
|
||||
<table class="table" id="order-charges-table" border="0">
|
||||
<tr>
|
||||
@@ -130,18 +140,18 @@
|
||||
<div class="card-block">
|
||||
<div class="card-title">
|
||||
<div class="form-horizontal">
|
||||
<div class="col-md-12">
|
||||
<div class="form-group">
|
||||
<input type="text" id="discount-amount" name="discount-amount" value="<%= @sale_data.total_discount rescue 0 %>" class="form-control" />
|
||||
<div class="col-md-12">
|
||||
<div class="form-group">
|
||||
<input type="text" id="discount-amount" name="discount-amount" value="0" class="form-control" />
|
||||
<span id="discount-amountErr" style="color:red;"></span>
|
||||
</div>
|
||||
<br>
|
||||
<div class="form-group">
|
||||
<div class="form-group">
|
||||
<% @accounts.each do |acc| %>
|
||||
<button id="account-<%= acc.id %>" class="accounts-type btn bg-default"><%= acc.title %></button>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -217,11 +227,11 @@
|
||||
<div class="col-md-4">
|
||||
<div class="form-group">
|
||||
<button id="net" class="btn bg-info fluid action-btn">Nett</button>
|
||||
<button id="percentage" class="btn bg-primary fluid action-btn" style="font-size: 12.4px">Percentage</button>
|
||||
<button id="percentage" class="btn bg-primary fluid action-btn" style="font-size: 12.4px">Percentage</button>
|
||||
<button id="remove-item" class="btn bg-default fluid action-btn">Clear Discount</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -235,7 +245,7 @@
|
||||
<div class="form-horizontal">
|
||||
<div class="p-l-20">
|
||||
<div class="row">
|
||||
<div class="col-md-8 form-group">
|
||||
<div class="col-md-8 form-group">
|
||||
<div class="form-group">
|
||||
<input type="text" id="promo-code" name="promo-code" value="" class="form-control" /></span>
|
||||
</div>
|
||||
@@ -243,11 +253,11 @@
|
||||
<div class="col-md-4">
|
||||
<button id="" class="btn bg-primary btn-block action-btn">Promo</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div> -->
|
||||
</div>
|
||||
<!-- Column Three -->
|
||||
@@ -259,7 +269,7 @@
|
||||
<button id="remove-all" class="btn bg-primary btn-block action-btn">Remove All</button>
|
||||
<button id="pay-discount" class="btn bg-primary btn-block action-btn">Enter</button>
|
||||
<% if @member_discount%>
|
||||
<!-- <hr />
|
||||
<!-- <hr />
|
||||
<button id="member-discount" class="btn btn-success btn-block action-btn
|
||||
<%= @sale_data.customer.membership_id ? " " : "disabled"%>">Member Discount</button> -->
|
||||
<%end %>
|
||||
@@ -270,6 +280,9 @@
|
||||
|
||||
<script type="text/javascript">
|
||||
var cashier_type = "<%= @cashier_type %>";
|
||||
var totalAmount = <%= sub_total %>;
|
||||
var totalDiscount = <%= @sale_data.total_discount %>
|
||||
var precision = <%= precision %>;
|
||||
$(document).ready(function(){
|
||||
setHeaderBreadCrumb(_DISCOUNTS_);
|
||||
/* check webview loaded*/
|
||||
@@ -300,10 +313,10 @@ var cashier_type = "<%= @cashier_type %>";
|
||||
case 'num':
|
||||
var input_value = $(this).attr("data-value");
|
||||
if (original_value == "0.0"){
|
||||
$('#discount-amount').val(input_value);
|
||||
$('#discount-amount').val(input_value);
|
||||
}
|
||||
else{
|
||||
$('#discount-amount').val(original_value + '' + input_value);
|
||||
$('#discount-amount').val(original_value + '' + input_value);
|
||||
}
|
||||
break;
|
||||
case 'add':
|
||||
@@ -313,10 +326,10 @@ var cashier_type = "<%= @cashier_type %>";
|
||||
break;
|
||||
case 'del' :
|
||||
var discount_text=$('#discount-amount').val();
|
||||
$('#discount-amount').val(discount_text.substr(0,discount_text.length-1));
|
||||
$('#discount-amount').val(discount_text.substr(0,discount_text.length-1));
|
||||
break;
|
||||
case 'clr':
|
||||
$('#discount-amount').val("0.0");
|
||||
$('#discount-amount').val("0.0");
|
||||
break;
|
||||
}
|
||||
event.handled = true;
|
||||
@@ -326,28 +339,12 @@ var cashier_type = "<%= @cashier_type %>";
|
||||
});
|
||||
|
||||
// Select Sale Item
|
||||
$('.item-row').on('click',function(){
|
||||
$('#order-items-table').on('click', '.item-row', function(){
|
||||
if($(this).hasClass('selected-item') == true){
|
||||
$(this).removeClass('selected-item');
|
||||
}
|
||||
else {
|
||||
if(parseInt($(this).children().find("#item-account-qty").text()) >0 && parseInt($(this).children().find("#item-total-price").text()) >0){
|
||||
|
||||
$(this).addClass('selected-item');
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Select discount-item
|
||||
$('#order-items-table tbody').on('click', '.discount-item-row',function(){
|
||||
if($(this).hasClass('selected-item') == true){
|
||||
$(this).removeClass('selected-item');
|
||||
}
|
||||
else {
|
||||
if(parseInt($(this).children().find("#item-account-qty").text()) >0 && parseInt($(this).children().find("#item-total-price").text()) >0){
|
||||
|
||||
$(this).addClass('selected-item');
|
||||
}
|
||||
$(this).addClass('selected-item');
|
||||
}
|
||||
});
|
||||
|
||||
@@ -374,7 +371,7 @@ var cashier_type = "<%= @cashier_type %>";
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Calculate Net Discount for Payment
|
||||
@@ -384,7 +381,7 @@ var cashier_type = "<%= @cashier_type %>";
|
||||
var discount_value = $('#discount-amount').val();
|
||||
var sub_total = parseFloat($('#order-sub-total').text());
|
||||
var ajax_url = "/origami/" + sale_id + "/discount";
|
||||
|
||||
|
||||
if(discount_value!=""){
|
||||
if(discount_value > 0){
|
||||
if(parseFloat(discount_value) > sub_total){
|
||||
@@ -393,7 +390,7 @@ var cashier_type = "<%= @cashier_type %>";
|
||||
}else{
|
||||
$("#discount-amountErr").html("");
|
||||
// Selected Items
|
||||
var sale_items = get_selected_sale_items();
|
||||
var sale_items = get_selected_sale_items();
|
||||
|
||||
// Selected Account
|
||||
var account_types = get_selected_account_types();
|
||||
@@ -401,9 +398,9 @@ var cashier_type = "<%= @cashier_type %>";
|
||||
if(sale_items.length == 0 && account_types.length == 0){
|
||||
calculate_overall_discount(0, discount_value);
|
||||
}
|
||||
else {
|
||||
calculate_item_discount(0, discount_value, sale_items, account_types);
|
||||
}
|
||||
else if(sale_items.length > 0){
|
||||
calculate_item_discount(0, discount_value, sale_items, account_types);
|
||||
}
|
||||
|
||||
// Remove Selection
|
||||
selection_remove();
|
||||
@@ -414,7 +411,7 @@ var cashier_type = "<%= @cashier_type %>";
|
||||
}else{
|
||||
$("#discount-amountErr").html("can't be blank");
|
||||
}
|
||||
|
||||
|
||||
});
|
||||
|
||||
// Calculate Percentage Discount for Payment
|
||||
@@ -424,34 +421,46 @@ var cashier_type = "<%= @cashier_type %>";
|
||||
var discount_value = $('#discount-amount').val();
|
||||
var ajax_url = "/origami/" + sale_id + "/discount";
|
||||
|
||||
// Selected Items
|
||||
var sale_items = get_selected_sale_items();
|
||||
// Selected Account
|
||||
var account_types = get_selected_account_types();
|
||||
|
||||
if(sale_items.length == 0 && account_types.length == 0){
|
||||
calculate_overall_discount(1, discount_value);
|
||||
}
|
||||
else {
|
||||
calculate_item_discount(1, discount_value, sale_items, account_types);
|
||||
if(discount_value!=""){
|
||||
if(discount_value > 0){
|
||||
$("#discount-amountErr").val("");
|
||||
|
||||
// Selected Items
|
||||
var sale_items = get_selected_sale_items();
|
||||
// Selected Account
|
||||
var account_types = get_selected_account_types();
|
||||
|
||||
if(sale_items.length == 0 && account_types.length == 0){
|
||||
calculate_overall_discount(1, discount_value);
|
||||
} else if(sale_items.length > 0){
|
||||
calculate_item_discount(1, discount_value, sale_items, account_types);
|
||||
}
|
||||
}else{
|
||||
$("#discount-amountErr").html("Discount must be greater than 0!");
|
||||
}
|
||||
}else{
|
||||
$("#discount-amountErr").html("can't be blank");
|
||||
}
|
||||
|
||||
// Remove Selection
|
||||
selection_remove();
|
||||
selection_remove();
|
||||
});
|
||||
|
||||
// Remove selected discount items
|
||||
$("#remove-item").on('click', function(e){
|
||||
e.preventDefault();
|
||||
var origin_sub_total = parseFloat($("#order-sub-total").text());
|
||||
var total = 0;
|
||||
// var total = 0;
|
||||
|
||||
$('.discount-item-row.selected-item').each(function(i){
|
||||
var amount = parseFloat($(this).find('#item-total-price').text());
|
||||
total = total + Math.abs(amount);
|
||||
$('.item-row.new-discount').each(function(i){
|
||||
var amount = parseFloat($(this).find('#item-total-price').text());
|
||||
totalAmount += Math.abs(amount)
|
||||
// total = total + Math.abs(amount);
|
||||
$(this).remove();
|
||||
});
|
||||
$("#order-sub-total").text(origin_sub_total + total);
|
||||
|
||||
$("#order-sub-total").text(totalAmount);
|
||||
$("#order-discount").text(totalDiscount.toFixed(<%= precision.to_i %>));
|
||||
});
|
||||
|
||||
// Pay Discount for Payment
|
||||
@@ -462,10 +471,10 @@ var cashier_type = "<%= @cashier_type %>";
|
||||
}
|
||||
$("#loading_wrapper").show();
|
||||
var sale_id = $('#sale-id').text();
|
||||
var discount_items = JSON.stringify(get_discount_item_rows());
|
||||
var discount_items = JSON.stringify(get_new_discount_item_rows());
|
||||
var overall_discount = $("#order-discount").text();
|
||||
var sub_total = $('#order-sub-total').text();
|
||||
var ajax_url = "/origami/" + sale_id + "/discount";
|
||||
var sub_total = $('#order-sub-total').text();
|
||||
var ajax_url = "/origami/" + sale_id + "/discount";
|
||||
|
||||
var params = { 'cashier_type' : cashier_type,'sale_id': sale_id, 'sub_total': sub_total, 'discount_items': discount_items, 'overall_discount': overall_discount };
|
||||
|
||||
@@ -473,8 +482,8 @@ var cashier_type = "<%= @cashier_type %>";
|
||||
type: "POST",
|
||||
url: ajax_url,
|
||||
data: params,
|
||||
success:function(result){
|
||||
$("#loading_wrapper").hide();
|
||||
success:function(result){
|
||||
$("#loading_wrapper").hide();
|
||||
swal({
|
||||
title: "Information!",
|
||||
text: result.status,
|
||||
@@ -489,7 +498,7 @@ var cashier_type = "<%= @cashier_type %>";
|
||||
window.location.href = "/origami/room/" + result.table_id
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
@@ -500,13 +509,7 @@ var cashier_type = "<%= @cashier_type %>";
|
||||
var sale_id = $('#sale-id').text();
|
||||
var discount_items = [];
|
||||
|
||||
// Selected Items
|
||||
var sale_items = get_selected_sale_items();
|
||||
if(sale_items.length == 0){
|
||||
//swal("Information!", "You have no selected item!");
|
||||
swal ( "Oops" , "You have no selected item!" , "error" );
|
||||
return;
|
||||
}
|
||||
var sale_items = get_selected_discount_items();
|
||||
|
||||
for(var i=0;i < sale_items.length;i++){
|
||||
if(sale_items[i].price < 0){
|
||||
@@ -514,7 +517,7 @@ var cashier_type = "<%= @cashier_type %>";
|
||||
}
|
||||
else {
|
||||
swal ("Oops" , "You have no selected item!" , "error" );
|
||||
return;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -539,7 +542,7 @@ var cashier_type = "<%= @cashier_type %>";
|
||||
window.location.href = "/origami/room/" + result.table_id
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
@@ -566,7 +569,7 @@ var cashier_type = "<%= @cashier_type %>";
|
||||
window.location.href = "/origami/room/" + result.table_id
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
@@ -575,8 +578,8 @@ var cashier_type = "<%= @cashier_type %>";
|
||||
$("#member-discount").on('click', function(e){
|
||||
e.preventDefault();
|
||||
var sale_id = $('#sale-id').text();
|
||||
var sub_total = $('#order-sub-total').text();
|
||||
var ajax_url = "/origami/" + sale_id + "/member_discount";
|
||||
var sub_total = $('#order-sub-total').text();
|
||||
var ajax_url = "/origami/" + sale_id + "/member_discount";
|
||||
|
||||
// Selected Account
|
||||
//var account_types = JSON.stringify(get_selected_account_types());
|
||||
@@ -618,96 +621,95 @@ var cashier_type = "<%= @cashier_type %>";
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
});//end member discount
|
||||
});
|
||||
|
||||
/* Remove Selection */
|
||||
function selection_remove(){
|
||||
$(".item-row").removeClass("selected-item");
|
||||
$(".discount_item_row").removeClass("selected-item");
|
||||
$(".accounts-type").removeClass("selected-account");
|
||||
}
|
||||
|
||||
/* Get Item rows but not discount*/
|
||||
function get_item_rows(){
|
||||
var sale_items = [];
|
||||
$('.item-row').not('.discount-item-row').each(function(i){
|
||||
var sale_items = [];
|
||||
$('.item-row.item').not('.discount').each(function(i){
|
||||
var sale_item = {};
|
||||
sale_item.id = $(this).attr('id').substr(0,16);
|
||||
sale_item.name = $(this).find('#item-name-price').text().split('@')[0];
|
||||
sale_item.account_id = $(this).find('#item-account-type').text();
|
||||
sale_item.price = $(this).find('#item-total-price').text();
|
||||
sale_items.push(sale_item);
|
||||
});
|
||||
});
|
||||
return sale_items;
|
||||
}
|
||||
|
||||
/* Get discount Item rows */
|
||||
function get_discount_item_rows(){
|
||||
var sale_items = [];
|
||||
$('.discount-item-row').each(function(i){
|
||||
function get_new_discount_item_rows(){
|
||||
var sale_items = [];
|
||||
$('.item-row.new-discount').each(function(i){
|
||||
var sale_item = {};
|
||||
sale_item.id = $(this).attr('id');
|
||||
sale_item.name = $(this).find('#item-name-price').text();
|
||||
sale_item.account_id = $(this).find('#item_account_type').text();
|
||||
sale_item.price = $(this).find('#item-total-price').text();
|
||||
sale_items.push(sale_item);
|
||||
});
|
||||
});
|
||||
return sale_items;
|
||||
}
|
||||
|
||||
/* Get discount Item rows */
|
||||
// function get_selected_discount_items(){
|
||||
// var sale_items = [];
|
||||
// $('.discount-item-row').hasClass('.selected-item').each(function(i){
|
||||
// var sale_item = {};
|
||||
// sale_item.id = $(this).attr('id');
|
||||
// sale_item.name = $(this).find('#item-name-price').text();
|
||||
// sale_item.account_id = $(this).find('#item_account_type').text();
|
||||
// sale_item.price = $(this).find('#item-total-price').text();
|
||||
// sale_items.push(sale_item);
|
||||
// });
|
||||
// return sale_items;
|
||||
// }
|
||||
function get_selected_discount_items(){
|
||||
var sale_items = [];
|
||||
$('.item-row.discount.selected-item').each(function(i){
|
||||
var sale_item = {};
|
||||
sale_item.id = $(this).attr('id');
|
||||
sale_item.name = $(this).find('#item-name-price').text();
|
||||
sale_item.account_id = $(this).find('#item_account_type').text();
|
||||
sale_item.price = $(this).find('#item-total-price').text();
|
||||
sale_items.push(sale_item);
|
||||
});
|
||||
return sale_items;
|
||||
}
|
||||
|
||||
/* Get Selected Sale Item's ID and Price */
|
||||
function get_selected_sale_items(){
|
||||
var sale_items = [];
|
||||
$('.item-row.selected-item').each(function(i){
|
||||
var sale_items = [];
|
||||
$('.item-row.item.selected-item').each(function(i){
|
||||
var sale_item = {};
|
||||
sale_item.id = $(this).attr('id').substr(0,16);
|
||||
sale_item.name = $(this).find('#item-name-price').text().split('@')[0];
|
||||
sale_item.account_id = $(this).find('#item-account-type').text();
|
||||
sale_item.price = $(this).find('#item-total-price').text();
|
||||
sale_items.push(sale_item);
|
||||
});
|
||||
});
|
||||
return sale_items;
|
||||
}
|
||||
|
||||
/* Get Selected Accounts ID and Price */
|
||||
function get_selected_account_types(){
|
||||
function get_selected_account_types(){
|
||||
var account_types = [];
|
||||
|
||||
$('.selected-account').each(function(i){
|
||||
var account= {};
|
||||
account.id = $(this).attr('id').substr(8);
|
||||
account.name = $(this).text();
|
||||
account.name = $(this).text();
|
||||
account_types.push(account);
|
||||
});
|
||||
});
|
||||
return account_types;
|
||||
}
|
||||
|
||||
/* Calculate Overall Discount*/
|
||||
function calculate_overall_discount(type, amount){
|
||||
var origin_sub_total = parseFloat($("#order-sub-total").text());
|
||||
var origin_sub_total = parseFloat($("#order-sub-total").text()) + parseFloat($("#order-discount").text());
|
||||
var dis_amount = 0;
|
||||
var sub_total = 0;
|
||||
var total_discount = 0;
|
||||
|
||||
// For Net Pay
|
||||
if(type == 0){
|
||||
total_discount = amount;
|
||||
total_discount = Math.round(amount * Math.pow(10, precision)) / Math.pow(10, precision);
|
||||
}
|
||||
|
||||
// For Percentage Pay
|
||||
@@ -719,34 +721,37 @@ function calculate_overall_discount(type, amount){
|
||||
type: "error",
|
||||
confirmButtonText: 'OK',
|
||||
confirmButtonColor:"red"
|
||||
});
|
||||
});
|
||||
}
|
||||
else{
|
||||
total_discount = (origin_sub_total * amount)/100;
|
||||
total_discount = Math.round(totalAmount * amount / 100 * Math.pow(10, precision)) / Math.pow(10, precision);
|
||||
}
|
||||
}
|
||||
|
||||
sub_total = parseFloat(totalAmount) - parseFloat(total_discount)
|
||||
|
||||
$("#order-discount").text(parseFloat(total_discount).toFixed(<%= precision.to_i %>));
|
||||
}
|
||||
|
||||
/* Calculate Items Discount*/
|
||||
function calculate_item_discount(type, amount, sale_items, account_types){
|
||||
var origin_sub_total = parseFloat($("#order-sub-total").text());
|
||||
var origin_sub_total = parseFloat($("#order-sub-total").text());
|
||||
var dis_amount = 0;
|
||||
var sub_total = 0;
|
||||
var total_discount = 0;
|
||||
var arrItemName = "";
|
||||
|
||||
$("#discount_itemsErr").html("");
|
||||
$("#discount-amountErr").html("");
|
||||
// For Net Pay
|
||||
if(origin_sub_total > 0){
|
||||
if(type == 0){
|
||||
dis_amount = (0 - amount);
|
||||
dis_amount = -Math.round(amount * Math.pow(10, precision)) / Math.pow(10, precision);
|
||||
if(sale_items.length > 0){
|
||||
for(var i=0;i < sale_items.length;i++){
|
||||
// if(account_types.length > 0){
|
||||
// for(var j=0; j < account_types.length; j++){
|
||||
// if(sale_items[i].account_id == account_types[j].id){
|
||||
// if(sale_items[i].account_id == account_types[j].id){
|
||||
// // Discount Items
|
||||
// var discount_item_row = item_row_template(type, sale_items[i], dis_amount, amount);
|
||||
// $("#order-items-table tbody").append(discount_item_row);
|
||||
@@ -755,20 +760,19 @@ function calculate_item_discount(type, amount, sale_items, account_types){
|
||||
// }
|
||||
// }
|
||||
// else {
|
||||
if(parseFloat(amount) > parseFloat(sale_items[i].price)){
|
||||
arrItemName += ", " + sale_items[i].name;
|
||||
}else{
|
||||
var discount_item_row = item_row_template(type,sale_items[i], dis_amount, amount);
|
||||
total_discount = parseFloat(total_discount) + parseFloat(amount);
|
||||
if(parseFloat(amount) > parseFloat(sale_items[i].price)){
|
||||
arrItemName += ", " + sale_items[i].name;
|
||||
}else{
|
||||
var discount_item_row = item_row_template(type,sale_items[i], dis_amount, amount);
|
||||
total_discount = parseFloat(total_discount) + parseFloat(amount);
|
||||
|
||||
if(parseFloat(origin_sub_total) >= parseFloat(total_discount)){
|
||||
$("#order-items-table tbody").append(discount_item_row);
|
||||
}else{
|
||||
total_discount = parseFloat(total_discount) - parseFloat(amount);
|
||||
$("#discount-amountErr").html("Discount is greater than sub total!");
|
||||
}
|
||||
if(parseFloat(origin_sub_total) >= parseFloat(total_discount)){
|
||||
$("#order-items-table tbody").append(discount_item_row);
|
||||
}else{
|
||||
total_discount = parseFloat(total_discount) - parseFloat(amount);
|
||||
$("#discount-amountErr").html("Discount is greater than sub total!");
|
||||
}
|
||||
|
||||
}
|
||||
// }
|
||||
}
|
||||
}
|
||||
@@ -782,11 +786,11 @@ function calculate_item_discount(type, amount, sale_items, account_types){
|
||||
}else{
|
||||
$("#discount_itemsErr").html("Discount is greater than "+arrItemName+" price");
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
// No Needs For Auto Selected
|
||||
// if(account_types.length > 0){
|
||||
// if(account_types.length > 0){
|
||||
// var item_rows=get_item_rows();
|
||||
// if(item_rows.length > 0){
|
||||
// for(var k=0; k < item_rows.length; k++){
|
||||
@@ -802,10 +806,12 @@ function calculate_item_discount(type, amount, sale_items, account_types){
|
||||
// }
|
||||
// else {
|
||||
// alert("No Items!");
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
sub_total = parseFloat(origin_sub_total) - parseFloat(total_discount);
|
||||
totalAmount = sub_total
|
||||
$("#order-sub-total").text(parseFloat(sub_total).toFixed(<%= precision.to_i %>));
|
||||
}
|
||||
|
||||
// For Percentage Pay
|
||||
@@ -817,7 +823,7 @@ function calculate_item_discount(type, amount, sale_items, account_types){
|
||||
type: "error",
|
||||
confirmButtonText: 'OK',
|
||||
confirmButtonColor:"red"
|
||||
});
|
||||
});
|
||||
}
|
||||
else{
|
||||
// Check sale items exists
|
||||
@@ -825,7 +831,7 @@ function calculate_item_discount(type, amount, sale_items, account_types){
|
||||
for(var i=0;i < sale_items.length;i++){
|
||||
// if(account_types.length > 0){
|
||||
// for(var j=0; j < account_types.length; j++){
|
||||
// if(sale_items[i].account_id == account_types[j].id){
|
||||
// if(sale_items[i].account_id == account_types[j].id){
|
||||
// // Discount Items
|
||||
// dis_amount = 0 - ((sale_items[i].price * amount)/100);
|
||||
// var discount_item_row = item_row_template(type,sale_items[i], dis_amount, amount);
|
||||
@@ -835,9 +841,9 @@ function calculate_item_discount(type, amount, sale_items, account_types){
|
||||
// }
|
||||
// }
|
||||
// else {
|
||||
dis_amount = 0 - ((sale_items[i].price * amount)/100);
|
||||
dis_amount = -Math.round(sale_items[i].price * amount / 100 * Math.pow(10, precision)) / Math.pow(10, precision);
|
||||
var discount_item_row = item_row_template(type,sale_items[i], dis_amount, amount);
|
||||
|
||||
|
||||
total_discount = total_discount + dis_amount;
|
||||
if(parseFloat(origin_sub_total) >= parseFloat(total_discount)){
|
||||
$("#order-items-table tbody").append(discount_item_row);
|
||||
@@ -848,18 +854,20 @@ function calculate_item_discount(type, amount, sale_items, account_types){
|
||||
// }
|
||||
}
|
||||
sub_total = parseFloat(origin_sub_total) + parseFloat(total_discount);
|
||||
totalAmount = sub_total
|
||||
$("#order-sub-total").text(parseFloat(sub_total).toFixed(<%= precision.to_i %>));
|
||||
}
|
||||
}
|
||||
// No Needs For Auto Selected
|
||||
// Check account types exists
|
||||
// if(account_types.length > 0){
|
||||
// if(account_types.length > 0){
|
||||
// var item_rows=get_item_rows();
|
||||
// console.log(account_types);
|
||||
// if(item_rows.length > 0){
|
||||
// for(var k=0; k < item_rows.length; k++){
|
||||
// for(var j=0; j < account_types.length; j++){
|
||||
// if(item_rows[k].account_id == account_types[j].id){
|
||||
// // Discount Items
|
||||
// // Discount Items
|
||||
// dis_amount = 0 - ((item_rows[k].price * amount)/100);
|
||||
// var discount_item_row = item_row_template(type, item_rows[k], dis_amount, amount);
|
||||
// $("#order-items-table tbody").append(discount_item_row);
|
||||
@@ -870,15 +878,14 @@ function calculate_item_discount(type, amount, sale_items, account_types){
|
||||
// }
|
||||
// else {
|
||||
// alert("No Items!");
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
$("#order-sub-total").text(parseFloat(sub_total).toFixed(<%= precision.to_i %>));
|
||||
|
||||
}else{
|
||||
$("#discount-amountErr").html("Discount is greater than sub total!");
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
function item_row_template(type, item, discount_amount, amount){
|
||||
@@ -886,25 +893,25 @@ function item_row_template(type, item, discount_amount, amount){
|
||||
if(type == 1){
|
||||
dis_str = dis_str + "(" + amount + "%)"
|
||||
}
|
||||
var discount_item_row = "<tr class='discount-item-row' id='" + item.id + "'>" +
|
||||
"<td style='width: 60%; text-align: left;'>" +
|
||||
"<span id='item_account_type' class='hidden'>" +
|
||||
var discount_item_row = "<tr class='item-row new-discount' id='" + item.id + "'>" +
|
||||
"<td style='width: 60%; text-align: left;'>" +
|
||||
"<span id='item_account_type' class='hidden'>" +
|
||||
item.account_id +
|
||||
"</span>" +
|
||||
"<span id='item-name-price'>" +
|
||||
"</span>" +
|
||||
"<span id='item-name-price'>" +
|
||||
item.name + dis_str +
|
||||
"</span>" +
|
||||
"</span>" +
|
||||
"</td>" +
|
||||
"<td style='width: 20%; text-align: right;'>" +
|
||||
"<td style='width: 20%; text-align: right;'>" +
|
||||
"<span id='item-qty'>1</span>" +
|
||||
"</td>" +
|
||||
"<td style='width: 20%; text-align: right;'>" +
|
||||
"<span id='item-total-price'>" +
|
||||
"<td style='width: 20%; text-align: right;'>" +
|
||||
"<span id='item-total-price'>" +
|
||||
discount_amount +
|
||||
"</span>" +
|
||||
"</span>" +
|
||||
"</td>" +
|
||||
"</tr>";
|
||||
return discount_item_row;
|
||||
return discount_item_row;
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
@@ -98,8 +98,8 @@
|
||||
<%if !@sale_data.nil? %>
|
||||
<% @sale_data.each do |result| %>
|
||||
|
||||
<% grand_total +=result.grand_total.to_f %>
|
||||
<% old_grand_total += result.grand_total_after_rounding() %>
|
||||
<% grand_total += result.grand_total.to_f %>
|
||||
<% old_grand_total += result.grand_total.to_f - result.rounding_adjustment.to_f %>
|
||||
<% total_tax += result.total_tax.to_f %>
|
||||
<% total_sum += result.total_amount.to_f %>
|
||||
<% discount_amt += result.total_discount.to_f %>
|
||||
@@ -124,50 +124,35 @@
|
||||
</td>
|
||||
<td><%= result.receipt_no rescue '-' %> </td>
|
||||
<td><%= result.cashier_name rescue '-' %></td>
|
||||
<td><%= number_with_precision(result.total_amount, precision: precision.to_i ,delimiter: delimiter) %></td>
|
||||
<td><%= number_with_precision(result.total_discount, precision: precision.to_i ,delimiter: delimiter) rescue '0' %>
|
||||
<td><%= number_with_precision(result.total_amount, precision: precision.to_i, delimiter: delimiter) %></td>
|
||||
<td><%= number_with_precision(result.total_discount, precision: precision.to_i, delimiter: delimiter) rescue '0' %>
|
||||
</td>
|
||||
<!-- <%if result.customer.customer_type == "Takeaway"%>
|
||||
<td><%= number_with_precision(0, precision: precision.to_i ,delimiter: delimiter) %></td>
|
||||
<%end%> -->
|
||||
<% if !result.sale_taxes.empty? %>
|
||||
<% num = 1
|
||||
if tax_flag && tax_count > 0 %>
|
||||
<% while num <= tax_count %>
|
||||
<td>
|
||||
<%= number_with_precision(0, precision: precision.to_i ,delimiter: delimiter) %>
|
||||
</td>
|
||||
<% num += 1
|
||||
end %>
|
||||
<% end %>
|
||||
<% result.sale_taxes.each do |tax| %>
|
||||
<td>
|
||||
<%= number_with_precision(tax.tax_payable_amount, precision: precision.to_i ,delimiter: delimiter) rescue '-' %>
|
||||
</td>
|
||||
<%end%>
|
||||
<% num = 1
|
||||
if tax_flag==false && tax_count > 0 %>
|
||||
<% while num <= tax_count %>
|
||||
<td>
|
||||
<%= number_with_precision(0, precision: precision.to_i ,delimiter: delimiter) %>
|
||||
</td>
|
||||
<% num += 1
|
||||
end %>
|
||||
<% end %>
|
||||
<% else %>
|
||||
<% @tax_profiles.each do |tax| %>
|
||||
<td><%= number_with_precision(0, precision: precision.to_i ,delimiter: delimiter) rescue '-' %></td>
|
||||
<% end %>
|
||||
<%end%>
|
||||
|
||||
<% if result.old_grand_total.nil? %>
|
||||
<td><%= number_with_precision(result.grand_total, precision: precision.to_i ,delimiter: delimiter) rescue '-' %></td>
|
||||
<%else%>
|
||||
<td><%= number_with_precision(result.old_grand_total, precision: precision.to_i ,delimiter: delimiter) rescue '-' %></td>
|
||||
<%end%>
|
||||
|
||||
<td><%= result.rounding_adjustment.to_f rescue '-' %></td>
|
||||
<td><%= number_with_precision(result.grand_total, precision: precision.to_i ,delimiter: delimiter) %></td>
|
||||
<% num = 1 %>
|
||||
<% if tax_flag && tax_count > 0 %>
|
||||
<% while num <= tax_count %>
|
||||
<td><%= number_with_precision(0, precision: precision.to_i, delimiter: delimiter) rescue '-' %></td>
|
||||
<% num += 1 %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<% result.sale_taxes.each do |tax| %>
|
||||
<td><%= number_with_precision(tax.tax_payable_amount, precision: precision.to_i, delimiter: delimiter) rescue '-' %></td>
|
||||
<%end%>
|
||||
<% num = 1 %>
|
||||
<% if !tax_flag && tax_count > 0 %>
|
||||
<% while num <= tax_count %>
|
||||
<td><%= number_with_precision(0, precision: precision.to_i, delimiter: delimiter) rescue '-' %></td>
|
||||
<% num += 1 %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<% else %>
|
||||
<% @tax_profiles.each do |tax| %>
|
||||
<td><%= number_with_precision(0, precision: precision.to_i, delimiter: delimiter) rescue '-' %></td>
|
||||
<% end %>
|
||||
<%end%>
|
||||
<td><%= number_with_precision(result.grand_total - result.rounding_adjustment, precision: precision.to_i, delimiter: delimiter) rescue '-' %></td>
|
||||
<td><%= number_with_precision(result.rounding_adjustment.to_f, precision: precision.to_i, delimiter: delimiter) rescue '-' %></td>
|
||||
<td><%= number_with_precision(result.grand_total, precision: precision.to_i, delimiter: delimiter) rescue '-' %></td>
|
||||
<% if @lookup.value.to_i == 1 %>
|
||||
<td>
|
||||
<!-- ############### Need to Check SyncStatus ############# -->
|
||||
@@ -185,54 +170,34 @@
|
||||
<% end %>
|
||||
<tr style="border-top:4px double #666;">
|
||||
<td colspan="3"> </td>
|
||||
<td><b><%= number_with_precision(total_sum, precision: precision.to_i ,delimiter: delimiter) rescue '-' %></b></td>
|
||||
<td><b><%= number_with_precision(discount_amt, precision: precision.to_i ,delimiter: delimiter) rescue '-' %></b></td>
|
||||
<!-- <% if !@sale_taxes.empty?
|
||||
@sale_taxes.each do |tax| %>
|
||||
<td>
|
||||
<b><%= number_with_precision(tax.st_amount, precision: precision.to_i ,delimiter: delimiter) rescue '-' %></b>
|
||||
</td>
|
||||
<% end %>
|
||||
<% else %>
|
||||
<% @tax_profiles.each do |tax| %>
|
||||
<td><b>0</b></td>
|
||||
<% end %>
|
||||
<% end %> -->
|
||||
|
||||
<td><b><%= number_with_precision(total_sum, precision: precision.to_i, delimiter: delimiter) rescue '-' %></b></td>
|
||||
<td><b><%= number_with_precision(discount_amt, precision: precision.to_i, delimiter: delimiter) rescue '-' %></b></td>
|
||||
<% if !@sale_taxes.empty? %>
|
||||
<% num = 1
|
||||
if ttax_flag && ttax_count > 0 %>
|
||||
<% while num <= ttax_count %>
|
||||
<td>
|
||||
<%= number_with_precision(0, precision: precision.to_i ,delimiter: delimiter) %>
|
||||
</td>
|
||||
<td><%= number_with_precision(0, precision: precision.to_i, delimiter: delimiter) %></td>
|
||||
<% num += 1
|
||||
end %>
|
||||
<% end %>
|
||||
<% @sale_taxes.each do |tax| %>
|
||||
<td>
|
||||
<%= number_with_precision(tax.st_amount, precision: precision.to_i ,delimiter: delimiter) rescue '-' %>
|
||||
</td>
|
||||
<td><%= number_with_precision(tax.st_amount, precision: precision.to_i, delimiter: delimiter) rescue '-' %></td>
|
||||
<%end%>
|
||||
<% num = 1
|
||||
if ttax_flag==false && ttax_count > 0 %>
|
||||
<% while num <= ttax_count %>
|
||||
<td>
|
||||
<%= number_with_precision(0, precision: precision.to_i ,delimiter: delimiter) %>
|
||||
</td>
|
||||
<td><%= number_with_precision(0, precision: precision.to_i, delimiter: delimiter) %></td>
|
||||
<% num += 1
|
||||
end %>
|
||||
<% end %>
|
||||
<% else %>
|
||||
<% @tax_profiles.each do |tax| %>
|
||||
<td><%= number_with_precision(0, precision: precision.to_i ,delimiter: delimiter) rescue '-' %></td>
|
||||
<td><%= number_with_precision(0, precision: precision.to_i, delimiter: delimiter) rescue '-' %></td>
|
||||
<% end %>
|
||||
<%end%>
|
||||
|
||||
<td><b><%= number_with_precision(old_grand_total.to_f, precision: precision.to_i ,delimiter: delimiter) rescue '0' %></b></td>
|
||||
|
||||
<td><b><%= rounding_adj.to_f rescue '-' %></b></td>
|
||||
<td><b><%= number_with_precision(grand_total.to_f, precision: precision.to_i ,delimiter: delimiter) rescue '-' %></b></td>
|
||||
<td><b><%= number_with_precision(old_grand_total.to_f, precision: precision.to_i, delimiter: delimiter) rescue '0' %></b></td>
|
||||
<td><b><%= number_with_precision(rounding_adj.to_f, precision: precision.to_i, delimiter: delimiter) rescue '-' %></b></td>
|
||||
<td><b><%= number_with_precision(grand_total.to_f, precision: precision.to_i, delimiter: delimiter) rescue '-' %></b></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
<th><%= t("views.right_panel.detail.total") %> <%= t("views.right_panel.detail.amount") %></th>
|
||||
<th><%= t("views.right_panel.detail.discount") %> <%= t("views.right_panel.detail.amount") %> </th>
|
||||
<% @tax_profiles.each do |tax| %>
|
||||
<th><%= tax.name %></th>
|
||||
<th><%= tax.name %></th>
|
||||
<% end %>
|
||||
<!-- <th>Other Amount</th> -->
|
||||
<th><%= t("views.right_panel.detail.grand_total") %></th>
|
||||
@@ -74,11 +74,11 @@
|
||||
end
|
||||
%>
|
||||
|
||||
<%if !@sale_data.nil? %>
|
||||
<%if @sale_data %>
|
||||
<% @sale_data.each do |result| %>
|
||||
|
||||
<% grand_total +=result.grand_total.to_f %>
|
||||
<% old_grand_total += result.grand_total_after_rounding() %>
|
||||
<% grand_total += result.grand_total.to_f %>
|
||||
<% old_grand_total += result.grand_total.to_f - result.rounding_adjustment.to_f %>
|
||||
<% total_tax += result.total_tax.to_f %>
|
||||
<% total_sum += result.total_amount.to_f %>
|
||||
<% discount_amt += result.total_discount.to_f %>
|
||||
@@ -91,59 +91,45 @@
|
||||
tax_flag = false
|
||||
end
|
||||
end %>
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
<%if result.type %>
|
||||
<%= result.type %> - <%= result.name %>
|
||||
<% else %>
|
||||
-
|
||||
<% end %>
|
||||
</td>
|
||||
<td><%= result.receipt_no rescue '-' %> </td>
|
||||
<td><%= result.cashier_name rescue '-' %></td>
|
||||
<td><%= number_with_precision(result.total_amount, precision: precision.to_i ,delimiter: delimiter) %></td>
|
||||
<td><%= number_with_precision(result.total_discount, precision: precision.to_i ,delimiter: delimiter) rescue '0' %>
|
||||
</td>
|
||||
<% if !result.sale_taxes.empty? %>
|
||||
<% num = 1
|
||||
if tax_flag && tax_count > 0 %>
|
||||
<% while num <= tax_count %>
|
||||
<td>
|
||||
<%= number_with_precision(0, precision: precision.to_i ,delimiter: delimiter) %>
|
||||
</td>
|
||||
<% num += 1
|
||||
end %>
|
||||
<tr>
|
||||
<td>
|
||||
<%if result.type %>
|
||||
<%= result.type %> - <%= result.name %>
|
||||
<% else %>
|
||||
-
|
||||
<% end %>
|
||||
</td>
|
||||
<td><%= result.receipt_no rescue '-' %> </td>
|
||||
<td><%= result.cashier_name rescue '-' %></td>
|
||||
<td><%= number_with_precision(result.total_amount, precision: precision.to_i, delimiter: delimiter) rescue '-' %></td>
|
||||
<td><%= number_with_precision(result.total_discount, precision: precision.to_i, delimiter: delimiter) rescue '-' %></td>
|
||||
<% if !result.sale_taxes.empty? %>
|
||||
<% num = 1 %>
|
||||
<% if tax_flag && tax_count > 0 %>
|
||||
<% while num <= tax_count %>
|
||||
<td><%= number_with_precision(0, precision: precision.to_i, delimiter: delimiter) rescue '-' %></td>
|
||||
<% num += 1 %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<% result.sale_taxes.each do |tax| %>
|
||||
<td>
|
||||
<%= number_with_precision(tax.tax_payable_amount, precision: precision.to_i ,delimiter: delimiter) rescue '-' %>
|
||||
</td>
|
||||
<%end%>
|
||||
<% num = 1
|
||||
if tax_flag==false && tax_count > 0 %>
|
||||
<% while num <= tax_count %>
|
||||
<td>
|
||||
<%= number_with_precision(0, precision: precision.to_i ,delimiter: delimiter) %>
|
||||
</td>
|
||||
<% num += 1
|
||||
end %>
|
||||
<td><%= number_with_precision(tax.tax_payable_amount, precision: precision.to_i ,delimiter: delimiter) rescue '-' %></td>
|
||||
<% end %>
|
||||
<% num = 1
|
||||
if tax_flag==false && tax_count > 0 %>
|
||||
<% while num <= tax_count %>
|
||||
<td><%= number_with_precision(0, precision: precision.to_i, delimiter: delimiter) rescue '-' %></td>
|
||||
<% num += 1
|
||||
end %>
|
||||
<% end %>
|
||||
<% else %>
|
||||
<% @tax_profiles.each do |tax| %>
|
||||
<td><%= number_with_precision(0, precision: precision.to_i ,delimiter: delimiter) rescue '-' %></td>
|
||||
<% end %>
|
||||
<%end%>
|
||||
|
||||
<% if result.old_grand_total.nil? %>
|
||||
<td><%= number_with_precision(result.grand_total, precision: precision.to_i ,delimiter: delimiter) rescue '-' %></td>
|
||||
<%else%>
|
||||
<td><%= number_with_precision(result.old_grand_total, precision: precision.to_i ,delimiter: delimiter) rescue '-' %></td>
|
||||
<%end%>
|
||||
|
||||
<td><%= result.rounding_adjustment.to_f rescue '-' %></td>
|
||||
<td><%= number_with_precision(result.grand_total, precision: precision.to_i ,delimiter: delimiter) %></td>
|
||||
</tr>
|
||||
<% else %>
|
||||
<% @tax_profiles.each do |tax| %>
|
||||
<td><%= number_with_precision(0, precision: precision.to_i ,delimiter: delimiter) rescue '-' %></td>
|
||||
<% end %>
|
||||
<%end%>
|
||||
<td><%= number_with_precision(result.grand_total - result.rounding_adjustment, precision: precision.to_i, delimiter: delimiter) rescue '-' %></td>
|
||||
<td><%= number_with_precision(result.rounding_adjustment.to_f, precision: precision.to_i, delimiter: delimiter) rescue '-' %></td>
|
||||
<td><%= number_with_precision(result.grand_total, precision: precision.to_i, delimiter: delimiter) rescue '-' %></td>
|
||||
</tr>
|
||||
<% end %>
|
||||
<tr style="border-top:4px double #666;">
|
||||
<td colspan="3"> </td>
|
||||
@@ -153,23 +139,17 @@
|
||||
<% num = 1
|
||||
if ttax_flag && ttax_count > 0 %>
|
||||
<% while num <= ttax_count %>
|
||||
<td>
|
||||
<%= number_with_precision(0, precision: precision.to_i ,delimiter: delimiter) %>
|
||||
</td>
|
||||
<td><%= number_with_precision(0, precision: precision.to_i, delimiter: delimiter) rescue '-' %></td>
|
||||
<% num += 1
|
||||
end %>
|
||||
<% end %>
|
||||
<% @sale_taxes.each do |tax| %>
|
||||
<td>
|
||||
<%= number_with_precision(tax.st_amount, precision: precision.to_i ,delimiter: delimiter) rescue '-' %>
|
||||
</td>
|
||||
<td><%= number_with_precision(tax.st_amount, precision: precision.to_i ,delimiter: delimiter) rescue '-' %></td>
|
||||
<%end%>
|
||||
<% num = 1
|
||||
if ttax_flag==false && ttax_count > 0 %>
|
||||
<% while num <= ttax_count %>
|
||||
<td>
|
||||
<%= number_with_precision(0, precision: precision.to_i ,delimiter: delimiter) %>
|
||||
</td>
|
||||
<td><%= number_with_precision(0, precision: precision.to_i, delimiter: delimiter) rescue '-' %></td>
|
||||
<% num += 1
|
||||
end %>
|
||||
<% end %>
|
||||
@@ -178,12 +158,9 @@
|
||||
<td><%= number_with_precision(0, precision: precision.to_i ,delimiter: delimiter) rescue '-' %></td>
|
||||
<% end %>
|
||||
<%end%>
|
||||
|
||||
<td><b><%= number_with_precision(old_grand_total.to_f, precision: precision.to_i ,delimiter: delimiter) rescue '0' %></b></td>
|
||||
|
||||
<td><b><%= rounding_adj.to_f rescue '-' %></b></td>
|
||||
<td><b><%= number_with_precision(grand_total.to_f, precision: precision.to_i ,delimiter: delimiter) rescue '-' %></b></td>
|
||||
<td></td>
|
||||
<td><b><%= number_with_precision(old_grand_total.to_f, precision: precision.to_i, delimiter: delimiter) rescue '0' %></b></td>
|
||||
<td><b><%= number_with_precision(rounding_adj.to_f, precision: precision.to_i, delimiter: delimiter) rescue '-' %></b></td>
|
||||
<td><b><%= number_with_precision(grand_total.to_f, precision: precision.to_i, delimiter: delimiter) rescue '-' %></b></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="3"> </td>
|
||||
@@ -209,4 +186,4 @@
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user