erp_integration 0.3.3 → 0.4.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 373cc92b70776b3ab2547879840468b0b5e2c9269aaf4991a1e3c283435609c4
4
- data.tar.gz: cd372fe6aed0b7f88ddcf0007ad895386a75ca593a0bfff4ce978cad8de84cce
3
+ metadata.gz: 99b2b058b12b3b5d0b1212c9d077b9aaa224a9a20bc96f624dd7b5de3016bcaa
4
+ data.tar.gz: de266b8b0bb2c412866bf64ba0a28b75500faf79173e8d9bb1d56fd84c0a45b0
5
5
  SHA512:
6
- metadata.gz: e711394078bb8e517436cd9b10f4231248cbef3bf6bb744834270e305e6329e0672611761b091d98a53fcd5d00f7f781ef2309b76c4db64cbe2bbd8b2ad3a519
7
- data.tar.gz: 5490ad8f93dfabc1e77d8ef326ab34ee29d62b416f061cf83780f49fcb7d42882aab46e29e16e36f730ba7555a1d1482b55a2f45255fb71b252b5758a9cdf58b
6
+ metadata.gz: '09c9117df5560187b9c5010b56ec0cc9ce30b3313a801e687795a0d97bc1c8dd2acae6ebc1cba7b186e777c2198def26e4071b7dfc52f28a04be0265657c68e6'
7
+ data.tar.gz: 3da4be6f4775e272d118ccb93ecec41c9744702a73f328245f472032d66c69796cbec23bb70286bd034e7b2593734f6c169bcd8d6e32d13e089b60ddab3784bc
data/README.md CHANGED
@@ -37,15 +37,15 @@ end
37
37
  After configuring the gem, one can easily query all the available ERP resources from the connected third-parties.
38
38
 
39
39
  ```ruby
40
- $ ErpIntegration::Order.where(reference: 'MT1000SKX')
41
- => #<ErpIntegration::Fulfil::Collection @items=[<ErpIntegration::Order @id=100 />] />
40
+ $ ErpIntegration::SalesOrder.where(reference: 'MT1000SKX')
41
+ => #<ErpIntegration::Fulfil::Collection @items=[<ErpIntegration::SalesOrder @id=100 />] />
42
42
  ```
43
43
 
44
44
  By default, only the `id` will be added to the found ERP resources. However, one can use the `select` method to include more fields.
45
45
 
46
46
  ```ruby
47
- $ ErpIntegration::Order.select(:id, :reference).where(reference: 'MT1000SKX')
48
- => #<ErpIntegration::Fulfil::Collection @items=[<ErpIntegration::Order @id=100 @reference=MT1000SKX />] />
47
+ $ ErpIntegration::SalesOrder.select(:id, :reference).where(reference: 'MT1000SKX')
48
+ => #<ErpIntegration::Fulfil::Collection @items=[<ErpIntegration::SalesOrder @id=100 @reference=MT1000SKX />] />
49
49
  ```
50
50
 
51
51
  There are also other type of `where` queries available:
@@ -33,7 +33,7 @@ Gem::Specification.new do |spec|
33
33
 
34
34
  # Faraday is a HTTP/REST API client library to interact with third-party API vendors
35
35
  spec.add_dependency 'faraday', '>= 0.17.3', '< 1.9.0'
36
- spec.add_dependency 'faraday_middleware', '~> 0.14.0'
36
+ spec.add_dependency 'faraday_middleware', '>= 0.14', '< 1.3'
37
37
 
38
38
  # Development dependencies
39
39
  spec.add_development_dependency 'byebug', '~> 11.0'
@@ -22,15 +22,20 @@ module ErpIntegration
22
22
  # @return [String] The merchant ID for Fulfil.
23
23
  attr_accessor :fulfil_merchant_id
24
24
 
25
- # Allows configuring an adapter for the `Order` resource. When none is
25
+ # Allows configuring an adapter for the `SalesOrder` resource. When none is
26
26
  # configured, it will default to Fulfil.
27
- # @return [Symbol] The configured adapter for the orders
28
- attr_writer :order_adapter
27
+ # @return [Symbol] The configured adapter for the sales orders
28
+ attr_writer :sales_order_adapter
29
29
 
30
- # Allows configuring an adapter for the `OrderLine` resource. When none is
30
+ # Allows configuring an adapter for the `SalesOrderLine` resource. When none is
31
31
  # configured, it will default to Fulfil.
32
32
  # @return [Symbol] The configured adapter for the order lines.
33
- attr_writer :order_line_adapter
33
+ attr_writer :sales_order_line_adapter
34
+
35
+ # Allows configuring an adapter for the `Product` resource. When none is
36
+ # configured, it will default to Fulfil.
37
+ # @return [Symbol] The configured adapter for the products.
38
+ attr_writer :product_adapter
34
39
 
35
40
  # Allows configuring an adapter for the `PurchaseOrder` resource. When none is
36
41
  # configured, it will default to Fulfil.
@@ -53,12 +58,16 @@ module ErpIntegration
53
58
  end
54
59
  end
55
60
 
56
- def order_adapter
57
- @order_adapter || :fulfil
61
+ def sales_order_adapter
62
+ @sales_order_adapter || :fulfil
63
+ end
64
+
65
+ def sales_order_line_adapter
66
+ @sales_order_line_adapter || :fulfil
58
67
  end
59
68
 
60
- def order_line_adapter
61
- @order_line_adapter || :fulfil
69
+ def product_adapter
70
+ @product_adapter || :fulfil
62
71
  end
63
72
 
64
73
  def purchase_order_adapter
@@ -13,14 +13,14 @@ module ErpIntegration
13
13
  # selecting multiple fields at once.
14
14
  #
15
15
  # @example
16
- # $ ErpIntegration::Order.select(:id, :name, 'product.name')
16
+ # $ ErpIntegration::SalesOrder.select(:id, :name, 'product.name')
17
17
  # # => <ErpIntegration::Fulfil::Resources::Order @selected_fields=[:id, :name, "product.name"] />
18
18
  #
19
19
  # When one calls the `all` method, it will fetch all the resources from Fulfil
20
20
  # and it will return all the given fields (if available).
21
21
  #
22
22
  # @example
23
- # $ ErpIntegration::Order.select(:id, :name, 'product.name').all
23
+ # $ ErpIntegration::SalesOrder.select(:id, :name, 'product.name').all
24
24
  # # => <ErpIntegration::Fulfil::Collection @items=[...] />
25
25
  #
26
26
  # Both a list of Strings, Symbols or a combination of these can be passed
@@ -41,8 +41,8 @@ module ErpIntegration
41
41
  # to query resources in Fulfil.
42
42
  #
43
43
  # @example
44
- # $ ErpIntegration::Order.where(id: 100).all
45
- # # => <ErpIntegration::Fulfil::Collection @items=[<ErpIntegration::Order @id=100 />] />
44
+ # $ ErpIntegration::SalesOrder.where(id: 100).all
45
+ # # => <ErpIntegration::Fulfil::Collection @items=[<ErpIntegration::SalesOrder @id=100 />] />
46
46
  #
47
47
  # If one adds the `comparison_operator` key to the arguments, it will use
48
48
  # that comparison operator to build the query to Fulfil.
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../api_resource'
4
+
5
+ module ErpIntegration
6
+ module Fulfil
7
+ module Resources
8
+ class Product < ApiResource
9
+ self.model_name = 'product.product'
10
+
11
+ # Checks whether a certain product is a BOM.
12
+ # @param sku [String] The product's SKU.
13
+ # @return [Boolean] Whether it's a BOM or not.
14
+ def bom?(sku)
15
+ select(:boms).where(code: sku).first.boms.any?
16
+ end
17
+ alias billing_of_materials? bom?
18
+ end
19
+ end
20
+ end
21
+ end
@@ -5,20 +5,14 @@ require_relative '../api_resource'
5
5
  module ErpIntegration
6
6
  module Fulfil
7
7
  module Resources
8
- class Order < ApiResource
8
+ class SalesOrder < ApiResource
9
9
  self.model_name = 'sale.sale'
10
10
 
11
11
  # Allows cancelling the entire sales order in Fulfil.
12
12
  # @param id [Integer|String] The ID of the to be cancelled order.
13
13
  # @return [boolean] Whether the sales order was cancelled successfully or not.
14
14
  def cancel(id)
15
- begin
16
- client.put("model/sale.sale/#{id}/cancel")
17
- rescue Faraday::Error::ParsingError
18
- # Workaround: Fulfil api does not return a json when status code is 200 (a.k.a. "Ok")
19
- # and faraday is having an error when trying to parse it. Let's skip the parse error
20
- # and move on.
21
- end
15
+ client.put("model/sale.sale/#{id}/cancel")
22
16
  true
23
17
 
24
18
  # Fulfil will return an 400 (a.k.a. "Bad Request") status code when a sales order couldn't
@@ -28,6 +22,11 @@ module ErpIntegration
28
22
  # https://developers.fulfil.io/rest_api/model/sale.sale/#cancel-a-sales-order
29
23
  rescue ErpIntegration::HttpError::BadRequest
30
24
  false
25
+ # Workaround: Fulfil api does not return a json when status code is 200 (a.k.a. "Ok")
26
+ # and faraday is having an error when trying to parse it. Let's skip the parse error
27
+ # and move on.
28
+ rescue Faraday::ParsingError
29
+ true
31
30
  end
32
31
  end
33
32
  end
@@ -5,7 +5,7 @@ require_relative '../api_resource'
5
5
  module ErpIntegration
6
6
  module Fulfil
7
7
  module Resources
8
- class OrderLine < ApiResource
8
+ class SalesOrderLine < ApiResource
9
9
  self.model_name = 'sale.line'
10
10
  end
11
11
  end
@@ -26,7 +26,7 @@ module ErpIntegration
26
26
  def initialize(key:, value:, comparison_operator: DEFAULT_COMPARISON_OPERATOR)
27
27
  @comparison_operator = verify_comparison_operator(comparison_operator)
28
28
  @key = key.to_s
29
- @value = value.to_s
29
+ @value = value
30
30
  end
31
31
 
32
32
  # Transforms the `WhereClause` into a filter object for Fulfil.
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ErpIntegration
4
+ # The `ErpIntegration::Product` exposes an uniformed API for interaction with
5
+ # third-party ERP vendors.
6
+ class Product < Resource
7
+ attr_accessor :id, :code, :cost_price, :cost_price_method, :quantity_available,
8
+ :quantity_buildable, :quantity_inbound, :quantity_on_hand, :salable,
9
+ :template, :variant_name, :abc_classification, :account_category,
10
+ :account_cogs_used, :account_expense_used, :account_revenue_used,
11
+ :account_stock_lost_found_used, :account_stock_production_used,
12
+ :account_stock_supplier_used, :account_stock_used, :active,
13
+ :asin, :attachments, :attribute_set, :attributes, :attributes_json,
14
+ :average_daily_consumed, :average_daily_sales, :average_monthly_consumed,
15
+ :average_monthly_sales, :average_price, :boms, :box_type, :brand, :channel_listings,
16
+ :consumable, :country_of_origin, :create_date, :create_uid, :customs_description,
17
+ :customs_value, :days_of_inventory_left, :default_uom, :default_uom_category,
18
+ :description, :dimensions_uom, :ean, :fulfil_strategy, :gc_max, :gc_min,
19
+ :gift_card_delivery_mode, :gift_card_prices, :google_product_category,
20
+ :gross_margin, :gross_profit, :height, :hs_code, :is_gift_card, :landed_cost,
21
+ :lead_time_in_days, :length, :list_price, :long_description, :metadata,
22
+ :next_shipping_date, :product_suppliers, :purchasable, :purchase_uom,
23
+ :quantity_on_confirmed_purchase_orders, :quantity_outbound, :quantity_returned,
24
+ :quantity_sold, :quantity_waiting_consumption, :quantity_wip, :safety_stock_days,
25
+ :sale_uom, :scan_required, :ship_from_stock_if_available, :type,
26
+ :upc, :use_name_as_customs_description, :weight, :weight_uom,
27
+ :width, :write_date, :write_uid
28
+ end
29
+ end
@@ -16,8 +16,8 @@ module ErpIntegration
16
16
  # config.order_adapter = :fulfil
17
17
  # end
18
18
  #
19
- # $ ErpIntegration::Order.adapter
20
- # => #<ErpIntegration::Orders::FulfilOrder />
19
+ # $ ErpIntegration::SalesOrder.adapter
20
+ # => #<ErpIntegration::SalesOrders::FulfilOrder />
21
21
  #
22
22
  # To add a new resource, follow these steps:
23
23
  # 1. Add a new `attr_writer` in the `ErpIntegration::Configuration` class.
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ErpIntegration
4
- # The `ErpIntegration::Order` exposes an uniformed API for interaction with
4
+ # The `ErpIntegration::SalesOrder` exposes an uniformed API for interaction with
5
5
  # third-party ERP vendors.
6
- class Order < Resource
6
+ class SalesOrder < Resource
7
7
  attr_accessor :id, :channel, :number, :party, :sale_date, :shipment_address,
8
8
  :amount_invoiced, :attachments, :carrier, :carrier_service,
9
9
  :channel_identifier, :comment, :company, :confirmation_time,
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ErpIntegration
4
- # The `ErpIntegration::OrderLine` exposes an uniformed API for interaction with
4
+ # The `ErpIntegration::SalesOrderLine` exposes an uniformed API for interaction with
5
5
  # third-party ERP vendors.
6
- class OrderLine < Resource
6
+ class SalesOrderLine < Resource
7
7
  attr_accessor :id, :product, :quantity, :unit, :unit_price, :amount, :attachments,
8
8
  :channel_identifier, :create_date, :create_uid, :delivery_address,
9
9
  :delivery_date, :delivery_mode, :description, :discount, :gift_message,
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ErpIntegration
4
- VERSION = '0.3.3'
4
+ VERSION = '0.4.0'
5
5
  end
@@ -20,10 +20,11 @@ require_relative 'erp_integration/fulfil/client'
20
20
  # The `ErpIntegration` integrates Mejuri with third-party ERP vendors.
21
21
  module ErpIntegration
22
22
  # Resources
23
- autoload :Resource, 'erp_integration/resource'
24
- autoload :Order, 'erp_integration/order'
25
- autoload :OrderLine, 'erp_integration/order_line'
23
+ autoload :Product, 'erp_integration/product'
26
24
  autoload :PurchaseOrder, 'erp_integration/purchase_order'
27
25
  autoload :PurchaseOrderLine, 'erp_integration/purchase_order_line'
28
26
  autoload :PurchaseRequest, 'erp_integration/purchase_request'
27
+ autoload :Resource, 'erp_integration/resource'
28
+ autoload :SalesOrder, 'erp_integration/sales_order'
29
+ autoload :SalesOrderLine, 'erp_integration/sales_order_line'
29
30
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: erp_integration
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stefan Vermaas
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-10-14 00:00:00.000000000 Z
11
+ date: 2021-10-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -48,16 +48,22 @@ dependencies:
48
48
  name: faraday_middleware
49
49
  requirement: !ruby/object:Gem::Requirement
50
50
  requirements:
51
- - - "~>"
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0.14'
54
+ - - "<"
52
55
  - !ruby/object:Gem::Version
53
- version: 0.14.0
56
+ version: '1.3'
54
57
  type: :runtime
55
58
  prerelease: false
56
59
  version_requirements: !ruby/object:Gem::Requirement
57
60
  requirements:
58
- - - "~>"
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: '0.14'
64
+ - - "<"
59
65
  - !ruby/object:Gem::Version
60
- version: 0.14.0
66
+ version: '1.3'
61
67
  - !ruby/object:Gem::Dependency
62
68
  name: byebug
63
69
  requirement: !ruby/object:Gem::Requirement
@@ -218,7 +224,7 @@ dependencies:
218
224
  - - '='
219
225
  - !ruby/object:Gem::Version
220
226
  version: 1.19.2
221
- description:
227
+ description:
222
228
  email:
223
229
  - stefan@knowndecimal.com
224
230
  executables: []
@@ -259,19 +265,21 @@ files:
259
265
  - lib/erp_integration/fulfil/client.rb
260
266
  - lib/erp_integration/fulfil/query.rb
261
267
  - lib/erp_integration/fulfil/query_methods.rb
262
- - lib/erp_integration/fulfil/resources/order.rb
263
- - lib/erp_integration/fulfil/resources/order_line.rb
268
+ - lib/erp_integration/fulfil/resources/product.rb
264
269
  - lib/erp_integration/fulfil/resources/purchase_order.rb
265
270
  - lib/erp_integration/fulfil/resources/purchase_order_line.rb
266
271
  - lib/erp_integration/fulfil/resources/purchase_request.rb
272
+ - lib/erp_integration/fulfil/resources/sales_order.rb
273
+ - lib/erp_integration/fulfil/resources/sales_order_line.rb
267
274
  - lib/erp_integration/fulfil/where_clause.rb
268
275
  - lib/erp_integration/middleware/error_handling.rb
269
- - lib/erp_integration/order.rb
270
- - lib/erp_integration/order_line.rb
276
+ - lib/erp_integration/product.rb
271
277
  - lib/erp_integration/purchase_order.rb
272
278
  - lib/erp_integration/purchase_order_line.rb
273
279
  - lib/erp_integration/purchase_request.rb
274
280
  - lib/erp_integration/resource.rb
281
+ - lib/erp_integration/sales_order.rb
282
+ - lib/erp_integration/sales_order_line.rb
275
283
  - lib/erp_integration/version.rb
276
284
  homepage: https://www.github.com/mejuri-inc/erp-integration
277
285
  licenses:
@@ -281,7 +289,7 @@ metadata:
281
289
  homepage_uri: https://www.github.com/mejuri-inc/erp-integration
282
290
  source_code_uri: https://www.github.com/mejuri-inc/erp-integration
283
291
  changelog_uri: https://www.github.com/mejuri-inc/erp-integration/blob/main/CHANGELOG.md
284
- post_install_message:
292
+ post_install_message:
285
293
  rdoc_options: []
286
294
  require_paths:
287
295
  - lib
@@ -297,7 +305,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
297
305
  version: '0'
298
306
  requirements: []
299
307
  rubygems_version: 3.2.22
300
- signing_key:
308
+ signing_key:
301
309
  specification_version: 4
302
310
  summary: Connects Mejuri with third-party ERP vendors
303
311
  test_files: []