forked from lightward/mechanic-tasks
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathscript.liquid
113 lines (99 loc) · 3.46 KB
/
script.liquid
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
{% if event.preview %}
{% capture product_json %}
{
"handle": "stylish-shirt-503",
"variants": [
{
"sku": "503-L-B",
"option1": "L",
"option2": "Black",
"admin_graphql_api_id": "gid://shopify/ProductVariant/1234567890"
},
{
"sku": "503-XL-G",
"option1": "XL",
"option2": "Heather Grey",
"admin_graphql_api_id": "gid://shopify/ProductVariant/2345678901"
{% if options.skip_variants_that_already_have_skus__boolean %}
},
{
"option1": "XXL",
"option2": "Red",
"admin_graphql_api_id": "gid://shopify/ProductVariant/3456789012"
{% endif %}
}
],
"options": [
{
"name": "Size"
},
{
"name": "Color"
}
]
}
{% endcapture %}
{% assign product = product_json | parse_json %}
{% endif %}
{% assign allowed_characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" %}
{% assign sku_base = product.handle | split: "-" | last | upcase %}
{% for variant in product.variants %}
{% if options.skip_variants_that_already_have_skus__boolean and variant.sku != blank %}
{% log message: "variant already has a sku; skipping", original_sku: variant.sku %}
{% continue %}
{% endif %}
{% assign variant_sku_generated = sku_base %}
{% assign variant_options = array %}
{% assign variant_options[0] = variant.option1 %}
{% assign variant_options[1] = variant.option2 %}
{% assign variant_options[2] = variant.option3 %}
{% assign variant_option_names = product.options | map: "name" %}
{% for variant_option in variant_options %}
{% if variant_option == blank %}
{% continue %}
{% endif %}
{% if options.product_options_to_keep_unabbreviated__array contains variant_option_names[forloop.index0] %}
{% assign variant_sku_generated = variant_sku_generated | append: "-" | append: variant_option %}
{% else %}
{% assign variant_option_abbreviation = "" %}
{% assign variant_option_characters = variant_option | split: "" %}
{% for variant_option_character in variant_option_characters %}
{% if allowed_characters contains variant_option_character %}
{% assign variant_option_abbreviation = variant_option_abbreviation | append: variant_option_character %}
{% endif %}
{% endfor %}
{% if variant_option_abbreviation == blank %}
{% assign variant_option_abbreviation = variant_option_characters[0] | upcase %}
{% endif %}
{% assign variant_sku_generated = variant_sku_generated | append: "-" | append: variant_option_abbreviation %}
{% endif %}
{% endfor %}
{% if variant_sku_generated != variant.sku %}
{% log message: "updating sku", original_sku: variant.sku, generated_sku: variant_sku_generated %}
{% comment %}
-- update skus on inventory items, as this is no longer supported on variants as of 2024-07 API
{% endcomment %}
{% action "shopify" %}
mutation {
inventoryItemUpdate(
id: {{ variant.inventory_item.admin_graphql_api_id | json }}
input: {
sku: {{ variant_sku_generated | json }}
}
) {
inventoryItem {
variant {
id
displayName
sku
}
}
userErrors {
field
message
}
}
}
{% endaction %}
{% endif %}
{% endfor %}