diff --git a/app/controllers/origami/discounts_controller.rb b/app/controllers/origami/discounts_controller.rb index 8d0f9422..fcdcf760 100644 --- a/app/controllers/origami/discounts_controller.rb +++ b/app/controllers/origami/discounts_controller.rb @@ -125,6 +125,71 @@ class Origami::DiscountsController < BaseOrigamiController sale_id = params[:sale_id] account_types = JSON.parse(params[:account_types]) sub_total = params[:sub_total] + sale = Sale.find(sale_id) + price = SaleItem.calculate_price_by_accounts(sale.sale_items) + + arr = Array.new; + + account_types.each do |at| + price.each do |pc| + if pc[:name].to_s == at["name"].to_s && pc[:price]>0 + str={type:pc[:name],amount:pc[:price]} + arr.push(str) + end + end + + end + + generic_customer_id = sale.customer.membership_id + + receipt_no = sale.receipt_no + membership = MembershipSetting.find_by_membership_type("paypar_url") + memberaction = MembershipAction.find_by_membership_type("member_discount") + merchant_uid = memberaction.merchant_account_id.to_s + campaign_type_id = memberaction.additional_parameter["campaign_type_id"] + auth_token = memberaction.auth_token.to_s + url = membership.gateway_url.to_s + memberaction.gateway_url.to_s + + # Control for Paypar Cloud + begin + response = HTTParty.post(url, + :body => { generic_customer_id:generic_customer_id , + campaign_type_id: campaign_type_id, + receipt_no: receipt_no, + merchant_uid:merchant_uid, + discount_method:arr.to_json, + total_sale_transaction_amount: sale.grand_total, + auth_token:auth_token}.to_json, + :headers => { + 'Content-Type' => 'application/json', + 'Accept' => 'application/json' + }, :timeout => 10) + rescue HTTParty::Error + response = {status: false, message: "Can't open membership server "} + + rescue Net::OpenTimeout + + response = { status: false , message: "Can't open membership server "} + + rescue OpenURI::HTTPError + response = { status: false, message: "Can't open membership server "} + + rescue SocketError + response = { status: false, message: "Can't open membership server "} + end + + puts response.to_json + + table_id = sale.bookings[0].dining_facility_id + table_type = DiningFacility.find(table_id).type + + # Re-calc All Amount in Sale + if response["status"] == true + sale.compute_by_sale_items(sale_id, sale.sale_items, response["rebate_earned"].to_f,"member_discount") + end + result = {:status=> "Success", :table_id => table_id, :table_type => table_type,:table_type => table_type,:url_status => response[:status],:url_message => response[:message] } + + render :json => result.to_json end #discount for selected order diff --git a/app/models/ability.rb b/app/models/ability.rb index 3e5fc8b6..9a9706ab 100644 --- a/app/models/ability.rb +++ b/app/models/ability.rb @@ -84,6 +84,7 @@ class Ability can :create, :discount can :remove_discount_items, :discount can :remove_all_discount, :discount + can :member_discount, :discount can :first_bill, :payment can :show, :payment diff --git a/app/models/sale.rb b/app/models/sale.rb index 661222bc..e281f230 100644 --- a/app/models/sale.rb +++ b/app/models/sale.rb @@ -208,7 +208,7 @@ class Sale < ApplicationRecord end #compute - invoice total - def compute_by_sale_items(sale_id, sale_itemss, total_discount) + def compute_by_sale_items(sale_id, sale_itemss, total_discount,discount_type=nil) sale = Sale.find(sale_id) sales_items = sale_itemss @@ -227,6 +227,9 @@ class Sale < ApplicationRecord sale.total_amount = subtotal_price sale.total_discount = total_discount sale.grand_total = (sale.total_amount - sale.total_discount) + sale.total_tax + if discount_type == "member_discount" + sale.discount_type = discount_type + end #compute rounding adjustment # adjust_rounding diff --git a/app/views/origami/discounts/index.html.erb b/app/views/origami/discounts/index.html.erb index d643b2e7..42df2bc8 100644 --- a/app/views/origami/discounts/index.html.erb +++ b/app/views/origami/discounts/index.html.erb @@ -191,7 +191,8 @@