Pull from master
This commit is contained in:
@@ -354,6 +354,11 @@ class Customer < ApplicationRecord
|
||||
|
||||
#new customer for doemal
|
||||
def self.addCustomer(params)
|
||||
if params[:gender] == "female"
|
||||
gender = "Female"
|
||||
else
|
||||
gender = "Male"
|
||||
end
|
||||
customer = Customer.new
|
||||
customer.name = params[:name]
|
||||
customer.email = params[:email]
|
||||
|
||||
@@ -160,7 +160,7 @@ class Menu < ApplicationRecord
|
||||
account = Account.create({title: row["Account"], account_type: "0"})
|
||||
end
|
||||
|
||||
menu_itm = MenuItem.create(item_code: row["Item Code"], name: row["Item Name"], account_id: account.id, alt_name: row["Item AltName"], image_path: "", description: '', information: '', unit: '', type: "SimpleMenuItem", menu_category_id: menu_cat.id, item_attributes: "[]", item_options: "[]", account_id: account_id, is_sub_item: 0, is_available: 1, created_by: created_by)
|
||||
menu_itm = MenuItem.create(item_code: row["Item Code"], name: row["Item Name"], account_id: account.id, alt_name: row["Item AltName"], image_path: "", description: '', information: '', unit: '', type: "SimpleMenuItem", menu_category_id: menu_cat.id, item_attributes: "[]", item_options: "[]", is_sub_item: 0, is_available: 1, created_by: created_by)
|
||||
# else
|
||||
# status = status + "Item Code already exists for " + row["Item Name"] + "."
|
||||
end
|
||||
|
||||
@@ -7,13 +7,18 @@ class OrderReservation < ApplicationRecord
|
||||
has_many :order_reservation_items
|
||||
belongs_to :delivery
|
||||
|
||||
SEND_TO_KITCHEN = "send_to_kitchen"
|
||||
READY_TO_DELIVERY = "ready_to_deliver"
|
||||
DELIVERED = "delivered"
|
||||
COMPLETED = "completed"
|
||||
|
||||
def self.addOrderReservationInfo(params)
|
||||
check_order_reservation = OrderReservation.where("transaction_ref = ?",params[:reference])
|
||||
if check_order_reservation.empty?
|
||||
order_reservation = OrderReservation.new
|
||||
order_reservation.order_reservation_type = params[:order_type]
|
||||
order_reservation.customer_id = params[:cus_info]
|
||||
order_reservation.requested_time = Time.parse(params[:requested_time]).utc.strftime("%Y-%m-%d %H:%M:%S")
|
||||
order_reservation.requested_time = DateTime.parse(params[:requested_time]).utc.strftime("%Y-%m-%d %H:%M:%S")
|
||||
order_reservation.callback_url = params[:callback_url]
|
||||
order_reservation.transaction_ref = params[:reference]
|
||||
if params[:order_info]
|
||||
@@ -48,53 +53,204 @@ class OrderReservation < ApplicationRecord
|
||||
end
|
||||
end
|
||||
|
||||
def self.create_doemal_order(order)
|
||||
|
||||
is_extra_time = false
|
||||
extra_time = ''
|
||||
def self.create_doemal_order(order,current_user)
|
||||
is_extra_time = false
|
||||
extra_time = ''
|
||||
|
||||
items_arr = []
|
||||
count = 1
|
||||
order.order_reservation_items.each { |i|
|
||||
i.item_instance_code = i.item_instance_code.downcase.to_s
|
||||
|
||||
items = {"order_item_id": count,"item_instance_code": i.item_instance_code,"quantity": i.qty,"options": []}
|
||||
count += 1
|
||||
items_arr.push(items)
|
||||
}
|
||||
items_arr = []
|
||||
count = 1
|
||||
order.order_reservation_items.each { |i|
|
||||
i.item_instance_code = i.item_instance_code.downcase.to_s
|
||||
items = {"order_item_id": count,"item_instance_code": i.item_instance_code,"quantity": i.qty,"options": []}
|
||||
count += 1
|
||||
items_arr.push(items)
|
||||
}
|
||||
|
||||
puts items_arr.to_json
|
||||
puts "sssssssssssssssssssssss"
|
||||
customer_id = order.customer_id
|
||||
puts items_arr.to_json
|
||||
puts "sssssssssssssssssssssss"
|
||||
customer_id = order.customer_id
|
||||
|
||||
@order = Order.new
|
||||
@order.source = "doemal_order"
|
||||
@order.order_type = "delivery"
|
||||
@order.customer_id = customer_id
|
||||
@order.items = items_arr
|
||||
@order.guest = ''
|
||||
@order.table_id = nil # this is dining facilities's id
|
||||
@order.new_booking = true
|
||||
@order.waiters = current_login_employee.name
|
||||
@order.employee_name = current_login_employee.name
|
||||
@order = Order.new
|
||||
@order.source = "doemal_order"
|
||||
@order.order_type = "delivery"
|
||||
@order.customer_id = customer_id
|
||||
@order.items = items_arr
|
||||
@order.guest = ''
|
||||
@order.table_id = nil # this is dining facilities's id
|
||||
@order.new_booking = true
|
||||
@order.waiters = current_user.name
|
||||
@order.employee_name = current_user.name
|
||||
|
||||
@order.is_extra_time = is_extra_time
|
||||
@order.extra_time = extra_time
|
||||
@order.is_extra_time = is_extra_time
|
||||
@order.extra_time = extra_time
|
||||
|
||||
@status, @booking = @order.generate
|
||||
@status, @booking = @order.generate
|
||||
|
||||
# Order.send_customer_view(@booking)
|
||||
|
||||
|
||||
# Order.send_customer_view(@booking)
|
||||
if @status && @booking
|
||||
|
||||
@status, @sale = Sale.request_bill(@order,current_user,current_login_employee)
|
||||
# for second display
|
||||
@status, @sale = Sale.request_bill(@order,current_user,current_user)
|
||||
|
||||
result = {:status=> @status, :data => @sale }
|
||||
render :json => result.to_json
|
||||
#order status send to doemal
|
||||
callback_response = send_status_to_ordering(order.callback_url,order.transaction_ref,SEND_TO_KITCHEN)
|
||||
#order reservation status updated
|
||||
update_order_reservation(order.id, @sale.sale_id, SEND_TO_KITCHEN)
|
||||
|
||||
result = {:status=> @status, :data => @sale, :message => "created" }
|
||||
return result
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
def self.update_doemal_payment(order,current_user)
|
||||
if(Sale.exists?(order.sale_id))
|
||||
saleObj = Sale.find(order.sale_id)
|
||||
shop_details = Shop.first
|
||||
# rounding adjustment
|
||||
if shop_details.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
|
||||
end
|
||||
#end rounding adjustment
|
||||
|
||||
sale_payment = SalePayment.new
|
||||
sale_payment.process_payment(saleObj, current_user.name, saleObj.grand_total, "cash")
|
||||
|
||||
#order status send to doemal
|
||||
callback_response = send_status_to_ordering(order.callback_url,order.transaction_ref,DELIVERED)
|
||||
#order reservation status updated
|
||||
update_order_reservation(order.id, saleObj.sale_id, DELIVERED)
|
||||
|
||||
result = {:status=> true, :message => DELIVERED }
|
||||
return result
|
||||
# rebate_amount = nil
|
||||
|
||||
# For Cashier by Zone
|
||||
# bookings = Booking.where("sale_id='#{sale_id}'")
|
||||
|
||||
# if bookings[0].dining_facility_id.to_i > 0
|
||||
# table = DiningFacility.find(bookings[0].dining_facility_id)
|
||||
# cashier_zone = CashierTerminalByZone.find_by_zone_id(table.zone_id)
|
||||
# cashier_terminal = CashierTerminal.find(cashier_zone.cashier_terminal_id)
|
||||
# else
|
||||
# shift = ShiftSale.find(saleObj.shift_sale_id)
|
||||
# cashier_terminal = CashierTerminal.find(shift.cashier_terminal_id)
|
||||
# end
|
||||
|
||||
# For Print
|
||||
# if ENV["SERVER_MODE"] != "cloud" #no print in cloud server
|
||||
# receipt_bill_a5_pdf = Lookup.collection_of("print_settings") #print_settings with name:ReceiptBillA5Pdf
|
||||
# unique_code = "ReceiptBillPdf"
|
||||
# if !receipt_bill_a5_pdf.empty?
|
||||
# receipt_bill_a5_pdf.each do |receipt_bilA5|
|
||||
# if receipt_bilA5[0] == 'ReceiptBillA5Pdf'
|
||||
# if receipt_bilA5[1] == '1'
|
||||
# unique_code = "ReceiptBillA5Pdf"
|
||||
# else
|
||||
# unique_code = "ReceiptBillPdf"
|
||||
# end
|
||||
# end
|
||||
# end
|
||||
# end
|
||||
|
||||
# customer= Customer.find(saleObj.customer_id)
|
||||
|
||||
# get member information
|
||||
# rebate = MembershipSetting.find_by_rebate(1)
|
||||
# credit_data = SalePayment.find_by_sale_id_and_payment_method(sale_id,'creditnote')
|
||||
|
||||
# if customer.membership_id != nil && rebate && credit_data.nil?
|
||||
# member_info = Customer.get_member_account(customer)
|
||||
# if member_info["status"] == true
|
||||
# rebate_amount = Customer.get_membership_transactions(customer,saleObj.receipt_no)
|
||||
# current_balance = SaleAudit.paymal_search(sale_id)
|
||||
# end
|
||||
# end
|
||||
|
||||
#orders print out
|
||||
# if params[:type] == "quick_service"
|
||||
# booking = Booking.find_by_sale_id(sale_id)
|
||||
# if booking.dining_facility_id.to_i>0
|
||||
# table_id = booking.dining_facility_id
|
||||
# else
|
||||
# table_id = 0
|
||||
# end
|
||||
|
||||
# booking.booking_orders.each do |order|
|
||||
# # Order.pay_process_order_queue(order.order_id, table_id)
|
||||
# oqs = OrderQueueStation.new
|
||||
# oqs.pay_process_order_queue(order.order_id, table_id)
|
||||
# end
|
||||
|
||||
# end
|
||||
|
||||
#for card sale data
|
||||
# card_data = Array.new
|
||||
# card_sale_trans_ref_no = Sale.getCardSaleTrans(sale_id)
|
||||
# if !card_sale_trans_ref_no.nil?
|
||||
# card_sale_trans_ref_no.each do |cash_sale_trans|
|
||||
# card_res_date = cash_sale_trans.res_date.strftime("%Y-%m-%d").to_s
|
||||
# card_res_time = cash_sale_trans.res_time.strftime("%H:%M").to_s
|
||||
# card_no = cash_sale_trans.pan.last(4)
|
||||
# card_no = card_no.rjust(19,"**** **** **** ")
|
||||
# card_data.push({'res_date' => card_res_date, 'res_time' => card_res_time, 'batch_no' => cash_sale_trans.batch_no, 'trace' => cash_sale_trans.trace, 'pan' => card_no, 'app' => cash_sale_trans.app, 'tid' => cash_sale_trans.terminal_id, 'app_code' => cash_sale_trans.app_code, 'ref_no' => cash_sale_trans.ref_no, 'mid' => cash_sale_trans.merchant_id})
|
||||
# end
|
||||
# end
|
||||
|
||||
# get printer info
|
||||
# print_settings=PrintSetting.find_by_unique_code(unique_code)
|
||||
# Calculate Food and Beverage Total
|
||||
# item_price_by_accounts = SaleItem.calculate_price_by_accounts(saleObj.sale_items)
|
||||
# discount_price_by_accounts = SaleItem.get_discount_price_by_accounts(saleObj.sale_items)
|
||||
|
||||
# printer = Printer::ReceiptPrinter.new(print_settings)
|
||||
# filename, sale_receipt_no, printer_name = printer.print_receipt_bill(print_settings,cashier_terminal,saleObj.sale_items,saleObj,customer.name, item_price_by_accounts, discount_price_by_accounts, member_info,rebate_amount,shop_details, "Paid",current_balance,card_data)
|
||||
|
||||
# render json: JSON.generate({:status => saleObj.rebate_status, :message => "Can't Rebate coz of Sever Error ", :filename => filename, :receipt_no => sale_receipt_no, :printer_name => printer_name})
|
||||
|
||||
#end
|
||||
end
|
||||
end
|
||||
|
||||
def self.send_status_to_ordering(url,ref_no,status)
|
||||
base_url = "http://192.168.1.186:3002"
|
||||
post_url = base_url + url
|
||||
|
||||
begin
|
||||
response = HTTParty.post(post_url,
|
||||
:body => { id: ref_no, status: status}.to_json,
|
||||
:headers => {
|
||||
'Authorization' => 'Token token=3T-tnlYtFJ-5Z1vY6XQqxQ',
|
||||
'Content-Type' => 'application/json',
|
||||
'Accept' => 'application/json; version=3'
|
||||
}, :timeout => 10
|
||||
)
|
||||
rescue Net::OpenTimeout
|
||||
response = { status: false }
|
||||
|
||||
rescue OpenURI::HTTPError
|
||||
response = { status: false}
|
||||
rescue SocketError
|
||||
response = { status: false}
|
||||
end
|
||||
Rails.logger.debug "Get Doemal Status "
|
||||
Rails.logger.debug response.to_json
|
||||
return response
|
||||
end
|
||||
|
||||
def self.update_order_reservation(id, sale_id, status)
|
||||
order_reservation = OrderReservation.find(id)
|
||||
if sale_id.present?
|
||||
order_reservation.sale_id = sale_id
|
||||
end
|
||||
order_reservation.status = status
|
||||
order_reservation.save
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
@@ -197,13 +197,14 @@ class SalePayment < ApplicationRecord
|
||||
|
||||
def self.create_payment(paypar_url,token,membership_id,received_amount,sale_id)
|
||||
membership_actions_data = MembershipAction.find_by_membership_type("create_payment");
|
||||
|
||||
sale_data = Sale.find_by_sale_id(sale_id)
|
||||
customer_data = Customer.find_by_customer_id(sale_data.customer_id)
|
||||
if !membership_actions_data.nil?
|
||||
|
||||
url = paypar_url.to_s + membership_actions_data.gateway_url.to_s
|
||||
merchant_uid = membership_actions_data.merchant_account_id
|
||||
auth_token = membership_actions_data.auth_token
|
||||
sale_data = Sale.find_by_sale_id(sale_id)
|
||||
|
||||
|
||||
if sale_data
|
||||
others = 0
|
||||
@@ -211,14 +212,27 @@ class SalePayment < ApplicationRecord
|
||||
others = others + sale_payment.payment_amount
|
||||
end
|
||||
payment_prices = sale_data.grand_total - others
|
||||
# Control for Paypar Cloud
|
||||
begin
|
||||
response = HTTParty.post(url,
|
||||
:body => { membership_id:membership_id,
|
||||
|
||||
if membership_id.to_i <= 0
|
||||
membership_id = customer_data.membership_id
|
||||
params = { membership_id:membership_id,
|
||||
amount:received_amount,
|
||||
receipt_no:sale_data.receipt_no,
|
||||
merchant_uid:merchant_uid,
|
||||
auth_token:auth_token}.to_json,
|
||||
auth_token:auth_token}.to_json
|
||||
else
|
||||
params = { account_no:membership_id,
|
||||
amount:received_amount,
|
||||
receipt_no:sale_data.receipt_no,
|
||||
merchant_uid:merchant_uid,
|
||||
auth_token:auth_token}.to_json
|
||||
end
|
||||
|
||||
|
||||
# Control for Paypar Cloud
|
||||
begin
|
||||
response = HTTParty.post(url,
|
||||
:body => params,
|
||||
:headers => {
|
||||
'Content-Type' => 'application/json',
|
||||
'Accept' => 'application/json; version=3'
|
||||
@@ -242,7 +256,7 @@ class SalePayment < ApplicationRecord
|
||||
response =false;
|
||||
end
|
||||
|
||||
Rails.logger.debug "Payment response"
|
||||
Rails.logger.debug "Create Payment response"
|
||||
Rails.logger.debug response.to_json
|
||||
|
||||
return response;
|
||||
@@ -390,9 +404,13 @@ class SalePayment < ApplicationRecord
|
||||
payment_status = false
|
||||
|
||||
#Next time - validate if the vochure number is valid - within
|
||||
customer_data = Customer.find_by_customer_id(self.sale.customer_id)
|
||||
# customer_data = Customer.find_by_customer_id(self.sale.customer_id)
|
||||
account_no = self.payment_reference
|
||||
# if account_no.to_i <= 0
|
||||
# account_no = customer_data.membership_id
|
||||
# end
|
||||
membership_setting = MembershipSetting.find_by_membership_type("paypar_url")
|
||||
membership_data = SalePayment.create_payment(membership_setting.gateway_url,membership_setting.auth_token,customer_data.membership_id,self.received_amount,self.sale.sale_id)
|
||||
membership_data = SalePayment.create_payment(membership_setting.gateway_url,membership_setting.auth_token,account_no,self.received_amount,self.sale.sale_id)
|
||||
|
||||
#record an payment in sale-audit
|
||||
remark = "#{membership_data} PayMal Payment- for Customer #{self.sale.customer_id} Sale Id [#{self.sale.sale_id}]| pay amount -> #{self.received_amount} "
|
||||
@@ -433,9 +451,16 @@ class SalePayment < ApplicationRecord
|
||||
payment_status = false
|
||||
|
||||
#Next time - validate if the vochure number is valid - within
|
||||
customer_data = Customer.find_by_customer_id(self.sale.customer_id)
|
||||
|
||||
# customer_data = Customer.find_by_customer_id(self.sale.customer_id)
|
||||
|
||||
account_no = self.payment_reference
|
||||
# if account_no == 0
|
||||
# account_no = customer_data.customer_id
|
||||
# end
|
||||
|
||||
membership_setting = MembershipSetting.find_by_membership_type("paypar_url")
|
||||
membership_data = SalePayment.create_payment(membership_setting.gateway_url,membership_setting.auth_token,customer_data.membership_id,self.received_amount,self.sale.sale_id)
|
||||
membership_data = SalePayment.create_payment(membership_setting.gateway_url,membership_setting.auth_token,account_no,self.received_amount,self.sale.sale_id)
|
||||
|
||||
#record an payment in sale-audit
|
||||
remark = "#{membership_data} Dinga Payment- for Customer #{self.sale.customer_id} Sale Id [#{self.sale.sale_id}]| pay amount -> #{self.received_amount} "
|
||||
|
||||
Reference in New Issue
Block a user