spree_iugu_bank_slip 3.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +16 -0
  3. data/.rspec +1 -0
  4. data/.travis.yml +12 -0
  5. data/Gemfile +9 -0
  6. data/Guardfile +90 -0
  7. data/LICENSE +26 -0
  8. data/README.md +48 -0
  9. data/Rakefile +21 -0
  10. data/app/assets/javascripts/spree/backend/spree_iugu_bank_slip.js +2 -0
  11. data/app/assets/javascripts/spree/frontend/spree_iugu_bank_slip.js +2 -0
  12. data/app/assets/stylesheets/spree/backend/spree_iugu_bank_slip.css +3 -0
  13. data/app/assets/stylesheets/spree/frontend/spree_iugu_bank_slip.css +4 -0
  14. data/app/controllers/spree/admin/bank_slip_settings_controller.rb +27 -0
  15. data/app/controllers/spree/bank_slips_controller.rb +32 -0
  16. data/app/models/spree/bank_slip.rb +109 -0
  17. data/app/models/spree/payment_method/bank_slip.rb +175 -0
  18. data/app/overrides/spree/admin/shared/sub_menu/_configuration/add_bank_slip_settings_tab.html.erb.deface +2 -0
  19. data/app/overrides/spree/payments/_payment/add_bank_slip_info_to_details.html.erb.deface +8 -0
  20. data/app/views/spree/admin/bank_slip_settings/edit.html.erb +45 -0
  21. data/app/views/spree/admin/payments/source_forms/_bankslip.html.erb +3 -0
  22. data/app/views/spree/admin/payments/source_views/_bankslip.html.erb +39 -0
  23. data/app/views/spree/checkout/payment/_bankslip.html.erb +3 -0
  24. data/bin/rails +7 -0
  25. data/config/locales/en.yml +29 -0
  26. data/config/locales/pt-br.yml +29 -0
  27. data/config/routes.rb +13 -0
  28. data/db/migrate/20160105163131_create_spree_bank_slips.rb +17 -0
  29. data/lib/generators/spree_iugu_bank_slip/install/install_generator.rb +31 -0
  30. data/lib/spree/bank_slip_configuration.rb +11 -0
  31. data/lib/spree_iugu_bank_slip.rb +4 -0
  32. data/lib/spree_iugu_bank_slip/engine.rb +33 -0
  33. data/lib/spree_iugu_bank_slip/factories.rb +32 -0
  34. data/spec/controllers/spree/bank_slips_controller_spec.rb +39 -0
  35. data/spec/features/admin/bank_slip_settings_spec.rb +63 -0
  36. data/spec/fixtures/iugu_responses/create.json +131 -0
  37. data/spec/fixtures/iugu_responses/create_error.json +136 -0
  38. data/spec/fixtures/iugu_responses/fetch.json +131 -0
  39. data/spec/models/spree/bank_slip_spec.rb +56 -0
  40. data/spec/models/spree/payment_method/bank_slip_spec.rb +90 -0
  41. data/spec/spec_helper.rb +99 -0
  42. data/spec/support/capybara_login.rb +13 -0
  43. data/spree_iugu_bank_slip.gemspec +42 -0
  44. metadata +402 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 55d5c5052105be048ea2404dd76796739cdf62b4
4
+ data.tar.gz: 0b078e3dacc30f21a4f798cc913090b88a772460
5
+ SHA512:
6
+ metadata.gz: ac874f019fa58beb187d425e249d22cb073050d0d252d9ed1bcf91393e6d1efb5dc585cb3142aa9311e3e8351f67ad5bf43acaf145761be4685d7516ebabc1d3
7
+ data.tar.gz: 883586b33693148ac27bd9c236cd7cd1ea36824416b3bb1d94d07e269a5fca041f149f85bce63148d4a3796beeb23f9509ce705757b23bcb42ba32b9f98c50a1
@@ -0,0 +1,16 @@
1
+ \#*
2
+ *~
3
+ .#*
4
+ .DS_Store
5
+ .idea
6
+ .project
7
+ .sass-cache
8
+ coverage
9
+ dummy
10
+ Gemfile.lock
11
+ tmp
12
+ nbproject
13
+ pkg
14
+ *.swp
15
+ spec/dummy
16
+ *.gem
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --format documentation --color
@@ -0,0 +1,12 @@
1
+ before_script:
2
+ - sh -e /etc/init.d/xvfb start
3
+ - export DISPLAY=:99.0
4
+ bundler_args: --quiet
5
+ script:
6
+ - bundle exec rake test_app
7
+ - bundle exec rspec
8
+ language: ruby
9
+ rvm:
10
+ - 2.0.0
11
+ - 2.1.2
12
+ - 2.1.5
data/Gemfile ADDED
@@ -0,0 +1,9 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'spree', github: 'spree/spree', branch: '3-0-stable'
4
+ # Provides basic authentication functionality for testing parts of your engine
5
+ gem 'spree_auth_devise', github: 'spree/spree_auth_devise', branch: '3-0-stable'
6
+
7
+ gem 'iugu'
8
+
9
+ gemspec
@@ -0,0 +1,90 @@
1
+ # A sample Guardfile
2
+ # More info at https://github.com/guard/guard#readme
3
+
4
+ ## Uncomment and set this to only include directories you want to watch
5
+ # directories %w(app lib config test spec feature)
6
+
7
+ ## Uncomment to clear the screen before every task
8
+ # clearing :on
9
+
10
+ ## Guard internally checks for changes in the Guardfile and exits.
11
+ ## If you want Guard to automatically start up again, run guard in a
12
+ ## shell loop, e.g.:
13
+ ##
14
+ ## $ while bundle exec guard; do echo "Restarting Guard..."; done
15
+ ##
16
+ ## Note: if you are using the `directories` clause above and you are not
17
+ ## watching the project directory ('.'), the you will want to move the Guardfile
18
+ ## to a watched dir and symlink it back, e.g.
19
+ #
20
+ # $ mkdir config
21
+ # $ mv Guardfile config/
22
+ # $ ln -s config/Guardfile .
23
+ #
24
+ # and, you'll have to watch "config/Guardfile" instead of "Guardfile"
25
+
26
+ # Note: The cmd option is now required due to the increasing number of ways
27
+ # rspec may be run, below are examples of the most common uses.
28
+ # * bundler: 'bundle exec rspec'
29
+ # * bundler binstubs: 'bin/rspec'
30
+ # * spring: 'bin/rspec' (This will use spring if running and you have
31
+ # installed the spring binstubs per the docs)
32
+ # * zeus: 'zeus rspec' (requires the server to be started separately)
33
+ # * 'just' rspec: 'rspec'
34
+
35
+ guard :shell do
36
+ watch(/^db\/migrate\/.*\.rb/) do |m|
37
+ puts "#{m[0]} Changed"
38
+ `bundle exec rake test_app`
39
+ end
40
+ end
41
+
42
+ guard :bundler do
43
+ watch('Gemfile')
44
+ # Uncomment next line if Gemfile contain `gemspec' command
45
+ watch(/^.+\.gemspec/)
46
+ end
47
+
48
+ guard :rspec, cmd: "bundle exec rspec" do
49
+ require "guard/rspec/dsl"
50
+ dsl = Guard::RSpec::Dsl.new(self)
51
+
52
+ # Feel free to open issues for suggestions and improvements
53
+
54
+ # RSpec files
55
+ rspec = dsl.rspec
56
+ watch(rspec.spec_helper) { rspec.spec_dir }
57
+ watch(rspec.spec_support) { rspec.spec_dir }
58
+ watch(rspec.spec_files)
59
+
60
+ # Ruby files
61
+ ruby = dsl.ruby
62
+ dsl.watch_spec_files_for(ruby.lib_files)
63
+
64
+ # Rails files
65
+ rails = dsl.rails(view_extensions: %w(erb haml slim))
66
+ dsl.watch_spec_files_for(rails.app_files)
67
+ dsl.watch_spec_files_for(rails.views)
68
+
69
+ watch(rails.controllers) do |m|
70
+ [
71
+ rspec.spec.("routing/#{m[1]}_routing"),
72
+ rspec.spec.("controllers/#{m[1]}_controller"),
73
+ rspec.spec.("acceptance/#{m[1]}")
74
+ ]
75
+ end
76
+
77
+ # Rails config changes
78
+ watch(rails.spec_helper) { rspec.spec_dir }
79
+ watch(rails.routes) { "#{rspec.spec_dir}/routing" }
80
+ watch(rails.app_controller) { "#{rspec.spec_dir}/controllers" }
81
+
82
+ # Capybara features specs
83
+ watch(rails.view_dirs) { |m| rspec.spec.("features/#{m[1]}") }
84
+
85
+ # Turnip features and steps
86
+ watch(%r{^spec/acceptance/(.+)\.feature$})
87
+ watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) do |m|
88
+ Dir[File.join("**/#{m[1]}.feature")][0] || "spec/acceptance"
89
+ end
90
+ end
data/LICENSE ADDED
@@ -0,0 +1,26 @@
1
+ Copyright (c) 2016 [Zaez Comunicação Digital]
2
+ All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without modification,
5
+ are permitted provided that the following conditions are met:
6
+
7
+ * Redistributions of source code must retain the above copyright notice,
8
+ this list of conditions and the following disclaimer.
9
+ * Redistributions in binary form must reproduce the above copyright notice,
10
+ this list of conditions and the following disclaimer in the documentation
11
+ and/or other materials provided with the distribution.
12
+ * Neither the name Spree nor the names of its contributors may be used to
13
+ endorse or promote products derived from this software without specific
14
+ prior written permission.
15
+
16
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
20
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
21
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
22
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
23
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
24
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
25
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,48 @@
1
+ Spree Iugu BankSlip [![Build Status](https://travis-ci.org/zaeznet/spree_iugu_bank_slip.svg?branch=master)](https://travis-ci.org/zaeznet/spree_iugu_bank_slip)
2
+ =================
3
+
4
+ Add to Spree Commerce the payment by [Iugu](http://c.iugu.com/) Bank Slip.
5
+
6
+ Installation
7
+ ------------
8
+
9
+ Add spree_iugu_bank_slip to your Gemfile:
10
+
11
+ ```ruby
12
+ gem 'spree_iugu_bank_slip'
13
+ ```
14
+
15
+ Bundle your dependencies and run the installation generator:
16
+
17
+ ```shell
18
+ bundle
19
+ bundle exec rails g spree_iugu_bank_slip:install
20
+ ```
21
+
22
+ Settings
23
+ ------------
24
+
25
+ To configure the settings, you can go to admin/bank_slip_settings page, or in an initialize file you can modify the settings like that:
26
+
27
+ ```ruby
28
+ Spree::BankSlipConfig[:iugu_api_token] = 'ABC1234'
29
+ ```
30
+
31
+ Testing
32
+ -------
33
+
34
+ First bundle your dependencies, then run `rake`. `rake` will default to building the dummy app if it does not exist, then it will run specs. The dummy app can be regenerated by using `rake test_app`.
35
+
36
+ ```shell
37
+ bundle
38
+ bundle exec rake
39
+ ```
40
+
41
+ When testing your applications integration with this extension you may use it's factories.
42
+ Simply add this require statement to your spec_helper:
43
+
44
+ ```ruby
45
+ require 'spree_iugu_bank_slip/factories'
46
+ ```
47
+
48
+ Copyright (c) 2016 [Zaez Comunicação Digital], released under the New BSD License
@@ -0,0 +1,21 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
+
4
+ require 'rspec/core/rake_task'
5
+ require 'spree/testing_support/extension_rake'
6
+
7
+ RSpec::Core::RakeTask.new
8
+
9
+ task :default do
10
+ if Dir["spec/dummy"].empty?
11
+ Rake::Task[:test_app].invoke
12
+ Dir.chdir("../../")
13
+ end
14
+ Rake::Task[:spec].invoke
15
+ end
16
+
17
+ desc 'Generates a dummy app for testing'
18
+ task :test_app do
19
+ ENV['LIB_NAME'] = 'spree_iugu_bank_slip'
20
+ Rake::Task['extension:test_app'].invoke
21
+ end
@@ -0,0 +1,2 @@
1
+ // Placeholder manifest file.
2
+ // the installer will append this file to the app vendored assets here: vendor/assets/javascripts/spree/backend/all.js'
@@ -0,0 +1,2 @@
1
+ // Placeholder manifest file.
2
+ // the installer will append this file to the app vendored assets here: vendor/assets/javascripts/spree/frontend/all.js'
@@ -0,0 +1,3 @@
1
+ .label-canceled {
2
+ background-color: #c60611;
3
+ }
@@ -0,0 +1,4 @@
1
+ /*
2
+ Placeholder manifest file.
3
+ the installer will append this file to the app vendored assets here: 'vendor/assets/stylesheets/spree/frontend/all.css'
4
+ */
@@ -0,0 +1,27 @@
1
+ module Spree
2
+ module Admin
3
+ class BankSlipSettingsController< BaseController
4
+
5
+ def edit
6
+ @config = Spree::BankSlipConfiguration.new
7
+ @user_attr = Spree::User.new.attribute_names.sort_by { |item| item }
8
+ end
9
+
10
+ def update
11
+ config = Spree::BankSlipConfiguration.new
12
+
13
+ params.each do |name, value|
14
+ next unless config.has_preference?(name)
15
+ config[name] = value
16
+ end
17
+
18
+ # Atualiza o token do Iugu
19
+ Iugu.api_key = params[:iugu_api_token] if params[:iugu_api_token].present?
20
+
21
+ flash[:success] = Spree.t(:successfully_updated, resource: Spree.t(:bank_slip_settings))
22
+ redirect_to edit_admin_bank_slip_settings_path
23
+ end
24
+
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,32 @@
1
+ module Spree
2
+ class BankSlipsController < Spree::StoreController
3
+
4
+ before_action :load_object, only: [:show, :status_changed]
5
+ skip_before_action :set_current_order, only: :status_changed
6
+ skip_before_action :verify_authenticity_token, only: [:status_changed]
7
+
8
+ def show
9
+ data = open(@slip.pdf)
10
+ send_data data.read, filename: "boleto_#{@slip.id}.pdf", type: 'application/pdf'
11
+ end
12
+
13
+ def status_changed
14
+ if params[:data]
15
+ case params[:data][:status].to_sym
16
+ # Captura o pagamento
17
+ when :paid then @slip.payment.capture!
18
+ # Cancela o pagamento
19
+ when :canceled, :expired then @slip.payment.void_transaction!
20
+ end
21
+ end
22
+ render nothing: true, status: 200
23
+ end
24
+
25
+ private
26
+
27
+ def load_object
28
+ @slip = Spree::BankSlip.find params[:id] || params[:bank_slip_id]
29
+ end
30
+
31
+ end
32
+ end
@@ -0,0 +1,109 @@
1
+ module Spree
2
+ class BankSlip < ActiveRecord::Base
3
+
4
+ has_one :payment, as: :source
5
+ has_one :order, through: :payment
6
+ belongs_to :user
7
+ belongs_to :payment_method
8
+
9
+ # Displays what actions can be done according to payments method
10
+ #
11
+ # @author Isabella Santos
12
+ #
13
+ # @return [Array]
14
+ #
15
+ def actions
16
+ act = []
17
+ act << 'capture' if can_capture? payment
18
+ act << 'void' if can_void? payment
19
+ act
20
+ end
21
+
22
+ # Save the amount of the billet
23
+ # if amount is a string, convert to a BigDecimal
24
+ #
25
+ # copy of Spree::Payment.amount
26
+ #
27
+ def amount=(amount)
28
+ self[:amount] =
29
+ case amount
30
+ when String
31
+ separator = I18n.t('number.currency.format.separator')
32
+ number = amount.delete("^0-9-#{separator}\.").tr(separator, '.')
33
+ number.to_d if number.present?
34
+ end || amount
35
+ end
36
+
37
+ # Determines whether can capture the payments
38
+ # (only can capture when the state is checkout or pending)
39
+ #
40
+ # @author Isabella Santos
41
+ #
42
+ # @return [Boolean]
43
+ #
44
+ def can_capture?(payment)
45
+ payment.pending? || payment.checkout?
46
+ end
47
+
48
+ # Determines whether can void the payments
49
+ # (only can void when the state is different of void, failure or invalid)
50
+ #
51
+ # @author Isabella Santos
52
+ #
53
+ # @return [Boolean]
54
+ #
55
+ def can_void?(payment)
56
+ !%w(void failure invalid canceled).include?(payment.state)
57
+ end
58
+
59
+ # Defines the currency of the billet
60
+ # based in te currency of the order
61
+ #
62
+ # copy of Spree::Payment.currency
63
+ #
64
+ def currency
65
+ order.currency
66
+ end
67
+
68
+ # Return the amount converted to Money
69
+ # according to currency
70
+ #
71
+ # copy of Spree::Payment.money
72
+ #
73
+ def money
74
+ Spree::Money.new(amount, { currency: currency })
75
+ end
76
+ alias display_amount money
77
+
78
+ # Returns if billet is paid
79
+ #
80
+ # @author Isabella Santos
81
+ #
82
+ # @return [Boolean]
83
+ #
84
+ def paid?
85
+ status == 'paid'
86
+ end
87
+
88
+ # Returns if billet is pending
89
+ #
90
+ # @author Isabella Santos
91
+ #
92
+ # @return [Boolean]
93
+ #
94
+ def pending?
95
+ status == 'pending'
96
+ end
97
+
98
+ # Returns if slip is canceled
99
+ #
100
+ # @author Isabella Santos
101
+ #
102
+ # @return [Boolean]
103
+ #
104
+ def canceled?
105
+ status == 'canceled'
106
+ end
107
+
108
+ end
109
+ end
@@ -0,0 +1,175 @@
1
+ module Spree
2
+ class PaymentMethod
3
+ class PaymentMethod::BankSlip < PaymentMethod
4
+
5
+ # Nao existe captura automatica para o metodo do tipo boleto
6
+ def auto_capture
7
+ false
8
+ end
9
+
10
+ def payment_source_class
11
+ Spree::BankSlip
12
+ end
13
+
14
+ # Redireciona para o metodo de autorizacao
15
+ # pois nao ha captura automatica
16
+ #
17
+ def purchase(amount, source, *args)
18
+ self.authorize(amount, source, args)
19
+ end
20
+
21
+ # Autoriza o pagamento
22
+ # enviando as informacoes ao Iugu
23
+ #
24
+ # @author Isabella Santos
25
+ #
26
+ # @return [ActiveMerchant::Billing::Response]
27
+ #
28
+ def authorize(amount, source, *args)
29
+ gateway_options = args.first
30
+ user = Spree::User.find gateway_options[:customer_id]
31
+ doc_user = user.attributes[Spree::BankSlipConfig[:doc_customer_attr]] rescue ''
32
+ billing_address = gateway_options[:billing_address]
33
+
34
+ # Pegando o DDD e o telefone
35
+ if billing_address[:phone].include?('(')
36
+ phone_prefix = billing_address[:phone][1..2] rescue ''
37
+ phone = billing_address[:phone][5..-1] rescue ''
38
+ else
39
+ phone_prefix = nil
40
+ phone = billing_address[:phone]
41
+ end
42
+
43
+ notification_url = Spree::Store.current.url
44
+ notification_url << Spree::Core::Engine.routes.url_helpers.bank_slip_status_changed_path(source.id)
45
+
46
+ due_date = Date.today + Spree::BankSlipConfig[:days_to_due_date].days
47
+
48
+ iugu_params = {
49
+ method: 'bank_slip',
50
+ email: gateway_options[:email],
51
+ notification_url: notification_url,
52
+ due_date: due_date.strftime('%d/%m/%Y'),
53
+ ignore_due_email: Spree::BankSlipConfig[:ignore_due_email],
54
+ items: [],
55
+ payer: {
56
+ cpf_cnpj: doc_user,
57
+ name: billing_address[:name],
58
+ phone_prefix: phone_prefix,
59
+ phone: phone,
60
+ email: gateway_options[:email],
61
+ address: {
62
+ street: billing_address[:address1],
63
+ city: billing_address[:city],
64
+ state: billing_address[:state],
65
+ country: 'Brasil',
66
+ zip_code: billing_address[:zip]
67
+ }
68
+ }
69
+ }
70
+
71
+ source.order.line_items.each do |item|
72
+ iugu_params[:items] << {
73
+ description: item.variant.name,
74
+ quantity: item.quantity,
75
+ price_cents: item.single_money.cents
76
+ }
77
+ end
78
+
79
+ # Cria um item para o frete a ser cobrado
80
+ if source.order.shipment_total > 0
81
+ iugu_params[:items] << {
82
+ description: Spree.t(:shipment_total),
83
+ quantity: 1,
84
+ price_cents: source.order.display_ship_total.cents
85
+ }
86
+ end
87
+
88
+ # Insere os adjustments na fatura
89
+ source.order.all_adjustments.eligible.each do |adj|
90
+ iugu_params[:items] << {
91
+ description: adj.label,
92
+ quantity: 1,
93
+ price_cents: adj.display_amount.cents
94
+ }
95
+ end
96
+
97
+ invoice = Iugu::Invoice.create(iugu_params)
98
+
99
+ if Spree::BankSlipConfig[:log_requests]
100
+ logger = Logger.new Rails.root.join('log', "#{Rails.env}.log")
101
+ logger.debug "Request Iugu: #{iugu_params}"
102
+ logger.debug "Response Iugu: #{invoice.attributes}" if invoice.respond_to? :attributes
103
+ end
104
+
105
+ if invoice.errors
106
+ errors = invoice.errors.collect { |k, v| v.collect { |i| "#{k} #{i}" }.join(', ') }.join(', ')
107
+ ActiveMerchant::Billing::Response.new(false, errors, {}, {})
108
+ else
109
+ source.amount = amount.to_d / 100
110
+ source.invoice_id = invoice.attributes['id']
111
+ source.payment_due = invoice.attributes['due_date']
112
+ source.url = invoice.attributes['secure_url']
113
+ source.pdf = "#{invoice.attributes['secure_url']}.pdf"
114
+
115
+ if source.save
116
+ ActiveMerchant::Billing::Response.new(true, Spree.t('bank_slip.messages.successfully_authorized'), {}, authorization: invoice.attributes['id'])
117
+ else
118
+ ActiveMerchant::Billing::Response.new(false, Spree.t('bank_slip.messages.source_fail'), {}, authorization: invoice.attributes['id'])
119
+ end
120
+ end
121
+ rescue
122
+ ActiveMerchant::Billing::Response.new(false, Spree.t('bank_slip.messages.iugu_fail'), {}, {})
123
+ end
124
+
125
+ # Captura o pagamento
126
+ # modificando o status e salvando a data
127
+ #
128
+ # @author Isabella Santos
129
+ #
130
+ # @return [ActiveMerchant::Billing::Response]
131
+ #
132
+ def capture(amount, response_code, gateway_options)
133
+ bank_slip = Spree::BankSlip.find_by invoice_id: response_code
134
+ bank_slip.amount = amount.to_d / 100
135
+ bank_slip.paid_in = Date.today
136
+ bank_slip.status = 'paid'
137
+ bank_slip.save
138
+
139
+ ActiveMerchant::Billing::Response.new(true, Spree.t('bank_slip.messages.successfully_captured'), {}, authorization: response_code)
140
+ rescue
141
+ ActiveMerchant::Billing::Response.new(false, Spree.t('bank_slip.messages.capture_fail'), {}, {})
142
+ end
143
+
144
+ # Cancela o pagamento
145
+ #
146
+ # @author Isabella Santos
147
+ #
148
+ # @return [ActiveMerchant::Billing::Response]
149
+ #
150
+ def void(response_code, gateway_options)
151
+ bank_slip = Spree::BankSlip.find_by invoice_id: response_code
152
+ bank_slip.update_attribute(:status, 'canceled')
153
+
154
+ ActiveMerchant::Billing::Response.new(true, Spree.t('bank_slip.messages.successfully_voided'), {}, authorization: response_code)
155
+ rescue
156
+ ActiveMerchant::Billing::Response.new(false, Spree.t('bank_slip.messages.void_fail'), {}, {})
157
+ end
158
+
159
+ # Cancela o pagamento
160
+ #
161
+ # @author Isabella Santos
162
+ #
163
+ # @return [ActiveMerchant::Billing::Response]
164
+ #
165
+ def cancel(response_code)
166
+ bank_slip = Spree::BankSlip.find_by invoice_id: response_code
167
+ bank_slip.update_attribute(:status, 'canceled')
168
+
169
+ ActiveMerchant::Billing::Response.new(true, Spree.t('bank_slip.messages.successfully_voided'), {}, authorization: response_code)
170
+ rescue
171
+ ActiveMerchant::Billing::Response.new(false, Spree.t('bank_slip.messages.void_fail'), {}, {})
172
+ end
173
+ end
174
+ end
175
+ end