magento 0.20.0 → 0.23.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bc9582af53b1373798281de5d95c312d7821edd2e597ab7eb98b756b9b44acb0
4
- data.tar.gz: fcdca10d53017a38791ee474a001580af31291db167cbd7cf9064d0315c3220d
3
+ metadata.gz: 2212acd226570a0dc73fc66683290aca3469006680b1e7946f3426177d0368a3
4
+ data.tar.gz: 1b3029f0f0eb3f0c6b583e4c025f8ab5d53dba8bfeed197e6e8ffc3c08ebf473
5
5
  SHA512:
6
- metadata.gz: 773f2e7c8d4d11b1f33003645d3b3343d84ac96909ba2209aabe43d34ba0908ffb7d93d0ee9b95da9b4a1f14c7babe71269f7798e6f43b583959a66e2f801c14
7
- data.tar.gz: 703fe39e39b45026fdc17fd93439701ca5c1632da57e97f2b81385d79fd1396e896dff1700cac85d7e0f16108443b04108e472f41c6e0f87147ecba754ca029f
6
+ metadata.gz: 6d4b55ba92ddfe5e7831da80ccdf170139a6b8f3459be07d35bfc877ee0638cbcaf15f98d7215f01b017510bb4d8458cf45e229acca7b3dc5d5fa2054e8f00b1
7
+ data.tar.gz: e35feff6cb0a82ece59cf57cb4bde0b0f9d7ea5989ff307c17211045fee78fff1dafbbcc8aaec34be3249e14c784679569d2d9d8dfc773124033592cc82189cf
data/README.md CHANGED
@@ -5,7 +5,7 @@
5
5
  Add in your Gemfile
6
6
 
7
7
  ```rb
8
- gem 'magento', '~> 0.20.0'
8
+ gem 'magento', '~> 0.23.0'
9
9
  ```
10
10
 
11
11
  or run
@@ -614,6 +614,53 @@ Magento::Product.where(name_like: 'some name%').count
614
614
  >> 15
615
615
  ```
616
616
 
617
+ ## Inventory
618
+
619
+ ### Check whether a product is salable
620
+
621
+ ```rb
622
+ Inventory.get_product_salable_quantity(sku: '4321', stock_id: 1)
623
+ >> 1
624
+ ```
625
+
626
+ ### Check whether a product is salable for a specified quantity
627
+
628
+ ```rb
629
+ Inventory.is_product_salable_for_requested_qty(
630
+ sku: '4321',
631
+ stock_id: 1,
632
+ requested_qty: 2
633
+ )
634
+ >> OpenStruct {
635
+ :salable => false,
636
+ :errors => [
637
+ [0] {
638
+ "code" => "back_order-disabled",
639
+ "message" => "Backorders are disabled"
640
+ },
641
+ ...
642
+ ]
643
+ }
644
+ ```
645
+
646
+ ## Update product stock
647
+
648
+ ```rb
649
+ product = Magento::Product.find('sku')
650
+ product.update_stock(qty: 12, is_in_stock: true)
651
+ ```
652
+
653
+ or by class method
654
+
655
+ ```rb
656
+ Magento::Product.update_stock(sku, id, {
657
+ qty: 12,
658
+ is_in_stock: true
659
+ })
660
+ ```
661
+
662
+ see all available attributes in: https://magento.redoc.ly/2.4.1-admin/tag/productsproductSkustockItemsitemId
663
+
617
664
  ___
618
665
 
619
666
  ##TODO:
@@ -22,6 +22,7 @@ require_relative 'magento/order'
22
22
  require_relative 'magento/invoice'
23
23
  require_relative 'magento/guest_cart'
24
24
  require_relative 'magento/sales_rule'
25
+ require_relative 'magento/inventory'
25
26
  require_relative 'magento/import'
26
27
 
27
28
  Dir[File.expand_path('magento/shared/*.rb', __dir__)].map { |f| require f }
@@ -9,7 +9,7 @@ module Magento
9
9
  end
10
10
 
11
11
  def get_products
12
- @csv[1..].map do |row|
12
+ @csv[1..-1].map do |row|
13
13
  OpenStruct.new({
14
14
  name: row[0],
15
15
  sku: row[1],
@@ -0,0 +1,40 @@
1
+ module Magento
2
+ class Inventory
3
+ class << self
4
+ #
5
+ # ==== Example
6
+ #
7
+ # Inventory.is_product_salable_for_requested_qty(
8
+ # sku: '4321',
9
+ # stock_id: 1,
10
+ # requested_qty: 2
11
+ # )
12
+ # # =>
13
+ # OpenStruct {
14
+ # :salable => false,
15
+ # :errors => [
16
+ # [0] {
17
+ # "code" => "back_order-disabled",
18
+ # "message" => "Backorders are disabled"
19
+ # },
20
+ # ...
21
+ # ]
22
+ # }
23
+ #
24
+ # @return OpenStruct
25
+ def is_product_salable_for_requested_qty(sku:, stock_id:, requested_qty:)
26
+ result = Request.new.get(
27
+ "inventory/is-product-salable-for-requested-qty/#{sku}/#{stock_id}/#{requested_qty}"
28
+ ).parse
29
+
30
+ OpenStruct.new(result)
31
+ end
32
+
33
+ def get_product_salable_quantity(sku:, stock_id:)
34
+ Request.new.get(
35
+ "inventory/get-product-salable-quantity/#{sku}/#{stock_id}"
36
+ ).parse
37
+ end
38
+ end
39
+ end
40
+ end
@@ -4,33 +4,33 @@ require_relative 'create_custom_attribute'
4
4
  module Magento
5
5
  module Params
6
6
  # Example
7
- #
8
- # params = Magento::Params::CreateProduct.new(
9
- # sku: '556-teste-builder',
10
- # name: 'REFRIGERANTE PET COCA-COLA 1,5L ORIGINAL',
11
- # description: 'Descrição do produto',
12
- # brand: 'Coca-Cola',
13
- # price: 4.99,
14
- # special_price: 3.49,
15
- # quantity: 2,
16
- # weight: 0.3,
17
- # attribute_set_id: 4,
18
- # images: [
19
- # *Magento::Params::CreateImage.new(
20
- # path: 'https://urltoimage.com/image.jpg',
21
- # title: 'REFRIGERANTE PET COCA-COLA 1,5L ORIGINAL',
22
- # position: 0,
23
- # main: true
24
- # ).variants, # it's generate all variants thumbnail => '100x100', small_image => '300x300' and image => '800x800'
25
- # Magento::Params::CreateImage.new(
26
- # path: '/path/to/image.jpg',
27
- # title: 'REFRIGERANTE PET COCA-COLA 1,5L ORIGINAL',
28
- # position: 1
29
- # )
30
- # ]
31
- # )
32
7
  #
33
- # Magento::Product.create(params.to_h)
8
+ # params = Magento::Params::CreateProduct.new(
9
+ # sku: '556-teste-builder',
10
+ # name: 'REFRIGERANTE PET COCA-COLA 1,5L ORIGINAL',
11
+ # description: 'Descrição do produto',
12
+ # brand: 'Coca-Cola',
13
+ # price: 4.99,
14
+ # special_price: 3.49,
15
+ # quantity: 2,
16
+ # weight: 0.3,
17
+ # attribute_set_id: 4,
18
+ # images: [
19
+ # *Magento::Params::CreateImage.new(
20
+ # path: 'https://urltoimage.com/image.jpg',
21
+ # title: 'REFRIGERANTE PET COCA-COLA 1,5L ORIGINAL',
22
+ # position: 0,
23
+ # main: true
24
+ # ).variants, # it's generate all variants thumbnail => '100x100', small_image => '300x300' and image => '800x800'
25
+ # Magento::Params::CreateImage.new(
26
+ # path: '/path/to/image.jpg',
27
+ # title: 'REFRIGERANTE PET COCA-COLA 1,5L ORIGINAL',
28
+ # position: 1
29
+ # )
30
+ # ]
31
+ # )
32
+ #
33
+ # Magento::Product.create(params.to_h)
34
34
  #
35
35
  class CreateProduct < Dry::Struct
36
36
  ProductTypes = Type::String.default('simple'.freeze).enum(
@@ -6,6 +6,14 @@ module Magento
6
6
  attr(m) || super(m, *params, &block)
7
7
  end
8
8
 
9
+ def stock
10
+ extension_attributes&.stock_item
11
+ end
12
+
13
+ def stock_quantity
14
+ stock&.qty
15
+ end
16
+
9
17
  # returns custom_attribute value by custom_attribute code
10
18
  # return nil if custom_attribute is not present
11
19
  def attr(attribute_code)
@@ -44,6 +52,29 @@ module Magento
44
52
  )
45
53
  end
46
54
 
55
+ #
56
+ # Remove tier price
57
+ #
58
+ # product = Magento::Product.find(1)
59
+ # product.remove_tier_price(quantity: 1, customer_group_id: :all)
60
+ #
61
+ # @return {Boolean}
62
+ def remove_tier_price(quantity:, customer_group_id: :all)
63
+ self.class.remove_tier_price(
64
+ sku, quantity: quantity, customer_group_id: customer_group_id
65
+ )
66
+ end
67
+
68
+ # Update product stock
69
+ #
70
+ # product = Magento::Product.find('sku')
71
+ # product.update_stock(qty: 12, is_in_stock: true)
72
+ #
73
+ # see all available attributes in: https://magento.redoc.ly/2.4.1-admin/tag/productsproductSkustockItemsitemId
74
+ def update_stock(attributes)
75
+ self.class.update_stock(sku, id, attributes)
76
+ end
77
+
47
78
  class << self
48
79
  alias_method :find_by_sku, :find
49
80
 
@@ -66,6 +97,29 @@ module Magento
66
97
  "products/#{sku}/group-prices/#{customer_group_id}/tiers/#{quantity}/price/#{price}"
67
98
  ).parse
68
99
  end
100
+
101
+ # Remove tier price
102
+ #
103
+ # Product.remove_tier_price('sku', quantity: 1, customer_group_id: :all)
104
+ #
105
+ # @return {Boolean}
106
+ def remove_tier_price(sku, quantity:, customer_group_id: :all)
107
+ request.delete(
108
+ "products/#{sku}/group-prices/#{customer_group_id}/tiers/#{quantity}"
109
+ ).parse
110
+ end
111
+
112
+ # Update product stock
113
+ #
114
+ # Magento::Product.update_stock(sku, id, {
115
+ # qty: 12,
116
+ # is_in_stock: true
117
+ # })
118
+ #
119
+ # see all available attributes in: https://magento.redoc.ly/2.4.1-admin/tag/productsproductSkustockItemsitemId
120
+ def update_stock(sku, id, attributes)
121
+ request.put("products/#{sku}/stockItems/#{id}", stockItem: attributes).parse
122
+ end
69
123
  end
70
124
  end
71
125
  end
@@ -1,3 +1,3 @@
1
1
  module Magento
2
- VERSION = '0.20.0'
2
+ VERSION = '0.23.0'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: magento
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.20.0
4
+ version: 0.23.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Wallas Faria
@@ -103,6 +103,7 @@ files:
103
103
  - lib/magento/import/image_finder.rb
104
104
  - lib/magento/import/product.rb
105
105
  - lib/magento/import/template/products.csv
106
+ - lib/magento/inventory.rb
106
107
  - lib/magento/invoice.rb
107
108
  - lib/magento/model.rb
108
109
  - lib/magento/model_mapper.rb