231 lines
8.2 KiB
Ruby
Executable File
231 lines
8.2 KiB
Ruby
Executable File
class Origami::SaleEditController < BaseOrigamiController
|
|
authorize_resource class: false
|
|
# Index for sale item void OR edit
|
|
def edit
|
|
sale_id = params[:sale_id]
|
|
if params[:table_id]
|
|
@table_id = params[:table_id]
|
|
@table_type = DiningFacility.find(@table_id).type
|
|
else
|
|
@table_id = nil
|
|
@table_type = nil
|
|
end
|
|
|
|
@cashier_type = params[:type]
|
|
@saleobj = Sale.find(sale_id)
|
|
end
|
|
|
|
# create item void. make duplicate old record and update qty and price
|
|
def item_void
|
|
saleitemId = params[:sale_item_id]
|
|
remark = params[:remark]
|
|
access_code = params[:access_code]
|
|
order_source = params[:type]
|
|
saleitemObj = SaleItem.find(saleitemId)
|
|
saleitemObj.status = 'void'
|
|
saleitemObj.remark = remark
|
|
saleitemObj.save
|
|
@newsaleitem = SaleItem.new
|
|
@newsaleitem = saleitemObj.dup
|
|
# @newsaleitem.save
|
|
@newsaleitem.qty = saleitemObj.qty * -1
|
|
@newsaleitem.price = saleitemObj.price * -1
|
|
@newsaleitem.is_taxable = 1
|
|
@newsaleitem.taxable_price = saleitemObj.taxable_price * -1
|
|
@newsaleitem.product_name = saleitemObj.product_name + ' (VOID)'
|
|
@newsaleitem.remark = remark
|
|
@newsaleitem.save
|
|
|
|
# re-calc tax
|
|
saleObj = Sale.find(saleitemObj.sale_id)
|
|
|
|
|
|
# booking = Booking.find_by_sale_id(saleitemObj.sale_id)
|
|
# booking.booking_orders.each do |bo|
|
|
# order = Order.find(bo.order_id)
|
|
# order.order_items.each do |o|
|
|
# if saleitemObj.product_code == o.item_code
|
|
# o.qty = saleitemObj.qty * -1
|
|
# o.price = saleitemObj.price * -1
|
|
# o.save
|
|
# end
|
|
# end
|
|
# end
|
|
# FOr Sale Audit
|
|
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 = "Void Sale Item ID #{saleitemObj.sale_item_id} | Receipt No #{saleObj.receipt_no} | Item Name ->#{saleitemObj.product_name}-Product Code ->#{saleitemObj.product_code}-Instance Code ->#{saleitemObj.item_instance_code}"
|
|
sale_audit = SaleAudit.record_audit_for_edit(saleitemObj.sale_id,current_user.name, action_by,remark,"SALEITEMVOID" )
|
|
|
|
saleObj.compute_by_sale_items(saleObj.total_discount, nil, order_source)
|
|
ProductCommission.create_product_commission(@newsaleitem, saleitemObj)
|
|
end
|
|
|
|
def item_foc
|
|
saleitemId = params[:sale_item_id]
|
|
remark = params[:remark]
|
|
access_code = params[:access_code]
|
|
order_source = params[:type]
|
|
saleitemObj = SaleItem.find(saleitemId)
|
|
saleitemObj.status = 'foc'
|
|
saleitemObj.remark = remark
|
|
saleitemObj.save
|
|
|
|
@newsaleitem = saleitemObj.dup
|
|
@newsaleitem.qty = saleitemObj.qty * -1
|
|
@newsaleitem.unit_price = saleitemObj.unit_price * 1
|
|
@newsaleitem.taxable_price = saleitemObj.taxable_price * -1
|
|
@newsaleitem.price = saleitemObj.price * -1
|
|
@newsaleitem.product_name = saleitemObj.product_name + ' (FOC)'
|
|
@newsaleitem.remark = remark
|
|
@newsaleitem.save
|
|
|
|
# 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)
|
|
|
|
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 = "FOC Sale Item ID #{saleitemObj.sale_item_id} | Receipt No #{saleObj.receipt_no} | Item Name ->#{saleitemObj.product_name}-Product Code ->#{saleitemObj.product_code}-Instance Code ->#{saleitemObj.item_instance_code}Receipt No #{saleObj.receipt_no}"
|
|
sale_audit = SaleAudit.record_audit_for_edit(saleitemObj.sale_id,current_user.name, action_by,remark,"SALEITEMFOC" )
|
|
|
|
saleObj.compute_by_sale_items(saleObj.total_discount, nil, order_source)
|
|
ProductCommission.create_product_commission(@newsaleitem, saleitemObj)
|
|
end
|
|
|
|
# def item_edit
|
|
# saleitemId = params[:sale_item_id]
|
|
# update_qty = params[:update_qty]
|
|
# update_price = params[:update_price]
|
|
# saleitemObj = SaleItem.find(saleitemId)
|
|
# saleitemObj.status = 'void'
|
|
# saleitemObj.save
|
|
# @newsaleitem = SaleItem.new
|
|
# @newsaleitem = saleitemObj.dup
|
|
# @newsaleitem.save
|
|
# @newsaleitem.qty = update_qty
|
|
# @newsaleitem.price = update_price
|
|
# @newsaleitem.unit_price = update_price
|
|
# @newsaleitem.taxable_price = update_price
|
|
# @newsaleitem.is_taxable = 0
|
|
# @newsaleitem.remark = 'edit'
|
|
# @newsaleitem.product_name = saleitemObj.product_name + " - updated"
|
|
# @newsaleitem.save
|
|
# end
|
|
|
|
def item_edit
|
|
saleitemId = params[:sale_item_id]
|
|
update_qty = params[:update_qty]
|
|
update_price = params[:update_price]
|
|
access_code = params[:access_code]
|
|
order_source = params[:type]
|
|
saleitemObj = SaleItem.find(saleitemId)
|
|
original_qty = saleitemObj.qty
|
|
original_price = saleitemObj.unit_price
|
|
sale = Sale.find(saleitemObj.sale_id)
|
|
|
|
saleitemObj.qty = update_qty
|
|
saleitemObj.price = update_qty.to_f * update_price.to_f
|
|
saleitemObj.unit_price = update_price
|
|
saleitemObj.taxable_price = update_qty.to_f * update_price.to_f
|
|
|
|
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 = "Update From Qty=>#{original_qty} Price=>[#{original_price}] to qty=>#{update_qty} Price =>[#{saleitemObj.price}]| Receipt No #{sale.receipt_no} | Item Name ->#{saleitemObj.product_name}-Product Code ->#{saleitemObj.product_code}-Instance Code ->#{saleitemObj.item_instance_code}"
|
|
sale_audit = SaleAudit.record_audit_for_edit(saleitemObj.sale_id,current_user.name, action_by,remark,"SALEITEMEDIT" )
|
|
# saleitemObj.remark = 'edit'
|
|
|
|
unless saleitemObj.product_name.include? 'UPDATED'
|
|
saleitemObj.product_name = saleitemObj.product_name + ' (UPDATED)'
|
|
end
|
|
|
|
saleitemObj.save
|
|
|
|
# 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)
|
|
|
|
# order.order_items.each do |o|
|
|
# if saleitemObj.product_code == o.item_code
|
|
# o.qty = update_qty
|
|
# o.price = update_price
|
|
# o.save
|
|
# end
|
|
# end
|
|
|
|
ProductCommission.edit_product_commission(saleitemObj)
|
|
end
|
|
|
|
# make cancel void item
|
|
def item_void_cancel
|
|
saleitemId = params[:sale_item_id]
|
|
access_code = params[:access_code]
|
|
order_source = params[:type]
|
|
|
|
saleitemObj = SaleItem.find(saleitemId)
|
|
|
|
saleObj = saleitemObj.sale
|
|
|
|
saleObj.sale_items.where(product_code: saleitemObj.product_code)
|
|
.where(qty: saleitemObj.qty.abs)
|
|
.where(unit_price: saleitemObj.unit_price)
|
|
.where(status: saleitemObj.status).first.update(status: nil, remark: nil)
|
|
|
|
saleitemObj.destroy
|
|
# re-calc tax
|
|
|
|
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)
|
|
ProductCommission.remove_product_commission(saleitemObj)
|
|
end
|
|
|
|
# remove all void items
|
|
def cancel_all_void
|
|
sale_id = params[:sale_id]
|
|
order_source = params[:type]
|
|
saleObj = Sale.find(sale_id)
|
|
saleObj.sale_items.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
|
|
saleObj.compute_by_sale_items(saleObj.total_discount,nil, order_source)
|
|
end
|
|
|
|
def apply_void
|
|
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
|
|
end
|
|
|
|
end
|