From 338673955fe788f5fe2c314cfb5087d27f0174e6 Mon Sep 17 00:00:00 2001 From: Aung Myo Date: Wed, 5 Jul 2017 10:34:11 +0630 Subject: [PATCH] update customer rebate --- app/models/customer.rb | 76 +++++++++++++++++++++++++++++++++++-- app/models/sale_payment.rb | 43 ++++++++------------- app/pdf/receipt_bill_pdf.rb | 4 +- config/schedule.rb | 2 +- 4 files changed, 91 insertions(+), 34 deletions(-) diff --git a/app/models/customer.rb b/app/models/customer.rb index 8311bed4..2f09ff12 100644 --- a/app/models/customer.rb +++ b/app/models/customer.rb @@ -104,13 +104,13 @@ class Customer < ApplicationRecord 'Accept' => 'application/json' }) rescue Net::OpenTimeout - response = { status: false } + response = { status: false, message: "Server Time out" } rescue OpenURI::HTTPError - response = { status: false} + response = { status: false, message: "Can't connect server"} rescue SocketError - response = { status: false} + response = { status: false, message: "Can't connect server"} end if response["status"] == true @@ -120,6 +120,76 @@ class Customer < ApplicationRecord end end + def self.update_rebate + + sales = Sale.where("rebate_status = 'false'") + sales.each do |sale| + if sale.customer.membership_id + response = self.rebat(Sale.find(sale.sale_id)) + puts response.to_json + if response["status"] == true + status = sale.update_attributes(rebate_status: "true") + end + end + end + end + + def self.rebat(sObj) + rebate_prices = SaleItem.calculate_rebate_by_account(sObj.sale_items) + + generic_customer_id = sObj.customer.membership_id + if generic_customer_id.present? + paypar = sObj.sale_payments + payparcost = 0 + credit = 0 + paypar.each do |pp| + if pp.payment_method == "paypar" + payparcost = payparcost + pp.payment_amount + elsif pp.payment_method == "creditnote" + credit = 1 + end + end + # overall_dis = SaleItem.get_overall_discount(sObj.id) + overall_dis = sObj.total_discount + + total_amount = rebate_prices - payparcost - overall_dis + if credit == 1 + total_amount = 0 + end + if total_amount >= 0 + receipt_no = sObj.receipt_no + membership = MembershipSetting.find_by_membership_type("paypar_url") + memberaction = MembershipAction.find_by_membership_type("rebate") + 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 ,total_sale_transaction_amount: sObj.grand_total,merchant_uid:merchant_uid,total_amount: total_amount,campaign_type_id: campaign_type_id, + receipt_no: receipt_no,auth_token:auth_token}.to_json, + :headers => { + 'Content-Type' => 'application/json', + 'Accept' => 'application/json' + }, :timeout => 10) + rescue Net::OpenTimeout + response = { "status": false , "message": "Connect To" } + + + rescue OpenURI::HTTPError + response = { "status": false, "message": "Can't connect server"} + + rescue SocketError + response = { "status": false, "message": "Can't connect server"} + + end + return response + puts response.to_json + end + end + end + def self.search(search) if search # find(:all, :conditions => ['name LIKE ? OR contact_no LIKE ?', "%#{search}%", "%#{search}%"]) diff --git a/app/models/sale_payment.rb b/app/models/sale_payment.rb index a8b507aa..236449fc 100644 --- a/app/models/sale_payment.rb +++ b/app/models/sale_payment.rb @@ -142,20 +142,6 @@ class SalePayment < ApplicationRecord end - def self.update_rebate - - sales = Sale.where("rebate_status = 'false'") - sales.each do |sale| - if sale.customer.membership_id - response = rebat(Sale.find(sale.sale_id)) - puts response.to_json - if response["status"] == true - status = sale.update_attributes(rebate_status: "true") - end - end - end - end - private def cash_payment payment_status = false @@ -276,18 +262,19 @@ class SalePayment < ApplicationRecord self.sale.sale_status = "completed" response = rebat(sObj) -puts "hhh" -puts response.to_json -puts response[:status] - if response[:status] == true + + if response["status"] == true self.sale.rebate_status = 'true' - puts "truessssssssssss" - elsif response[:status] == false + end + if response["status"] == false self.sale.rebate_status = 'false' - puts "falseeeeeeeeeeeeee" - else - self.sale.rebate_status =nil - puts "nilllllllllll" + end + + if response[:status] == false + self.sale.rebate_status = 'false' + end + if response[:status] == "no_member" + self.sale.rebate_status = nil end self.sale.save! @@ -370,21 +357,21 @@ puts response[:status] 'Accept' => 'application/json' }, :timeout => 10) rescue Net::OpenTimeout - response = { status: false , message:"connection time out" } + response = { "status": false , "message": "Connect To" } rescue OpenURI::HTTPError - response = { status: false, message: "Can't connect server"} + response = { "status": false, "message": "Can't connect server"} rescue SocketError - response = { status: false, message: "Can't connect server"} + response = { "status": false, "message": "Can't connect server"} end return response puts response.to_json end else - response = { status: "no_member", message: "Not membership"} + response = { "status": "no_member", "message": "Not membership"} end end diff --git a/app/pdf/receipt_bill_pdf.rb b/app/pdf/receipt_bill_pdf.rb index 9807b2d5..1f1e2f7e 100644 --- a/app/pdf/receipt_bill_pdf.rb +++ b/app/pdf/receipt_bill_pdf.rb @@ -289,7 +289,7 @@ class ReceiptBillPdf < Prawn::Document text "Rebate Earn", :size => self.item_font_size,:align => :left end bounding_box([self.item_description_width,y_position], :width =>self.label_width) do - text "#{number_with_precision(res["balance"], :precision => precision.to_i, :delimiter => delimiter)}" , :size => self.item_font_size,:align => :right + text "#{number_with_precision(res["rebate"], :precision => precision.to_i, :delimiter => delimiter)}" , :size => self.item_font_size,:align => :right end end @@ -302,7 +302,7 @@ class ReceiptBillPdf < Prawn::Document text "Rebate Earn Bonus", :size => self.item_font_size,:align => :left end bounding_box([self.item_description_width,y_position], :width =>self.label_width) do - text "#{number_with_precision(res["balance"], :precision => precision.to_i, :delimiter => delimiter)}" , :size => self.item_font_size,:align => :right + text "#{number_with_precision(res["rebate"], :precision => precision.to_i, :delimiter => delimiter)}" , :size => self.item_font_size,:align => :right end end #end Total rebate if birthday diff --git a/config/schedule.rb b/config/schedule.rb index 98a7b743..6a43ba25 100644 --- a/config/schedule.rb +++ b/config/schedule.rb @@ -3,7 +3,7 @@ env :PATH, ENV['PATH'] set :output, 'log/whenever.log' every 30.minutes do - runner "Sale.update_rebate" + runner "Customer.update_rebate" end every 30.minutes do