check changable tax on/off settings and customer tax profiles calculation
This commit is contained in:
@@ -251,6 +251,9 @@ For Dashboard Settings for supervisor and cashier
|
||||
For Customer Settings On/Off
|
||||
1) settings/lookups => {type:customer_settings, name:create, value: {1 or 0}}
|
||||
|
||||
For TaxProfiles On/Off
|
||||
1) settings/lookups => {type:changable_tax, name:change, value: {1 or 0}}
|
||||
|
||||
* ToDo list
|
||||
|
||||
1. Migration
|
||||
|
||||
@@ -130,6 +130,19 @@ class Origami::HomeController < BaseOrigamiController
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
#for changable on/off
|
||||
@changable_tax = true
|
||||
lookup_changable_tax = Lookup.collection_of('changable_tax')
|
||||
if !lookup_changable_tax.empty?
|
||||
lookup_changable_tax.each do |changable_tax|
|
||||
if changable_tax[0].downcase == "change"
|
||||
if changable_tax[1] == '0'
|
||||
@changable_tax = false
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def check_emp_access_code
|
||||
|
||||
@@ -271,6 +271,20 @@ class Origami::PaymentsController < BaseOrigamiController
|
||||
if !@lookup_pdf.nil?
|
||||
@pdf_view = @lookup_pdf.value
|
||||
end
|
||||
|
||||
#for changable on/off
|
||||
@changable_tax = true
|
||||
lookup_changable_tax = Lookup.collection_of('changable_tax')
|
||||
if !lookup_changable_tax.empty?
|
||||
lookup_changable_tax.each do |changable_tax|
|
||||
if changable_tax[0].downcase == "change"
|
||||
if changable_tax[1] == '0'
|
||||
@changable_tax = false
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@shop = shop_detail #show shop info
|
||||
|
||||
@customer_lists = Customer.where("customer_id = 'CUS-000000000001' or customer_id = 'CUS-000000000002'")
|
||||
|
||||
@@ -12,103 +12,81 @@ class Origami::RequestBillsController < ApplicationController
|
||||
sale_order=SaleOrder.new
|
||||
|
||||
if !ShiftSale.current_shift.nil?
|
||||
tax_data = TaxProfile.unscoped.where("group_type='cashier'").pluck(:id)
|
||||
customer = Customer.find('CUS-000000000001')
|
||||
|
||||
puts "data => "
|
||||
puts tax_data
|
||||
puts customer.tax_profiles
|
||||
arr_data = []
|
||||
tax_data.each do |value1|
|
||||
puts JSON.stringify(customer.tax_profiles)
|
||||
if customer.include? value1
|
||||
arr_data << value1
|
||||
end
|
||||
order_id = params[:id] # order_id
|
||||
bk_order = BookingOrder.find_by_order_id(order_id)
|
||||
order = Order.find(order_id)
|
||||
check_booking = Booking.find_by_booking_id(bk_order.booking_id)
|
||||
if check_booking.dining_facility_id.to_i > 0
|
||||
table = DiningFacility.find(check_booking.dining_facility_id)
|
||||
else
|
||||
table = nil
|
||||
end
|
||||
puts "unique => "
|
||||
puts arr_data
|
||||
# tax_profiles = TaxProfile.unscoped.where("id in ?",arr_data)
|
||||
# puts tax_profiles.to_json
|
||||
# order_id = params[:id] # order_id
|
||||
# bk_order = BookingOrder.find_by_order_id(order_id)
|
||||
# order = Order.find(order_id)
|
||||
# check_booking = Booking.find_by_booking_id(bk_order.booking_id)
|
||||
# if check_booking.dining_facility_id.to_i > 0
|
||||
# table = DiningFacility.find(check_booking.dining_facility_id)
|
||||
# else
|
||||
# table = nil
|
||||
# end
|
||||
|
||||
# if check_booking.sale_id.nil?
|
||||
# # Create Sale if it doesn't exist
|
||||
# @status, @sale_id = @sale.generate_invoice_from_booking(check_booking.id,current_login_employee, current_user, order.source)
|
||||
# @sale_data = Sale.find_by_sale_id(@sale_id)
|
||||
# @sale_items = SaleItem.where("sale_id=?",@sale_id)
|
||||
if check_booking.sale_id.nil?
|
||||
# Create Sale if it doesn't exist
|
||||
@status, @sale_id = @sale.generate_invoice_from_booking(check_booking.id,current_login_employee, current_user, order.source)
|
||||
@sale_data = Sale.find_by_sale_id(@sale_id)
|
||||
@sale_items = SaleItem.where("sale_id=?",@sale_id)
|
||||
|
||||
# # in-duty update
|
||||
# in_duties = InDuty.where("booking_id=?",bk_order.booking_id)
|
||||
# if !in_duties.empty?
|
||||
# in_duties.each do |in_duty|
|
||||
# induty = InDuty.find(in_duty.id)
|
||||
# induty.sale_id = @sale_id
|
||||
# induty.save
|
||||
# end
|
||||
# end
|
||||
# else
|
||||
# @sale_data = Sale.find_by_sale_id(check_booking.sale_id)
|
||||
# @sale_items = SaleItem.where("sale_id=?",@sale_data.sale_id)
|
||||
# end
|
||||
# in-duty update
|
||||
in_duties = InDuty.where("booking_id=?",bk_order.booking_id)
|
||||
if !in_duties.empty?
|
||||
in_duties.each do |in_duty|
|
||||
induty = InDuty.find(in_duty.id)
|
||||
induty.sale_id = @sale_id
|
||||
induty.save
|
||||
end
|
||||
end
|
||||
else
|
||||
@sale_data = Sale.find_by_sale_id(check_booking.sale_id)
|
||||
@sale_items = SaleItem.where("sale_id=?",@sale_data.sale_id)
|
||||
end
|
||||
|
||||
# # Bind shift sale id to sale
|
||||
# # @sale_data.shift_sale_id = shift.id
|
||||
# # @sale_data.save
|
||||
# Bind shift sale id to sale
|
||||
# @sale_data.shift_sale_id = shift.id
|
||||
# @sale_data.save
|
||||
|
||||
# action_by = current_user.name
|
||||
# type = "REQUEST_BILL"
|
||||
action_by = current_user.name
|
||||
type = "REQUEST_BILL"
|
||||
|
||||
# remark = "Request bill Receipt No #{@sale_data.receipt_no}"
|
||||
# sale_audit = SaleAudit.record_audit_sale(@sale_data.sale_id,remark,action_by,type )
|
||||
remark = "Request bill Receipt No #{@sale_data.receipt_no}"
|
||||
sale_audit = SaleAudit.record_audit_sale(@sale_data.sale_id,remark,action_by,type )
|
||||
|
||||
# # Promotion Activation
|
||||
# Promotion.promo_activate(@sale)
|
||||
# Promotion Activation
|
||||
Promotion.promo_activate(@sale)
|
||||
|
||||
# #bill channel
|
||||
# if ENV["SERVER_MODE"] == 'cloud'
|
||||
# from = request.subdomain + "." + request.domain
|
||||
# else
|
||||
# from = ""
|
||||
# end
|
||||
#bill channel
|
||||
if ENV["SERVER_MODE"] == 'cloud'
|
||||
from = request.subdomain + "." + request.domain
|
||||
else
|
||||
from = ""
|
||||
end
|
||||
|
||||
# ActionCable.server.broadcast "bill_channel",table: table, from: from
|
||||
# if order.source == "quick_service"
|
||||
# result = {:status=> @status, :data => @sale.sale_id }
|
||||
# render :json => result.to_json
|
||||
# else
|
||||
ActionCable.server.broadcast "bill_channel",table: table, from: from
|
||||
if order.source == "quick_service"
|
||||
result = {:status=> @status, :data => @sale.sale_id }
|
||||
render :json => result.to_json
|
||||
else
|
||||
|
||||
# if ENV["SERVER_MODE"] != "cloud" #no print in cloud server
|
||||
if ENV["SERVER_MODE"] != "cloud" #no print in cloud server
|
||||
|
||||
# printer = PrintSetting.find_by_unique_code("CheckInOutPdf")
|
||||
# unique_code = "CheckInOutPdf"
|
||||
# booking = Booking.find_by_booking_id(bk_order.booking_id)
|
||||
printer = PrintSetting.find_by_unique_code("CheckInOutPdf")
|
||||
unique_code = "CheckInOutPdf"
|
||||
booking = Booking.find_by_booking_id(bk_order.booking_id)
|
||||
|
||||
# # print when complete click
|
||||
# order_queue_printer = Printer::OrderQueuePrinter.new(printer)
|
||||
# print when complete click
|
||||
order_queue_printer = Printer::OrderQueuePrinter.new(printer)
|
||||
|
||||
# if !printer.nil?
|
||||
# order_queue_printer.print_check_in_out(printer, booking, table)
|
||||
# end
|
||||
# end
|
||||
# end
|
||||
if !printer.nil?
|
||||
order_queue_printer.print_check_in_out(printer, booking, table)
|
||||
end
|
||||
end
|
||||
end
|
||||
else
|
||||
@status = false
|
||||
@error_message = "No Current Open Shift for This Employee"
|
||||
end
|
||||
|
||||
def difference(other)
|
||||
h = other.each_with_object(Hash.new(0)) { |e,h| h[e] += 1 }
|
||||
reject { |e| h[e] > 0 && h[e] -= 1 }
|
||||
end
|
||||
|
||||
# Not Use for these printed bill cannot give customer
|
||||
# unique_code = "ReceiptBillPdf"
|
||||
# #shop detail
|
||||
|
||||
@@ -154,6 +154,19 @@ class Origami::RoomsController < BaseOrigamiController
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
#for changable on/off
|
||||
@changable_tax = true
|
||||
lookup_changable_tax = Lookup.collection_of('changable_tax')
|
||||
if !lookup_changable_tax.empty?
|
||||
lookup_changable_tax.each do |changable_tax|
|
||||
if changable_tax[0].downcase == "change"
|
||||
if changable_tax[1] == '0'
|
||||
@changable_tax = false
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
@@ -25,6 +25,7 @@ class Origami::SalesController < BaseOrigamiController
|
||||
def add_to_existing_invoice
|
||||
dining = params[:dining_id]
|
||||
sale_id = params[:sale_id]
|
||||
tax_type = params[:tax_type]
|
||||
table = DiningFacility.find(dining)
|
||||
existing_booking = Booking.find_by_sale_id(sale_id)
|
||||
table.bookings.each do |booking|
|
||||
@@ -51,7 +52,7 @@ class Origami::SalesController < BaseOrigamiController
|
||||
end
|
||||
|
||||
# Re-compute for add
|
||||
saleobj.compute(order.source)
|
||||
saleobj.compute(order.source,tax_type)
|
||||
saleobj.save
|
||||
order.save
|
||||
booking.save
|
||||
|
||||
@@ -322,7 +322,7 @@ class Sale < ApplicationRecord
|
||||
end
|
||||
|
||||
#compute - invoice total
|
||||
def compute(order_source = nil)
|
||||
def compute(order_source = nil, tax_type = nil)
|
||||
sales_items = self.sale_items
|
||||
|
||||
#Computation Fields
|
||||
@@ -341,7 +341,7 @@ class Sale < ApplicationRecord
|
||||
# total_taxable = total_taxable + (item.taxable_price * item.qty)
|
||||
end
|
||||
|
||||
apply_tax(total_taxable, order_source)
|
||||
apply_tax(total_taxable, order_source, tax_type)
|
||||
|
||||
self.total_amount = subtotal_price
|
||||
self.total_discount = total_discount
|
||||
@@ -434,8 +434,21 @@ class Sale < ApplicationRecord
|
||||
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)
|
||||
# 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.unscoped.where(:id => arr_tax)
|
||||
else
|
||||
tax_profiles = TaxProfile.unscoped.where("group_type=?",order_source)
|
||||
end
|
||||
else
|
||||
tax_profiles = TaxProfile.unscoped.where("group_type=?",order_source)
|
||||
end
|
||||
|
||||
# #Creat new tax records
|
||||
if order_source.to_s == "emenu"
|
||||
order_source = "cashier"
|
||||
@@ -505,7 +518,7 @@ class Sale < ApplicationRecord
|
||||
end
|
||||
|
||||
# Tax Calculate
|
||||
def apply_tax(total_taxable, order_source = nil)
|
||||
def apply_tax(total_taxable, order_source = nil, tax_type = nil)
|
||||
shop = Shop.first
|
||||
|
||||
#if tax is not apply create new record
|
||||
@@ -522,29 +535,32 @@ class Sale < ApplicationRecord
|
||||
order_source = "cashier"
|
||||
end
|
||||
|
||||
tax_data = TaxProfile.unscoped.where("group_type=?",order_source).pluck(:id)
|
||||
customer = Customer.find(self.customer_id).tax_profiles
|
||||
# tax_data = TaxProfile.unscoped.where("group_type=?",order_source).pluck(:id)
|
||||
# customer = Customer.find(self.customer_id).tax_profiles
|
||||
|
||||
arr_tax = []
|
||||
|
||||
arr_tax = customer - tax_data
|
||||
arr_tax = unique_tax_profiles(order_source, self.customer_id)
|
||||
|
||||
if !arr_tax.empty?
|
||||
tax_profiles = TaxProfile.unscoped.where("id in ?",arr_tax)
|
||||
if tax_type.nil?
|
||||
tax_profiles = TaxProfile.unscoped.where(:id => arr_tax)
|
||||
else
|
||||
tax_profiles = TaxProfile.unscoped.where("group_type=?",order_source)
|
||||
end
|
||||
else
|
||||
tax_profiles = TaxProfile.unscoped.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
|
||||
# customer.tax_profiles.each do |cus_tax|
|
||||
# if cus_tax.to_i == tax.id
|
||||
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
|
||||
|
||||
# substract , to give after discount
|
||||
total_tax = total_taxable - self.total_discount
|
||||
total_tax = total_taxable - total_discount
|
||||
#include or execulive
|
||||
if tax.inclusive
|
||||
tax_incl_exec = "inclusive"
|
||||
@@ -555,16 +571,43 @@ class Sale < ApplicationRecord
|
||||
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
|
||||
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
|
||||
end
|
||||
end
|
||||
self.tax_type = tax_incl_exec
|
||||
@@ -2844,9 +2887,21 @@ def self.get_sale_data_for_other_payment_credit(sale_id)
|
||||
return query
|
||||
end
|
||||
|
||||
def difference(other)
|
||||
h = other.each_with_object(Hash.new(0)) { |e,h| h[e] += 1 }
|
||||
reject { |e| h[e] > 0 && h[e] -= 1 }
|
||||
def unique_tax_profiles(order_source, customer_id)
|
||||
tax_data = TaxProfile.unscoped.where("group_type='#{order_source}'").pluck(:id)
|
||||
customer_tax_profiles = Customer.find(customer_id).tax_profiles
|
||||
|
||||
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
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
@@ -370,7 +370,7 @@
|
||||
<% else %>
|
||||
No Tax
|
||||
<% end %></strong><br>
|
||||
<%if !@webview %>
|
||||
<%if !@webview && @changable_tax %>
|
||||
<button class="btn btn-link waves-effect bg-info change_tax">Change Tax</button>
|
||||
<% end %>
|
||||
</td>
|
||||
@@ -1103,10 +1103,11 @@
|
||||
var dining_id = "<%= @dining.id %>";
|
||||
var sale_id = $("#sale_id").val(); //<%= @obj_sale.sale_id rescue "" %>
|
||||
var ajax_url = "/origami/sale/append_order";
|
||||
var tax_type = localStorage.getItem("tax_type");
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: ajax_url,
|
||||
data: 'dining_id=' + dining_id + "&sale_id=" + sale_id,
|
||||
data: 'dining_id=' + dining_id + "&sale_id=" + sale_id + "&tax_type=" + tax_type,
|
||||
success: function (result) {
|
||||
swal({
|
||||
title: "Information!",
|
||||
|
||||
@@ -118,7 +118,7 @@
|
||||
<% else %>
|
||||
No Tax
|
||||
<% end %></strong><br>
|
||||
<%if @sale_payment.nil? %>
|
||||
<%if @sale_payment.nil? && @changable_tax %>
|
||||
<button class="btn btn-link waves-effect bg-info change_tax">Change Tax</button>
|
||||
<% end %>
|
||||
</td>
|
||||
|
||||
@@ -404,7 +404,7 @@
|
||||
<% else %>
|
||||
No Tax
|
||||
<% end %></strong><br>
|
||||
<%if !@webview %>
|
||||
<%if !@webview && @changable_tax %>
|
||||
<button class="btn btn-link waves-effect bg-info change_tax">Change Tax</button>
|
||||
<% end %>
|
||||
</td>
|
||||
@@ -1167,10 +1167,11 @@ $('#add_invoice').on('click',function(){
|
||||
var dining_id = "<%= @room.id %>"
|
||||
var sale_id = $("#sale_id").val(); //<%= @obj_sale.sale_id rescue "" %>
|
||||
var ajax_url = "/origami/sale/append_order";
|
||||
var tax_type = localStorage.getItem("tax_type");
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: ajax_url,
|
||||
data: 'dining_id='+ dining_id + "&sale_id=" + sale_id,
|
||||
data: 'dining_id='+ dining_id + "&sale_id=" + sale_id + "&tax_type=" + tax_type,
|
||||
success:function(result){
|
||||
swal({
|
||||
title: "Information!",
|
||||
|
||||
Reference in New Issue
Block a user