solidus_bling 2.0.7 → 3.0.0

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.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/.gitattributes +2 -0
  3. data/.gitignore +0 -1
  4. data/CHANGELOG.md +1 -3
  5. data/LICENSE +1 -1
  6. data/README.md +1 -1
  7. data/app/controllers/spree/admin/solidus_bling/accounts_controller.rb +77 -0
  8. data/app/jobs/solidus_bling/order_job.rb +5 -7
  9. data/app/models/solidus_bling/account.rb +7 -1
  10. data/app/models/solidus_bling/order.rb +122 -95
  11. data/app/models/solidus_bling/token.rb +44 -0
  12. data/app/subscribers/solidus_bling/subscriber.rb +2 -22
  13. data/app/views/spree/admin/{accounts → solidus_bling/accounts}/_form.html.erb +21 -8
  14. data/app/views/spree/admin/solidus_bling/accounts/edit.html.erb +1 -0
  15. data/app/views/spree/admin/solidus_bling/accounts/index.html.erb +13 -0
  16. data/app/views/spree/admin/{accounts → solidus_bling/accounts}/new.html.erb +1 -1
  17. data/bin/meu_sandbox +67 -0
  18. data/config/locales/pt-BR.yml +1 -1
  19. data/config/routes.rb +6 -2
  20. data/db/migrate/{20230918141419_create_solidus_bling_accounts.rb → 20231109210635_create_solidus_bling_accounts.rb} +4 -5
  21. data/db/migrate/{20230918142547_create_solidus_bling_events.rb → 20231110112819_create_solidus_bling_events.rb} +1 -2
  22. data/db/migrate/{20230918143057_create_solidus_bling_shipping_methods.rb → 20231110113221_create_solidus_bling_shipping_methods.rb} +1 -0
  23. data/lib/solidus_bling/engine.rb +8 -11
  24. data/lib/solidus_bling/version.rb +1 -1
  25. data/lib/solidus_bling.rb +1 -1
  26. data/solidus_bling.gemspec +6 -7
  27. metadata +25 -51
  28. data/app/controllers/spree/admin/accounts_controller.rb +0 -67
  29. data/app/controllers/spree/admin/bling_products_controller.rb +0 -20
  30. data/app/decorators/models/solidus_bling/spree/payment_method_decorator.rb +0 -13
  31. data/app/decorators/models/solidus_bling/spree/shipping_method_decorator.rb +0 -13
  32. data/app/helpers/solidus_bling/accounts_helper.rb +0 -4
  33. data/app/helpers/solidus_bling/bling_products_helper.rb +0 -4
  34. data/app/jobs/solidus_bling/contact_job.rb +0 -22
  35. data/app/jobs/solidus_bling/product_job.rb +0 -13
  36. data/app/jobs/solidus_bling/update_product_job.rb +0 -9
  37. data/app/models/solidus_bling/api.rb +0 -57
  38. data/app/models/solidus_bling/contact.rb +0 -83
  39. data/app/models/solidus_bling/product.rb +0 -36
  40. data/app/views/spree/admin/accounts/edit.html.erb +0 -11
  41. data/app/views/spree/admin/accounts/index.html.erb +0 -13
  42. data/db/migrate/20230918141700_create_solidus_bling_products.rb +0 -12
  43. data/db/migrate/20231018141940_add_company_to_solidus_bling_shipping_methods.rb +0 -5
  44. data/spec/helpers/solidus_bling/accounts_helper_spec.rb +0 -17
  45. data/spec/helpers/solidus_bling/bling_products_helper_spec.rb +0 -17
  46. data/spec/jobs/solidus_bling/contact_job_spec.rb +0 -7
  47. data/spec/jobs/solidus_bling/product_job_spec.rb +0 -7
  48. data/spec/jobs/solidus_bling/update_product_job_spec.rb +0 -7
  49. data/spec/models/solidus_bling/product_spec.rb +0 -7
  50. data/spec/requests/solidus_bling/accounts_spec.rb +0 -7
  51. data/spec/requests/solidus_bling/bling_products_spec.rb +0 -7
  52. /data/app/views/spree/admin/{accounts → solidus_bling/accounts}/show.html.erb +0 -0
  53. /data/db/migrate/{20230918141505_add_bling_order_id_to_spree_orders.rb → 20231110112528_add_bling_order_id_to_spree_orders.rb} +0 -0
  54. /data/db/migrate/{20230918142742_create_solidus_bling_payment_methods.rb → 20231110112958_create_solidus_bling_payment_methods.rb} +0 -0
  55. /data/db/migrate/{20230918142953_create_solidus_bling_sellers.rb → 20231110113122_create_solidus_bling_sellers.rb} +0 -0
@@ -1,17 +1,16 @@
1
1
  class CreateSolidusBlingAccounts < ActiveRecord::Migration[7.0]
2
2
  def change
3
3
  create_table :solidus_bling_accounts do |t|
4
- t.string :name
5
- t.string :app_name
6
- t.string :api_base_url
7
- t.string :api_key
8
4
  t.string :client_id
9
5
  t.string :client_secret
10
6
  t.string :refresh_token
7
+ t.string :redirect_url
8
+ t.string :state
11
9
  t.string :access_token
10
+ t.string :api_key
11
+ t.datetime :token_expires_in
12
12
  t.string :external_store_id
13
13
  t.string :incoming_category_id
14
- t.datetime :token_expires_in
15
14
 
16
15
  t.timestamps
17
16
  end
@@ -5,8 +5,7 @@ class CreateSolidusBlingEvents < ActiveRecord::Migration[7.0]
5
5
  t.string :status
6
6
  t.string :message
7
7
  t.string :body
8
- t.string :name
9
- t.string :method
8
+ t.string :event
10
9
 
11
10
  t.timestamps
12
11
  end
@@ -2,6 +2,7 @@ class CreateSolidusBlingShippingMethods < ActiveRecord::Migration[7.0]
2
2
  def change
3
3
  create_table :solidus_bling_shipping_methods do |t|
4
4
  t.string :alias
5
+ t.string :company
5
6
  t.integer :account_id, null: false, index: true, index: { name: "solidus_bling_shipping_account_index" }
6
7
  t.integer :spree_shipping_method_id, null: false, index: true, index: { name: "solidus_bling_spree_shipping_index" }
7
8
 
@@ -7,7 +7,7 @@ module SolidusBling
7
7
  class Engine < Rails::Engine
8
8
  include SolidusSupport::EngineExtensions
9
9
 
10
- isolate_namespace SolidusBling
10
+ isolate_namespace ::SolidusBling
11
11
 
12
12
  engine_name 'solidus_bling'
13
13
 
@@ -16,26 +16,23 @@ module SolidusBling
16
16
 
17
17
  ::Spree::Backend::Config.configure do |config|
18
18
  config.menu_items << config.class::MenuItem.new(
19
- [:bling_account],
20
- 'exclamation',
21
- url: :admin_accounts_path,
19
+ label: "bling_account",
20
+ icon: 'exclamation',
21
+ url: "/admin/solidus_bling/accounts",
22
22
  condition: -> { can?(:manage, ::Spree::Store) }
23
23
  )
24
24
  end
25
25
  end
26
26
 
27
- # use rspec for tests
28
- config.generators do |g|
29
- g.test_framework :rspec
30
- end
31
-
32
27
  initializer "solidus_bling.pub_sub", after: "spree.core.pub_sub" do |app|
33
28
  app.reloader.to_prepare do
34
- ::Spree::Bus.register(:bling_products_updated)
35
- ::Spree::Bus.register(:bling_contact_created)
36
29
  SolidusBling::Subscriber.new.subscribe_to(::Spree::Bus)
37
30
  end
38
31
  end
39
32
 
33
+ # use rspec for tests
34
+ config.generators do |g|
35
+ g.test_framework :rspec
36
+ end
40
37
  end
41
38
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SolidusBling
4
- VERSION = '2.0.7'
4
+ VERSION = '3.0.0'
5
5
  end
data/lib/solidus_bling.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'solidus_brazilian_adaptations'
4
- require 'typhoeus'
4
+ require 'bling_api'
5
5
  require 'solidus_bling/configuration'
6
6
  require 'solidus_bling/version'
7
7
  require 'solidus_bling/engine'
@@ -5,16 +5,16 @@ require_relative 'lib/solidus_bling/version'
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = 'solidus_bling'
7
7
  spec.version = SolidusBling::VERSION
8
- spec.authors = ['ulysses-bull']
9
- spec.email = 'contato7bulloleo@gmail.com'
8
+ spec.authors = ['Hamilton Tumenas Borges']
9
+ spec.email = 'hamiltontubo@gmail.com'
10
10
 
11
11
  spec.summary = 'Solidus extension to integrate with the Bling'
12
- spec.homepage = 'https://github.com/ulysses-bull/solidus_bling#readme'
12
+ spec.homepage = 'https://github.com/hamiltontborges/solidus_bling#readme'
13
13
  spec.license = 'BSD-3-Clause'
14
14
 
15
15
  spec.metadata['homepage_uri'] = spec.homepage
16
- spec.metadata['source_code_uri'] = 'https://github.com/ulysses-bull/solidus_bling'
17
- spec.metadata['changelog_uri'] = 'https://github.com/ulysses-bull/solidus_bling/blob/master/CHANGELOG.md'
16
+ spec.metadata['source_code_uri'] = 'https://github.com/hamiltontborges/solidus_bling'
17
+ spec.metadata['changelog_uri'] = 'https://github.com/hamiltontborges/solidus_bling/blob/master/CHANGELOG.md'
18
18
 
19
19
  spec.required_ruby_version = Gem::Requirement.new('>= 2.5', '< 4')
20
20
 
@@ -30,9 +30,8 @@ Gem::Specification.new do |spec|
30
30
 
31
31
  spec.add_dependency 'solidus_core', ['>= 2.0.0', '< 5']
32
32
  spec.add_dependency 'solidus_support', '~> 0.5'
33
- spec.add_dependency 'typhoeus'
34
33
  spec.add_dependency 'solidus_brazilian_adaptations'
34
+ spec.add_dependency 'bling_api'
35
35
 
36
36
  spec.add_development_dependency 'solidus_dev_support', '~> 2.7'
37
-
38
37
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: solidus_bling
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.7
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
- - ulysses-bull
7
+ - Hamilton Tumenas Borges
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-10-20 00:00:00.000000000 Z
11
+ date: 2023-11-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: solidus_core
@@ -45,7 +45,7 @@ dependencies:
45
45
  - !ruby/object:Gem::Version
46
46
  version: '0.5'
47
47
  - !ruby/object:Gem::Dependency
48
- name: typhoeus
48
+ name: solidus_brazilian_adaptations
49
49
  requirement: !ruby/object:Gem::Requirement
50
50
  requirements:
51
51
  - - ">="
@@ -59,7 +59,7 @@ dependencies:
59
59
  - !ruby/object:Gem::Version
60
60
  version: '0'
61
61
  - !ruby/object:Gem::Dependency
62
- name: solidus_brazilian_adaptations
62
+ name: bling_api
63
63
  requirement: !ruby/object:Gem::Requirement
64
64
  requirements:
65
65
  - - ">="
@@ -87,13 +87,14 @@ dependencies:
87
87
  - !ruby/object:Gem::Version
88
88
  version: '2.7'
89
89
  description:
90
- email: contato7bulloleo@gmail.com
90
+ email: hamiltontubo@gmail.com
91
91
  executables: []
92
92
  extensions: []
93
93
  extra_rdoc_files: []
94
94
  files:
95
95
  - ".circleci/config.yml"
96
96
  - ".gem_release.yml"
97
+ - ".gitattributes"
97
98
  - ".github/stale.yml"
98
99
  - ".github_changelog_generator"
99
100
  - ".gitignore"
@@ -104,33 +105,24 @@ files:
104
105
  - LICENSE
105
106
  - README.md
106
107
  - Rakefile
107
- - app/controllers/spree/admin/accounts_controller.rb
108
- - app/controllers/spree/admin/bling_products_controller.rb
109
- - app/decorators/models/solidus_bling/spree/payment_method_decorator.rb
110
- - app/decorators/models/solidus_bling/spree/shipping_method_decorator.rb
111
- - app/helpers/solidus_bling/accounts_helper.rb
112
- - app/helpers/solidus_bling/bling_products_helper.rb
108
+ - app/controllers/spree/admin/solidus_bling/accounts_controller.rb
113
109
  - app/jobs/solidus_bling/application_job.rb
114
- - app/jobs/solidus_bling/contact_job.rb
115
110
  - app/jobs/solidus_bling/order_job.rb
116
- - app/jobs/solidus_bling/product_job.rb
117
- - app/jobs/solidus_bling/update_product_job.rb
118
111
  - app/models/solidus_bling/account.rb
119
- - app/models/solidus_bling/api.rb
120
- - app/models/solidus_bling/contact.rb
121
112
  - app/models/solidus_bling/event.rb
122
113
  - app/models/solidus_bling/order.rb
123
114
  - app/models/solidus_bling/payment_method.rb
124
- - app/models/solidus_bling/product.rb
125
115
  - app/models/solidus_bling/seller.rb
126
116
  - app/models/solidus_bling/shipping_method.rb
117
+ - app/models/solidus_bling/token.rb
127
118
  - app/subscribers/solidus_bling/subscriber.rb
128
- - app/views/spree/admin/accounts/_form.html.erb
129
- - app/views/spree/admin/accounts/edit.html.erb
130
- - app/views/spree/admin/accounts/index.html.erb
131
- - app/views/spree/admin/accounts/new.html.erb
132
- - app/views/spree/admin/accounts/show.html.erb
119
+ - app/views/spree/admin/solidus_bling/accounts/_form.html.erb
120
+ - app/views/spree/admin/solidus_bling/accounts/edit.html.erb
121
+ - app/views/spree/admin/solidus_bling/accounts/index.html.erb
122
+ - app/views/spree/admin/solidus_bling/accounts/new.html.erb
123
+ - app/views/spree/admin/solidus_bling/accounts/show.html.erb
133
124
  - bin/console
125
+ - bin/meu_sandbox
134
126
  - bin/rails
135
127
  - bin/rails-engine
136
128
  - bin/rails-sandbox
@@ -140,14 +132,12 @@ files:
140
132
  - config/locales/en.yml
141
133
  - config/locales/pt-BR.yml
142
134
  - config/routes.rb
143
- - db/migrate/20230918141419_create_solidus_bling_accounts.rb
144
- - db/migrate/20230918141505_add_bling_order_id_to_spree_orders.rb
145
- - db/migrate/20230918141700_create_solidus_bling_products.rb
146
- - db/migrate/20230918142547_create_solidus_bling_events.rb
147
- - db/migrate/20230918142742_create_solidus_bling_payment_methods.rb
148
- - db/migrate/20230918142953_create_solidus_bling_sellers.rb
149
- - db/migrate/20230918143057_create_solidus_bling_shipping_methods.rb
150
- - db/migrate/20231018141940_add_company_to_solidus_bling_shipping_methods.rb
135
+ - db/migrate/20231109210635_create_solidus_bling_accounts.rb
136
+ - db/migrate/20231110112528_add_bling_order_id_to_spree_orders.rb
137
+ - db/migrate/20231110112819_create_solidus_bling_events.rb
138
+ - db/migrate/20231110112958_create_solidus_bling_payment_methods.rb
139
+ - db/migrate/20231110113122_create_solidus_bling_sellers.rb
140
+ - db/migrate/20231110113221_create_solidus_bling_shipping_methods.rb
151
141
  - lib/generators/solidus_bling/install/install_generator.rb
152
142
  - lib/generators/solidus_bling/install/templates/initializer.rb
153
143
  - lib/solidus_bling.rb
@@ -156,28 +146,20 @@ files:
156
146
  - lib/solidus_bling/testing_support/factories.rb
157
147
  - lib/solidus_bling/version.rb
158
148
  - solidus_bling.gemspec
159
- - spec/helpers/solidus_bling/accounts_helper_spec.rb
160
- - spec/helpers/solidus_bling/bling_products_helper_spec.rb
161
- - spec/jobs/solidus_bling/contact_job_spec.rb
162
149
  - spec/jobs/solidus_bling/order_job_spec.rb
163
- - spec/jobs/solidus_bling/product_job_spec.rb
164
- - spec/jobs/solidus_bling/update_product_job_spec.rb
165
150
  - spec/models/solidus_bling/account_spec.rb
166
151
  - spec/models/solidus_bling/event_spec.rb
167
152
  - spec/models/solidus_bling/payment_method_spec.rb
168
- - spec/models/solidus_bling/product_spec.rb
169
153
  - spec/models/solidus_bling/seller_spec.rb
170
154
  - spec/models/solidus_bling/shipping_method_spec.rb
171
- - spec/requests/solidus_bling/accounts_spec.rb
172
- - spec/requests/solidus_bling/bling_products_spec.rb
173
155
  - spec/spec_helper.rb
174
- homepage: https://github.com/ulysses-bull/solidus_bling#readme
156
+ homepage: https://github.com/hamiltontborges/solidus_bling#readme
175
157
  licenses:
176
158
  - BSD-3-Clause
177
159
  metadata:
178
- homepage_uri: https://github.com/ulysses-bull/solidus_bling#readme
179
- source_code_uri: https://github.com/ulysses-bull/solidus_bling
180
- changelog_uri: https://github.com/ulysses-bull/solidus_bling/blob/master/CHANGELOG.md
160
+ homepage_uri: https://github.com/hamiltontborges/solidus_bling#readme
161
+ source_code_uri: https://github.com/hamiltontborges/solidus_bling
162
+ changelog_uri: https://github.com/hamiltontborges/solidus_bling/blob/master/CHANGELOG.md
181
163
  post_install_message:
182
164
  rdoc_options: []
183
165
  require_paths:
@@ -201,18 +183,10 @@ signing_key:
201
183
  specification_version: 4
202
184
  summary: Solidus extension to integrate with the Bling
203
185
  test_files:
204
- - spec/helpers/solidus_bling/accounts_helper_spec.rb
205
- - spec/helpers/solidus_bling/bling_products_helper_spec.rb
206
- - spec/jobs/solidus_bling/contact_job_spec.rb
207
186
  - spec/jobs/solidus_bling/order_job_spec.rb
208
- - spec/jobs/solidus_bling/product_job_spec.rb
209
- - spec/jobs/solidus_bling/update_product_job_spec.rb
210
187
  - spec/models/solidus_bling/account_spec.rb
211
188
  - spec/models/solidus_bling/event_spec.rb
212
189
  - spec/models/solidus_bling/payment_method_spec.rb
213
- - spec/models/solidus_bling/product_spec.rb
214
190
  - spec/models/solidus_bling/seller_spec.rb
215
191
  - spec/models/solidus_bling/shipping_method_spec.rb
216
- - spec/requests/solidus_bling/accounts_spec.rb
217
- - spec/requests/solidus_bling/bling_products_spec.rb
218
192
  - spec/spec_helper.rb
@@ -1,67 +0,0 @@
1
- module Spree
2
- module Admin
3
- class AccountsController < ResourceController
4
- def index
5
- end
6
-
7
- def show
8
- @bling_account = SolidusBling::Account.find(params[:id])
9
- end
10
-
11
- def new
12
- @bling_account = SolidusBling::Account.new
13
- @payment_methods = ::Spree::PaymentMethod.all.pluck(:name, :id)
14
- @shipping_methods = ::Spree::ShippingMethod.all.pluck(:name, :id)
15
- @bling_account.payment_methods.build
16
- @bling_account.shipping_methods.build
17
- @bling_account.sellers.build
18
- end
19
-
20
- def create
21
- bling_account = SolidusBling::Account.new account_params.merge(name: "Bling")
22
- if bling_account.save
23
- flash[:success] = "Conta criada com sucesso"
24
- redirect_to admin_accounts_path
25
- else
26
- flash[:error] = bling_account.errors.full_messages.join("\n")
27
- redirect_to new_admin_account_path
28
- end
29
- end
30
-
31
- def edit
32
- @bling_account = SolidusBling::Account.find(params[:id])
33
- @payment_methods = ::Spree::PaymentMethod.all.pluck(:name, :id)
34
- @shipping_methods = ::Spree::ShippingMethod.all.pluck(:name, :id)
35
- @products_count = @bling_account.products.count
36
- @last_update = SolidusBling::Event.where(method: "products_updated").max.try(:created_at)
37
- end
38
-
39
- def update
40
- bling_account = SolidusBling::Account.find(params[:id])
41
- bling_account.update account_params
42
- redirect_to edit_admin_account_path(bling_account.id)
43
- end
44
-
45
- def delete
46
- bling_account = SolidusBling::Account.find(params[:id])
47
- bling_account.delete
48
- redirect_to admin_accounts_path
49
- end
50
-
51
- private
52
-
53
- def model_class
54
- SolidusBling::Account
55
- end
56
-
57
- def account_params
58
- params.require(:account).permit(
59
- :app_name, :client_id, :client_secret, :refresh_token, :api_base_url, :external_store_id, :incoming_category_id,
60
- payment_methods_attributes: [:id, :spree_payment_method_id, :external_id],
61
- shipping_methods_attributes: [:id, :spree_shipping_method_id, :alias, :company],
62
- sellers_attributes: [:id, :name, :external_id]
63
- )
64
- end
65
- end
66
- end
67
- end
@@ -1,20 +0,0 @@
1
- module Spree
2
- module Admin
3
- class BlingProductsController < ResourceController
4
-
5
- def update
6
- account = SolidusBling::Account.find(params[:id])
7
- SolidusBling::UpdateProductJob.perform_later(account)
8
- flash[:success] = "Baixando produtos"
9
- redirect_to edit_admin_account_path(account)
10
- end
11
-
12
- private
13
-
14
- def model_class
15
- SolidusBling::Account
16
- end
17
-
18
- end
19
- end
20
- end
@@ -1,13 +0,0 @@
1
- module SolidusBling
2
- module Spree
3
- module PaymentMethodDecorator
4
- def self.prepended(base)
5
- base.class_eval do
6
- has_many :solidus_bling_payment_methods, class_name: "SolidusBling::PaymentMethod", foreign_key: "spree_payment_method_id"
7
- end
8
- end
9
-
10
- ::Spree::PaymentMethod.prepend self
11
- end
12
- end
13
- end
@@ -1,13 +0,0 @@
1
- module SolidusBling
2
- module Spree
3
- module ShippingMethodDecorator
4
- def self.prepended(base)
5
- base.class_eval do
6
- has_many :solidus_bling_shipping_methods, class_name: "SolidusBling::ShippingMethod", foreign_key: "spree_shipping_method_id"
7
- end
8
- end
9
-
10
- ::Spree::ShippingMethod.prepend self
11
- end
12
- end
13
- end
@@ -1,4 +0,0 @@
1
- module SolidusBling
2
- module AccountsHelper
3
- end
4
- end
@@ -1,4 +0,0 @@
1
- module SolidusBling
2
- module BlingProductsHelper
3
- end
4
- end
@@ -1,22 +0,0 @@
1
- module SolidusBling
2
- class ContactJob < ApplicationJob
3
- queue_as :default
4
-
5
- def perform event:, method_name:
6
- bling_event = SolidusBling::Event.new
7
- contact = event[:args][:contato]
8
- order = event[:args][:order]
9
- bling_event.internal_id = order.id
10
- bling_event.name = "event.omnes_event_name"
11
- bling_event.method = method_name
12
- if contact.include? "error"
13
- bling_event.status = 'error'
14
- bling_event.message = contact["error"]["description"]
15
- else
16
- bling_event.status = 'success'
17
- end
18
- bling_event.body = order.to_json
19
- bling_event.save!
20
- end
21
- end
22
- end
@@ -1,13 +0,0 @@
1
- module SolidusBling
2
- class ProductJob < ApplicationJob
3
- queue_as :default
4
-
5
- def perform event:, method_name:
6
- bling_event = SolidusBling::Event.new
7
- products = event[:products]
8
- bling_event.method = method_name
9
- bling_event.body = products.to_json
10
- bling_event.save!
11
- end
12
- end
13
- end
@@ -1,9 +0,0 @@
1
- module SolidusBling
2
- class UpdateProductJob < ApplicationJob
3
- queue_as :default
4
-
5
- def perform(account)
6
- SolidusBling::Product.update(account)
7
- end
8
- end
9
- end
@@ -1,57 +0,0 @@
1
- module SolidusBling
2
- class Api
3
-
4
- attr_reader :account, :headers
5
- def initialize account
6
- @account = account
7
- verify_token
8
- @headers = {
9
- "Content-Type": "application/json",
10
- "Authorization": "Bearer #{@account.access_token}"
11
- }
12
- end
13
-
14
- def refresh_token
15
- basic_encoded = Base64.strict_encode64("#{@account.client_id}:#{@account.client_secret}")
16
- headers = {
17
- "Content-Type": "application/x-www-form-urlencoded",
18
- "Authorization": "Basic #{basic_encoded}"
19
- }
20
- body = "grant_type=refresh_token&refresh_token=#{@account.refresh_token}"
21
- res = ::Typhoeus.post("#{@account.api_base_url}/oauth/token", headers: headers, body: body)
22
- body = JSON.parse(res.body)
23
- response_has_error? body
24
- expire_datetime = res.headers["date"].to_datetime.utc + body["expires_in"].seconds
25
- @account.update(
26
- access_token: body["access_token"],
27
- refresh_token: body["refresh_token"],
28
- token_expires_in: expire_datetime
29
- )
30
- end
31
-
32
- def need_refresh_token?
33
- return true if @account.token_expires_in.nil?
34
- DateTime.now.utc > (@account.token_expires_in - 2.hours)
35
- end
36
-
37
- def verify_token
38
- refresh_token if need_refresh_token?
39
- end
40
-
41
- def response_has_error? json
42
- if json.include? "error"
43
- error = json["error"]
44
- raise "ERROR: #{json}"
45
- end
46
- end
47
-
48
- private
49
-
50
- def find_account app_name
51
- account = SolidusBling::Account.find_by(app_name: app_name)
52
- raise 'Conta de aplicativo inexistente' if account.nil?
53
- account
54
- end
55
-
56
- end
57
- end
@@ -1,83 +0,0 @@
1
- module SolidusBling
2
- class Contact < SolidusBling::Api
3
-
4
- attr_reader :info
5
-
6
- def initialize order, account
7
- super(account)
8
- @info = find_or_create(order)
9
- end
10
-
11
- def find_or_create order
12
- raise "Order com CPF/CNPJ vazio" if order.tax_id.nil?
13
- contato = find_by_cpf(order.tax_id)
14
- if contato.nil?
15
- contato_external_id = create(order)
16
- contato = {"id" => contato_external_id}
17
- end
18
- contato
19
- end
20
-
21
- def find_by_cpf tax_id
22
- req = Typhoeus.get("#{@account.api_base_url}/contatos?numeroDocumento=#{tax_id.gsub(/\D/, "")}", headers: @headers)
23
- json = JSON.parse(req.body)
24
- response_has_error?(json)
25
- user = {}
26
- if json.include? "data" || !json["data"].empty?
27
- user = json["data"].first
28
- end
29
- end
30
-
31
- def create order
32
- contato = build_hash_contato(order)
33
- begin
34
- attempts ||= 1
35
- req = Typhoeus.post("#{@account.api_base_url}/contatos", headers: @headers, body: JSON.dump(contato))
36
- raise if req.code == 429
37
- rescue
38
- retry if (attempts += 1) < 5
39
- ensure
40
- json = JSON.parse(req.body)
41
- response_has_error?(json)
42
- ::Spree::Bus.publish :bling_contact_created, args: {order: order, contato: json}
43
- return json.dig("data", "id")
44
- end
45
- end
46
-
47
- private
48
-
49
- def tipo_pessoa doc
50
- doc.gsub(/\D/, "").length > 11 ? "J" : "F"
51
- end
52
-
53
- def build_hash_contato order
54
- {
55
- "nome": order.ship_address.name,
56
- "telefone": order.ship_address.phone,
57
- "tipo": tipo_pessoa(order.tax_id),
58
- "numeroDocumento": order.tax_id,
59
- "email": order.email,
60
- "endereco": {
61
- "geral": {
62
- "endereco": order.bill_address.address1,
63
- "cep": order.bill_address.zipcode,
64
- "bairro": order.bill_address.district,
65
- "municipio": order.bill_address.city,
66
- "uf": order.bill_address.state.abbr,
67
- "numero": order.bill_address.number,
68
- "complemento": order.bill_address.address2
69
- },
70
- "cobranca": {
71
- "endereco": order.bill_address.address1,
72
- "cep": order.bill_address.zipcode,
73
- "bairro": order.bill_address.district,
74
- "municipio": order.bill_address.city,
75
- "uf": order.bill_address.state.abbr,
76
- "numero": order.bill_address.number,
77
- "complemento": order.bill_address.address2
78
- }
79
- }
80
- }
81
- end
82
- end
83
- end
@@ -1,36 +0,0 @@
1
- module SolidusBling
2
- class Product < ApplicationRecord
3
- belongs_to :account
4
-
5
- def self.update bling_account
6
- bling_api = SolidusBling::Api.new(bling_account)
7
- skus = ::Spree::Variant.pluck(:sku)
8
- hash_products = {}
9
- products = skus.map do |sku|
10
- begin
11
- attempts ||= 1
12
- req = Typhoeus.get("#{bling_api.account.api_base_url}/produtos?codigo=#{sku}", headers: bling_api.headers)
13
- res_json = JSON.parse(req.body)
14
- # p "#{sku} => #{res_json}"
15
- next if res_json["data"] == []
16
- product = res_json["data"].first
17
- hash_products[sku] = product["id"]
18
- {
19
- account_id: bling_api.account.id,
20
- sku: sku,
21
- external_id: product["id"].to_s,
22
- name: product["nome"]
23
- }
24
- rescue => e
25
- hash_products[sku] = res_json
26
- # p "#{sku} => #{res_json} => #{e}"
27
- sleep 1
28
- retry if (attempts += 1) < 5
29
- end
30
- end.compact.uniq
31
- SolidusBling::Product.upsert_all(products, unique_by: :sku)
32
- ::Spree::Bus.publish :bling_products_updated, products: hash_products
33
- end
34
-
35
- end
36
- end
@@ -1,11 +0,0 @@
1
- <div style="margin: 10px 0px">
2
- <%= button_to "Baixar produtos", admin_bling_product_path(@bling_account.id), method: :put, data:
3
- {confirm: "Deseja baixar os produtos?" } %>
4
- <span>Produtos baixados: <%= @products_count %></span>
5
- <br>
6
- <% if @last_update.present? %>
7
- <span>Ultima atualização: <%= @last_update.strftime("%d/%m/%Y %H:%M") %> </span>
8
- <% end %>
9
- </div>
10
-
11
- <%= render "form", bling_account: @bling_account, form_url: admin_account_path(@bling_account.id) %>