solidus_bling 2.0.7 → 3.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitattributes +2 -0
- data/.gitignore +0 -1
- data/CHANGELOG.md +1 -3
- data/Gemfile +18 -19
- data/LICENSE +1 -1
- data/README.md +1 -1
- data/Rakefile +2 -2
- data/app/controllers/spree/admin/solidus_bling/accounts_controller.rb +80 -0
- data/app/jobs/solidus_bling/order_job.rb +4 -7
- data/app/models/solidus_bling/account.rb +6 -1
- data/app/models/solidus_bling/order.rb +121 -96
- data/app/models/solidus_bling/token.rb +44 -0
- data/app/subscribers/solidus_bling/subscriber.rb +2 -22
- data/app/views/spree/admin/solidus_bling/accounts/_form.html.erb +147 -0
- data/app/views/spree/admin/solidus_bling/accounts/_link_auth.html.erb +10 -0
- data/app/views/spree/admin/solidus_bling/accounts/edit.html.erb +3 -0
- data/app/views/spree/admin/solidus_bling/accounts/index.html.erb +67 -0
- data/app/views/spree/admin/solidus_bling/accounts/new.html.erb +3 -0
- data/bin/meu_sandbox +67 -0
- data/config/locales/pt-BR.yml +1 -1
- data/config/routes.rb +6 -2
- data/db/migrate/{20230918141419_create_solidus_bling_accounts.rb → 20231109210635_create_solidus_bling_accounts.rb} +4 -5
- data/db/migrate/{20230918142547_create_solidus_bling_events.rb → 20231110112819_create_solidus_bling_events.rb} +1 -2
- data/db/migrate/{20230918143057_create_solidus_bling_shipping_methods.rb → 20231110113221_create_solidus_bling_shipping_methods.rb} +3 -2
- data/lib/generators/solidus_bling/install/install_generator.rb +6 -6
- data/lib/solidus_bling/configuration.rb +1 -1
- data/lib/solidus_bling/engine.rb +12 -15
- data/lib/solidus_bling/version.rb +1 -1
- data/lib/solidus_bling.rb +5 -5
- data/solidus_bling.gemspec +16 -18
- metadata +32 -71
- data/app/controllers/spree/admin/accounts_controller.rb +0 -67
- data/app/controllers/spree/admin/bling_products_controller.rb +0 -20
- data/app/decorators/models/solidus_bling/spree/payment_method_decorator.rb +0 -13
- data/app/decorators/models/solidus_bling/spree/shipping_method_decorator.rb +0 -13
- data/app/helpers/solidus_bling/accounts_helper.rb +0 -4
- data/app/helpers/solidus_bling/bling_products_helper.rb +0 -4
- data/app/jobs/solidus_bling/contact_job.rb +0 -22
- data/app/jobs/solidus_bling/product_job.rb +0 -13
- data/app/jobs/solidus_bling/update_product_job.rb +0 -9
- data/app/models/solidus_bling/api.rb +0 -57
- data/app/models/solidus_bling/contact.rb +0 -83
- data/app/models/solidus_bling/product.rb +0 -36
- data/app/views/spree/admin/accounts/_form.html.erb +0 -76
- data/app/views/spree/admin/accounts/edit.html.erb +0 -11
- data/app/views/spree/admin/accounts/index.html.erb +0 -13
- data/app/views/spree/admin/accounts/new.html.erb +0 -2
- data/db/migrate/20230918141700_create_solidus_bling_products.rb +0 -12
- data/db/migrate/20231018141940_add_company_to_solidus_bling_shipping_methods.rb +0 -5
- data/spec/helpers/solidus_bling/accounts_helper_spec.rb +0 -17
- data/spec/helpers/solidus_bling/bling_products_helper_spec.rb +0 -17
- data/spec/jobs/solidus_bling/contact_job_spec.rb +0 -7
- data/spec/jobs/solidus_bling/order_job_spec.rb +0 -7
- data/spec/jobs/solidus_bling/product_job_spec.rb +0 -7
- data/spec/jobs/solidus_bling/update_product_job_spec.rb +0 -7
- data/spec/models/solidus_bling/account_spec.rb +0 -7
- data/spec/models/solidus_bling/event_spec.rb +0 -7
- data/spec/models/solidus_bling/payment_method_spec.rb +0 -7
- data/spec/models/solidus_bling/product_spec.rb +0 -7
- data/spec/models/solidus_bling/seller_spec.rb +0 -7
- data/spec/models/solidus_bling/shipping_method_spec.rb +0 -7
- data/spec/requests/solidus_bling/accounts_spec.rb +0 -7
- data/spec/requests/solidus_bling/bling_products_spec.rb +0 -7
- data/spec/spec_helper.rb +0 -32
- /data/app/views/spree/admin/{accounts → solidus_bling/accounts}/show.html.erb +0 -0
- /data/db/migrate/{20230918141505_add_bling_order_id_to_spree_orders.rb → 20231110112528_add_bling_order_id_to_spree_orders.rb} +0 -0
- /data/db/migrate/{20230918142742_create_solidus_bling_payment_methods.rb → 20231110112958_create_solidus_bling_payment_methods.rb} +0 -0
- /data/db/migrate/{20230918142953_create_solidus_bling_sellers.rb → 20231110113122_create_solidus_bling_sellers.rb} +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '06007929028aa91ff59c2aa725b53c6e68b177ac56d4e5c53a4443b645dabc17'
|
4
|
+
data.tar.gz: de6672cddf389140fdafb5b2580bc98e93d9c8a989b6769a6dcf5581d982948d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a55d2735828682b6ab1e53f25683e678fd33f3ec893ea568ed8f963430f908096da5c52b886c0f9905b87facf2909cc7144cd526578336803aff14c3fe5b688e
|
7
|
+
data.tar.gz: 9cd9a628c2ecdbd68a7f300ce0a6d2dc108ff3679c65812d532421232415c702bb0f80e618e08666a1ba7011ceab7f8729847d78f00b16241297c1a2a984bdf1
|
data/.gitattributes
ADDED
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,3 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
\* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)*
|
3
|
+
See https://github.com/solidusio-contrib/solidus_bling/releases or OLD_CHANGELOG.md for older versions.
|
data/Gemfile
CHANGED
@@ -1,42 +1,41 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
source
|
3
|
+
source "https://rubygems.org"
|
4
4
|
git_source(:github) { |repo| "https://github.com/#{repo}.git" }
|
5
5
|
|
6
|
-
branch = ENV.fetch(
|
7
|
-
gem
|
6
|
+
branch = ENV.fetch("SOLIDUS_BRANCH", "main")
|
7
|
+
gem "solidus", github: "solidusio/solidus", branch: branch
|
8
8
|
|
9
9
|
# The solidus_frontend gem has been pulled out since v3.2
|
10
|
-
if branch >=
|
11
|
-
gem
|
12
|
-
elsif branch ==
|
13
|
-
gem
|
10
|
+
if branch >= "v3.2"
|
11
|
+
gem "solidus_frontend"
|
12
|
+
elsif branch == "main"
|
13
|
+
gem "solidus_frontend", github: "solidusio/solidus_frontend"
|
14
14
|
else
|
15
|
-
gem
|
15
|
+
gem "solidus_frontend", github: "solidusio/solidus", branch: branch
|
16
16
|
end
|
17
17
|
|
18
18
|
# Needed to help Bundler figure out how to resolve dependencies,
|
19
19
|
# otherwise it takes forever to resolve them.
|
20
20
|
# See https://github.com/bundler/bundler/issues/6677
|
21
|
-
gem
|
22
|
-
|
21
|
+
gem "rails", ">0.a"
|
23
22
|
|
24
23
|
# Provides basic authentication functionality for testing parts of your engine
|
25
|
-
gem
|
24
|
+
gem "solidus_auth_devise"
|
26
25
|
|
27
|
-
case ENV.fetch(
|
28
|
-
when
|
29
|
-
gem
|
30
|
-
when
|
31
|
-
gem
|
26
|
+
case ENV.fetch("DB", nil)
|
27
|
+
when "mysql"
|
28
|
+
gem "mysql2"
|
29
|
+
when "postgresql"
|
30
|
+
gem "pg"
|
32
31
|
else
|
33
|
-
gem
|
32
|
+
gem "sqlite3"
|
34
33
|
end
|
35
34
|
|
36
35
|
# While we still support Ruby < 3 we need to workaround a limitation in
|
37
36
|
# the 'async' gem that relies on the latest ruby, since RubyGems doesn't
|
38
37
|
# resolve gems based on the required ruby version.
|
39
|
-
gem
|
38
|
+
gem "async", "< 3" if Gem::Version.new(RUBY_VERSION) < Gem::Version.new("3")
|
40
39
|
|
41
40
|
gemspec
|
42
41
|
|
@@ -45,4 +44,4 @@ gemspec
|
|
45
44
|
#
|
46
45
|
# We use `send` instead of calling `eval_gemfile` to work around an issue with
|
47
46
|
# how Dependabot parses projects: https://github.com/dependabot/dependabot-core/issues/1658.
|
48
|
-
send(:eval_gemfile,
|
47
|
+
send(:eval_gemfile, "Gemfile-local") if File.exist? "Gemfile-local"
|
data/LICENSE
CHANGED
data/README.md
CHANGED
data/Rakefile
CHANGED
@@ -0,0 +1,80 @@
|
|
1
|
+
module Spree
|
2
|
+
module Admin
|
3
|
+
module SolidusBling
|
4
|
+
class AccountsController < BaseController
|
5
|
+
before_action :set_account, only: [:show, :edit, :update, :destroy]
|
6
|
+
|
7
|
+
def index
|
8
|
+
@accounts = ::SolidusBling::Account.all
|
9
|
+
end
|
10
|
+
|
11
|
+
def show
|
12
|
+
end
|
13
|
+
|
14
|
+
def new
|
15
|
+
if ::SolidusBling::Account.any?
|
16
|
+
flash[:error] = "Você só pode ter uma conta Bling cadastrada"
|
17
|
+
redirect_to admin_solidus_bling_accounts_path
|
18
|
+
end
|
19
|
+
@bling_account = ::SolidusBling::Account.new
|
20
|
+
@payment_methods = ::Spree::PaymentMethod.all.pluck(:name, :id)
|
21
|
+
@shipping_methods = ::Spree::ShippingMethod.all.pluck(:name, :id)
|
22
|
+
@bling_account.payment_methods.build
|
23
|
+
@bling_account.shipping_methods.build
|
24
|
+
@bling_account.sellers.build
|
25
|
+
end
|
26
|
+
|
27
|
+
def create
|
28
|
+
bling_account = ::SolidusBling::Account.new account_params
|
29
|
+
if bling_account.save
|
30
|
+
flash[:success] = "Conta criada com sucesso"
|
31
|
+
redirect_to admin_solidus_bling_accounts_path
|
32
|
+
else
|
33
|
+
flash[:error] = bling_account.errors.full_messages.join("\n")
|
34
|
+
redirect_to new_admin_solidus_bling_account_path
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def edit
|
39
|
+
@payment_methods = ::Spree::PaymentMethod.all.pluck(:name, :id)
|
40
|
+
@shipping_methods = ::Spree::ShippingMethod.all.pluck(:name, :id)
|
41
|
+
end
|
42
|
+
|
43
|
+
def update
|
44
|
+
@bling_account.update account_params
|
45
|
+
redirect_to edit_admin_solidus_bling_account_path(@bling_account.id)
|
46
|
+
end
|
47
|
+
|
48
|
+
def destroy
|
49
|
+
@bling_account.delete
|
50
|
+
redirect_to admin_solidus_bling_accounts_path
|
51
|
+
end
|
52
|
+
|
53
|
+
def authorize
|
54
|
+
bling_account = ::SolidusBling::Account.first
|
55
|
+
code = params[:code]
|
56
|
+
unless ::SolidusBling::Token.new.authorize(bling_account, code)
|
57
|
+
bling_account.errors.add(:base, "Erro ao autorizar aplicativo 🦆")
|
58
|
+
flash[:error] = bling_account.errors.full_messages.join("\n")
|
59
|
+
end
|
60
|
+
redirect_to edit_admin_solidus_bling_account_path(bling_account.id)
|
61
|
+
end
|
62
|
+
|
63
|
+
private
|
64
|
+
|
65
|
+
def set_account
|
66
|
+
@bling_account = ::SolidusBling::Account.find(params[:id])
|
67
|
+
end
|
68
|
+
|
69
|
+
def account_params
|
70
|
+
params.require(:account).permit(
|
71
|
+
:client_id, :client_secret, :refresh_token, :redirect_url, :state, :access_token, :api_key, :external_store_id, :incoming_category_id,
|
72
|
+
payment_methods_attributes: [:id, :spree_payment_method_id, :external_id],
|
73
|
+
shipping_methods_attributes: [:id, :spree_shipping_method_id, :alias, :company],
|
74
|
+
sellers_attributes: [:id, :name, :external_id]
|
75
|
+
)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
@@ -2,19 +2,16 @@ module SolidusBling
|
|
2
2
|
class OrderJob < ApplicationJob
|
3
3
|
queue_as :default
|
4
4
|
|
5
|
-
def perform
|
6
|
-
bling_event = SolidusBling::Event.new
|
5
|
+
def perform(event:)
|
7
6
|
order = event[:order]
|
8
|
-
bling_event.internal_id
|
9
|
-
bling_event.method = method_name
|
7
|
+
bling_event = SolidusBling::Event.new(internal_id: order.id, body: order.to_json)
|
10
8
|
begin
|
11
9
|
SolidusBling::Order.new(order).send
|
12
|
-
bling_event.status =
|
10
|
+
bling_event.status = "success"
|
13
11
|
rescue => e
|
14
|
-
bling_event.status =
|
12
|
+
bling_event.status = "error"
|
15
13
|
bling_event.message = e.to_json
|
16
14
|
ensure
|
17
|
-
bling_event.body = order.to_json
|
18
15
|
bling_event.save!
|
19
16
|
end
|
20
17
|
end
|
@@ -2,8 +2,13 @@ module SolidusBling
|
|
2
2
|
class Account < ApplicationRecord
|
3
3
|
has_many :payment_methods, dependent: :destroy
|
4
4
|
has_many :shipping_methods, dependent: :destroy
|
5
|
-
has_many :products, dependent: :destroy
|
6
5
|
has_many :sellers, dependent: :destroy
|
7
6
|
accepts_nested_attributes_for :payment_methods, :shipping_methods, :sellers
|
7
|
+
|
8
|
+
def check_token
|
9
|
+
return if client_id.blank? || client_secret.blank? || refresh_token.blank?
|
10
|
+
return if (token_expires_in - 1.day) > DateTime.now
|
11
|
+
Token.new.refresh self
|
12
|
+
end
|
8
13
|
end
|
9
14
|
end
|
@@ -1,136 +1,161 @@
|
|
1
1
|
module SolidusBling
|
2
|
-
class Order
|
3
|
-
|
4
|
-
|
5
|
-
super(SolidusBling::Account.first)
|
6
|
-
@order = order
|
2
|
+
class Order
|
3
|
+
def initialize spree_order
|
4
|
+
@order = spree_order
|
7
5
|
end
|
8
6
|
|
9
7
|
def send
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
begin
|
14
|
-
attempts ||= 1
|
15
|
-
req = Typhoeus.post("#{@account.api_base_url}/pedidos/vendas", headers: @headers, body: JSON.dump(hash_order))
|
16
|
-
raise if req.code == 429
|
17
|
-
rescue
|
18
|
-
retry if (attempts += 1) < 5
|
19
|
-
ensure
|
20
|
-
json = JSON.parse(req.body)
|
21
|
-
response_has_error?(json)
|
22
|
-
if json.include? "data"
|
23
|
-
@order.bling_order_id = json["data"]["id"]
|
24
|
-
@order.save
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
8
|
+
@account = SolidusBling::Account.first
|
9
|
+
@account.check_token
|
10
|
+
BlingApi.configuration.access_token = @account.access_token
|
29
11
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
},
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
"totalProdutos": order.item_total.to_f,
|
53
|
-
"total": order.total.to_f,
|
54
|
-
"observacoes": " Nº Pedido Loja: #{order.number}",
|
55
|
-
"observacoesInternas": "Pagamento: #{@parcelas}x R$ #{(order.total.to_f / @parcelas).round(2)}\nForma de envio: #{order.shipments.last.selected_shipping_rate.name}\n#{build_cupons(order.promotions)}#{build_order_url(order)}",
|
56
|
-
"categoria": {
|
57
|
-
"id": @account.incoming_category_id
|
58
|
-
}
|
59
|
-
}
|
12
|
+
contato = costumer
|
13
|
+
items = products
|
14
|
+
parcelas = installments
|
15
|
+
observacoes_internas = internal_observations
|
16
|
+
transporte = shipment
|
17
|
+
|
18
|
+
bling_order = BlingApi::Order.new(
|
19
|
+
id_contato: contato.id,
|
20
|
+
items: items,
|
21
|
+
parcelas: parcelas,
|
22
|
+
numero_loja: @order.number,
|
23
|
+
data: @order.completed_at.strftime("%Y-%m-%d"),
|
24
|
+
total_produtos: @order.item_total.to_f,
|
25
|
+
total: @order.total.to_f,
|
26
|
+
id_loja: @account.external_store_id,
|
27
|
+
observacoes: "Número do pedido loja: #{@order.number}",
|
28
|
+
observacoes_internas: observacoes_internas,
|
29
|
+
valor_desconto: @order.adjustment_total,
|
30
|
+
id_categoria: @account.incoming_category_id,
|
31
|
+
transporte: transporte,
|
32
|
+
id_vendedor: @account.sellers.first.external_id
|
33
|
+
).create
|
60
34
|
end
|
61
35
|
|
62
|
-
def
|
63
|
-
|
36
|
+
def costumer
|
37
|
+
contato = BlingApi::Customer.find_by_tax_id(@order.tax_id)
|
38
|
+
if contato
|
39
|
+
contato.update(
|
40
|
+
pessoa_juridica: @order.tax_id.length > 14,
|
41
|
+
numero_documento: @order.tax_id,
|
42
|
+
**build_customer
|
43
|
+
)
|
44
|
+
else
|
45
|
+
contato = BlingApi::Customer.new(
|
46
|
+
pessoa_juridica: @order.tax_id.length > 14,
|
47
|
+
numero_documento: @order.tax_id,
|
48
|
+
**build_customer
|
49
|
+
).create
|
50
|
+
end
|
51
|
+
contato
|
64
52
|
end
|
65
53
|
|
66
|
-
def
|
67
|
-
|
68
|
-
|
54
|
+
def products
|
55
|
+
@order.line_items.map do |item|
|
56
|
+
product = BlingApi::Product.find_by_sku(item.sku)
|
69
57
|
{
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
58
|
+
id: product.id,
|
59
|
+
quantidade: item.quantity,
|
60
|
+
valor: item.price.to_f,
|
61
|
+
produto: {
|
62
|
+
id: product.id
|
75
63
|
}
|
76
64
|
}
|
77
|
-
end
|
65
|
+
end.compact
|
78
66
|
end
|
79
67
|
|
80
|
-
def
|
81
|
-
@parcelas = 1
|
82
|
-
|
83
|
-
@parcelas = order.payments.last.source.try(:installments) || 1
|
84
|
-
end
|
85
|
-
valor_parcela = order.total.to_f / @parcelas
|
68
|
+
def installments
|
69
|
+
@parcelas = @order.payments.last.source.try(:installments) || 1
|
70
|
+
valor_parcela = @order.total.to_f / @parcelas
|
86
71
|
1.upto(@parcelas).map do |parcela|
|
87
72
|
{
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
73
|
+
dataVencimento: (@order.completed_at + parcela.months).strftime("%Y-%m-%d"),
|
74
|
+
valor: valor_parcela,
|
75
|
+
formaPagamento: {
|
76
|
+
id: @account.payment_methods.find_by(spree_payment_method_id: @order.payments.last.payment_method_id).external_id
|
92
77
|
}
|
93
78
|
}
|
94
79
|
end
|
95
80
|
end
|
96
81
|
|
97
|
-
def
|
98
|
-
|
82
|
+
def internal_observations
|
83
|
+
"Pagamento: #{@parcelas}x R$ #{(@order.total.to_f / @parcelas).round(2)}" +
|
84
|
+
"\n" +
|
85
|
+
"Forma de envio: #{@order.shipments.last.selected_shipping_rate.name}" +
|
86
|
+
"\n" +
|
87
|
+
"#{build_cupons(@order.promotions)}" +
|
88
|
+
"\n" +
|
89
|
+
"#{build_order_url}"
|
90
|
+
end
|
91
|
+
|
92
|
+
def shipment
|
93
|
+
shipping_method = @account.shipping_methods.find_by(spree_shipping_method_id: @order.shipments.last.shipping_method.id)
|
99
94
|
servico = shipping_method.nil? ? "" : shipping_method.alias
|
100
95
|
transportadora = shipping_method.nil? ? "" : shipping_method.company
|
101
96
|
{
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
97
|
+
fretePorConta: 1,
|
98
|
+
frete: @order.shipment_total.to_f,
|
99
|
+
quantidadeVolumes: 1,
|
100
|
+
contato: {
|
101
|
+
nome: transportadora
|
107
102
|
},
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
103
|
+
etiqueta: {
|
104
|
+
nome: @order.ship_address.name,
|
105
|
+
endereco: @order.ship_address.address1,
|
106
|
+
numero: @order.ship_address.number,
|
107
|
+
complemento: @order.ship_address.address2,
|
108
|
+
municipio: @order.ship_address.city,
|
109
|
+
uf: @order.ship_address.state.abbr,
|
110
|
+
bairro: @order.ship_address.district,
|
111
|
+
cep: @order.ship_address.zipcode,
|
112
|
+
nomePais: "Brasil"
|
118
113
|
},
|
119
|
-
|
114
|
+
volumes: [
|
120
115
|
{
|
121
|
-
|
122
|
-
|
116
|
+
servico: servico,
|
117
|
+
codigoRastreamento: ""
|
123
118
|
}
|
124
119
|
]
|
125
120
|
}
|
126
121
|
end
|
127
122
|
|
123
|
+
def build_customer
|
124
|
+
{
|
125
|
+
nome: @order.bill_address.name,
|
126
|
+
telefone: @order.bill_address.phone,
|
127
|
+
email: @order.email,
|
128
|
+
endereco: {
|
129
|
+
"endereco" => @order.bill_address.address1,
|
130
|
+
"cep" => @order.bill_address.zipcode,
|
131
|
+
"bairro" => @order.bill_address.district,
|
132
|
+
"municipio" => @order.bill_address.city,
|
133
|
+
"uf" => @order.bill_address.state.abbr,
|
134
|
+
"numero" => @order.bill_address.number,
|
135
|
+
"complemento" => @order.bill_address.address2
|
136
|
+
},
|
137
|
+
endereco_cobranca: {
|
138
|
+
"endereco" => @order.bill_address.address1,
|
139
|
+
"cep" => @order.bill_address.zipcode,
|
140
|
+
"bairro" => @order.bill_address.district,
|
141
|
+
"municipio" => @order.bill_address.city,
|
142
|
+
"uf" => @order.bill_address.state.abbr,
|
143
|
+
"numero" => @order.bill_address.number,
|
144
|
+
"complemento" => @order.bill_address.address2
|
145
|
+
}
|
146
|
+
}
|
147
|
+
end
|
148
|
+
|
128
149
|
def build_cupons cupons
|
129
|
-
string_cupons =
|
150
|
+
string_cupons = ""
|
130
151
|
if !cupons.empty?
|
131
152
|
string_cupons = "Cupons utilizados: #{cupons.pluck(:name).join(", ")}"
|
132
153
|
end
|
133
154
|
string_cupons
|
134
155
|
end
|
156
|
+
|
157
|
+
def build_order_url
|
158
|
+
"Link para o pedido: #{@order.store.url}/orders/#{@order.number}/token/#{@order.guest_token}"
|
159
|
+
end
|
135
160
|
end
|
136
161
|
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module SolidusBling
|
2
|
+
class Token < ::Ac::Base
|
3
|
+
BASE_URL = "https://www.bling.com.br/Api/v3"
|
4
|
+
|
5
|
+
def initialize
|
6
|
+
super
|
7
|
+
end
|
8
|
+
|
9
|
+
def authorize bling_account, code
|
10
|
+
basic_encoded = Base64.strict_encode64("#{bling_account.client_id}:#{bling_account.client_secret}")
|
11
|
+
headers = {
|
12
|
+
"Content-Type": "application/x-www-form-urlencoded",
|
13
|
+
Authorization: "Basic #{basic_encoded}"
|
14
|
+
}
|
15
|
+
body = {
|
16
|
+
code: code,
|
17
|
+
grant_type: "authorization_code"
|
18
|
+
}
|
19
|
+
response_json = post("/oauth/token", headers:, body:).json
|
20
|
+
bling_account.update(
|
21
|
+
access_token: response_json["access_token"],
|
22
|
+
token_expires_in: DateTime.now.utc + response_json["expires_in"].seconds,
|
23
|
+
refresh_token: response_json["refresh_token"]
|
24
|
+
)
|
25
|
+
rescue
|
26
|
+
false
|
27
|
+
end
|
28
|
+
|
29
|
+
def refresh bling_account
|
30
|
+
response_json = BlingApi::Client.new.refresh_token(
|
31
|
+
client_id: bling_account.client_id,
|
32
|
+
client_secret: bling_account.client_secret,
|
33
|
+
refresh_token: bling_account.refresh_token
|
34
|
+
)
|
35
|
+
bling_account.update(
|
36
|
+
access_token: response_json["access_token"],
|
37
|
+
token_expires_in: DateTime.now.utc + response_json["expires_in"].seconds,
|
38
|
+
refresh_token: response_json["refresh_token"]
|
39
|
+
)
|
40
|
+
rescue
|
41
|
+
false
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -3,30 +3,10 @@ module SolidusBling
|
|
3
3
|
include Omnes::Subscriber
|
4
4
|
|
5
5
|
handle :order_finalized,
|
6
|
-
|
7
|
-
id: :send_order_to_bling
|
8
|
-
|
9
|
-
handle :bling_products_updated,
|
10
|
-
with: :products_updated,
|
11
|
-
id: :products_updated
|
12
|
-
|
13
|
-
handle :bling_contact_created,
|
14
|
-
with: :contato_created,
|
15
|
-
id: :contato_created
|
6
|
+
with: :send_order_to_bling
|
16
7
|
|
17
8
|
def send_order_to_bling event, debug_info = {}
|
18
|
-
|
19
|
-
SolidusBling::OrderJob.perform_later(event: event.payload, method_name: method)
|
20
|
-
end
|
21
|
-
|
22
|
-
def contato_created event, debug_info = {}
|
23
|
-
method = __method__.to_s
|
24
|
-
SolidusBling::ContactJob.perform_later(event: event.payload, method_name: method)
|
25
|
-
end
|
26
|
-
|
27
|
-
def products_updated event, debug_info = {}
|
28
|
-
method = __method__.to_s
|
29
|
-
SolidusBling::ProductJob.perform_later(event: event.payload, method_name: method)
|
9
|
+
SolidusBling::OrderJob.perform_later(event: event.payload)
|
30
10
|
end
|
31
11
|
end
|
32
12
|
end
|