customer name filter

This commit is contained in:
Thein Lin Kyaw
2020-07-19 19:31:14 +06:30
parent 3f97f30c36
commit ced6a09095
12 changed files with 224 additions and 141 deletions

View File

@@ -26,7 +26,7 @@ class Sale < ApplicationRecord
has_one :booking
has_many :product_commissions
before_validation :round_to_precision
before_save :member_discount, :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}'") }
@@ -1167,7 +1167,7 @@ def self.get_menu_item_query(order_by)
end
#product sale report query
def self.get_shift_sales_by_receipt_no(shift_sale_range,shift,from,to,payment_type)
def self.get_shift_sales_by_receipt_no(shift_sale_range, shift, from, to, payment_type, customer_filter)
## => left join -> show all sales although no orders
if payment_type.blank?
payment_type = ''
@@ -1175,29 +1175,40 @@ def self.get_shift_sales_by_receipt_no(shift_sale_range,shift,from,to,payment_ty
payment_type = " and sale_payments.payment_method = '#{payment_type}'"
end
query = Sale.includes(:sale_items).select("sales.*,sale_payments.*,df.name,df.type")
query = Sale.includes(:sale_items).select("sales.*, sale_payments.*")
.select("customers.customer_id, customers.name as customer_name, df.name, df.type")
.where("sale_status= 'completed' and sale_payments.payment_amount != 0 #{payment_type}")
.joins("join sale_payments on sale_payments.sale_id = sales.sale_id")
.joins("join bookings on bookings.sale_id = sales.sale_id")
.joins("left join dining_facilities df on df.id = bookings.dining_facility_id")
.group("sales.sale_id")
if customer_filter.present?
query = query.joins(sanitize_sql_array(["INNER JOIN customers ON customers.customer_id = sales.customer_id AND " +
"customers.name LIKE :filter", filter: "%#{customer_filter}%"]))
else
query = query.joins(:customer)
end
if shift.present?
query = query.where("sales.shift_sale_id in (?)", shift.to_a)
elsif shift_sale_range.present?
query = query.where("sales.shift_sale_id in (?)",shift_sale_range.to_a)
query = query.where("sales.shift_sale_id in (?)", shift_sale_range.to_a)
else
query = query.where("sales.receipt_date between ? and ?",from,to)
query = query.where("sales.receipt_date between ? and ?", from, to)
end
return query
end
def self.get_shift_sales_by_receipt_no_detail(shift_sale_range,shift,from,to,payment_type)
def self.get_shift_sales_by_receipt_no_detail(shift_sale_range, shift, from, to, payment_type, customer_filter)
## => left join -> show all sales although no orders
query = Sale.includes([:customer, :survey, :sale_payments])
.includes(:bookings => :dining_facility)
query = Sale.includes([:survey, :sale_payments])
.select("sales.*, SUM(sale_payments.payment_amount) AS payments_for_credits_amount")
.joins(:bookings)
.select("dining_facilities.type AS table_type, dining_facilities.name AS table_name")
.select("customers.customer_id, customers.name AS customer_name, customers.company AS customer_company")
.joins(:booking => :dining_facility)
.joins("INNER JOIN sale_payments sp ON sp.sale_id = sales.sale_id")
.left_joins(:payments_for_credits)
.completed
@@ -1205,6 +1216,13 @@ def self.get_shift_sales_by_receipt_no_detail(shift_sale_range,shift,from,to,pay
.group(:sale_id)
.order(:receipt_date)
if customer_filter.present?
query = query.joins(sanitize_sql_array(["INNER JOIN customers ON customers.customer_id = sales.customer_id AND " +
"customers.name LIKE :filter", filter: "%#{customer_filter}%"]))
else
query = query.joins(:customer)
end
if payment_type.present?
if payment_type == 'card'
query = query.where(sanitize_sql_array(["sp.payment_method IN (?)", SalePayment::CARD]))
@@ -1226,7 +1244,7 @@ def self.get_shift_sales_by_receipt_no_detail(shift_sale_range,shift,from,to,pay
return query
end
def self.get_by_shift_sale_credit_payment(shift_sale_range,shift,from,to,filter,order_source)
def self.get_by_shift_sale_credit_payment(shift_sale_range,shift,from,to,filter,customer_filter,order_source)
payments_for_credits = SalePayment.select("
sales.sale_id,
DATE_FORMAT(CONVERT_TZ(sale_payments.created_at,'+00:00','+06:30'),'%d %b %y %h:%i%p') as credit_payment_receipt_date,
@@ -1253,11 +1271,17 @@ def self.get_by_shift_sale_credit_payment(shift_sale_range,shift,from,to,filter,
IFNULL(payments_for_credits.credit_payment_cashier_name, '-') as credit_payment_cashier_name,
IFNULL(payments_for_credits.credit_payment_shift_name, '-') as credit_payment_shift_name")
.joins("LEFT JOIN (#{payments_for_credits}) payments_for_credits ON payments_for_credits.sale_id = sales_sale_payments.sale_id")
.joins(:sale => :customer)
.joins(:sale => :orders)
.credits
.where("sales_sale_payments.sale_status = ?", 'completed')
if customer_filter.present?
credits = credits.joins(sanitize_sql_array(["INNER JOIN customers ON customers.customer_id = sales_sale_payments.customer_id AND " +
"customers.name LIKE :filter", filter: "%#{customer_filter}%"]))
else
credits = credits.joins(:sale => :customer)
end
if order_source.present?
if order_source == "cashier"
credits = credits.where("orders.source IN (?)", ['cashier', 'emenu'])
@@ -2297,6 +2321,50 @@ private
end
end
def member_discount
return unless will_save_change_to_customer_id? || will_save_change_to_total_amount?
if self.customer && self.customer.membership_id.present?
membership = MembershipSetting.find_by_membership_type("paypar_url")
memberaction = MembershipAction.find_by_membership_type("get_member_campaign")
merchant_uid = memberaction.merchant_account_id.to_s
campaign_type_id = memberaction.additional_parameter["campaign_type_id"]
auth_token = memberaction.auth_token
url = "#{membership.gateway_url}#{memberaction.gateway_url}"
begin
response = HTTParty.get(url,
:body => {
member_group_id: sObj.customer.membership_type,
merchant_uid: merchant_uid,
campaign_type_id: campaign_type_id,
auth_token: auth_token
}.to_json,
:headers => {
'Content-Type' => 'application/json',
'Accept' => 'application/json; version=3'
}, :timeout => 10)
rescue Net::OpenTimeout
response = { "status": false , "message": " Connection timeout" }
rescue OpenURI::HTTPError
response = { "status": false, "message": "Can't connect server"}
rescue SocketError
response = { "status": false, "message": "Can't connect server"}
end
return unless response['status'] && response['membership_campaign_data'].present?
Account.where(discount: true).inject(0) do |dis, acc|
rule = response['membership_campaign_data'].find { |c| c['rules_type'].downcase.strip == acc.title.downcase.strip }
dis += acc.sale_items.inject(0) { |i| i.account_id == acc.id ? i.price : 0 } * rule["change_unit"].to_i / rule["base_unit"].to_i
end
else
end
end
def round_to_precision
if (self.total_amount % 1 > 0 || self.total_discount % 1 > 0 || self.total_tax % 1 > 0)
self.total_amount = self.total_amount.round(precision)

View File

@@ -684,7 +684,7 @@ class SalePayment < ApplicationRecord
end
end
sale.save!
if sale.sale_status == 'completed'
table_update_status(sale)
update_shift