solidus_bling 2.0.7 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
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) %>