ruby_omx 0.0.20 → 0.0.21
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.
- data/lib/ruby_omx/items.rb +37 -0
- data/lib/ruby_omx/request/item_price_update_request.rb +33 -0
- data/lib/ruby_omx/request/item_update_request.rb +4 -1
- data/lib/ruby_omx/request/purchase_order_update_request.rb +1 -1
- data/lib/ruby_omx/request/supplier_item_update_request.rb +30 -0
- data/lib/ruby_omx/response/custom_item_info_response.rb +1 -3
- data/lib/ruby_omx/response/item_info_response.rb +1 -2
- data/lib/ruby_omx/response/item_price_update_response.rb +7 -0
- data/lib/ruby_omx/response/item_update_response.rb +1 -9
- data/lib/ruby_omx/response/memo_submission_response.rb +1 -5
- data/lib/ruby_omx/response/order_info_response.rb +1 -17
- data/lib/ruby_omx/response/purchase_order_update_response.rb +1 -3
- data/lib/ruby_omx/response/supplier_item_update_response.rb +7 -0
- data/lib/ruby_omx/response/udoa_response.rb +0 -2
- data/lib/ruby_omx/response.rb +10 -0
- data/lib/ruby_omx/version.rb +1 -1
- data/test/items_test.rb +80 -1
- data/test/purchase_orders_test.rb +1 -0
- metadata +5 -1
data/lib/ruby_omx/items.rb
CHANGED
@@ -2,6 +2,7 @@ module RubyOmx
|
|
2
2
|
module Items
|
3
3
|
|
4
4
|
# ItemInformationRequest (ITIR100) This request type lists the name, default prices, inventory availability, sub-items, cross-sell items, substitution items, and bundle items for a given item code.
|
5
|
+
|
5
6
|
def build_item_info_request(attrs={})
|
6
7
|
ItemInfoRequest.new(attrs.merge({:udi_auth_token=>@udi_auth_token, :http_biz_id=>@http_biz_id}))
|
7
8
|
end
|
@@ -14,6 +15,8 @@ module RubyOmx
|
|
14
15
|
end
|
15
16
|
alias_method :get_item_info, :send_item_info_request
|
16
17
|
|
18
|
+
# Customer Item Information Request
|
19
|
+
|
17
20
|
def build_custom_item_info_request(attrs={})
|
18
21
|
CustomItemInfoRequest.new(attrs.merge({:udi_auth_token=>@udi_auth_token, :http_biz_id=>@http_biz_id}))
|
19
22
|
end
|
@@ -26,6 +29,9 @@ module RubyOmx
|
|
26
29
|
end
|
27
30
|
alias_method :get_custom_item_info, :send_custom_item_info_request
|
28
31
|
|
32
|
+
|
33
|
+
# Item Update Request
|
34
|
+
|
29
35
|
def build_item_update_request(attrs={})
|
30
36
|
ItemUpdateRequest.new(attrs.merge({:udi_auth_token=>@udi_auth_token, :http_biz_id=>@http_biz_id}))
|
31
37
|
end
|
@@ -38,5 +44,36 @@ module RubyOmx
|
|
38
44
|
end
|
39
45
|
alias_method :append_item, :send_item_update_request
|
40
46
|
|
47
|
+
|
48
|
+
# Item Price Update Request
|
49
|
+
|
50
|
+
def build_item_price_update_request(attrs={})
|
51
|
+
ItemPriceUpdateRequest.new(attrs.merge({:udi_auth_token=>@udi_auth_token, :http_biz_id=>@http_biz_id}))
|
52
|
+
end
|
53
|
+
|
54
|
+
def send_item_price_update_request(attrs={})
|
55
|
+
request = build_item_price_update_request(attrs)
|
56
|
+
response = post(request.to_xml.to_s)
|
57
|
+
return response if request.raw_xml==true || request.raw_xml==1
|
58
|
+
ItemPriceUpdateResponse.format(response)
|
59
|
+
end
|
60
|
+
alias_method :append_item_price, :send_item_price_update_request
|
61
|
+
|
62
|
+
|
63
|
+
# Supplier Item Update Request
|
64
|
+
|
65
|
+
def build_supplier_item_update_request(attrs={})
|
66
|
+
SupplierItemUpdateRequest.new(attrs.merge({:udi_auth_token=>@udi_auth_token, :http_biz_id=>@http_biz_id}))
|
67
|
+
end
|
68
|
+
|
69
|
+
def send_supplier_item_update_request(attrs={})
|
70
|
+
request = build_supplier_item_update_request(attrs)
|
71
|
+
response = post(request.to_xml.to_s)
|
72
|
+
return response if request.raw_xml==true || request.raw_xml==1
|
73
|
+
SupplierItemUpdateResponse.format(response)
|
74
|
+
end
|
75
|
+
alias_method :append_supplier_item, :send_supplier_item_update_request
|
76
|
+
|
77
|
+
|
41
78
|
end
|
42
79
|
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module RubyOmx
|
2
|
+
|
3
|
+
class PricePoint < Node
|
4
|
+
xml_name "PricePoint"
|
5
|
+
xml_accessor :quantity, :as=>Integer
|
6
|
+
xml_accessor :price, :as=>Float
|
7
|
+
xml_accessor :shipping_handling, :as=>Float
|
8
|
+
xml_accessor :multiplier, :from => '@multiplier'
|
9
|
+
end
|
10
|
+
|
11
|
+
class ItemPriceUpdateRequest < Request
|
12
|
+
|
13
|
+
def initialize(attrs={})
|
14
|
+
return super unless attrs.any?
|
15
|
+
required_fields = [:item_code, :keycode, :type] #:item_code, :product_status, :product_name, :product_group, :tax_code, :file_sub_code, :inventory_product_flag, :launch_date
|
16
|
+
raise MissingRequestOptions if required_fields.any? { |option| attrs[option].nil? }
|
17
|
+
super
|
18
|
+
self.version = attrs[:version] ||= '2.00'
|
19
|
+
self.udi_parameters << RubyOmx::UDIParameter.new({:key=>'ItemCode', :value=>attrs[:item_code]})
|
20
|
+
self.udi_parameters << RubyOmx::UDIParameter.new({:key=>'Keycode', :value=>attrs[:keycode]})
|
21
|
+
self.udi_parameters << RubyOmx::UDIParameter.new({:key=>'Type', :value=>attrs[:type]})
|
22
|
+
self.price_points = attrs[:price_points].collect { |h| PricePoint.new(h) }
|
23
|
+
end
|
24
|
+
|
25
|
+
attr_accessor :item_code, :keycode, :type
|
26
|
+
|
27
|
+
xml_name "ItemPriceUpdateRequest"
|
28
|
+
xml_accessor :price_type, :from=>'@priceType', :in=>'PricePoints'
|
29
|
+
xml_accessor :quantity_type, :from=>'@quantityType', :in=>'PricePoints'
|
30
|
+
xml_accessor :price_points, :as=>[PricePoint], :in=>'PricePoints'
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
@@ -16,7 +16,10 @@ module RubyOmx
|
|
16
16
|
xml_accessor :tax_code #<TaxCode>TC4</TaxCode>
|
17
17
|
xml_accessor :inventory_type, :as=>Integer # <InventoryType>3</InventoryType>
|
18
18
|
xml_accessor :drop_ship_file_sub_code, :as=>Integer #<DropShipFileSubCode>31</DropShipFileSubCode>
|
19
|
-
|
19
|
+
xml_accessor :order_split_flag #<OrderSplitFlag>False</OrderSplitFlag>
|
20
|
+
xml_accessor :inventory_manager
|
21
|
+
xml_accessor :inventory_warning_ooi, :from=>'InventoryWarningOOI' #<InventoryWarningOOI>False</InventoryWarningOOI>
|
22
|
+
xml_accessor :inventory_warning_loi, :from=>'InventoryWarningLOI' #<InventoryWarningLOI>False</InventoryWarningLOI>
|
20
23
|
end
|
21
24
|
|
22
25
|
class ItemUpdateRequest < Request
|
@@ -4,7 +4,7 @@ module RubyOmx
|
|
4
4
|
|
5
5
|
def initialize(attrs={})
|
6
6
|
return super unless attrs.any?
|
7
|
-
raise MissingRequestOptions if attrs[:po_number].nil? && attrs[:supplier_id].nil?
|
7
|
+
raise MissingRequestOptions if (attrs[:po_number].nil? && attrs[:supplier_id].nil?)
|
8
8
|
super
|
9
9
|
self.version = attrs[:version] ||= '1.00'
|
10
10
|
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module RubyOmx
|
2
|
+
|
3
|
+
class Item < Node
|
4
|
+
xml_name "Item"
|
5
|
+
xml_accessor :item_code, :from=>'@itemCode'
|
6
|
+
xml_accessor :supplier_id, :from=>'@supplierID'
|
7
|
+
xml_accessor :supplier_item_code
|
8
|
+
xml_accessor :description
|
9
|
+
xml_accessor :standard_price, :as=>Float
|
10
|
+
xml_accessor :delivery_lead_time_days, :as=>Integer
|
11
|
+
xml_accessor :minimum_quantity, :as=>Integer
|
12
|
+
xml_accessor :units_per_package, :as=>Integer
|
13
|
+
xml_accessor :package_description
|
14
|
+
end
|
15
|
+
|
16
|
+
class SupplierItemUpdateRequest < Request
|
17
|
+
|
18
|
+
def initialize(attrs={})
|
19
|
+
return super unless attrs.any?
|
20
|
+
raise MissingRequestOptions if attrs[:items].nil?
|
21
|
+
super
|
22
|
+
self.version = attrs[:version] ||= '1.00'
|
23
|
+
self.items = attrs[:items].collect { |h| Item.new(h) }
|
24
|
+
end
|
25
|
+
|
26
|
+
xml_name "SupplierItemUpdateRequest"
|
27
|
+
xml_accessor :items, :as=>[Item], :in=>'Items'
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
@@ -14,11 +14,9 @@ module RubyOmx
|
|
14
14
|
xml_reader :attribute_groups, :as=>[AttributeGroup]
|
15
15
|
end
|
16
16
|
|
17
|
-
class CustomItemInfoResponse <
|
17
|
+
class CustomItemInfoResponse < StandardResponse
|
18
18
|
xml_name "CustomItemAttributeInformationResponse"
|
19
19
|
xml_reader :items, :as => [CIAIResponseItem], :in => "Items"
|
20
|
-
xml_reader :success
|
21
|
-
xml_reader :errors, :as=>[Error], :in=>'ErrorData'
|
22
20
|
end
|
23
21
|
|
24
22
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module RubyOmx
|
2
2
|
|
3
|
-
class ItemInfoResponse <
|
3
|
+
class ItemInfoResponse < StandardResponse
|
4
4
|
xml_name "ItemInformationResponse"
|
5
5
|
|
6
6
|
xml_reader :item_code, :from => '@itemCode', :in => "Item"
|
@@ -17,7 +17,6 @@ module RubyOmx
|
|
17
17
|
xml_reader :price_addl_sh, :from => 'AdditionalSH', :in => 'Item/PriceData/Price', :as => Float
|
18
18
|
xml_reader :price_bonus, :from => 'Bonus', :in => 'Item/PriceData/Price', :as => Float
|
19
19
|
xml_reader :custom_attributes, :as => [CustomItemAttribute], :in => 'Item/CustomItemAttribute'
|
20
|
-
xml_reader :errors, :as=>[Error], :in=>'ErrorData'
|
21
20
|
end
|
22
21
|
|
23
22
|
end
|
@@ -1,15 +1,7 @@
|
|
1
1
|
module RubyOmx
|
2
2
|
|
3
|
-
class ItemUpdateResponse <
|
3
|
+
class ItemUpdateResponse < StandardResponse
|
4
4
|
xml_name "ItemUpdateResponse"
|
5
|
-
xml_reader :success
|
6
|
-
xml_reader :errors, :as=>[Error], :in=>'ErrorData'
|
7
|
-
|
8
|
-
def to_s
|
9
|
-
error_string = self.errors.collect{ |e| e.message.to_s }.join(',')
|
10
|
-
return "success: #{success}, errors: #{error_string}"
|
11
|
-
end
|
12
|
-
|
13
5
|
end
|
14
6
|
|
15
7
|
end
|
@@ -1,11 +1,7 @@
|
|
1
|
-
#OrderInformationRequest (OIR200) This request type provides the ShippingInformationRequest (SIR) result for the order as a whole.
|
2
|
-
|
3
1
|
module RubyOmx
|
4
2
|
|
5
|
-
class MemoSubmissionResponse <
|
3
|
+
class MemoSubmissionResponse < StandardResponse
|
6
4
|
xml_name "MemoSubmissionResponse"
|
7
|
-
xml_reader :success
|
8
|
-
xml_accessor :errors, :as=>[Error], :in=>'ErrorData'
|
9
5
|
end
|
10
6
|
|
11
7
|
end
|
@@ -10,15 +10,6 @@ module RubyOmx
|
|
10
10
|
xml_reader :value, :from => :content, :as=>Integer
|
11
11
|
end
|
12
12
|
|
13
|
-
#class OrderInfoOrderHeader < Node
|
14
|
-
# xml_name "OrderHeader"
|
15
|
-
# xml_reader :order_id
|
16
|
-
# xml_reader :order_number
|
17
|
-
# xml_reader :order_status_code, :from => '@statusCode', :in=>'OrderStatus'
|
18
|
-
# xml_reader :order_status_date, :as=>DateTime
|
19
|
-
# xml_reader :order_date, :as=>DateTime
|
20
|
-
#end
|
21
|
-
|
22
13
|
class OrderInfoLineItem < Node
|
23
14
|
xml_name "LineItem"
|
24
15
|
xml_reader :item_code
|
@@ -47,9 +38,8 @@ module RubyOmx
|
|
47
38
|
# 7 shipped?
|
48
39
|
end
|
49
40
|
|
50
|
-
class OrderInfoResponse <
|
41
|
+
class OrderInfoResponse < StandardResponse
|
51
42
|
xml_name "OrderInformationResponse"
|
52
|
-
xml_reader :success
|
53
43
|
|
54
44
|
xml_reader :order_id, :in=>'OrderHeader'
|
55
45
|
xml_reader :order_number, :in=>'OrderHeader'
|
@@ -62,12 +52,6 @@ module RubyOmx
|
|
62
52
|
xml_reader :customer_number, :from=>'@number', :in=>'Customer'
|
63
53
|
xml_reader :tracking_number, :in=>'ShippingInformation/Shipment'
|
64
54
|
xml_reader :ship_date, :in=>'ShippingInformation/Shipment',:as=>DateTime # if populated, it means all items have shipped
|
65
|
-
xml_reader :errors, :as=>[Error], :in=>'ErrorData'
|
66
|
-
|
67
|
-
def to_s
|
68
|
-
error_string = errors.collect { |e| e.to_s }.join(',')
|
69
|
-
"Status #{order_status_code} for order #{order_number} with errors #{error_string}"
|
70
|
-
end
|
71
55
|
end
|
72
56
|
|
73
57
|
end
|
@@ -1,14 +1,12 @@
|
|
1
1
|
module RubyOmx
|
2
2
|
|
3
|
-
class PurchaseOrderUpdateResponse <
|
3
|
+
class PurchaseOrderUpdateResponse < StandardResponse
|
4
4
|
xml_name "PurchaseOrderUpdateResponse"
|
5
|
-
xml_reader :success
|
6
5
|
xml_accessor :po_number, :from=>'@PONumber', :in=>'PurchaseOrder' #<PurchaseOrder PONumber="16651" SupplierID="76">
|
7
6
|
xml_accessor :supplier_id, :from=>'@SupplierID', :in=>'PurchaseOrder'
|
8
7
|
xml_accessor :po_date, :from=>'PODate', :as=>DateTime
|
9
8
|
xml_accessor :total_amount, :as=>Float
|
10
9
|
xml_accessor :action
|
11
|
-
xml_accessor :errors, :as=>[Error], :in=>'ErrorData'
|
12
10
|
end
|
13
11
|
|
14
12
|
end
|
data/lib/ruby_omx/response.rb
CHANGED
@@ -55,5 +55,15 @@ module RubyOmx
|
|
55
55
|
xml_reader :name, :from => '@name'
|
56
56
|
xml_reader :value, :from => :content
|
57
57
|
end
|
58
|
+
|
59
|
+
class StandardResponse < Response
|
60
|
+
xml_reader :success
|
61
|
+
xml_reader :errors, :as=>[Error], :in=>'ErrorData'
|
62
|
+
|
63
|
+
def to_s
|
64
|
+
error_string = self.errors.collect{ |e| e.message.to_s }.join(',')
|
65
|
+
return "success: #{success}, errors: #{error_string}"
|
66
|
+
end
|
67
|
+
end
|
58
68
|
|
59
69
|
end
|
data/lib/ruby_omx/version.rb
CHANGED
data/test/items_test.rb
CHANGED
@@ -97,7 +97,11 @@ class ItemsTest < MiniTest::Unit::TestCase
|
|
97
97
|
:file_sub_code=>20,
|
98
98
|
:inventory_product_flag=>'True',
|
99
99
|
:tax_code=>'TC4',
|
100
|
-
:inventory_type=>3
|
100
|
+
:inventory_type=>3,
|
101
|
+
:order_split_flag=>'True',
|
102
|
+
:drop_ship_file_sub_code=>31,
|
103
|
+
:inventory_manager=>'blah'
|
104
|
+
}]}
|
101
105
|
|
102
106
|
|
103
107
|
request = @connection.build_item_update_request(request_attrs)
|
@@ -110,4 +114,79 @@ class ItemsTest < MiniTest::Unit::TestCase
|
|
110
114
|
assert_equal '1', response.success
|
111
115
|
end
|
112
116
|
|
117
|
+
|
118
|
+
def test_item_price_update_request_from_xml
|
119
|
+
request = RubyOmx::ItemPriceUpdateRequest.format(xml_for('ItemPriceUpdateRequest(1.00)',200))
|
120
|
+
assert_equal '1.00', request.version
|
121
|
+
assert_equal 'unit', request.price_type
|
122
|
+
assert_equal 'restricted', request.quantity_type
|
123
|
+
assert_equal 1, request.price_points.length
|
124
|
+
price_point = request.price_points.first
|
125
|
+
assert_equal 10, price_point.quantity
|
126
|
+
assert_equal 3.1415926535897932384626433832795, price_point.price
|
127
|
+
end
|
128
|
+
|
129
|
+
def test_item_price_update_request_to_xml
|
130
|
+
|
131
|
+
request_attrs = {
|
132
|
+
:item_code=>'03-0303',
|
133
|
+
:keycode=>'EVDE',
|
134
|
+
:type=>'Keycode',
|
135
|
+
:price_type=>'unit',
|
136
|
+
:quantity_type=>'restricted',
|
137
|
+
:price_points=>[{
|
138
|
+
:quantity => 1,
|
139
|
+
:price=>10.0,
|
140
|
+
:shipping_handling=>1.0
|
141
|
+
}]}
|
142
|
+
|
143
|
+
request = @connection.build_item_price_update_request(request_attrs)
|
144
|
+
assert_instance_of String, request.to_xml.to_s
|
145
|
+
|
146
|
+
@connection.stubs(:post).returns(xml_for('ItemPriceUpdateResponse(1.00)',200))
|
147
|
+
response = @connection.append_item_price rescue MissingRequestOptions
|
148
|
+
|
149
|
+
response = @connection.append_item_price(request_attrs)
|
150
|
+
assert_equal '1', response.success
|
151
|
+
assert_equal 'success: 1, errors: ', response.to_s
|
152
|
+
end
|
153
|
+
|
154
|
+
|
155
|
+
def test_supplier_item_update_request_from_xml
|
156
|
+
request = RubyOmx::SupplierItemUpdateRequest.format(xml_for('SupplierItemUpdateRequest(1.00)',200))
|
157
|
+
assert_equal '1.00', request.version
|
158
|
+
assert_equal 1, request.items.length
|
159
|
+
item = request.items.first
|
160
|
+
assert_equal 11.22, item.standard_price
|
161
|
+
assert_equal 50, item.minimum_quantity
|
162
|
+
assert_equal "WID500a", item.item_code
|
163
|
+
assert_equal '1', item.supplier_id
|
164
|
+
assert_equal 2, item.units_per_package
|
165
|
+
assert_equal 'large box', item.package_description
|
166
|
+
end
|
167
|
+
|
168
|
+
def test_supplier_item_update_request_to_xml
|
169
|
+
|
170
|
+
request_attrs = {:items=>[{
|
171
|
+
:item_code=>'03-0303',
|
172
|
+
:supplier_id=>'76',
|
173
|
+
:supplier_item_code=>'03-0303',
|
174
|
+
:description=>'Description',
|
175
|
+
:standard_price=>10.5,
|
176
|
+
:delivery_lead_time_days=>5,
|
177
|
+
:minimum_quantity=>1,
|
178
|
+
:units_per_package=>1,
|
179
|
+
:package_description=>'Standard' }]
|
180
|
+
}
|
181
|
+
|
182
|
+
request = @connection.build_supplier_item_update_request(request_attrs)
|
183
|
+
assert_instance_of String, request.to_xml.to_s
|
184
|
+
|
185
|
+
@connection.stubs(:post).returns(xml_for('SupplierItemUpdateResponse(1.00)',200))
|
186
|
+
response = @connection.append_supplier_item rescue MissingRequestOptions
|
187
|
+
|
188
|
+
response = @connection.append_supplier_item(request_attrs)
|
189
|
+
assert_equal '1', response.success
|
190
|
+
end
|
191
|
+
|
113
192
|
end
|
@@ -28,6 +28,7 @@ class PurchaseOrdersTest < MiniTest::Unit::TestCase
|
|
28
28
|
@connection.stubs(:post).returns(xml_for('PurchaseOrderUpdateResponse(1.00)',200))
|
29
29
|
|
30
30
|
po_data = { :po_number => '16651', # actually would not have both po number and supplier id
|
31
|
+
:cross_reference => 'PurchaseOrder 3432',
|
31
32
|
:line_items => [@line1, @line2],
|
32
33
|
:supplier_id => '76'
|
33
34
|
}
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby_omx
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.21
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -76,20 +76,24 @@ files:
|
|
76
76
|
- lib/ruby_omx/purchase_orders.rb
|
77
77
|
- lib/ruby_omx/request/custom_item_info_request.rb
|
78
78
|
- lib/ruby_omx/request/item_info_request.rb
|
79
|
+
- lib/ruby_omx/request/item_price_update_request.rb
|
79
80
|
- lib/ruby_omx/request/item_update_request.rb
|
80
81
|
- lib/ruby_omx/request/memo_submission_request.rb
|
81
82
|
- lib/ruby_omx/request/order_info_request.rb
|
82
83
|
- lib/ruby_omx/request/purchase_order_update_request.rb
|
84
|
+
- lib/ruby_omx/request/supplier_item_update_request.rb
|
83
85
|
- lib/ruby_omx/request/udoa_request.rb
|
84
86
|
- lib/ruby_omx/request.rb
|
85
87
|
- lib/ruby_omx/response/custom_item_info_response.rb
|
86
88
|
- lib/ruby_omx/response/item_info_response.rb
|
89
|
+
- lib/ruby_omx/response/item_price_update_response.rb
|
87
90
|
- lib/ruby_omx/response/item_update_response.rb
|
88
91
|
- lib/ruby_omx/response/memo_submission_response.rb
|
89
92
|
- lib/ruby_omx/response/order_info_response.rb
|
90
93
|
- lib/ruby_omx/response/purchase_order_update_response.rb
|
91
94
|
- lib/ruby_omx/response/response_error.rb
|
92
95
|
- lib/ruby_omx/response/smart_report_response.rb
|
96
|
+
- lib/ruby_omx/response/supplier_item_update_response.rb
|
93
97
|
- lib/ruby_omx/response/udoa_response.rb
|
94
98
|
- lib/ruby_omx/response.rb
|
95
99
|
- lib/ruby_omx/version.rb
|