shopify_transporter 2.3.1 → 2.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 +4 -4
- data/lib/shopify_transporter/pipeline/magento/order/line_items.rb +16 -5
- data/lib/shopify_transporter/pipeline/magento/order/shipping_lines.rb +41 -0
- data/lib/shopify_transporter/shopify/customer.rb +27 -3
- data/lib/shopify_transporter/shopify/order.rb +34 -3
- data/lib/shopify_transporter/version.rb +1 -1
- data/lib/templates/magento/config.tt +1 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d74afe8f2cffa7be367716d17ee580cb69e793f4
|
4
|
+
data.tar.gz: 5193dbb1507a03df56e4c945f07fedfa29fdc2f1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3a0fc07d7ab1c33b3d5556c9a3464c5a120b89e71b48072b0579e9098093c20933c29e3a152ba8ea59c678bf4a0952e968c07736babad5418aa90f318a7453ae
|
7
|
+
data.tar.gz: c7d9751cfd089ee8d73383ac09635350a6a72b1555ddd8aec67c23a9b5607d80ff895492e1d0fc49b487857cedeb20a46a8a491363d39d12989542cc3cccdcac
|
@@ -19,14 +19,24 @@ module ShopifyTransporter
|
|
19
19
|
|
20
20
|
def line_items(input)
|
21
21
|
line_items = line_items_array(input)
|
22
|
-
line_items.map { |item| line_item(item) }
|
22
|
+
combine_associated_line_items(line_items.map { |item| line_item(item) })
|
23
|
+
end
|
24
|
+
|
25
|
+
def combine_associated_line_items(line_items)
|
26
|
+
line_items.group_by { |line_item| line_item['sku'] }.map do |_, associated_items|
|
27
|
+
case associated_items.size
|
28
|
+
when 1
|
29
|
+
associated_items.first
|
30
|
+
when 2
|
31
|
+
parent = associated_items.find { |x| x['product_type'] == 'configurable' }
|
32
|
+
child = associated_items.find { |x| x['product_type'] == 'simple' }
|
33
|
+
parent.merge(child.slice('name'))
|
34
|
+
end.except('product_type')
|
35
|
+
end
|
23
36
|
end
|
24
37
|
|
25
38
|
def line_items_array(input)
|
26
|
-
|
27
|
-
result = items_1 && items_1['result']
|
28
|
-
items_2 = result && result['items']
|
29
|
-
item = items_2 && items_2['item']
|
39
|
+
item = input.dig('items', 'result', 'items', 'item')
|
30
40
|
return [] unless item
|
31
41
|
item.is_a?(Array) ? item : [item]
|
32
42
|
end
|
@@ -41,6 +51,7 @@ module ShopifyTransporter
|
|
41
51
|
taxable: taxable?(item),
|
42
52
|
fulfillment_status: fulfillment_status(item),
|
43
53
|
tax_lines: tax_lines(item),
|
54
|
+
product_type: item['product_type'],
|
44
55
|
}.stringify_keys
|
45
56
|
end
|
46
57
|
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'shopify_transporter/pipeline/stage'
|
3
|
+
require 'shopify_transporter/shopify'
|
4
|
+
|
5
|
+
module ShopifyTransporter
|
6
|
+
module Pipeline
|
7
|
+
module Magento
|
8
|
+
module Order
|
9
|
+
class ShippingLines < Pipeline::Stage
|
10
|
+
def convert(input, record)
|
11
|
+
record.merge(
|
12
|
+
{
|
13
|
+
shipping_lines: shipping_lines(input),
|
14
|
+
}.stringify_keys
|
15
|
+
)
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def shipping_lines(input)
|
21
|
+
[
|
22
|
+
{
|
23
|
+
code: input['shipping_description'],
|
24
|
+
title: input['shipping_description'],
|
25
|
+
price: input['shipping_amount'],
|
26
|
+
carrier_identifier: input['shipping_method'],
|
27
|
+
tax_lines: shipping_tax_lines(input),
|
28
|
+
}.stringify_keys,
|
29
|
+
]
|
30
|
+
end
|
31
|
+
|
32
|
+
def shipping_tax_lines(input)
|
33
|
+
return unless input['shipping_tax_amount'].present? && input['shipping_tax_amount'].to_f != 0
|
34
|
+
|
35
|
+
[{ price: input['shipping_tax_amount'] }.stringify_keys]
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -57,12 +57,36 @@ module ShopifyTransporter
|
|
57
57
|
).freeze
|
58
58
|
|
59
59
|
def top_level_row_values
|
60
|
-
|
60
|
+
return top_level_attributes.values unless able_to_merge_default_address?
|
61
|
+
|
62
|
+
top_level_attributes.merge(default_address.compact).values_at(*Customer.columns)
|
63
|
+
end
|
64
|
+
|
65
|
+
def top_level_attributes
|
66
|
+
base_hash.merge(record_hash.slice(*TOP_LEVEL_ATTRIBUTES))
|
67
|
+
end
|
68
|
+
|
69
|
+
def default_address
|
70
|
+
return {} unless at_least_one_address?
|
71
|
+
|
72
|
+
record_hash['addresses'][0].slice(*ADDRESS_ATTRIBUTES)
|
73
|
+
end
|
74
|
+
|
75
|
+
def at_least_one_address?
|
76
|
+
record_hash['addresses'].present? && record_hash['addresses'][0].present?
|
77
|
+
end
|
78
|
+
|
79
|
+
def able_to_merge_default_address?
|
80
|
+
!top_level_attributes.compact.keys.any? do |key|
|
81
|
+
default_address[key].present? && top_level_attributes[key] != default_address[key]
|
82
|
+
end
|
61
83
|
end
|
62
84
|
|
63
85
|
def address_row_values
|
64
|
-
return [] unless
|
65
|
-
|
86
|
+
return [] unless at_least_one_address?
|
87
|
+
|
88
|
+
addresses = able_to_merge_default_address? ? record_hash['addresses'].drop(1) : record_hash['addresses']
|
89
|
+
addresses.map do |address_hash|
|
66
90
|
address = address_hash.slice(*ADDRESS_ATTRIBUTES)
|
67
91
|
populate_missing_address_attributes!(address)
|
68
92
|
row_values_from(address) if self.class.has_values?(address)
|
@@ -26,6 +26,8 @@ module ShopifyTransporter
|
|
26
26
|
'Lineitem fulfillment status', 'Tax 1 Title', 'Tax 1 Price', 'Tax 1 Rate', 'Tax 2 Title',
|
27
27
|
'Tax 2 Price', 'Tax 2 Rate', 'Tax 3 Title', 'Tax 3 Price', 'Tax 3 Rate',
|
28
28
|
'Transaction amount', 'Transaction kind', 'Transaction status',
|
29
|
+
'Shipping line code', 'Shipping line price', 'Shipping line title', 'Shipping line carrier identifier',
|
30
|
+
'Shipping Tax Price',
|
29
31
|
'Discount code', 'Discount amount', 'Discount type',
|
30
32
|
'Metafield Namespace', 'Metafield Key', 'Metafield Value', 'Metafield Value Type'
|
31
33
|
].to_csv
|
@@ -47,6 +49,7 @@ module ShopifyTransporter
|
|
47
49
|
csv << top_level_row_values
|
48
50
|
line_item_row_values.each { |row| csv << row }
|
49
51
|
transaction_row_values.each { |row| csv << row }
|
52
|
+
shipping_line_row_values.each { |row| csv << row }
|
50
53
|
discount_row_values.each { |row| csv << row }
|
51
54
|
metafield_row_values.each { |row| csv << row }
|
52
55
|
end
|
@@ -82,6 +85,12 @@ module ShopifyTransporter
|
|
82
85
|
code amount type
|
83
86
|
)
|
84
87
|
|
88
|
+
SHIPPING_LINE_PREFIX = 'shipping_line_'
|
89
|
+
|
90
|
+
SHIPPING_LINE_ATTRIBUTES = %w(
|
91
|
+
code price title carrier_identifier
|
92
|
+
)
|
93
|
+
|
85
94
|
def address_hash_for(address_hash, prefix)
|
86
95
|
return {} if address_hash.blank?
|
87
96
|
|
@@ -111,7 +120,7 @@ module ShopifyTransporter
|
|
111
120
|
|
112
121
|
record_hash['line_items'].map do |line_item_hash|
|
113
122
|
line_item = line_item_hash.slice(*LINE_ITEM_ATTRIBUTES)
|
114
|
-
.transform_keys
|
123
|
+
.transform_keys { |k| "#{LINE_ITEM_PREFIX}#{k}" }
|
115
124
|
.merge(tax_line_hash(line_item_hash))
|
116
125
|
|
117
126
|
row_values_from(line_item) if self.class.has_values?(line_item)
|
@@ -123,7 +132,7 @@ module ShopifyTransporter
|
|
123
132
|
|
124
133
|
record_hash['transactions'].map do |transaction_hash|
|
125
134
|
transaction = transaction_hash.slice(*TRANSACTION_ATTRIBUTES)
|
126
|
-
.transform_keys
|
135
|
+
.transform_keys { |k| "#{TRANSACTION_PREFIX}#{k}" }
|
127
136
|
|
128
137
|
row_values_from(transaction) if self.class.has_values?(transaction)
|
129
138
|
end.compact
|
@@ -134,11 +143,33 @@ module ShopifyTransporter
|
|
134
143
|
|
135
144
|
record_hash['discounts'].map do |discount_hash|
|
136
145
|
discount = discount_hash.slice(*DISCOUNT_ATTRIBUTES)
|
137
|
-
.transform_keys
|
146
|
+
.transform_keys { |k| "#{DISCOUNT_PREFIX}#{k}" }
|
138
147
|
|
139
148
|
row_values_from(discount) if self.class.has_values?(discount)
|
140
149
|
end.compact
|
141
150
|
end
|
151
|
+
|
152
|
+
def shipping_line_row_values
|
153
|
+
return [] unless record_hash['shipping_lines']
|
154
|
+
|
155
|
+
record_hash['shipping_lines'].map do |shipping_line_hash|
|
156
|
+
shipping_line = shipping_line_hash.slice(*SHIPPING_LINE_ATTRIBUTES)
|
157
|
+
.transform_keys { |k| "#{SHIPPING_LINE_PREFIX}#{k}" }
|
158
|
+
.merge(shipping_tax_hash(shipping_line_hash))
|
159
|
+
|
160
|
+
row_values_from(shipping_line) if self.class.has_values?(shipping_line)
|
161
|
+
end.compact
|
162
|
+
end
|
163
|
+
|
164
|
+
def shipping_tax_hash(shipping_line_hash)
|
165
|
+
return {} if shipping_line_hash['tax_lines'].blank?
|
166
|
+
|
167
|
+
shipping_line_hash['tax_lines'].map do |tax_line|
|
168
|
+
tax_line.each_with_object({}) do |(key, val), hash|
|
169
|
+
hash["shipping_tax_#{key}"] = val
|
170
|
+
end
|
171
|
+
end.reduce({}, :merge)
|
172
|
+
end
|
142
173
|
end
|
143
174
|
end
|
144
175
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shopify_transporter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shopify
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-10-
|
11
|
+
date: 2018-10-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -163,6 +163,7 @@ files:
|
|
163
163
|
- lib/shopify_transporter/pipeline/magento/order/addresses_attribute.rb
|
164
164
|
- lib/shopify_transporter/pipeline/magento/order/discounts.rb
|
165
165
|
- lib/shopify_transporter/pipeline/magento/order/line_items.rb
|
166
|
+
- lib/shopify_transporter/pipeline/magento/order/shipping_lines.rb
|
166
167
|
- lib/shopify_transporter/pipeline/magento/order/top_level_attributes.rb
|
167
168
|
- lib/shopify_transporter/pipeline/magento/order/transactions.rb
|
168
169
|
- lib/shopify_transporter/pipeline/magento/product/top_level_attributes.rb
|