From 5264f9cf1426fe9a7b844aaf08880bd9131f5884 Mon Sep 17 00:00:00 2001 From: Moe Su Date: Wed, 7 Jun 2017 17:14:22 +0630 Subject: [PATCH] Paypar payment --- Gemfile | 2 +- Gemfile.lock | 4 +- .../origami/card_payments_controller.rb | 19 ++ app/models/sale_payment.rb | 246 +++++++++--------- .../origami/card_payments/index.html.erb | 138 +++++++++- dump.rdb | Bin 1669 -> 8033 bytes 6 files changed, 288 insertions(+), 121 deletions(-) diff --git a/Gemfile b/Gemfile index 6b3740a7..09e358f5 100644 --- a/Gemfile +++ b/Gemfile @@ -13,7 +13,7 @@ gem 'rails', '~> 5.1.0' gem 'mysql2', '>= 0.3.18', '< 0.5' #Use PosgreSQL - gem 'pg' + # gem 'pg' # redis server for cable # gem 'redis', '~> 3.0' diff --git a/Gemfile.lock b/Gemfile.lock index 17b395eb..70197025 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -122,7 +122,6 @@ GEM nokogiri (1.7.2) mini_portile2 (~> 2.1.0) pdf-core (0.7.0) - pg (0.20.0) prawn (2.2.2) pdf-core (~> 0.7.0) ttfunk (~> 1.5) @@ -257,7 +256,6 @@ DEPENDENCIES kaminari! listen (~> 3.0.5) mysql2 (>= 0.3.18, < 0.5) - pg prawn prawn-table puma (~> 3.0) @@ -280,4 +278,4 @@ DEPENDENCIES web-console (>= 3.3.0) BUNDLED WITH - 1.15.0 + 1.15.1 diff --git a/app/controllers/origami/card_payments_controller.rb b/app/controllers/origami/card_payments_controller.rb index 2df4b266..6a0e99c9 100644 --- a/app/controllers/origami/card_payments_controller.rb +++ b/app/controllers/origami/card_payments_controller.rb @@ -2,6 +2,25 @@ class Origami::CardPaymentsController < BaseOrigamiController def index + @membership_rebate_balance = 0 + @membership_id = 0 + if !@membership_id.nil? + membership_setting = MembershipSetting.find_by_membership_type("smartpay_url") + membership_data = SalePayment.get_paypar_account(membership_setting.gateway_url,membership_setting.auth_token,@membership_id) + if membership_data["status"]==true + membership_account_data = membership_data["data"]; + membership_account_data.each do |acc_data| + if acc_data["accountable_type"] == "REBATEACCOUNT" + @membership_rebate_balance=acc_data["balance"] + else + @membership_rebate_balance = 0 + end + end + else + @membership_rebate_balance = 0 + end + end + end def create diff --git a/app/models/sale_payment.rb b/app/models/sale_payment.rb index 15fe4c74..9f68e4f4 100644 --- a/app/models/sale_payment.rb +++ b/app/models/sale_payment.rb @@ -6,158 +6,172 @@ class SalePayment < ApplicationRecord belongs_to :sale - :attr_accessor :received_amount, :card_payment_reference, :voucher_no, :giftcard_no, :customer_id, :external_payment_status + attr_accessor :received_amount, :card_payment_reference, :voucher_no, :giftcard_no, :customer_id, :external_payment_status - def process_payment(invoice, action_by) - self.sale = invoice + # def process_payment(invoice, action_by) + # self.sale = invoice - amount_due = invoice.grand_total - #get all payment for this invoices - invoice.sale_payments.each do |payment| - if (payment.payment_status == "paid" ) - amount_due = amount_due - payment.payment_amount - end - end + # amount_due = invoice.grand_total + # #get all payment for this invoices + # invoice.sale_payments.each do |payment| + # if (payment.payment_status == "paid" ) + # amount_due = amount_due - payment.payment_amount + # end + # end - if (amount_due > 0) - payment_status = false - #route to payment type - switch (payment_method) - case "cash" - payment_status = cash_payment - case "creditnote" - payment_status = creditnote_payment - case "visa" - payment_status = external_terminal_card_payment(:visa) - case "master" - payment_status = external_terminal_card_payment(:master) - case "jcb" - payment_status = external_terminal_card_payment(:jcb) - case "mpu" - payment_status = external_terminal_card_payment(:mpu) - case "unionpay" - payment_status = external_terminal_card_payment(:unionpay) - case "vochure" - payment_status = vochure_payment - case "giftcard" - payment_status = giftcard_payment - case "paypar" - #TODO: implement paypar implementation - payment_status = paypar_payment - end + # if (amount_due > 0) + # payment_status = false + # #route to payment type + # switch (payment_method) + # case "cash" + # payment_status = cash_payment + # case "creditnote" + # payment_status = creditnote_payment + # case "visa" + # payment_status = external_terminal_card_payment(:visa) + # case "master" + # payment_status = external_terminal_card_payment(:master) + # case "jcb" + # payment_status = external_terminal_card_payment(:jcb) + # case "mpu" + # payment_status = external_terminal_card_payment(:mpu) + # case "unionpay" + # payment_status = external_terminal_card_payment(:unionpay) + # case "vochure" + # payment_status = vochure_payment + # case "giftcard" + # payment_status = giftcard_payment + # case "paypar" + # #TODO: implement paypar implementation + # payment_status = paypar_payment + # end - #record an payment in sale-audit - remark = "Payment #{payment_method}- for Invoice #{invoice.receipt_no} Due [#{amount_due}]| pay amount -> #{amount} | Payment Status ->#{payment_status}" - sale_audit = SaleAudit.record_payment(invoice.id, remark, action_by) + # #record an payment in sale-audit + # remark = "Payment #{payment_method}- for Invoice #{invoice.receipt_no} Due [#{amount_due}]| pay amount -> #{amount} | Payment Status ->#{payment_status}" + # sale_audit = SaleAudit.record_payment(invoice.id, remark, action_by) - return true, self.sale - else - #record an payment in sale-audit - remark = "No outstanding Amount - Grand Total [#{invoice.grand_total}] | Due [#{amount_due}] | Paid [#{invoice.amount_received}]" - sale_audit = SaleAudit.record_payment(invoice.id, remark,action_by) + # return true, self.sale + # else + # #record an payment in sale-audit + # remark = "No outstanding Amount - Grand Total [#{invoice.grand_total}] | Due [#{amount_due}] | Paid [#{invoice.amount_received}]" + # sale_audit = SaleAudit.record_payment(invoice.id, remark,action_by) - return false, "No outstanding Amount" - end + # return false, "No outstanding Amount" + # end + # end + + def self.get_paypar_account(paypar_url,token,membership_id) + url = paypar_url.to_s + "/api/get_membership_data".to_s + response = HTTParty.get(url, + :body => { app_token: token,membership_id:membership_id}.to_json, + :headers => { + 'Content-Type' => 'application/json', + 'Accept' => 'application/json' + } + ) + return response; + end - private - def cash_payment - payment_status = false + # private + # def cash_payment + # payment_status = false - self.payment_method = "cash" - self.payment_amount = self.received_amount - self.outstanding_amount = self.sale.grand_total - received_amount - self.payment_status = "paid" - payment_method = self.save! + # self.payment_method = "cash" + # self.payment_amount = self.received_amount + # self.outstanding_amount = self.sale.grand_total - received_amount + # self.payment_status = "paid" + # payment_method = self.save! - sale_update_payment_status(self.received_amount) + # sale_update_payment_status(self.received_amount) - return payment_status - end + # return payment_status + # end - def creditnote_payment(self.customer_id) - payment_status = false + # def creditnote_payment(self.customer_id) + # payment_status = false - self.payment_method = "creditnote" - self.payment_amount = self.received_amount - self.customer_id = self.customer_id - self.outstanding_amount = 0 - self.received_amount - self.payment_status = "outstanding" - payment_method = self.save! + # self.payment_method = "creditnote" + # self.payment_amount = self.received_amount + # self.customer_id = self.customer_id + # self.outstanding_amount = 0 - self.received_amount + # self.payment_status = "outstanding" + # payment_method = self.save! - sale_update_payment_status(self.received_amount) + # sale_update_payment_status(self.received_amount) - return payment_status - end + # return payment_status + # end - def external_terminal_card_payment(method) - payment_status = false + # def external_terminal_card_payment(method) + # payment_status = false - self.payment_method = method - self.payment_amount = self.received_amount - self.payment_reference = self.card_payment_reference - self.outstanding_amount = self.sale.grand_total- self.received_amount - self.payment_status = "paid" - payment_method = self.save! + # self.payment_method = method + # self.payment_amount = self.received_amount + # self.payment_reference = self.card_payment_reference + # self.outstanding_amount = self.sale.grand_total- self.received_amount + # self.payment_status = "paid" + # payment_method = self.save! - sale_update_payment_status(self.received_amount) + # sale_update_payment_status(self.received_amount) - return payment_status - end + # return payment_status + # end - def voucher_payment - payment_status = false + # def voucher_payment + # payment_status = false - #Next time - validate if the vochure number is valid - within - self.payment_method = "voucher" - self.payment_amount = self.received_amount - self.payment_reference = self.voucher_no - self.outstanding_amount = self.sale.grand_total- self.received_amount - self.payment_status = "paid" - payment_method = self.save! + # #Next time - validate if the vochure number is valid - within + # self.payment_method = "voucher" + # self.payment_amount = self.received_amount + # self.payment_reference = self.voucher_no + # self.outstanding_amount = self.sale.grand_total- self.received_amount + # self.payment_status = "paid" + # payment_method = self.save! - sale_update_payment_status(self.received_amount) + # sale_update_payment_status(self.received_amount) - return payment_status + # return payment_status - end + # end - def giftcard_payment - payment_status = false + # def giftcard_payment + # payment_status = false - #Next time - validate if the vochure number is valid - within - self.payment_method = "giftcard" - self.payment_amount = self.received_amount - self.payment_reference = self.giftcard_no - self.outstanding_amount = self.sale.grand_total- self.received_amount - self.payment_status = "paid" - payment_method = self.save! + # #Next time - validate if the vochure number is valid - within + # self.payment_method = "giftcard" + # self.payment_amount = self.received_amount + # self.payment_reference = self.giftcard_no + # self.outstanding_amount = self.sale.grand_total- self.received_amount + # self.payment_status = "paid" + # payment_method = self.save! - sale_update_payment_status(self.received_amount) + # sale_update_payment_status(self.received_amount) - return payment_status + # return payment_status - end + # end - def paypar_payment - ##TODO - Integration with Paypar (SmartPay) - end + # def paypar_payment + # ##TODO - Integration with Paypar (SmartPay) + # end - def sale_update_payment_status(paid_amount) + # def sale_update_payment_status(paid_amount) - #update amount_outstanding - self.sale.amount_received = self.sale.amount_received + paid_amount - self.sale.amount_changed = amount - self.sale.amount_received - if (self.sale.grand_total <= self.sale.amount_received && self.sale.amount_changed > 0) - self.sale.payment_status = "paid" - self.sale.sale_status = "completed" - self.sale.save! - end + # #update amount_outstanding + # self.sale.amount_received = self.sale.amount_received + paid_amount + # self.sale.amount_changed = amount - self.sale.amount_received + # if (self.sale.grand_total <= self.sale.amount_received && self.sale.amount_changed > 0) + # self.sale.payment_status = "paid" + # self.sale.sale_status = "completed" + # self.sale.save! + # end + + # end - end private def generate_custom_id diff --git a/app/views/origami/card_payments/index.html.erb b/app/views/origami/card_payments/index.html.erb index 86ef10b0..859a854b 100644 --- a/app/views/origami/card_payments/index.html.erb +++ b/app/views/origami/card_payments/index.html.erb @@ -1 +1,137 @@ -Hello Card Payment +
+ +
+
+ <% if @membership_id!=0 %> +
+
Redim Amount
+
+ <% end %> +
+
+ +
+ +
+
+
+
+
+
1
+
2
+
3
+
+
+
+
1000
+
+
+
+
+
+
4
+
5
+
6
+
+
+
+
5000
+
+
+
+
+
+
7
+
8
+
9
+
+
+
+
10000
+
+
+
+
+
+
0
+
.
+
00
+
+
+
+
50000
+
+
+
+
+
+
+
DEL
+
CLR
+
+
+
+
PAY
+
+
+
+
+ +
+
+
+ +
+ \ No newline at end of file diff --git a/dump.rdb b/dump.rdb index b931754d4d0d6c1b83a8ccc4d623c8f56f2121e8..71b39e913463238ec81b9d5c90162fbea7d18cf4 100644 GIT binary patch literal 8033 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 delta 1204 zcmXYx-D{gw0LD+!CTWwjT~`@c)Fn&St)wSA-{-s=Zp%I>OdNw2D_Tg|v!Dz4uX~*aDx#(=Gk;z=;dzte=}ZcOjnq^il3W3_8un zBNL6{`02;-sm`ER#u?9@(uEsYMUiw?Qg3j}((RUQpm!YZjN6rqzJ?HUaPhMK8~jse#!l%t7|X)w29CKthqK?Y$TC4 zv2SlP+Tln^Djo5WU^?=_I4lot614kq#08JX+G&CqtM@v!_WI&%o(Dv&wc}lJDnO(P(3MwU1y?Ek6LV^kzKVx?BKJ>D{|C z-8(#q0y=&w6=38jDnA5b@@_)Q63-$-u?9mlo@Ru;pX7g z_3Vs(J1G>Y9Ei7eHcNw5-nhj#7FQFJ?fkKNq93}z=+yUViC}~jDeWEbS}`vjqP1rp zu1Wq7m&p8oK2KKey>|Zcqx-M^ E2k^Ok4*&oF