google-apis-merchantapi_promotions_v1beta 0.1.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.
@@ -0,0 +1,795 @@
1
+ # Copyright 2020 Google LLC
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ require 'date'
16
+ require 'google/apis/core/base_service'
17
+ require 'google/apis/core/json_representation'
18
+ require 'google/apis/core/hashable'
19
+ require 'google/apis/errors'
20
+
21
+ module Google
22
+ module Apis
23
+ module MerchantapiPromotionsV1beta
24
+
25
+ # Attributes.
26
+ class Attributes
27
+ include Google::Apis::Core::Hashable
28
+
29
+ # Optional. Product filter by [brand exclusion](https://support.google.com/
30
+ # merchants/answer/13861679?ref_topic=13773355&sjid=17642868584668136159-NC) for
31
+ # the promotion. The product filter attributes only applies when the products
32
+ # eligible for promotion product applicability `product_applicability` attribute
33
+ # is set to [specific_products](https://support.google.com/merchants/answer/
34
+ # 13837299?ref_topic=13773355&sjid=17642868584668136159-NC).
35
+ # Corresponds to the JSON property `brandExclusion`
36
+ # @return [Array<String>]
37
+ attr_accessor :brand_exclusion
38
+
39
+ # Optional. Product filter by brand for the promotion. The product filter
40
+ # attributes only applies when the products eligible for promotion product
41
+ # applicability `product_applicability` attribute is set to [specific_products](
42
+ # https://support.google.com/merchants/answer/13837299?ref_topic=13773355&sjid=
43
+ # 17642868584668136159-NC).
44
+ # Corresponds to the JSON property `brandInclusion`
45
+ # @return [Array<String>]
46
+ attr_accessor :brand_inclusion
47
+
48
+ # Required. The [coupon value type] (https://support.google.com/merchants/answer/
49
+ # 13861986?ref_topic=13773355&sjid=17642868584668136159-NC) attribute to signal
50
+ # the type of promotion that you are running. Depending on type of the selected
51
+ # coupon value [some attributes are required](https://support.google.com/
52
+ # merchants/answer/6393006?ref_topic=7322920).
53
+ # Corresponds to the JSON property `couponValueType`
54
+ # @return [String]
55
+ attr_accessor :coupon_value_type
56
+
57
+ # Optional. [Free gift description](https://support.google.com/merchants/answer/
58
+ # 13847245?ref_topic=13773355&sjid=17642868584668136159-NC) for the promotion.
59
+ # Corresponds to the JSON property `freeGiftDescription`
60
+ # @return [String]
61
+ attr_accessor :free_gift_description
62
+
63
+ # Optional. [Free gift item ID](https://support.google.com/merchants/answer/
64
+ # 13857152?ref_topic=13773355&sjid=17642868584668136159-NC) for the promotion.
65
+ # Corresponds to the JSON property `freeGiftItemId`
66
+ # @return [String]
67
+ attr_accessor :free_gift_item_id
68
+
69
+ # The price represented as a number and currency.
70
+ # Corresponds to the JSON property `freeGiftValue`
71
+ # @return [Google::Apis::MerchantapiPromotionsV1beta::Price]
72
+ attr_accessor :free_gift_value
73
+
74
+ # Optional. Generic redemption code for the promotion. To be used with the `
75
+ # offerType` field and must meet the [minimum requirements](https://support.
76
+ # google.com/merchants/answer/13837405?ref_topic=13773355&sjid=
77
+ # 17642868584668136159-NC).
78
+ # Corresponds to the JSON property `genericRedemptionCode`
79
+ # @return [String]
80
+ attr_accessor :generic_redemption_code
81
+
82
+ # Optional. The number of items discounted in the promotion. The attribute is
83
+ # set when `couponValueType` is equal to `buy_m_get_n_money_off` or `
84
+ # buy_m_get_n_percent_off`.
85
+ # Corresponds to the JSON property `getThisQuantityDiscounted`
86
+ # @return [Fixnum]
87
+ attr_accessor :get_this_quantity_discounted
88
+
89
+ # Optional. Product filter by [item group ID](https://support.google.com/
90
+ # merchants/answer/13837298?ref_topic=13773355&sjid=17642868584668136159-NC).
91
+ # The product filter attributes only applies when the products eligible for
92
+ # promotion product applicability `product_applicability` attribute is set to [
93
+ # specific_products](https://support.google.com/merchants/answer/13837299?
94
+ # ref_topic=13773355&sjid=17642868584668136159-NC). exclusion for the promotion.
95
+ # Corresponds to the JSON property `itemGroupIdExclusion`
96
+ # @return [Array<String>]
97
+ attr_accessor :item_group_id_exclusion
98
+
99
+ # Optional. Product filter by item group ID for the promotion. The product
100
+ # filter attributes only applies when the products eligible for promotion
101
+ # product applicability [product_applicability] attribute is set to [
102
+ # specific_products](https://support.google.com/merchants/answer/13837299?
103
+ # ref_topic=13773355&sjid=17642868584668136159-NC).
104
+ # Corresponds to the JSON property `itemGroupIdInclusion`
105
+ # @return [Array<String>]
106
+ attr_accessor :item_group_id_inclusion
107
+
108
+ # Optional. Product filter by [item ID exclusion](https://support.google.com/
109
+ # merchants/answer/13863524?ref_topic=13773355&sjid=17642868584668136159-NC) for
110
+ # the promotion. The product filter attributes only applies when the products
111
+ # eligible for promotion product applicability `product_applicability` attribute
112
+ # is set to [specific_products](https://support.google.com/merchants/answer/
113
+ # 13837299?ref_topic=13773355&sjid=17642868584668136159-NC).
114
+ # Corresponds to the JSON property `itemIdExclusion`
115
+ # @return [Array<String>]
116
+ attr_accessor :item_id_exclusion
117
+
118
+ # Optional. Product filter by [item ID](https://support.google.com/merchants/
119
+ # answer/13861565?ref_topic=13773355&sjid=17642868584668136159-NC) for the
120
+ # promotion. The product filter attributes only applies when the products
121
+ # eligible for promotion product applicability `product_applicability` attribute
122
+ # is set to [specific_products](https://support.google.com/merchants/answer/
123
+ # 13837299?ref_topic=13773355&sjid=17642868584668136159-NC).
124
+ # Corresponds to the JSON property `itemIdInclusion`
125
+ # @return [Array<String>]
126
+ attr_accessor :item_id_inclusion
127
+
128
+ # Optional. [Maximum purchase quantity](https://support.google.com/merchants/
129
+ # answer/13861564?ref_topic=13773355&sjid=17642868584668136159-NC) for the
130
+ # promotion.
131
+ # Corresponds to the JSON property `limitQuantity`
132
+ # @return [Fixnum]
133
+ attr_accessor :limit_quantity
134
+
135
+ # The price represented as a number and currency.
136
+ # Corresponds to the JSON property `limitValue`
137
+ # @return [Google::Apis::MerchantapiPromotionsV1beta::Price]
138
+ attr_accessor :limit_value
139
+
140
+ # Required. [Long title](https://support.google.com/merchants/answer/13838102?
141
+ # ref_topic=13773355&sjid=17642868584668136159-NC) for the promotion.
142
+ # Corresponds to the JSON property `longTitle`
143
+ # @return [String]
144
+ attr_accessor :long_title
145
+
146
+ # The price represented as a number and currency.
147
+ # Corresponds to the JSON property `minimumPurchaseAmount`
148
+ # @return [Google::Apis::MerchantapiPromotionsV1beta::Price]
149
+ attr_accessor :minimum_purchase_amount
150
+
151
+ # Optional. [Minimum purchase quantity](https://support.google.com/merchants/
152
+ # answer/13838182?ref_topic=13773355&sjid=17642868584668136159-NC) for the
153
+ # promotion.
154
+ # Corresponds to the JSON property `minimumPurchaseQuantity`
155
+ # @return [Fixnum]
156
+ attr_accessor :minimum_purchase_quantity
157
+
158
+ # The price represented as a number and currency.
159
+ # Corresponds to the JSON property `moneyOffAmount`
160
+ # @return [Google::Apis::MerchantapiPromotionsV1beta::Price]
161
+ attr_accessor :money_off_amount
162
+
163
+ # Required. [Type](https://support.google.com/merchants/answer/13837405?
164
+ # ref_topic=13773355&sjid=17642868584668136159-NC) of the promotion. Use this
165
+ # attribute to indicate whether or not customers need a coupon code to redeem
166
+ # your promotion.
167
+ # Corresponds to the JSON property `offerType`
168
+ # @return [String]
169
+ attr_accessor :offer_type
170
+
171
+ # Optional. The [percentage discount](https://support.google.com/merchants/
172
+ # answer/13837404?sjid=17642868584668136159-NC) offered in the promotion.
173
+ # Corresponds to the JSON property `percentOff`
174
+ # @return [Fixnum]
175
+ attr_accessor :percent_off
176
+
177
+ # Required. Applicability of the promotion to either all products or [only
178
+ # specific products](https://support.google.com/merchants/answer/6396257?
179
+ # ref_topic=6396150&sjid=17642868584668136159-NC).
180
+ # Corresponds to the JSON property `productApplicability`
181
+ # @return [String]
182
+ attr_accessor :product_applicability
183
+
184
+ # Optional. Product filter by [product type exclusion](https://support.google.
185
+ # com/merchants/answer/13863746?ref_topic=13773355&sjid=17642868584668136159-NC)
186
+ # for the promotion. The product filter attributes only applies when the
187
+ # products eligible for promotion product applicability `product_applicability`
188
+ # attribute is set to [specific_products](https://support.google.com/merchants/
189
+ # answer/13837299?ref_topic=13773355&sjid=17642868584668136159-NC).
190
+ # Corresponds to the JSON property `productTypeExclusion`
191
+ # @return [Array<String>]
192
+ attr_accessor :product_type_exclusion
193
+
194
+ # Optional. Product filter by product type for the promotion. The product filter
195
+ # attributes only applies when the products eligible for promotion product
196
+ # applicability `product_applicability` attribute is set to [specific_products](
197
+ # https://support.google.com/merchants/answer/13837299?ref_topic=13773355&sjid=
198
+ # 17642868584668136159-NC).
199
+ # Corresponds to the JSON property `productTypeInclusion`
200
+ # @return [Array<String>]
201
+ attr_accessor :product_type_inclusion
202
+
203
+ # Required. The list of destinations where the promotion applies to. If you don'
204
+ # t specify a destination by including a supported value in your data source,
205
+ # your promotion will display in Shopping ads and free listings by default. You
206
+ # may have previously submitted the following values as destinations for your
207
+ # products: Shopping Actions, Surfaces across Google, Local surfaces across
208
+ # Google. To represent these values use `FREE_LISTINGS`, `FREE_LOCAL_LISTINGS`, `
209
+ # LOCAL_INVENTORY_ADS`. For more details see [Promotion destination](https://
210
+ # support.google.com/merchants/answer/13837465?sjid=5155774230887277618-NC)
211
+ # Corresponds to the JSON property `promotionDestinations`
212
+ # @return [Array<String>]
213
+ attr_accessor :promotion_destinations
214
+
215
+ # Represents a time interval, encoded as a Timestamp start (inclusive) and a
216
+ # Timestamp end (exclusive). The start must be less than or equal to the end.
217
+ # When the start equals the end, the interval is empty (matches no time). When
218
+ # both start and end are unspecified, the interval matches any time.
219
+ # Corresponds to the JSON property `promotionDisplayTimePeriod`
220
+ # @return [Google::Apis::MerchantapiPromotionsV1beta::Interval]
221
+ attr_accessor :promotion_display_time_period
222
+
223
+ # Represents a time interval, encoded as a Timestamp start (inclusive) and a
224
+ # Timestamp end (exclusive). The start must be less than or equal to the end.
225
+ # When the start equals the end, the interval is empty (matches no time). When
226
+ # both start and end are unspecified, the interval matches any time.
227
+ # Corresponds to the JSON property `promotionEffectiveTimePeriod`
228
+ # @return [Google::Apis::MerchantapiPromotionsV1beta::Interval]
229
+ attr_accessor :promotion_effective_time_period
230
+
231
+ # Optional. URL to the page on the merchant's site where the promotion shows.
232
+ # Local Inventory ads promotions throw an error if no `promotion_url` is
233
+ # included. URL is used to confirm that the promotion is valid and can be
234
+ # redeemed.
235
+ # Corresponds to the JSON property `promotionUrl`
236
+ # @return [String]
237
+ attr_accessor :promotion_url
238
+
239
+ # Optional. Whether the promotion applies to [all stores, or only specified
240
+ # stores](https://support.google.com/merchants/answer/13857563?sjid=
241
+ # 17642868584668136159-NC). Local Inventory ads promotions throw an error if no
242
+ # store applicability is included. An `INVALID_ARGUMENT` error is thrown if `
243
+ # store_applicability` is set to `ALL_STORES` and `store_codes_inclusion` or `
244
+ # score_code_exclusion` is set to a value.
245
+ # Corresponds to the JSON property `storeApplicability`
246
+ # @return [String]
247
+ attr_accessor :store_applicability
248
+
249
+ # Optional. [Store codes to exclude](https://support.google.com/merchants/answer/
250
+ # 13859586?ref_topic=13773355&sjid=17642868584668136159-NC) for the promotion.
251
+ # The store filter attributes only applies when the `store_applicability`
252
+ # attribute is set to [specific_stores](https://support.google.com/merchants/
253
+ # answer/13857563?ref_topic=13773355&sjid=17642868584668136159-NC).
254
+ # Corresponds to the JSON property `storeCodesExclusion`
255
+ # @return [Array<String>]
256
+ attr_accessor :store_codes_exclusion
257
+
258
+ # Optional. [Store codes to include](https://support.google.com/merchants/answer/
259
+ # 13857470?ref_topic=13773355&sjid=17642868584668136159-NC) for the promotion.
260
+ # The store filter attributes only applies when the `store_applicability`
261
+ # attribute is set to [specific_stores](https://support.google.com/merchants/
262
+ # answer/13857563?ref_topic=13773355&sjid=17642868584668136159-NC). Store code (
263
+ # the store ID from your Business Profile) of the physical store the product is
264
+ # sold in. See the [Local product inventory data specification](https://support.
265
+ # google.com/merchants/answer/3061342) for more information.
266
+ # Corresponds to the JSON property `storeCodesInclusion`
267
+ # @return [Array<String>]
268
+ attr_accessor :store_codes_inclusion
269
+
270
+ def initialize(**args)
271
+ update!(**args)
272
+ end
273
+
274
+ # Update properties of this object
275
+ def update!(**args)
276
+ @brand_exclusion = args[:brand_exclusion] if args.key?(:brand_exclusion)
277
+ @brand_inclusion = args[:brand_inclusion] if args.key?(:brand_inclusion)
278
+ @coupon_value_type = args[:coupon_value_type] if args.key?(:coupon_value_type)
279
+ @free_gift_description = args[:free_gift_description] if args.key?(:free_gift_description)
280
+ @free_gift_item_id = args[:free_gift_item_id] if args.key?(:free_gift_item_id)
281
+ @free_gift_value = args[:free_gift_value] if args.key?(:free_gift_value)
282
+ @generic_redemption_code = args[:generic_redemption_code] if args.key?(:generic_redemption_code)
283
+ @get_this_quantity_discounted = args[:get_this_quantity_discounted] if args.key?(:get_this_quantity_discounted)
284
+ @item_group_id_exclusion = args[:item_group_id_exclusion] if args.key?(:item_group_id_exclusion)
285
+ @item_group_id_inclusion = args[:item_group_id_inclusion] if args.key?(:item_group_id_inclusion)
286
+ @item_id_exclusion = args[:item_id_exclusion] if args.key?(:item_id_exclusion)
287
+ @item_id_inclusion = args[:item_id_inclusion] if args.key?(:item_id_inclusion)
288
+ @limit_quantity = args[:limit_quantity] if args.key?(:limit_quantity)
289
+ @limit_value = args[:limit_value] if args.key?(:limit_value)
290
+ @long_title = args[:long_title] if args.key?(:long_title)
291
+ @minimum_purchase_amount = args[:minimum_purchase_amount] if args.key?(:minimum_purchase_amount)
292
+ @minimum_purchase_quantity = args[:minimum_purchase_quantity] if args.key?(:minimum_purchase_quantity)
293
+ @money_off_amount = args[:money_off_amount] if args.key?(:money_off_amount)
294
+ @offer_type = args[:offer_type] if args.key?(:offer_type)
295
+ @percent_off = args[:percent_off] if args.key?(:percent_off)
296
+ @product_applicability = args[:product_applicability] if args.key?(:product_applicability)
297
+ @product_type_exclusion = args[:product_type_exclusion] if args.key?(:product_type_exclusion)
298
+ @product_type_inclusion = args[:product_type_inclusion] if args.key?(:product_type_inclusion)
299
+ @promotion_destinations = args[:promotion_destinations] if args.key?(:promotion_destinations)
300
+ @promotion_display_time_period = args[:promotion_display_time_period] if args.key?(:promotion_display_time_period)
301
+ @promotion_effective_time_period = args[:promotion_effective_time_period] if args.key?(:promotion_effective_time_period)
302
+ @promotion_url = args[:promotion_url] if args.key?(:promotion_url)
303
+ @store_applicability = args[:store_applicability] if args.key?(:store_applicability)
304
+ @store_codes_exclusion = args[:store_codes_exclusion] if args.key?(:store_codes_exclusion)
305
+ @store_codes_inclusion = args[:store_codes_inclusion] if args.key?(:store_codes_inclusion)
306
+ end
307
+ end
308
+
309
+ # A message that represents custom attributes. Exactly one of `value` or `
310
+ # group_values` must not be empty.
311
+ class CustomAttribute
312
+ include Google::Apis::Core::Hashable
313
+
314
+ # Subattributes within this attribute group. If `group_values` is not empty, `
315
+ # value` must be empty.
316
+ # Corresponds to the JSON property `groupValues`
317
+ # @return [Array<Google::Apis::MerchantapiPromotionsV1beta::CustomAttribute>]
318
+ attr_accessor :group_values
319
+
320
+ # The name of the attribute.
321
+ # Corresponds to the JSON property `name`
322
+ # @return [String]
323
+ attr_accessor :name
324
+
325
+ # The value of the attribute. If `value` is not empty, `group_values` must be
326
+ # empty.
327
+ # Corresponds to the JSON property `value`
328
+ # @return [String]
329
+ attr_accessor :value
330
+
331
+ def initialize(**args)
332
+ update!(**args)
333
+ end
334
+
335
+ # Update properties of this object
336
+ def update!(**args)
337
+ @group_values = args[:group_values] if args.key?(:group_values)
338
+ @name = args[:name] if args.key?(:name)
339
+ @value = args[:value] if args.key?(:value)
340
+ end
341
+ end
342
+
343
+ # The status for the specified destination.
344
+ class DestinationStatus
345
+ include Google::Apis::Core::Hashable
346
+
347
+ # Output only. The name of the promotion destination.
348
+ # Corresponds to the JSON property `reportingContext`
349
+ # @return [String]
350
+ attr_accessor :reporting_context
351
+
352
+ # Output only. The status for the specified destination.
353
+ # Corresponds to the JSON property `status`
354
+ # @return [String]
355
+ attr_accessor :status
356
+
357
+ def initialize(**args)
358
+ update!(**args)
359
+ end
360
+
361
+ # Update properties of this object
362
+ def update!(**args)
363
+ @reporting_context = args[:reporting_context] if args.key?(:reporting_context)
364
+ @status = args[:status] if args.key?(:status)
365
+ end
366
+ end
367
+
368
+ # Request message for the `InsertPromotion` method.
369
+ class InsertPromotionRequest
370
+ include Google::Apis::Core::Hashable
371
+
372
+ # Required. The data source of the [promotion](https://support.google.com/
373
+ # merchants/answer/6396268?sjid=5155774230887277618-NC) Format: `accounts/`
374
+ # account`/dataSources/`datasource``.
375
+ # Corresponds to the JSON property `dataSource`
376
+ # @return [String]
377
+ attr_accessor :data_source
378
+
379
+ # Represents a promotion. See the following articles for more details. Required
380
+ # promotion input attributes to pass data validation checks are primarily
381
+ # defined below: * [Promotions data specification](https://support.google.com/
382
+ # merchants/answer/2906014) * [Local promotions data specification](https://
383
+ # support.google.com/merchants/answer/10146130) After inserting, updating a
384
+ # promotion input, it may take several minutes before the final promotion can be
385
+ # retrieved.
386
+ # Corresponds to the JSON property `promotion`
387
+ # @return [Google::Apis::MerchantapiPromotionsV1beta::Promotion]
388
+ attr_accessor :promotion
389
+
390
+ def initialize(**args)
391
+ update!(**args)
392
+ end
393
+
394
+ # Update properties of this object
395
+ def update!(**args)
396
+ @data_source = args[:data_source] if args.key?(:data_source)
397
+ @promotion = args[:promotion] if args.key?(:promotion)
398
+ end
399
+ end
400
+
401
+ # Represents a time interval, encoded as a Timestamp start (inclusive) and a
402
+ # Timestamp end (exclusive). The start must be less than or equal to the end.
403
+ # When the start equals the end, the interval is empty (matches no time). When
404
+ # both start and end are unspecified, the interval matches any time.
405
+ class Interval
406
+ include Google::Apis::Core::Hashable
407
+
408
+ # Optional. Exclusive end of the interval. If specified, a Timestamp matching
409
+ # this interval will have to be before the end.
410
+ # Corresponds to the JSON property `endTime`
411
+ # @return [String]
412
+ attr_accessor :end_time
413
+
414
+ # Optional. Inclusive start of the interval. If specified, a Timestamp matching
415
+ # this interval will have to be the same or after the start.
416
+ # Corresponds to the JSON property `startTime`
417
+ # @return [String]
418
+ attr_accessor :start_time
419
+
420
+ def initialize(**args)
421
+ update!(**args)
422
+ end
423
+
424
+ # Update properties of this object
425
+ def update!(**args)
426
+ @end_time = args[:end_time] if args.key?(:end_time)
427
+ @start_time = args[:start_time] if args.key?(:start_time)
428
+ end
429
+ end
430
+
431
+ # The issue associated with the promotion.
432
+ class ItemLevelIssue
433
+ include Google::Apis::Core::Hashable
434
+
435
+ # Output only. List of country codes (ISO 3166-1 alpha-2) where issue applies to
436
+ # the offer.
437
+ # Corresponds to the JSON property `applicableCountries`
438
+ # @return [Array<String>]
439
+ attr_accessor :applicable_countries
440
+
441
+ # Output only. The attribute's name, if the issue is caused by a single
442
+ # attribute.
443
+ # Corresponds to the JSON property `attribute`
444
+ # @return [String]
445
+ attr_accessor :attribute
446
+
447
+ # Output only. The error code of the issue.
448
+ # Corresponds to the JSON property `code`
449
+ # @return [String]
450
+ attr_accessor :code
451
+
452
+ # Output only. A short issue description in English.
453
+ # Corresponds to the JSON property `description`
454
+ # @return [String]
455
+ attr_accessor :description
456
+
457
+ # Output only. A detailed issue description in English.
458
+ # Corresponds to the JSON property `detail`
459
+ # @return [String]
460
+ attr_accessor :detail
461
+
462
+ # Output only. The URL of a web page to help with resolving this issue.
463
+ # Corresponds to the JSON property `documentation`
464
+ # @return [String]
465
+ attr_accessor :documentation
466
+
467
+ # Output only. The destination the issue applies to.
468
+ # Corresponds to the JSON property `reportingContext`
469
+ # @return [String]
470
+ attr_accessor :reporting_context
471
+
472
+ # Output only. Whether the issue can be resolved by the merchant.
473
+ # Corresponds to the JSON property `resolution`
474
+ # @return [String]
475
+ attr_accessor :resolution
476
+
477
+ # Output only. How this issue affects serving of the promotion.
478
+ # Corresponds to the JSON property `severity`
479
+ # @return [String]
480
+ attr_accessor :severity
481
+
482
+ def initialize(**args)
483
+ update!(**args)
484
+ end
485
+
486
+ # Update properties of this object
487
+ def update!(**args)
488
+ @applicable_countries = args[:applicable_countries] if args.key?(:applicable_countries)
489
+ @attribute = args[:attribute] if args.key?(:attribute)
490
+ @code = args[:code] if args.key?(:code)
491
+ @description = args[:description] if args.key?(:description)
492
+ @detail = args[:detail] if args.key?(:detail)
493
+ @documentation = args[:documentation] if args.key?(:documentation)
494
+ @reporting_context = args[:reporting_context] if args.key?(:reporting_context)
495
+ @resolution = args[:resolution] if args.key?(:resolution)
496
+ @severity = args[:severity] if args.key?(:severity)
497
+ end
498
+ end
499
+
500
+ # Response message for the `ListPromotions` method.
501
+ class ListPromotionsResponse
502
+ include Google::Apis::Core::Hashable
503
+
504
+ # A token, which can be sent as `page_token` to retrieve the next page. If this
505
+ # field is omitted, there are no subsequent pages.
506
+ # Corresponds to the JSON property `nextPageToken`
507
+ # @return [String]
508
+ attr_accessor :next_page_token
509
+
510
+ # The processed promotions from the specified account.
511
+ # Corresponds to the JSON property `promotions`
512
+ # @return [Array<Google::Apis::MerchantapiPromotionsV1beta::Promotion>]
513
+ attr_accessor :promotions
514
+
515
+ def initialize(**args)
516
+ update!(**args)
517
+ end
518
+
519
+ # Update properties of this object
520
+ def update!(**args)
521
+ @next_page_token = args[:next_page_token] if args.key?(:next_page_token)
522
+ @promotions = args[:promotions] if args.key?(:promotions)
523
+ end
524
+ end
525
+
526
+ # The price represented as a number and currency.
527
+ class Price
528
+ include Google::Apis::Core::Hashable
529
+
530
+ # The price represented as a number in micros (1 million micros is an equivalent
531
+ # to one's currency standard unit, for example, 1 USD = 1000000 micros).
532
+ # Corresponds to the JSON property `amountMicros`
533
+ # @return [Fixnum]
534
+ attr_accessor :amount_micros
535
+
536
+ # The currency of the price using three-letter acronyms according to [ISO 4217](
537
+ # http://en.wikipedia.org/wiki/ISO_4217).
538
+ # Corresponds to the JSON property `currencyCode`
539
+ # @return [String]
540
+ attr_accessor :currency_code
541
+
542
+ def initialize(**args)
543
+ update!(**args)
544
+ end
545
+
546
+ # Update properties of this object
547
+ def update!(**args)
548
+ @amount_micros = args[:amount_micros] if args.key?(:amount_micros)
549
+ @currency_code = args[:currency_code] if args.key?(:currency_code)
550
+ end
551
+ end
552
+
553
+ # The change that happened to the product including old value, new value,
554
+ # country code as the region code and reporting context.
555
+ class ProductChange
556
+ include Google::Apis::Core::Hashable
557
+
558
+ # The new value of the changed resource or attribute.
559
+ # Corresponds to the JSON property `newValue`
560
+ # @return [String]
561
+ attr_accessor :new_value
562
+
563
+ # The old value of the changed resource or attribute.
564
+ # Corresponds to the JSON property `oldValue`
565
+ # @return [String]
566
+ attr_accessor :old_value
567
+
568
+ # Countries that have the change (if applicable)
569
+ # Corresponds to the JSON property `regionCode`
570
+ # @return [String]
571
+ attr_accessor :region_code
572
+
573
+ # Reporting contexts that have the change (if applicable)
574
+ # Corresponds to the JSON property `reportingContext`
575
+ # @return [String]
576
+ attr_accessor :reporting_context
577
+
578
+ def initialize(**args)
579
+ update!(**args)
580
+ end
581
+
582
+ # Update properties of this object
583
+ def update!(**args)
584
+ @new_value = args[:new_value] if args.key?(:new_value)
585
+ @old_value = args[:old_value] if args.key?(:old_value)
586
+ @region_code = args[:region_code] if args.key?(:region_code)
587
+ @reporting_context = args[:reporting_context] if args.key?(:reporting_context)
588
+ end
589
+ end
590
+
591
+ # The message that the merchant will receive to notify about product status
592
+ # change event
593
+ class ProductStatusChangeMessage
594
+ include Google::Apis::Core::Hashable
595
+
596
+ # The target account that owns the entity that changed. Format : `accounts/`
597
+ # merchant_id``
598
+ # Corresponds to the JSON property `account`
599
+ # @return [String]
600
+ attr_accessor :account
601
+
602
+ # The attribute in the resource that changed, in this case it will be always `
603
+ # Status`.
604
+ # Corresponds to the JSON property `attribute`
605
+ # @return [String]
606
+ attr_accessor :attribute
607
+
608
+ # A message to describe the change that happened to the product
609
+ # Corresponds to the JSON property `changes`
610
+ # @return [Array<Google::Apis::MerchantapiPromotionsV1beta::ProductChange>]
611
+ attr_accessor :changes
612
+
613
+ # The account that manages the merchant's account. can be the same as merchant
614
+ # id if it is standalone account. Format : `accounts/`service_provider_id``
615
+ # Corresponds to the JSON property `managingAccount`
616
+ # @return [String]
617
+ attr_accessor :managing_account
618
+
619
+ # The product name. Format: ``product.name=accounts/`account`/products/`product``
620
+ # `
621
+ # Corresponds to the JSON property `resource`
622
+ # @return [String]
623
+ attr_accessor :resource
624
+
625
+ # The product id.
626
+ # Corresponds to the JSON property `resourceId`
627
+ # @return [String]
628
+ attr_accessor :resource_id
629
+
630
+ # The resource that changed, in this case it will always be `Product`.
631
+ # Corresponds to the JSON property `resourceType`
632
+ # @return [String]
633
+ attr_accessor :resource_type
634
+
635
+ def initialize(**args)
636
+ update!(**args)
637
+ end
638
+
639
+ # Update properties of this object
640
+ def update!(**args)
641
+ @account = args[:account] if args.key?(:account)
642
+ @attribute = args[:attribute] if args.key?(:attribute)
643
+ @changes = args[:changes] if args.key?(:changes)
644
+ @managing_account = args[:managing_account] if args.key?(:managing_account)
645
+ @resource = args[:resource] if args.key?(:resource)
646
+ @resource_id = args[:resource_id] if args.key?(:resource_id)
647
+ @resource_type = args[:resource_type] if args.key?(:resource_type)
648
+ end
649
+ end
650
+
651
+ # Represents a promotion. See the following articles for more details. Required
652
+ # promotion input attributes to pass data validation checks are primarily
653
+ # defined below: * [Promotions data specification](https://support.google.com/
654
+ # merchants/answer/2906014) * [Local promotions data specification](https://
655
+ # support.google.com/merchants/answer/10146130) After inserting, updating a
656
+ # promotion input, it may take several minutes before the final promotion can be
657
+ # retrieved.
658
+ class Promotion
659
+ include Google::Apis::Core::Hashable
660
+
661
+ # Attributes.
662
+ # Corresponds to the JSON property `attributes`
663
+ # @return [Google::Apis::MerchantapiPromotionsV1beta::Attributes]
664
+ attr_accessor :attributes
665
+
666
+ # Required. The two-letter [ISO 639-1](http://en.wikipedia.org/wiki/ISO_639-1)
667
+ # language code for the promotion. Promotions is only for [selected languages](
668
+ # https://support.google.com/merchants/answer/4588281?ref_topic=6396150&sjid=
669
+ # 18314938579342094533-NC#option3&zippy=).
670
+ # Corresponds to the JSON property `contentLanguage`
671
+ # @return [String]
672
+ attr_accessor :content_language
673
+
674
+ # Optional. A list of custom (merchant-provided) attributes. It can also be used
675
+ # for submitting any attribute of the data specification in its generic form (
676
+ # for example, `` "name": "size type", "value": "regular" ``). This is useful
677
+ # for submitting attributes not explicitly exposed by the API.
678
+ # Corresponds to the JSON property `customAttributes`
679
+ # @return [Array<Google::Apis::MerchantapiPromotionsV1beta::CustomAttribute>]
680
+ attr_accessor :custom_attributes
681
+
682
+ # Output only. The primary data source of the promotion.
683
+ # Corresponds to the JSON property `dataSource`
684
+ # @return [String]
685
+ attr_accessor :data_source
686
+
687
+ # Identifier. The name of the promotion. Format: `accounts/`account`/promotions/`
688
+ # promotion``
689
+ # Corresponds to the JSON property `name`
690
+ # @return [String]
691
+ attr_accessor :name
692
+
693
+ # Required. The user provided promotion ID to uniquely identify the promotion.
694
+ # Follow [minimum requirements](https://support.google.com/merchants/answer/
695
+ # 7050148?ref_topic=7322920&sjid=871860036916537104-NC#minimum_requirements) to
696
+ # prevent promotion disapprovals.
697
+ # Corresponds to the JSON property `promotionId`
698
+ # @return [String]
699
+ attr_accessor :promotion_id
700
+
701
+ # The status of the promotion.
702
+ # Corresponds to the JSON property `promotionStatus`
703
+ # @return [Google::Apis::MerchantapiPromotionsV1beta::PromotionStatus]
704
+ attr_accessor :promotion_status
705
+
706
+ # Required. [Redemption channel](https://support.google.com/merchants/answer/
707
+ # 13837674?ref_topic=13773355&sjid=17642868584668136159-NC) for the promotion.
708
+ # At least one channel is required.
709
+ # Corresponds to the JSON property `redemptionChannel`
710
+ # @return [Array<String>]
711
+ attr_accessor :redemption_channel
712
+
713
+ # Required. The target country used as part of the unique identifier.
714
+ # Represented as a [CLDR territory code](https://github.com/unicode-org/cldr/
715
+ # blob/latest/common/main/en.xml). Promotions are only available in selected
716
+ # countries, [Free Listings and Shopping ads](https://support.google.com/
717
+ # merchants/answer/4588460) [Local Inventory ads](https://support.google.com/
718
+ # merchants/answer/10146326)
719
+ # Corresponds to the JSON property `targetCountry`
720
+ # @return [String]
721
+ attr_accessor :target_country
722
+
723
+ # Optional. Represents the existing version (freshness) of the promotion, which
724
+ # can be used to preserve the right order when multiple updates are done at the
725
+ # same time. If set, the insertion is prevented when version number is lower
726
+ # than the current version number of the existing promotion. Re-insertion (for
727
+ # example, promotion refresh after 30 days) can be performed with the current `
728
+ # version_number`. If the operation is prevented, the aborted exception will be
729
+ # thrown.
730
+ # Corresponds to the JSON property `versionNumber`
731
+ # @return [Fixnum]
732
+ attr_accessor :version_number
733
+
734
+ def initialize(**args)
735
+ update!(**args)
736
+ end
737
+
738
+ # Update properties of this object
739
+ def update!(**args)
740
+ @attributes = args[:attributes] if args.key?(:attributes)
741
+ @content_language = args[:content_language] if args.key?(:content_language)
742
+ @custom_attributes = args[:custom_attributes] if args.key?(:custom_attributes)
743
+ @data_source = args[:data_source] if args.key?(:data_source)
744
+ @name = args[:name] if args.key?(:name)
745
+ @promotion_id = args[:promotion_id] if args.key?(:promotion_id)
746
+ @promotion_status = args[:promotion_status] if args.key?(:promotion_status)
747
+ @redemption_channel = args[:redemption_channel] if args.key?(:redemption_channel)
748
+ @target_country = args[:target_country] if args.key?(:target_country)
749
+ @version_number = args[:version_number] if args.key?(:version_number)
750
+ end
751
+ end
752
+
753
+ # The status of the promotion.
754
+ class PromotionStatus
755
+ include Google::Apis::Core::Hashable
756
+
757
+ # Output only. Date on which the promotion has been created in [ISO 8601](http://
758
+ # en.wikipedia.org/wiki/ISO_8601) format: Date, time, and offset, for example `
759
+ # 2020-01-02T09:00:00+01:00` or `2020-01-02T09:00:00Z`
760
+ # Corresponds to the JSON property `creationDate`
761
+ # @return [String]
762
+ attr_accessor :creation_date
763
+
764
+ # Output only. The intended destinations for the promotion.
765
+ # Corresponds to the JSON property `destinationStatuses`
766
+ # @return [Array<Google::Apis::MerchantapiPromotionsV1beta::DestinationStatus>]
767
+ attr_accessor :destination_statuses
768
+
769
+ # Output only. A list of issues associated with the promotion.
770
+ # Corresponds to the JSON property `itemLevelIssues`
771
+ # @return [Array<Google::Apis::MerchantapiPromotionsV1beta::ItemLevelIssue>]
772
+ attr_accessor :item_level_issues
773
+
774
+ # Output only. Date on which the promotion status has been last updated in [ISO
775
+ # 8601](http://en.wikipedia.org/wiki/ISO_8601) format: Date, time, and offset,
776
+ # for example `2020-01-02T09:00:00+01:00` or `2020-01-02T09:00:00Z`
777
+ # Corresponds to the JSON property `lastUpdateDate`
778
+ # @return [String]
779
+ attr_accessor :last_update_date
780
+
781
+ def initialize(**args)
782
+ update!(**args)
783
+ end
784
+
785
+ # Update properties of this object
786
+ def update!(**args)
787
+ @creation_date = args[:creation_date] if args.key?(:creation_date)
788
+ @destination_statuses = args[:destination_statuses] if args.key?(:destination_statuses)
789
+ @item_level_issues = args[:item_level_issues] if args.key?(:item_level_issues)
790
+ @last_update_date = args[:last_update_date] if args.key?(:last_update_date)
791
+ end
792
+ end
793
+ end
794
+ end
795
+ end