From 0d55bdef87af07116355f4e04b2a48e41fcc6489 Mon Sep 17 00:00:00 2001 From: Cassio Cabral Date: Tue, 26 Nov 2013 21:17:55 -0300 Subject: [PATCH] mantendo a ideia principal da gem spree_pag_seguro para fazer funcionar na versao 2-1 do spree --- app/assets/images/pag_seguro_checkout.gif | Bin 0 -> 2764 bytes .../admin/spree_paypal_website_standard.js | 1 + .../store/spree_paypal_website_standard.js | 1 + .../admin/spree_paypal_website_standard.css | 3 + .../store/spree_paypal_website_standard.css | 3 + .../spree/pag_seguro_controller.rb | 29 ++++++++ app/models/spree/order_decorator.rb | 11 +++ app/models/spree/pag_seguro_payment.rb | 36 ++++++++++ app/models/spree/pagseguro_payment.rb | 36 ++++++++++ app/models/spree/payment_decorator.rb | 3 + .../spree/payment_method/pag_seguro_method.rb | 50 ++++++++++++++ app/models/spree/payment_method/pagseguro.rb | 65 ++++++++++++++++++ app/models/spree/payment_notification.rb | 24 +++++++ app/overrides/replace_payment_info.rb | 6 ++ .../admin/orders/_pag_seguro_txns.html.erb | 23 +++++++ .../source_forms/_pagseguromethod.html.erb | 1 + .../source_views/_pagseguromethod.html.erb | 22 ++++++ .../checkout/payment/_order_details.html.erb | 8 +++ .../payment/_pagseguromethod.html.erb | 2 + app/views/spree/pag_seguro/callback.html.haml | 3 + config/locales/en.yml | 10 +++ config/locales/pt-BR.yml | 10 +++ config/routes.rb | 7 +- .../install/install_generator.rb | 19 +++++ lib/spree2_pagseguro/engine.rb | 25 ++++++- spree2_pagseguro.gemspec | 9 ++- 26 files changed, 400 insertions(+), 7 deletions(-) create mode 100644 app/assets/images/pag_seguro_checkout.gif create mode 100644 app/assets/javascripts/admin/spree_paypal_website_standard.js create mode 100644 app/assets/javascripts/store/spree_paypal_website_standard.js create mode 100644 app/assets/stylesheets/admin/spree_paypal_website_standard.css create mode 100644 app/assets/stylesheets/store/spree_paypal_website_standard.css create mode 100644 app/controllers/spree/pag_seguro_controller.rb create mode 100644 app/models/spree/order_decorator.rb create mode 100644 app/models/spree/pag_seguro_payment.rb create mode 100644 app/models/spree/pagseguro_payment.rb create mode 100644 app/models/spree/payment_decorator.rb create mode 100644 app/models/spree/payment_method/pag_seguro_method.rb create mode 100644 app/models/spree/payment_method/pagseguro.rb create mode 100644 app/models/spree/payment_notification.rb create mode 100644 app/overrides/replace_payment_info.rb create mode 100644 app/views/spree/admin/orders/_pag_seguro_txns.html.erb create mode 100644 app/views/spree/admin/payments/source_forms/_pagseguromethod.html.erb create mode 100644 app/views/spree/admin/payments/source_views/_pagseguromethod.html.erb create mode 100644 app/views/spree/checkout/payment/_order_details.html.erb create mode 100644 app/views/spree/checkout/payment/_pagseguromethod.html.erb create mode 100644 app/views/spree/pag_seguro/callback.html.haml create mode 100644 config/locales/en.yml create mode 100644 config/locales/pt-BR.yml create mode 100644 lib/generators/spree2_pagseguro/install/install_generator.rb diff --git a/app/assets/images/pag_seguro_checkout.gif b/app/assets/images/pag_seguro_checkout.gif new file mode 100644 index 0000000000000000000000000000000000000000..5e952df8b42e986652fef099c9559ba618d6362c GIT binary patch literal 2764 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 [:notify] + skip_before_filter :restriction_access + + def notify + notification = Spree::PaymentNotification.create_from_params(params) + + if notification.approved? + Order.transaction do + @order = Spree::Order.find(notification.id) + + # 1. Assume that if payment notification comes, it's exactly for the amount + # sent to pagseguro (safe assumption -- cart can't be edited while on pagseguro) + # 2. Can't use Order#total, as it's intercepted by spree-multi-currency + # which might lead to lots of false "credit owed" payment states + # (when they should be "complete") + @order.payment.complete + end + end + + render nothing: true, head: :ok + end + + def callback + end + + end +end \ No newline at end of file diff --git a/app/models/spree/order_decorator.rb b/app/models/spree/order_decorator.rb new file mode 100644 index 0000000..4637ef2 --- /dev/null +++ b/app/models/spree/order_decorator.rb @@ -0,0 +1,11 @@ +Spree::Order.class_eval do + has_many :payment_notifications + + def payable_via_pag_seguro? + !!self.class.pag_seguro_payment_method + end + + def self.pag_seguro_payment_method + Spree::PaymentMethod.where(type: "Spree::PaymentMethod::PagSeguroMethod").first + end +end diff --git a/app/models/spree/pag_seguro_payment.rb b/app/models/spree/pag_seguro_payment.rb new file mode 100644 index 0000000..bb92643 --- /dev/null +++ b/app/models/spree/pag_seguro_payment.rb @@ -0,0 +1,36 @@ +module Spree + class PagSeguroPayment < ActiveRecord::Base + attr_accessor :order_id + belongs_to :payment + + def process!(payment) + order = payment.order + + redirect_url = Rails.env.development? ? nil : "#{Spree::Config.site_url}/pag_seguro/callback" + + pag_seguro_payment = ::PagSeguro::Payment.new( + Order.pag_seguro_payment_method.preferred_email, + Order.pag_seguro_payment_method.preferred_token, + redirect_url: redirect_url, + extra_amount: format("%.2f", (order.total - order.item_total).round(2)), + id: order.id) + + pag_seguro_payment.items = order.line_items.map do |item| + pag_seguro_item = ::PagSeguro::Item.new + pag_seguro_item.id = item.id + pag_seguro_item.description = item.product.name + pag_seguro_item.amount = format("%.2f", item.price.round(2)) + pag_seguro_item.quantity = item.quantity + pag_seguro_item.weight = (item.product.weight * 1000).to_i if item.product.weight.present? + pag_seguro_item + end + + pag_seguro_payment.sender = ::PagSeguro::Sender.new(name: order.name, email: order.email, phone_number: order.ship_address.phone) + pag_seguro_payment.shipping = ::PagSeguro::Shipping.new(type: ::PagSeguro::Shipping::SEDEX, state: (order.ship_address.state ? order.ship_address.state.abbr : nil), city: order.ship_address.city, postal_code: order.ship_address.zipcode, street: order.ship_address.address1, complement: order.ship_address.address2) + self.code = pag_seguro_payment.code + self.date = pag_seguro_payment.date + self.payment = payment + self.save + end + end +end diff --git a/app/models/spree/pagseguro_payment.rb b/app/models/spree/pagseguro_payment.rb new file mode 100644 index 0000000..33bfe0f --- /dev/null +++ b/app/models/spree/pagseguro_payment.rb @@ -0,0 +1,36 @@ +module Spree + class PagseguroPayment < ActiveRecord::Base + attr_accessor :order_id + belongs_to :payment + + def process!(payment) + order = payment.order + + redirect_url = Rails.env.development? ? nil : "#{Spree::Config.site_url}/pag_seguro/callback" + + pagseguro_payment = ::PagSeguro::Payment.new( + Order.pagseguro_payment_method.preferred_email, + Order.pagseguro_payment_method.preferred_token, + redirect_url: redirect_url, + extra_amount: format("%.2f", (order.total - order.item_total).round(2)), + id: order.id) + + pagseguro_payment.items = order.line_items.map do |item| + pagseguro_item = ::PagSeguro::Item.new + pagseguro_item.id = item.id + pagseguro_item.description = item.product.name + pagseguro_item.amount = format("%.2f", item.price.round(2)) + pagseguro_item.quantity = item.quantity + pagseguro_item.weight = (item.product.weight * 1000).to_i if item.product.weight.present? + pagseguro_item + end + + pagseguro_payment.sender = ::PagSeguro::Sender.new(name: order.name, email: order.email, phone_number: order.ship_address.phone) + pagseguro_payment.shipping = ::PagSeguro::Shipping.new(type: ::PagSeguro::Shipping::SEDEX, state: (order.ship_address.state ? order.ship_address.state.abbr : nil), city: order.ship_address.city, postal_code: order.ship_address.zipcode, street: order.ship_address.address1, complement: order.ship_address.address2) + self.code = pagseguro_payment.code + self.date = pagseguro_payment.date + self.payment = payment + self.save + end + end +end diff --git a/app/models/spree/payment_decorator.rb b/app/models/spree/payment_decorator.rb new file mode 100644 index 0000000..1d9b75e --- /dev/null +++ b/app/models/spree/payment_decorator.rb @@ -0,0 +1,3 @@ +Spree::Payment.class_eval do + has_one :pag_seguro_payment +end \ No newline at end of file diff --git a/app/models/spree/payment_method/pag_seguro_method.rb b/app/models/spree/payment_method/pag_seguro_method.rb new file mode 100644 index 0000000..916b365 --- /dev/null +++ b/app/models/spree/payment_method/pag_seguro_method.rb @@ -0,0 +1,50 @@ +module Spree + class PaymentMethod::PagSeguroMethod < PaymentMethod + attr_protected + attr_accessor :order_id + + preference :email, :string + preference :token, :string + has_many :payments, :as => :source + + def actions + %w{capture void} + end + + # Indicates whether its possible to capture the payment + def can_capture?(payment) + ['checkout', 'pending'].include?(payment.state) + end + + # Indicates whether its possible to void the payment. + def can_void?(payment) + payment.state != 'void' + end + + def capture(*args) + ActiveMerchant::Billing::Response.new(true, "", {}, {}) + end + + def void(*args) + ActiveMerchant::Billing::Response.new(true, "", {}, {}) + end + + def payment_source_class + self.class + end + + def source_required? + false + end + + def code(payment) + if payment.pag_seguro_payment.present? + payment.pag_seguro_payment.code + else + pag_seguro_payment = Spree::PagSeguroPayment.new + pag_seguro_payment.process!(payment) + pag_seguro_payment.code + end + end + end +end diff --git a/app/models/spree/payment_method/pagseguro.rb b/app/models/spree/payment_method/pagseguro.rb new file mode 100644 index 0000000..1e95da4 --- /dev/null +++ b/app/models/spree/payment_method/pagseguro.rb @@ -0,0 +1,65 @@ +module Spree + class PaymentMethod::Pagseguro < PaymentMethod + preference :email, :string + preference :token, :string + + + #adicionar atributos as listas de permitidos + #attr_accessible :preferred_moip_token, :preferred_moip_key, :preferred_currency, :preferred_moip_environment + + def provider_class + Spree::PagseguroPayment + end + + def payment_source_class + nil + end + + def actions + %w{capture void} + end + + # Indicates whether its possible to capture the payment + def can_capture?(payment) + ['checkout', 'pending'].include?(payment.state) + end + + # Indicates whether its possible to void the payment. + def can_void?(payment) + payment.state != 'void' + end + + def capture(*args) + ActiveMerchant::Billing::Response.new(true, "", {}, {}) + end + + def void(*args) + ActiveMerchant::Billing::Response.new(true, "", {}, {}) + end + + def source_required? + false + end + + + # metodos do spree_pag_seguro, ainda n sei a utilidade + + # attr_protected + # attr_accessor :order_id + # has_many :payments, :as => :source + + # def payment_source_class + # self.class + # end + + # def code(payment) + # if payment.pag_seguro_payment.present? + # payment.pag_seguro_payment.code + # else + # pag_seguro_payment = Spree::PagSeguroPayment.new + # pag_seguro_payment.process!(payment) + # pag_seguro_payment.code + # end + # end + end +end \ No newline at end of file diff --git a/app/models/spree/payment_notification.rb b/app/models/spree/payment_notification.rb new file mode 100644 index 0000000..bcdde7a --- /dev/null +++ b/app/models/spree/payment_notification.rb @@ -0,0 +1,24 @@ +module Spree + class PaymentNotification < ActiveRecord::Base + belongs_to :order + serialize :params + attr_protected + + def self.create_from_params(params) + email = Order.pag_seguro_payment_method.preferred_email + token = Order.pag_seguro_payment_method.preferred_token + notification_code = params[:notificationCode] + notification = ::PagSeguro::Notification.new(email, token, notification_code) + + self.create!( + params: params, + order_id: notification.id, + status: notification.status, + transaction_id: notification.transaction_id, + notification_code: notification_code + ) + + notification + end + end +end \ No newline at end of file diff --git a/app/overrides/replace_payment_info.rb b/app/overrides/replace_payment_info.rb new file mode 100644 index 0000000..935d924 --- /dev/null +++ b/app/overrides/replace_payment_info.rb @@ -0,0 +1,6 @@ +Deface::Override.new( + virtual_path: "spree/shared/_order_details", + name: "replace_payment_info", + insert_bottom: ".payment-info", + partial: "spree/checkout/payment/order_details" +) \ No newline at end of file diff --git a/app/views/spree/admin/orders/_pag_seguro_txns.html.erb b/app/views/spree/admin/orders/_pag_seguro_txns.html.erb new file mode 100644 index 0000000..c2c1451 --- /dev/null +++ b/app/views/spree/admin/orders/_pag_seguro_txns.html.erb @@ -0,0 +1,23 @@ +<% if @order.pag_seguro_payment %> + +<%= t("PagSeguro Transaction") %> + + + + + + + + + + <% @order.payment.pag_seguro_payment.txns.each do |t| %> + + + + + + + + <% end %> +
<%= t("Amount") %><%= t("Fee") %><%= t("Status") %><%= t("Transaction Id") %><%= t("Received At") %>
<%=number_to_currency t.amount %><%=number_to_currency t.fee %><%=t.status %><%=t.transaction_id %><%=t.received_at %>
+<% end %> \ No newline at end of file diff --git a/app/views/spree/admin/payments/source_forms/_pagseguromethod.html.erb b/app/views/spree/admin/payments/source_forms/_pagseguromethod.html.erb new file mode 100644 index 0000000..f23e667 --- /dev/null +++ b/app/views/spree/admin/payments/source_forms/_pagseguromethod.html.erb @@ -0,0 +1 @@ +<%= link_to PagSeguro::Payment.checkout_payment_url(@order.payment.source.code) %> \ No newline at end of file diff --git a/app/views/spree/admin/payments/source_views/_pagseguromethod.html.erb b/app/views/spree/admin/payments/source_views/_pagseguromethod.html.erb new file mode 100644 index 0000000..5a941bf --- /dev/null +++ b/app/views/spree/admin/payments/source_views/_pagseguromethod.html.erb @@ -0,0 +1,22 @@ +
+ PagSeguro + + + + + + + + + + + + +
Código de Transação no Pagseguro:Data de criação do pagamento:URL para efetuar o pagamento
+ <% if payment.order.payment_notifications.present? %> + <%= payment.order.payment_notifications.last.transaction_id %> + <% else %> + Sem Código + <% end %> + <%= l payment.pag_seguro_payment.date %><%= link_to PagSeguro::Payment.checkout_payment_url(payment.pag_seguro_payment.code) %>
+
diff --git a/app/views/spree/checkout/payment/_order_details.html.erb b/app/views/spree/checkout/payment/_order_details.html.erb new file mode 100644 index 0000000..6525b28 --- /dev/null +++ b/app/views/spree/checkout/payment/_order_details.html.erb @@ -0,0 +1,8 @@ +<% if @order.payment_method.instance_of? Spree::PaymentMethod::PagSeguroMethod %> + <% if @order.payment.completed? %> + Seu pagamento foi aprovado pelo PagSeguro através da transação de código: <%= @order.payment_notifications.last.transaction_id if @order.payment_notifications.present? %> + <% else %> + Clique na imagem abaixo para realizar o pagamento através do Pag Seguro. + <%= link_to image_tag("pag_seguro_checkout.gif"), PagSeguro::Payment.checkout_payment_url(@order.payment_method.code(@order.payment)) %> + <% end %> +<% end %> \ No newline at end of file diff --git a/app/views/spree/checkout/payment/_pagseguromethod.html.erb b/app/views/spree/checkout/payment/_pagseguromethod.html.erb new file mode 100644 index 0000000..16420a5 --- /dev/null +++ b/app/views/spree/checkout/payment/_pagseguromethod.html.erb @@ -0,0 +1,2 @@ +<%= image_tag "pag_seguro_checkout.gif" %> +<%= hidden_field "payment_source[#{payment_method.id}]", 'order_id', value: @order.id %> \ No newline at end of file diff --git a/app/views/spree/pag_seguro/callback.html.haml b/app/views/spree/pag_seguro/callback.html.haml new file mode 100644 index 0000000..b98ffa1 --- /dev/null +++ b/app/views/spree/pag_seguro/callback.html.haml @@ -0,0 +1,3 @@ +Aguardando liberação de pagamento pelo PagSeguro. +%br +Obrigado por comprar conosco. \ No newline at end of file diff --git a/config/locales/en.yml b/config/locales/en.yml new file mode 100644 index 0000000..c8fbc0e --- /dev/null +++ b/config/locales/en.yml @@ -0,0 +1,10 @@ +--- +en: + please_select_your_country: "Please select your country" + please_enter_valid_zip: "Please enter a valid zipcode." + zip_code_if_you_have_one: "Zipcode (if you have one)" + payment_failure: "Payment Failure" + payment_pending: "Payment Pending" + check_out_with_pag_seguro: "Check out with PayPal" + pag_seguro_payment_received: "Thank you.. We received the payment for your order from PayPal. Your order will be shipped shortly" + pag_seguro_order_processed_successfully: "Thank you.. Your order processed succesfully. You will be notified once we receive the payment from PayPal" diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml new file mode 100644 index 0000000..b4aee08 --- /dev/null +++ b/config/locales/pt-BR.yml @@ -0,0 +1,10 @@ +--- +pt-BR: + please_select_your_country: "Por favor, escolha seu país" + please_enter_valid_zip: "Por favor, coloque seu código postal." + zip_code_if_you_have_one: "Código postal" + payment_failure: "Falha no Pagamento" + payment_pending: "Pagamento Pendente" + check_out_with_pag_seguro: "Compre com o PagSeguro" + pag_seguro_payment_received: "Obrigado. Nós recebemos seu pagamento para a órdem de compra. Sua compra será entregue em breve." + pag_seguro_order_processed_successfully: "Obrigado. Sua compra foi processada com sucesso. Você será notificado assim que recebermos o comprovante de pagamento do PagSeguro" diff --git a/config/routes.rb b/config/routes.rb index 1daf9a4..6113ae4 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,2 +1,5 @@ -Rails.application.routes.draw do -end +Spree::Core::Engine.routes.prepend do + match "pag_seguro/notify", :to => "pag_seguro#notify", method: :post + match "pag_seguro/callback", :to => "pag_seguro#callback", method: :get + resources :payment_notifications, :only => [:create] +end \ No newline at end of file diff --git a/lib/generators/spree2_pagseguro/install/install_generator.rb b/lib/generators/spree2_pagseguro/install/install_generator.rb new file mode 100644 index 0000000..276e7b4 --- /dev/null +++ b/lib/generators/spree2_pagseguro/install/install_generator.rb @@ -0,0 +1,19 @@ +module Spree2Pagseguro + module Generators + class InstallGenerator < Rails::Generators::Base + class_option :auto_run_migrations, :type => :boolean, :default => false + def add_migrations + run 'rake railties:install:migrations FROM=spree2_pagseguro' + end + + def run_migrations + run_migrations = options[:auto_run_migrations] || ['', 'y', 'Y'].include?(ask 'Would you like to run the migrations now? [Y/n]') + if run_migrations + run 'bundle exec rake db:migrate' + else + puts 'Skipping rake db:migrate, don\'t forget to run it!' + end + end + end + end +end diff --git a/lib/spree2_pagseguro/engine.rb b/lib/spree2_pagseguro/engine.rb index ef788cd..2d142fe 100644 --- a/lib/spree2_pagseguro/engine.rb +++ b/lib/spree2_pagseguro/engine.rb @@ -1,4 +1,25 @@ module Spree2Pagseguro - class Engine < ::Rails::Engine + require 'spree/core' + isolate_namespace Spree + engine_name 'spree2_pagseguro' + + config.autoload_paths += %W(#{config.root}/lib) + + # use rspec for tests + config.generators do |g| + g.test_framework :rspec + end + + initializer "spree.register.pagseguro_payment_method", after: "spree.register.payment_methods" do |app| + app.config.spree.payment_methods << Spree::PaymentMethod::Pagseguro + end + + def self.activate + Dir.glob(File.join(File.dirname(__FILE__), '../../app/**/*_decorator*.rb')) do |c| + Rails.configuration.cache_classes ? require(c) : load(c) + end + end + + config.to_prepare &method(:activate).to_proc end -end +end \ No newline at end of file diff --git a/spree2_pagseguro.gemspec b/spree2_pagseguro.gemspec index f0b8ebd..2ce6c72 100644 --- a/spree2_pagseguro.gemspec +++ b/spree2_pagseguro.gemspec @@ -7,16 +7,19 @@ require "spree2_pagseguro/version" Gem::Specification.new do |s| s.name = "spree2_pagseguro" s.version = Spree2Pagseguro::VERSION - s.authors = ["TODO: Your name"] - s.email = ["TODO: Your email"] + s.authors = ["Cassio Cabral"] + s.email = ["cassioscabral@gmail.com"] s.homepage = "TODO" s.summary = "TODO: Summary of Spree2Pagseguro." s.description = "TODO: Description of Spree2Pagseguro." - + s.required_ruby_version = '>= 2.0.0' + s.files = Dir["{app,config,db,lib}/**/*", "MIT-LICENSE", "Rakefile", "README.rdoc"] s.test_files = Dir["test/**/*"] + s.require_path = 'lib' s.add_dependency "rails", "~> 4.0.1" + s.add_dependency "pag_seguro", "~> 0.5.5" s.add_development_dependency "sqlite3" end