api discount and change tax

This commit is contained in:
Thein Lin Kyaw
2023-10-17 16:52:12 +06:30
parent 81eb30c03a
commit 3441811bb0
27 changed files with 1225 additions and 1067 deletions

View File

@@ -42,38 +42,56 @@ class Foodcourt::DiscountsController < BaseFoodcourtController
table = nil
table_id = nil
end
# 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
if discount_items.length > 0
#save sale item for discount
discount_items.each do |di|
origin_sale_item = SaleItem.find(di["id"])
discount = di['discount'].to_d
discount_type = di['discount_type']
sale_item = SaleItem.new
sale_item = SaleItem.find(di["id"])
discount_item = SaleItem.find_or_initialize_by(parent_id: di['id'])
sale_item.menu_category_code = origin_sale_item.menu_category_code
sale_item.menu_category_name = origin_sale_item.menu_category_name
discount_item.discount = discount
if discount_type == 'nett'
discount_item.discount_type = 'nett'
discount_item.product_name = "#{sale_item.product_name} - discount"
unit_price = discount
elsif discount_type == 'percentage'
discount_item.discount_type = 'percentage'
discount_item.product_name = "#{sale_item.product_name} - discount(#{discount}%)"
unit_price = sale_item.unit_price * (discount / 100)
end
sale_item.sale_id = sale_id
sale_item.product_code = origin_sale_item != nil ? origin_sale_item.product_code : sale_id
sale_item.product_name = di["name"]
sale_item.item_instance_code = origin_sale_item.item_instance_code
sale_item.product_alt_name = ""
sale_item.status = "Discount"
price = unit_price * sale_item.qty
sale_item.qty = -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
discount_item.menu_category_code = sale_item.menu_category_code
discount_item.menu_category_name = sale_item.menu_category_name
sale_item.price = di["price"]
sale_item.save
discount_item.sale_id = sale_id
discount_item.product_code = sale_item != nil ? sale_item.product_code : sale_id
discount_item.item_instance_code = sale_item.item_instance_code
discount_item.product_alt_name = ""
discount_item.status = "Discount"
discount_item.qty = sale_item.qty
discount_item.unit_price = unit_price
discount_item.taxable_price = -price
discount_item.is_taxable = sale_item.is_taxable
discount_item.account_id = sale_item.account_id
discount_item.price = -price
discount_item.save
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" )
sale_audit = SaleAudit.record_audit_discount(discount_item.sale_id, sale.cashier_name, action_by, remark, "ITEMDISCOUNT" )
end
end
@@ -102,7 +120,6 @@ class Foodcourt::DiscountsController < BaseFoodcourtController
end
end
render :json => result.to_json
end
@@ -121,24 +138,31 @@ class Foodcourt::DiscountsController < BaseFoodcourtController
table = nil
end
if discount_items.length > 0
#destroy sale item for discount
discount_items.each do |di|
sale_item = SaleItem.find(di["id"])
sale.total_amount = (sale.total_amount + sale_item.price.abs)
discount_item = sale_item.discount_item
next if discount_item.nil?
sale.total_amount = (sale.total_amount + discount_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 "
remark = "Remove Item Discount Item Name ->#{discount_item.product_name}-Product Code ->#{discount_item.product_code} | Price [#{discount_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 ->#{discount_item.product_name}-Product Code ->#{discount_item.product_code} | Price [#{discount_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
discount_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.total_discount, nil, order_source)
if table.nil?

View File

@@ -75,10 +75,10 @@ class Foodcourt::OrdersController < BaseFoodcourtController
end
end
@current_shift = current_user.current_shift || ShiftSale.current_shift
status = ['completed', 'void']
sale_status = ['completed', 'void']
@pending_sales = Sale.where('shift_sale_id = ? AND sale_status NOT IN (?)', @current_shift.id, status)
@pending_completed = Sale.where('shift_sale_id = ? AND sale_status IN (?)', @current_shift.id, status)
@pending_sales = Sale.where('shift_sale_id = ? AND sale_status NOT IN (?)', @current_shift.id, sale_status)
@pending_completed = Sale.where('shift_sale_id = ? AND sale_status IN (?)', @current_shift.id, sale_status)
@pending_orders = Sale.pending_order('food_court')
@completed, @bookings = Sale.get_foodcourt_current_shift_orders

View File

@@ -25,19 +25,24 @@ class Foodcourt::SaleEditController < BaseFoodcourtController
saleitemObj.status = 'void'
saleitemObj.remark = remark
saleitemObj.save
@newsaleitem = SaleItem.new
@newsaleitem = saleitemObj.dup
# @newsaleitem.save
@newsaleitem.parent_id = saleitemObj.sale_item_id
@newsaleitem.qty = saleitemObj.qty * -1
@newsaleitem.price = saleitemObj.price * -1
@newsaleitem.is_taxable = 1
@newsaleitem.is_taxable = saleitemObj.is_taxable
@newsaleitem.taxable_price = saleitemObj.taxable_price * -1
@newsaleitem.product_name = saleitemObj.product_name + ' (VOID)'
@newsaleitem.remark = remark
@newsaleitem.save
if saleitemObj.discount_item
saleitemObj.discount_item.destroy
end
# re-calc tax
saleObj = Sale.find(saleitemObj.sale_id)
# FOr Sale Audit
action_by = current_user.name
if access_code != "null" && current_user.role == "cashier"
@@ -47,7 +52,6 @@ class Foodcourt::SaleEditController < BaseFoodcourtController
sale_audit = SaleAudit.record_audit_for_edit(saleitemObj.sale_id,current_user.name, action_by,remark,"SALEITEMVOID" )
saleObj.compute_by_sale_items(saleObj.total_discount, nil, order_source)
ProductCommission.create_product_commission(@newsaleitem, saleitemObj)
end
def item_foc
@@ -61,19 +65,27 @@ class Foodcourt::SaleEditController < BaseFoodcourtController
saleitemObj.save
@newsaleitem = saleitemObj.dup
@newsaleitem.parent_id = saleitemObj.sale_item_id
@newsaleitem.qty = saleitemObj.qty * -1
@newsaleitem.unit_price = saleitemObj.unit_price * 1
@newsaleitem.is_taxable = saleitemObj.is_taxable
@newsaleitem.taxable_price = saleitemObj.taxable_price * -1
@newsaleitem.price = saleitemObj.price * -1
@newsaleitem.product_name = saleitemObj.product_name + ' (FOC)'
@newsaleitem.remark = remark
@newsaleitem.save
if saleitemObj.discount_item
saleitemObj.discount_item.destroy
end
# re-calc tax
saleObj = Sale.find(saleitemObj.sale_id)
order_id = SaleOrder.find_by_sale_id(saleitemObj.sale_id).order_id
order = Order.find(order_id)
oqs_item = AssignedOrderItem.assigned_order_item_by_job(order_id)
ActionCable.server.broadcast "order_queue_station_channel",order: oqs_item
action_by = current_user.name
if access_code != "null" && current_user.role == "cashier"
@@ -83,7 +95,6 @@ class Foodcourt::SaleEditController < BaseFoodcourtController
sale_audit = SaleAudit.record_audit_for_edit(saleitemObj.sale_id,current_user.name, action_by,remark,"SALEITEMFOC" )
saleObj.compute_by_sale_items(saleObj.total_discount, nil, order_source)
ProductCommission.create_product_commission(@newsaleitem, saleitemObj)
end
def item_edit
@@ -110,47 +121,47 @@ class Foodcourt::SaleEditController < BaseFoodcourtController
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'
saleitemObj.product_name = saleitemObj.product_name + ' (UPDATED)'
end
saleitemObj.save
sale.compute_by_sale_items(sale.total_discount, nil, order_source)
# re-calc tax
saleObj = Sale.find(saleitemObj.sale_id)
ProductCommission.edit_product_commission(saleitemObj)
sale.compute_by_sale_items(saleObj.total_discount, nil, order_source)
end
# make cancel void item
def item_void_cancel
saleitemId = params[:sale_item_id]
access_code = params[:access_code]
order_source = params[:type]
Sale.transaction do
saleitemId = params[:sale_item_id]
access_code = params[:access_code]
order_source = params[:type]
saleitemObj = SaleItem.find(saleitemId)
saleitemObj = SaleItem.find(saleitemId)
saleObj = saleitemObj.sale
saleObj = saleitemObj.sale
saleObj.sale_items.where(product_code: saleitemObj.product_code)
.where(qty: saleitemObj.qty.abs)
.where(unit_price: saleitemObj.unit_price)
.where(status: saleitemObj.status).first.update(status: nil, remark: nil)
saleitemObj.destroy
# re-calc tax
order_id = SaleOrder.find_by_sale_id(saleitemObj.sale_id).order_id
order = Order.find(order_id)
action_by = current_user.name
if access_code != "null" && current_user.role == "cashier"
action_by = Employee.find_by_emp_id(access_code).name
if saleitemObj.status == 'void'
saleitemObj.void_item.destroy
else saleitemObj.status == 'foc'
saleitemObj.foc_item.destroy
end
remark = "Cancle Void Sale Item ID #{saleitemObj.sale_item_id} | Item Name ->#{saleitemObj.product_name}-Product Code ->#{saleitemObj.product_code}-Instance Code ->#{saleitemObj.item_instance_code}|Receipt No #{saleObj.receipt_no}"
sale_audit = SaleAudit.record_audit_for_edit(saleitemObj.sale_id,current_user.name, action_by,remark,"ITEMCANCELVOID" )
saleObj.compute_by_sale_items(saleObj.total_discount, nil, order_source)
ProductCommission.remove_product_commission(saleitemObj)
saleitemObj.update(status: nil, remark: nil)
# re-calc tax
order_id = SaleOrder.find_by_sale_id(saleitemObj.sale_id).order_id
order = Order.find(order_id)
action_by = current_user.name
if access_code != "null" && current_user.role == "cashier"
action_by = Employee.find_by_emp_id(access_code).name
end
remark = "Cancle Void Sale Item ID #{saleitemObj.sale_item_id} | Item Name ->#{saleitemObj.product_name}-Product Code ->#{saleitemObj.product_code}-Instance Code ->#{saleitemObj.item_instance_code}|Receipt No #{saleObj.receipt_no}"
sale_audit = SaleAudit.record_audit_for_edit(saleitemObj.sale_id,current_user.name, action_by,remark,"ITEMCANCELVOID" )
saleObj.compute_by_sale_items(saleObj.total_discount, nil, order_source)
end
end
# remove all void items
@@ -158,14 +169,13 @@ class Foodcourt::SaleEditController < BaseFoodcourtController
sale_id = params[:sale_id]
order_source = params[:type]
saleObj = Sale.find(sale_id)
saleObj.sale_items.each do |item|
saleObj.sale_items.where(status: ['foc', 'void']).each do |item|
if item.qty.to_i < 0
item.destroy
else
item.status = nil
end
item.save
ProductCommission.remove_product_commission(item)
end
saleObj.sale_items.reset
# re-calc tax
@@ -176,10 +186,7 @@ class Foodcourt::SaleEditController < BaseFoodcourtController
sale_id = params[:sale_id]
order_source = params[:type]
saleObj = Sale.find(sale_id)
saleObj.compute_without_void(order_source)
saleObj.sale_items.each do |item|
ProductCommission.remove_product_commission(item)
end
saleObj.compute_by_sale_items(saleObj.total_discount, nil, order_source)
end
end