Class: Google::Cloud::CommerceProducer::V1beta::PrivateOffer
- Inherits:
-
Object
- Object
- Google::Cloud::CommerceProducer::V1beta::PrivateOffer
- Extended by:
- Protobuf::MessageExts::ClassMethods
- Includes:
- Protobuf::MessageExts
- Defined in:
- proto_docs/google/cloud/commerceproducer/v1beta/private_offer.rb
Overview
Message describing PrivateOffer resource.
Note on OPTIONAL fields: To facilitate saving incomplete draft offers, most fields are categorized as OPTIONAL irrespective of whether they are necessary for a private offer to be valid. Many fields labeled OPTIONAL must be set to publish the offer.
Defined Under Namespace
Modules: OfferDealType, State Classes: Customer, PartnerContact, PublishRequirementGoogleReview, ResellerContact, SingleProductOffer, Term
Instance Attribute Summary collapse
-
#accept_deadline_time ⇒ ::Google::Type::DateTime
Optional.
-
#accept_time ⇒ ::Google::Protobuf::Timestamp
readonly
Output only.
-
#cancel_time ⇒ ::Google::Protobuf::Timestamp
readonly
Output only.
-
#cancellation_note ⇒ ::String
readonly
Output only.
-
#create_time ⇒ ::Google::Protobuf::Timestamp
readonly
Output only.
-
#customer ⇒ ::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::Customer
Optional.
-
#customer_note ⇒ ::String
Optional.
-
#end_time ⇒ ::Google::Protobuf::Timestamp
readonly
Output only.
-
#internal_note ⇒ ::String
Optional.
-
#name ⇒ ::String
Identifier.
-
#offer_deal_type ⇒ ::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::OfferDealType
Optional.
-
#partner_contact ⇒ ::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::PartnerContact
Optional.
-
#publish_requirement_google_review ⇒ ::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::PublishRequirementGoogleReview
readonly
Output only.
-
#publish_time ⇒ ::Google::Protobuf::Timestamp
readonly
Output only.
-
#reseller_contact ⇒ ::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::ResellerContact
readonly
Output only.
-
#single_product_offer ⇒ ::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer
Optional.
-
#state ⇒ ::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::State
readonly
Output only.
-
#term ⇒ ::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::Term
Optional.
-
#title ⇒ ::String
Optional.
-
#update_time ⇒ ::Google::Protobuf::Timestamp
readonly
Output only.
Instance Attribute Details
#accept_deadline_time ⇒ ::Google::Type::DateTime
Returns Optional. Deadline for acceptance of published offers. A published offer not accepted by this time will expire. Only day boundaries in the America/Los_Angeles time zone are supported. Must be present to publish the offer.
When publishing an offer the deadline must be set to a time in the future not more than 3 months from the time of publishing. For example, if the offer is published on 03/05 at 1PM, then the deadline must be at or before 06/05 12AM America/Los_Angeles time.
The deadline must also be:
- Before or equal to the scheduled start time of this offer (if
term.scheduled_start_timeis set and the term's start policy isSCHEDULED_START_TIME). - Before or equal to the scheduled end time of this offer, if
term.scheduled_end_timeis set and the term's end policy isSCHEDULED_END_TIME. - Before or equal to the upcoming installment start times on this offer.
- Before or equal to the amended offer's end time, if the offer amends another private or standard offer.
- Before or equal to the start time of the next pending installment of the
amended offer, if amending a private offer with custom installments. For
example, if the amended offer has installments on 01/01, 02/01, 03/01,
04/01, and today is 02/15, then this offer's
accept_deadline_timemust be at or before 03/01.
In addition, if the offer amends another private offer, but there is already an accepted upcoming amendment against that private offer, then this deadline must be before or equal to the start time of the accepted upcoming offer. For example, today is 02/15, and this offer (offer C) amends private offer A, and private offer B has already been accepted which also amends private offer A. Private offer B has a start time of 03/01. Then this deadline must be at or before 03/01. Otherwise, on 03/01, private offer B would take effect, superseding offer A. This would mean offer C is no longer amending the currently active offer (Offer A), which is required for valid amendments.
Once the offer is published, this field is still updatable to extend the deadline of the offer. However, the extension is still limited to be at most 3 months from the time of publishing.
148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 |
# File 'proto_docs/google/cloud/commerceproducer/v1beta/private_offer.rb', line 148 class PrivateOffer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Information about the Google review process. # @!attribute [r] review_approve_time # @return [::Google::Protobuf::Timestamp] # Output only. The approval time of the Google review process. class PublishRequirementGoogleReview include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Contact information for a reseller. # @!attribute [r] contact # @return [::String] # Output only. The name of the reseller contact for this offer. # @!attribute [r] email # @return [::String] # Output only. The email of the reseller contact for this offer. class ResellerContact include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Contact information for the partner representative. # @!attribute [rw] contact # @return [::String] # Optional. Display text identifying the partner sales contact. # Displayed to the customer. # Must be provided when publishing the offer. # Maximum length: 256 characters. # @!attribute [rw] email # @return [::String] # Optional. The email address of the partner sales contact. # Displayed to the customer. # The format of the provided email address is validated when publishing the # offer, but no verification is performed that the email address actually # exists, accepts email, or is otherwise functional. class PartnerContact include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Information about the customer. # @!attribute [rw] entity_title # @return [::String] # Optional. A string identifying the customer's entity (for example, the # customer's organization or company name). Must be provided when # publishing the offer. Maximum length: 256 characters. # @!attribute [rw] contact # @return [::String] # Optional. A string identifying the customer contact. # Must be provided when publishing the offer. # Maximum length: 256 characters. # @!attribute [rw] email # @return [::String] # Optional. Email of customer contact. # If provided, it must be a well-formed email address. # @!attribute [r] address # @deprecated This field is deprecated and may be removed in the next major version update. # @return [::String] # Output only. Legal address of the customer organization. # This field can no longer be set, but it is preserved to return the # data from existing offers where address is set. # @!attribute [rw] target_billing_account # @return [::String] # Optional. The customer's billing account targeted by the offer. # The private offer once published can be accepted by a billing # administrator of the target billing account. If the customer accepts the # offer and later moves the resulting order to a new billing account, this # field will continue to reflect the original billing account to which the # private offer was extended. Must be provided when publishing the offer. # # To publish this private offer: # # * The billing account must exist. # * The billing account must not be in a free trial. # * The billing account must comply with Marketplace Reselling Policies. # * Reseller parent billing accounts are prohibited. Reseller subaccounts # are prohibited unless the service is enabled for reselling. # # Format: billingAccounts/012345-567890-ABCDEF class Customer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Configurations for the offer term and renewal options. # Extending a private offer to a customer that covers a given term # constitutes a guarantee to the customer that the product will remain # available to them for the duration of the term. # @!attribute [rw] duration_months # @return [::Integer] # Optional. Duration in months of the offer term. # The offer will end on the same day of the month after this duration. If # that date is not available, the offer will end on the last day of the # month. For example, if the offer starts on 01/31/2024 and the duration # is 13 months, the offer will end on 02/28/2025. # Must be set to publish the offer if the end policy is `AFTER_DURATION` # or `MATCH_AMENDED_OFFER`, and must be a positive value. # # The maximum possible offer duration, including all renewal terms, # cannot exceed 7 years. For example, if `duration_months` is 9 and # `term.max_renewal_count` is 9, then the maximum possible offer duration # is 90 months and exceeds the 7 year limit. # # Note: The following fields are mutually exclusive: `duration_months`, `scheduled_end_time`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] scheduled_end_time # @return [::Google::Type::DateTime] # Optional. Specified end time of the offer. # Must be set to publish the offer if the end policy is # `SCHEDULED_END_TIME`. # When set, the time must be in the future and at a day boundary in the # America/Los_Angeles time zone, and must be after # `term.scheduled_start_time` if applicable. # # Note: The following fields are mutually exclusive: `scheduled_end_time`, `duration_months`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] max_renewal_count # @return [::Integer] # Optional. The max number of renewals allowed, after the initial term # ends. This field is only relevant to standard interval offers with # interval of 'MONTHLY_PRORATED', 'MONTHLY_NOT_PRORATED', # 'QUARTERLY_NOT_PRORATED' or 'YEARLY_NOT_PRORATED'. Other types of # offers cannot be renewed. # # For example, if the initial term is 1 year and the max renewals is 3, # the customer can renew the offer for up to 3 additional years after the # initial term ends. Customers control whether they renew the offer. # # Allowing a customer to renew an offer does not constitute a guarantee # to the customer that the offered product will still be available to be # renewed at the renewal date. # # An offer with a max renewal count of 0 cannot be renewed. # Must be non-negative. # # Note: The following fields are mutually exclusive: `max_renewal_count`, `unlimited_renewal`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [r] unlimited_renewal # @deprecated This field is deprecated and may be removed in the next major version update. # @return [::Boolean] # Output only. Deprecated: This field can only be true on existing offers # with standard interval of 'MONTHLY_POSTPAY'. As of May 2024, we no # longer allow unlimited renewals. # # Note: The following fields are mutually exclusive: `unlimited_renewal`, `max_renewal_count`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] start_policy # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::Term::StartPolicy] # Optional. Defines when the resulting order should start. # Must be set when publishing the offer. # @!attribute [rw] scheduled_start_time # @return [::Google::Type::DateTime] # Optional. The scheduled start time of the offer. Cannot exceed one year # from the time of publish. # # If the start policy is `SCHEDULED_START_TIME`, a future time at a day # boundary in the America/Los_Angeles time zone must be provided when # publishing the offer. # # If the offer amends another private or standard offer, then the # scheduled start time must be: # # * Before or equal to the amended offer's end time if the offer's # end policy is not MATCH_AMENDED_OFFER. Otherwise, it has to be # strictly before the amended offer's end time. # * Before or equal to the start time of the next pending installment of # the amended offer, if amending a private offer with custom # installments. For example, if the amended offer has installments on # 01/01, 02/01, 03/01, 04/01, and today is 02/15, then the new offer's # `scheduled_start_time` must be at or before 03/01. # @!attribute [rw] end_policy # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::Term::EndPolicy] # Optional. Defines when an offer should end. # Must be set when publishing the offer. # @!attribute [r] effective_term_end_time # @return [::Google::Type::DateTime] # Output only. The expected end time of the current offer term. # # At the end of each offer term, an offer associated with an active # order will either renew or end. When an offer renews, a new term begins # and this value changes to reflect the end time of the new term. # When an offer ends this value is no longer set and instead `end_time` is # set. # # When the term of an offer ends and the offer does not renew, the # associated order also ends if the base standard offer has a # subscription price model. Otherwise, the associated order does not end # and remains active. # # Not included for PRIVATE_OFFER_VIEW_BASIC. # Included for PRIVATE_OFFER_VIEW_FULL when the offer has not ended and # either the offer has started or the value can be derived from other # fields. # # For offers that have not started, this field is set when one of the # following conditions is true. # # * The offer sets `term.scheduled_end_time`. # * The offer sets `term.scheduled_start_time` and `term.duration_months`, # the offer's `term.end_policy` is not `MATCH_AMENDED_OFFER`, and the # offer does not have standard_interval set to `MONTHLY_POSTPAY`. class Term include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Defines when an offer should start. module StartPolicy # Default value. This value is unused. START_POLICY_UNSPECIFIED = 0 # The resulting order starts immediately upon the customer's acceptance # of the offer, if no partner approval is required, or else immediately # after the partner approves the purchase if order approval is required. # This enum value cannot be combined with `term.scheduled_start_time`. IMMEDIATE = 1 # The resulting order starts at the scheduled start time. SCHEDULED_START_TIME = 2 end # Defines when an offer should end. module EndPolicy # Default value. This value is unused. END_POLICY_UNSPECIFIED = 0 # Offer ends after the specified duration. # If this is set, then `duration_months` must be positive. AFTER_DURATION = 1 # Offer ends at the schduled time. SCHEDULED_END_TIME = 2 # Offer coterms to the amended offer - the offer ends at the end of the # amended offer's term # # For example, if the amended offer starts on 01/15/24, and has a # duration of 6 months, then it ends on 07/15/24. If the current offer # coterms to the previous offer, and the current offer starts on # 05/06/24, then it will still end on 07/15/24. Assuming the current # offer renews 3 times, then the terms on the current offer will be: # # 1. 05/06/24 - 07/15/24 (First term, ends on 07/15 to coterm with the # amended offer) # 2. 07/15/24 - 01/15/25 (First renewal term) # 3. 01/15/25 - 07/15/25 (Second renewal term) # 4. 07/15/25 - 01/15/26 (Third renewal term) # # As a contrast, if the current offer does not coterm with the amended # offer (such as when `end_policy` is `AFTER_DURATION`), then the # terms will be: # # 1. 05/06/24 - 11/06/24 (First term, ends on 11/06, no coterming) # 2. 11/06/24 - 05/06/25 (First renewal term) # 3. 05/06/25 - 11/06/25 (Second renewal term) # 4. 11/06/25 - 05/06/26 (Third renewal term) # # If this is set, then the following conditions must be met: # # * `single_product_offer.amended_private_offer` must be set, and the # amended private offer must not be ended. # * The proration policy must not change (e.g., you cannot switch # between `MONTHLY_PRORATED` and `MONTHLY_NOT_PRORATED`). # * The current offer must not have custom intervals (where # `custom_interval_price` is set). # * `term.duration_months` must match the amended private offer's # duration. # * The amended private offer must not have a standard interval # of `MONTHLY_POSTPAY`. # # This is currently not supported. MATCH_AMENDED_OFFER = 3 end end # Configurations for the offer that is associated with a single product. # @!attribute [rw] amended_private_offer # @return [::String] # Optional. An existing private offer that will be superseded by this # offer. Unless the private offer is for a product type that supports # [multiple active # orders](https://cloud.google.com/marketplace/docs/partners/offers/multiple-offers), # an amendment private offer must be transacted if and only if the # destination customer billing account already contains an active order # for the same product. The offer to be superseded must be the offer # associated with an active order. # # Amendments generally fall into one of two scenarios: # # 1. **Active Order / Ended Offer**: The term of the amended offer has # ended but it is still associated with an active order. The new # offer must amend the ended private offer. # 2. **Active Order / Active Offer**: The term of the amended offer is # still active and the associated order is active. Similar to above, # the new offer must amend the currently active offer (unless # "multiple active orders" are supported). # # If this is set, then the `base_standard_offer` parent service must # match the parent service of the `base_standard_offer` in the # `amended_private_offer`. # # **Active Term Restrictions**: # If the term of the amended private offer has *NOT* ended, then the # following compatibility rules apply: # # * **Price Model Compatibility**: # * Flat Fee (with or without usage) offers can amend Flat Fee # offers. # * Usage-only or CUD offers can amend usage-only offers. # * Commitment-based offers must amend offers of the same price # model subtype (e.g., "additional usage at list price" vs "all # usage discounted"). # * **Billing Frequency Compatibility**: Determined by # `standard_interval` or `custom_interval_price`. # * If the amended offer has a custom billing frequency, the new # offer must also have a custom frequency. # * If the amended offer has a standard frequency (Monthly, # Quarterly, or Yearly), the new offer must maintain the same # frequency or transition to a custom frequency. # * Switching between different standard frequencies (e.g., Monthly # to Quarterly) is not supported. # * For Monthly frequency, switching between `MONTHLY_PRORATED` # and `MONTHLY_NOT_PRORATED` is supported, unless the offer's # `term.end_policy` is `MATCH_AMENDED_OFFER`. # * For usage-only offers, there are no billing frequency # restrictions. # # Other criteria for offer amendment are detailed elsewhere. # # Note: The following fields are mutually exclusive: `amended_private_offer`, `amended_standard_offer`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] amended_standard_offer # @return [::String] # Optional. An existing standard offer that will be superseded by this # offer. An amendment private offer must be transacted if the destination # customer billing account already contains an active order for the same # product, and otherwise cannot be transacted. The offer to be superseded # must be the offer associated with the active order. # # If this is set, then the `base_standard_offer` must contain the same # parent service as the parent service of the `amended_standard_offer`. # The price model of this offer must be compatible with the price model # of the `amended_standard_offer`: # # * Flat Fee, or Flat Fee with usage offers can amend Flat Fee or Flat # Fee with usage standard offers. # * Usage-only offers, or CUD offers can amend usage-only standard # offers. # # Other criteria for offer amendment are detailed elsewhere. # # Note: The following fields are mutually exclusive: `amended_standard_offer`, `amended_private_offer`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] standard_interval_price # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::StandardIntervalPrice] # Optional. Price configurations for offers with standard intervals. # A price must be set when publishing the offer. # # Note: The following fields are mutually exclusive: `standard_interval_price`, `custom_interval_price`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] custom_interval_price # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::CustomIntervalPrice] # Optional. Price configurations for offers with custom intervals. # Custom interval corresponds to "custom billing frequency", # see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule. # A price must be set when publishing the offer. # # Note: The following fields are mutually exclusive: `custom_interval_price`, `standard_interval_price`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] base_standard_offer # @return [::String] # Optional. The StandardOffer this PrivateOffer is based on. # Must be in the same project as the private offer, and must be effective # at the time of publishing. Must be present to publish the offer. # # Format: # projects/\\{project}/locations/\\{location}/services/\\{service}/standardOffers/\\{standard_offer} # @!attribute [r] service_level # @return [::String] # Output only. The service level (also known as the 'plan') of the base # standard offer. The value is populated at publish time from the base # standard offer. # @!attribute [r] reseller_private_offer_plan_id # @return [::String] # Output only. Present for offers created by a reseller from a reseller # private offer plan (RPOP). When set, contains the ID of the originating # RPOP. Not included for `PRIVATE_OFFER_VIEW_BASIC`. # @!attribute [rw] features # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Feature>] # Optional. The custom product features to display for this offer. # Feature `display_name` values must be unique to publish the offer. # The set of features specified here should generally include all features # included in the base service level, with optionally customized values, # but is not required to match exactly and may include additional features. # @!attribute [r] effective_installment_timeline # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Installment>] # Output only. The effective installment timeline of the offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. # Included for `PRIVATE_OFFER_VIEW_FULL` if all necessary information is # available to generate the timeline, and if the offer has # 'standard_interval_price' of 'MONTHLY_PRORATED', 'MONTHLY_NOT_PRORATED', # 'QUARTERLY_NOT_PRORATED', or 'YEARLY_NOT_PRORATED'. # @!attribute [r] contract_value # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::ContractValue] # Output only. Contract value of the offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. # @!attribute [r] revenue_share # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::RevenueShare] # Output only. Revenue share information for this Private Offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. class SingleProductOffer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Additional details used to describe customization of the service level. # # Features are used to distinguish service levels of the same product. # When a product has a single service level, all details can be contained # in the product documentation. When a product has multiple service levels, # each service level can be assigned a distinct set of features to # distinguish the key differences between the service levels. # # In addition to customizing pricing and other transaction details, a # private offer may include customization of partner-managed product # behavior. When this is the case, the details of the custom behavior are # described using features. # @!attribute [rw] display_name # @return [::String] # Optional. Human readable display text characterizing the feature. # Should be sufficiently detailed to identify the feature, allowing # features to be correlated across separate offers and service levels. # Must be non-empty to publish the offer. # The maximum allowed length is 128 characters. # Allows characters from the following Unicode Property Classes: # Letters, Numbers, Punctuation, Symbols, and Separators # @!attribute [rw] value # @return [::String] # Optional. Human readable display text reflecting the value of the # feature. Used for variable features not captured by the display_name # alone. The maximum allowed length is 3000 characters. Allows characters # from the following Unicode Property Classes: Letters, Numbers, # Punctuation, Symbols, and Separators class Feature include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price model of the private offer. # # Private offers are referred to as having different kinds of price models # based on the combination of fields set in the price model. The following # terminology is used in documentation and other reference material. # # * Usage-based: the price model does not set `flat_fee` # * Usage-only: the price model sets only `usage` # * CUD (committed use discount): the price model sets `commitment` # * Commitment discount with additional usage at list price: # The price model sets `commitment` and not `usage`. # * Commitment with all usage discounted: The price model sets # `commitment` and `usage`. # * Flat fee: the price model sets only `flat_fee` # * Flat fee with usage: the price model sets `flat_fee` and `usage` # # See # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-pricing-model#CUD # for the price models. # @!attribute [rw] flat_fee # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::FlatFee] # Optional. The price configurations for the flat fee subscription. # Must be unset when the base standard offer's price model does not # include subscription SKUs. # # Note: The following fields are mutually exclusive: `flat_fee`, `commitment`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] commitment # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Commitment] # Optional. The price configurations for the commitment based # subscription. Must be unset when the base standard offer's price # model includes subscription SKUs. # # Note: The following fields are mutually exclusive: `commitment`, `flat_fee`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] usage # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Usage] # Optional. The price configurations for the usage part. # If this field is set, the `Commitment.discount_percent` must be unset. # A private offer can apply a discount to all usage or to a usage # commitment, but not both. # Must be unset when the base standard offer's price model includes no # usage SKUs. class PriceModel include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # The discount for a specific SKU. # @!attribute [rw] sku # @return [::String] # Optional. The name of a partner SKU from this API. # # Must refer to a SKU in the price model of the base standard offer. # Inclusion in the base price model can occur either directly or # indirectly via inclusion in an included SkuGroup. # # Currently, standard offer price models include only partner SKUs # in the same project as the standard offer. This may change. # # Format: # projects/\\{project}/locations/\\{location}/services/\\{service}/skus/\\{sku} # # Note: The following fields are mutually exclusive: `sku`, `cloud_billing_sku`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] cloud_billing_sku # @return [::String] # Optional. The name of a Google SKU from the Cloud Billing API. # # Used for partner products sold by Google, such as Premium Operating # System Images sold for use in Compute Engine. This is not common. # SKUs of this type are not present on this API and can instead be # found on the Cloud Billing API or at https://cloud.google.com/skus. # # Must refer to a SKU in the price model of the base standard offer. # Google SKUs are always referenced in standard offers via SkuGroups. # # Format: services/\\{service}/skus/\\{sku} # # Note: The following fields are mutually exclusive: `cloud_billing_sku`, `sku`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] discount_percent # @return [::Google::Type::Decimal] # Optional. The discount percent for the SKU. # For example, `10` means a discount of 10%. If the original SKU # price is $100/hour then the discounted price will be $90/hour. # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", # and "". # Must be present to publish the offer. class SkuDiscount include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price for the usage SKUs. # @!attribute [rw] default_discount_percent # @return [::Google::Type::Decimal] # Optional. The default discount percent for usage SKUs. # An unset default discount percent is equivalent to 0 (no discount). # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "". # @!attribute [rw] sku_discounts # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::SkuDiscount>] # Optional. The discounts for the specific SKUs that override the # `default_discount_percent`. class Usage include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price configurations for the flat fee subscriptions. # @!attribute [rw] flat_fee_override # @return [::Google::Type::Money] # Optional. Flat fee overriding the default flat fee in the base # standard offer. Value cannot be negative. The currency must be "USD" # and precision is limited to cents. Must be present to publish the # offer, if the parent message is set. The maximum allowed value is # 1,000,000,000 USD. class FlatFee include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price configurations for the commitment based subscriptions. # @!attribute [rw] commitment_amount # @return [::Google::Type::Money] # Optional. The commitment balance that the customer will receive. # Value cannot be negative. # The currency must be "USD" and precision is limited to cents. # Must be present to publish the offer, if the parent message is set. # The maximum allowed value is 1,000,000,000 USD. # # If the current offer amends a private offer where the term has not # ended, and if the field # `single_product_offer.standard_interval_price.price_model.commitment.commitment_amount` # is set on both the current offer and the amended private offer, then # the commitment amount must be equal or higher on the current offer, # compared to the amended private offer. # @!attribute [rw] discount_percent # @return [::Google::Type::Decimal] # Optional. The discount percent on `commitment_amount`. # # For example, `10` means a discount of 10%. If the original # `commitment_amount` is $100 then the discounted amount will be $90. # The customer is charged $90 and receives $100 in credits. # # All reported usage will be charged at the standard price. # If this field is set, the `price_model.usage` must be unset. A # private offer can apply a discount to all usage or to a usage # commitment, but not both. # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "". # # Must be present to publish the offer. # @!attribute [rw] additional_credit # @return [::Google::Type::Money] # Optional. Additional credit granted to the customer. # Additional credits are only supported for custom interval offers. # Equivalent behavior can be achieved for standard interval offers by # varying the `commitment_amount` and `discount_percent`. # # Value cannot be negative. # The currency must be "USD" and precision is limited to cents. # The maximum allowed value is 1,000,000 USD. # @!attribute [rw] discard_previous_credit_balance # @return [::Boolean] # Optional. Whether to discard the previous credit balance when the # associated installment starts. If not set, the previous credit # balance will be rolled over to the current installment. # # If there are no previous installments, then the value of this field # will not matter - since it has no effect when no credits exist. class Commitment include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end end # Price configurations for offers with standard intervals. # @!attribute [rw] standard_interval # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::StandardIntervalPrice::StandardInterval] # Optional. The standard interval of the offer. # Must be present to publish unless the price model is usage-only. # @!attribute [rw] price_model # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel] # Optional. The price model of the offer. # Must be present to publish the offer. class StandardIntervalPrice include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # The options for offers with standard intervals. module StandardInterval # The private offer does not have an interval. # If this is set, then the offer is "usage-only". # Field `term.duration_months` must be positive. STANDARD_INTERVAL_UNSPECIFIED = 0 # The schedule of the monthly postpay offers. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # No longer supported as of May 2024. Cannot be used to publish # new offers. MONTHLY_POSTPAY = 1 # Monthly installments with proration. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 04/15, and the offer duration is # 3 months, the following installments will be created: # # 1: from 04/15 to 05/01, at the prorated price for April. # # # 2: from 05/01 to 06/01, at the full monthly price for May. # # # 3: from 06/01 to 07/01, at the full monthly price for June. # # # 4: from 07/01 to 07/15, at the prorated price for July. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. MONTHLY_PRORATED = 2 # Monthly installments without proration. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 04/15, and the offer duration is # 3 months, the following installments will be created: # # 1: from 04/15 to 05/15, at the full monthly price. # # # 2: from 05/15 to 06/15, at the full monthly price. # # # 3: from 06/15 to 07/15, at the full monthly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. MONTHLY_NOT_PRORATED = 3 # Quarterly installments which are not prorated. # This type of offer has "Quarterly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 01/15, and the offer duration is # 3 quarters, the following installments will be created: # # 1: from 01/15 to 04/15, at the full quarterly price. # # # 2: from 04/15 to 07/15, at the full quarterly price. # # # 3: from 07/15 to 10/15, at the full quarterly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. QUARTERLY_NOT_PRORATED = 4 # Yearly installments which are not prorated. # This type of offer has "Yearly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 01/15/2025, and the offer # duration is 3 years, the following installments will be created: # # 1: from 01/15/2025 to 01/15/2026, at the full yearly price. # # # 2: from 01/15/2026 to 01/15/2027, at the full yearly price. # # # 3: from 01/15/2027 to 01/15/2028, at the full yearly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. YEARLY_NOT_PRORATED = 5 end end # An installment of the offer. # @!attribute [rw] start_time # @return [::Google::Type::DateTime] # Optional. The start time of the installment. # Each installment must have a unique start time with one exception: # When the `term.start_policy` of the offer's term is `IMMEDIATE`, # the `start_time` of the first installment must be unset. # The actual start time is not recorded in the offer and instead is # determined by the time the resulting order became active. # # When the `term.start_policy` of the offer's term is # `SCHEDULED_START_TIME`, then the first installment's `start_time` must # match `term.scheduled_start_time`. # # If the `term.end_policy` of the offer's term is `SCHEDULED_END_TIME`, # then installment `start_time` must be before `term.scheduled_end_time`. # If it's `AFTER_DURATION`, then installment `start_time` must be before # the time calculated by adding the `term.duration_months` to # the start time of the offer. # # The `start_time` of the installments cannot be before the # `accept_deadline_time` of the offer. # # Installment start times must be in strictly increasing chronological # order. # @!attribute [rw] price_model # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel] # Optional. The price model of the installment. # All installments must have the same form of price model. class Installment include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Price configurations for offers with custom intervals. # @!attribute [rw] installments # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Installment>] # Optional. The installments that make up the installment timeline. # All installments must have the same form of price model (e.g. # all commitment, or all flat fee). A subscription must be present # under the price model for every installment. # # Must contain at least one installment to publish the offer. class CustomIntervalPrice include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The contract value of the offer. # @!attribute [r] total_contract_value # @return [::Google::Type::Money] # Output only. The total contract value of the offer. # This will be set for all non-draft private offers, as long as # 'PRIVATE_OFFER_VIEW_FULL' is requested. For DRAFT private offers, # this will be populated only when the end user's billing account is # set and when the pricing and term configuration is sufficiently # complete to allow for a calculation. class ContractValue include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Revenue Share information for a Private Offer. # For more details about the revenue share, including how the value is # determined, see # https://docs.cloud.google.com/marketplace/docs/partners/revenue-share-scenarios. # # Not included for `PRIVATE_OFFER_VIEW_BASIC`, or for DRAFT private offers. # # For non-draft private offers, these fields are populated based on the # following: # # * Offers published after April 20, 2025 will always have revenue # share fields populated. # * Offers published on or before April 20, 2025 will only have revenue # share fields populated if they were associated with an active, # unexpired order on that date. # @!attribute [r] current_term_vendor_net_revenue_percent # @return [::Google::Type::Decimal] # Output only. The revenue share currently in effect. # # The range of the value is between 0 and 100. For example, 80 # means the Vendor's current term revenue share is 80%. The vendor # will keep 80% of the revenue. # . # @!attribute [r] renewal_term_vendor_net_revenue_percent # @return [::Google::Type::Decimal] # Output only. The expected revenue share for the renewal term. # Not included if the offer does not have renewal terms. # # The range of the value is between 0 and 100. For example, 80 # means the Vendor's current term revenue share is 80%. The vendor # will keep 80% of the revenue after renewal. # . class RevenueShare include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end end # State of an offer. module State # Default value. This value is unused. STATE_UNSPECIFIED = 0 # The default state after creation when the offer can be edited. # In all other states, the contents of the offer cannot be edited. DRAFT = 1 # The offer is publishing. # Publishing will complete when all publishing requirements are satisfied. PUBLISHING = 2 # The offer has been published and is available to the customer to accept. PUBLISHED = 3 # The offer has been accepted by the customer. ACCEPTED = 4 # The offer was cancelled by the provider before it was transacted. # Cancelled offers can no longer be accepted by the customer. CANCELLED = 5 # The offer expired without being accepted by the customer. # Expired offers can no longer be accepted by the customer. EXPIRED = 6 # The offer has ended. # # Ended offers were accepted and active in the past, but have now reached # the end of their term or have been terminated. ENDED = 7 end # The type of the deal transacted with the offer. The deal type of an offer # is a factor in determining the offer's revenue share. module OfferDealType # Default value. This value is unused. OFFER_DEAL_TYPE_UNSPECIFIED = 0 # The offer corresponds to a preexisting commercial arrangement for a # workload on Google Cloud that is being transferred to the Cloud # Marketplace. CHANNEL_SHIFT = 1 # The offer corresponds to a preexisting commercial arrangement for a # workload previously not on Google Cloud that is being transferred to # Google Cloud. MIGRATION = 2 # The offer corresponds to a renewal of a deal initially transacted on # the Google Cloud Marketplace. NATIVE_RENEWAL = 3 # The offer corresponds to a new deal transacted on the Google Cloud # Marketplace. # # This value is not allowed if the offer amends another private offer # where the term has not ended, and the amended private offer has a deal # type of `MIGRATION`, `CHANNEL_SHIFT` or `NATIVE_RENEWAL`. NEW = 4 end end |
#accept_time ⇒ ::Google::Protobuf::Timestamp (readonly)
Returns Output only. The time the offer transitioned to ACCEPTED state.
148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 |
# File 'proto_docs/google/cloud/commerceproducer/v1beta/private_offer.rb', line 148 class PrivateOffer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Information about the Google review process. # @!attribute [r] review_approve_time # @return [::Google::Protobuf::Timestamp] # Output only. The approval time of the Google review process. class PublishRequirementGoogleReview include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Contact information for a reseller. # @!attribute [r] contact # @return [::String] # Output only. The name of the reseller contact for this offer. # @!attribute [r] email # @return [::String] # Output only. The email of the reseller contact for this offer. class ResellerContact include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Contact information for the partner representative. # @!attribute [rw] contact # @return [::String] # Optional. Display text identifying the partner sales contact. # Displayed to the customer. # Must be provided when publishing the offer. # Maximum length: 256 characters. # @!attribute [rw] email # @return [::String] # Optional. The email address of the partner sales contact. # Displayed to the customer. # The format of the provided email address is validated when publishing the # offer, but no verification is performed that the email address actually # exists, accepts email, or is otherwise functional. class PartnerContact include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Information about the customer. # @!attribute [rw] entity_title # @return [::String] # Optional. A string identifying the customer's entity (for example, the # customer's organization or company name). Must be provided when # publishing the offer. Maximum length: 256 characters. # @!attribute [rw] contact # @return [::String] # Optional. A string identifying the customer contact. # Must be provided when publishing the offer. # Maximum length: 256 characters. # @!attribute [rw] email # @return [::String] # Optional. Email of customer contact. # If provided, it must be a well-formed email address. # @!attribute [r] address # @deprecated This field is deprecated and may be removed in the next major version update. # @return [::String] # Output only. Legal address of the customer organization. # This field can no longer be set, but it is preserved to return the # data from existing offers where address is set. # @!attribute [rw] target_billing_account # @return [::String] # Optional. The customer's billing account targeted by the offer. # The private offer once published can be accepted by a billing # administrator of the target billing account. If the customer accepts the # offer and later moves the resulting order to a new billing account, this # field will continue to reflect the original billing account to which the # private offer was extended. Must be provided when publishing the offer. # # To publish this private offer: # # * The billing account must exist. # * The billing account must not be in a free trial. # * The billing account must comply with Marketplace Reselling Policies. # * Reseller parent billing accounts are prohibited. Reseller subaccounts # are prohibited unless the service is enabled for reselling. # # Format: billingAccounts/012345-567890-ABCDEF class Customer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Configurations for the offer term and renewal options. # Extending a private offer to a customer that covers a given term # constitutes a guarantee to the customer that the product will remain # available to them for the duration of the term. # @!attribute [rw] duration_months # @return [::Integer] # Optional. Duration in months of the offer term. # The offer will end on the same day of the month after this duration. If # that date is not available, the offer will end on the last day of the # month. For example, if the offer starts on 01/31/2024 and the duration # is 13 months, the offer will end on 02/28/2025. # Must be set to publish the offer if the end policy is `AFTER_DURATION` # or `MATCH_AMENDED_OFFER`, and must be a positive value. # # The maximum possible offer duration, including all renewal terms, # cannot exceed 7 years. For example, if `duration_months` is 9 and # `term.max_renewal_count` is 9, then the maximum possible offer duration # is 90 months and exceeds the 7 year limit. # # Note: The following fields are mutually exclusive: `duration_months`, `scheduled_end_time`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] scheduled_end_time # @return [::Google::Type::DateTime] # Optional. Specified end time of the offer. # Must be set to publish the offer if the end policy is # `SCHEDULED_END_TIME`. # When set, the time must be in the future and at a day boundary in the # America/Los_Angeles time zone, and must be after # `term.scheduled_start_time` if applicable. # # Note: The following fields are mutually exclusive: `scheduled_end_time`, `duration_months`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] max_renewal_count # @return [::Integer] # Optional. The max number of renewals allowed, after the initial term # ends. This field is only relevant to standard interval offers with # interval of 'MONTHLY_PRORATED', 'MONTHLY_NOT_PRORATED', # 'QUARTERLY_NOT_PRORATED' or 'YEARLY_NOT_PRORATED'. Other types of # offers cannot be renewed. # # For example, if the initial term is 1 year and the max renewals is 3, # the customer can renew the offer for up to 3 additional years after the # initial term ends. Customers control whether they renew the offer. # # Allowing a customer to renew an offer does not constitute a guarantee # to the customer that the offered product will still be available to be # renewed at the renewal date. # # An offer with a max renewal count of 0 cannot be renewed. # Must be non-negative. # # Note: The following fields are mutually exclusive: `max_renewal_count`, `unlimited_renewal`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [r] unlimited_renewal # @deprecated This field is deprecated and may be removed in the next major version update. # @return [::Boolean] # Output only. Deprecated: This field can only be true on existing offers # with standard interval of 'MONTHLY_POSTPAY'. As of May 2024, we no # longer allow unlimited renewals. # # Note: The following fields are mutually exclusive: `unlimited_renewal`, `max_renewal_count`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] start_policy # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::Term::StartPolicy] # Optional. Defines when the resulting order should start. # Must be set when publishing the offer. # @!attribute [rw] scheduled_start_time # @return [::Google::Type::DateTime] # Optional. The scheduled start time of the offer. Cannot exceed one year # from the time of publish. # # If the start policy is `SCHEDULED_START_TIME`, a future time at a day # boundary in the America/Los_Angeles time zone must be provided when # publishing the offer. # # If the offer amends another private or standard offer, then the # scheduled start time must be: # # * Before or equal to the amended offer's end time if the offer's # end policy is not MATCH_AMENDED_OFFER. Otherwise, it has to be # strictly before the amended offer's end time. # * Before or equal to the start time of the next pending installment of # the amended offer, if amending a private offer with custom # installments. For example, if the amended offer has installments on # 01/01, 02/01, 03/01, 04/01, and today is 02/15, then the new offer's # `scheduled_start_time` must be at or before 03/01. # @!attribute [rw] end_policy # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::Term::EndPolicy] # Optional. Defines when an offer should end. # Must be set when publishing the offer. # @!attribute [r] effective_term_end_time # @return [::Google::Type::DateTime] # Output only. The expected end time of the current offer term. # # At the end of each offer term, an offer associated with an active # order will either renew or end. When an offer renews, a new term begins # and this value changes to reflect the end time of the new term. # When an offer ends this value is no longer set and instead `end_time` is # set. # # When the term of an offer ends and the offer does not renew, the # associated order also ends if the base standard offer has a # subscription price model. Otherwise, the associated order does not end # and remains active. # # Not included for PRIVATE_OFFER_VIEW_BASIC. # Included for PRIVATE_OFFER_VIEW_FULL when the offer has not ended and # either the offer has started or the value can be derived from other # fields. # # For offers that have not started, this field is set when one of the # following conditions is true. # # * The offer sets `term.scheduled_end_time`. # * The offer sets `term.scheduled_start_time` and `term.duration_months`, # the offer's `term.end_policy` is not `MATCH_AMENDED_OFFER`, and the # offer does not have standard_interval set to `MONTHLY_POSTPAY`. class Term include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Defines when an offer should start. module StartPolicy # Default value. This value is unused. START_POLICY_UNSPECIFIED = 0 # The resulting order starts immediately upon the customer's acceptance # of the offer, if no partner approval is required, or else immediately # after the partner approves the purchase if order approval is required. # This enum value cannot be combined with `term.scheduled_start_time`. IMMEDIATE = 1 # The resulting order starts at the scheduled start time. SCHEDULED_START_TIME = 2 end # Defines when an offer should end. module EndPolicy # Default value. This value is unused. END_POLICY_UNSPECIFIED = 0 # Offer ends after the specified duration. # If this is set, then `duration_months` must be positive. AFTER_DURATION = 1 # Offer ends at the schduled time. SCHEDULED_END_TIME = 2 # Offer coterms to the amended offer - the offer ends at the end of the # amended offer's term # # For example, if the amended offer starts on 01/15/24, and has a # duration of 6 months, then it ends on 07/15/24. If the current offer # coterms to the previous offer, and the current offer starts on # 05/06/24, then it will still end on 07/15/24. Assuming the current # offer renews 3 times, then the terms on the current offer will be: # # 1. 05/06/24 - 07/15/24 (First term, ends on 07/15 to coterm with the # amended offer) # 2. 07/15/24 - 01/15/25 (First renewal term) # 3. 01/15/25 - 07/15/25 (Second renewal term) # 4. 07/15/25 - 01/15/26 (Third renewal term) # # As a contrast, if the current offer does not coterm with the amended # offer (such as when `end_policy` is `AFTER_DURATION`), then the # terms will be: # # 1. 05/06/24 - 11/06/24 (First term, ends on 11/06, no coterming) # 2. 11/06/24 - 05/06/25 (First renewal term) # 3. 05/06/25 - 11/06/25 (Second renewal term) # 4. 11/06/25 - 05/06/26 (Third renewal term) # # If this is set, then the following conditions must be met: # # * `single_product_offer.amended_private_offer` must be set, and the # amended private offer must not be ended. # * The proration policy must not change (e.g., you cannot switch # between `MONTHLY_PRORATED` and `MONTHLY_NOT_PRORATED`). # * The current offer must not have custom intervals (where # `custom_interval_price` is set). # * `term.duration_months` must match the amended private offer's # duration. # * The amended private offer must not have a standard interval # of `MONTHLY_POSTPAY`. # # This is currently not supported. MATCH_AMENDED_OFFER = 3 end end # Configurations for the offer that is associated with a single product. # @!attribute [rw] amended_private_offer # @return [::String] # Optional. An existing private offer that will be superseded by this # offer. Unless the private offer is for a product type that supports # [multiple active # orders](https://cloud.google.com/marketplace/docs/partners/offers/multiple-offers), # an amendment private offer must be transacted if and only if the # destination customer billing account already contains an active order # for the same product. The offer to be superseded must be the offer # associated with an active order. # # Amendments generally fall into one of two scenarios: # # 1. **Active Order / Ended Offer**: The term of the amended offer has # ended but it is still associated with an active order. The new # offer must amend the ended private offer. # 2. **Active Order / Active Offer**: The term of the amended offer is # still active and the associated order is active. Similar to above, # the new offer must amend the currently active offer (unless # "multiple active orders" are supported). # # If this is set, then the `base_standard_offer` parent service must # match the parent service of the `base_standard_offer` in the # `amended_private_offer`. # # **Active Term Restrictions**: # If the term of the amended private offer has *NOT* ended, then the # following compatibility rules apply: # # * **Price Model Compatibility**: # * Flat Fee (with or without usage) offers can amend Flat Fee # offers. # * Usage-only or CUD offers can amend usage-only offers. # * Commitment-based offers must amend offers of the same price # model subtype (e.g., "additional usage at list price" vs "all # usage discounted"). # * **Billing Frequency Compatibility**: Determined by # `standard_interval` or `custom_interval_price`. # * If the amended offer has a custom billing frequency, the new # offer must also have a custom frequency. # * If the amended offer has a standard frequency (Monthly, # Quarterly, or Yearly), the new offer must maintain the same # frequency or transition to a custom frequency. # * Switching between different standard frequencies (e.g., Monthly # to Quarterly) is not supported. # * For Monthly frequency, switching between `MONTHLY_PRORATED` # and `MONTHLY_NOT_PRORATED` is supported, unless the offer's # `term.end_policy` is `MATCH_AMENDED_OFFER`. # * For usage-only offers, there are no billing frequency # restrictions. # # Other criteria for offer amendment are detailed elsewhere. # # Note: The following fields are mutually exclusive: `amended_private_offer`, `amended_standard_offer`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] amended_standard_offer # @return [::String] # Optional. An existing standard offer that will be superseded by this # offer. An amendment private offer must be transacted if the destination # customer billing account already contains an active order for the same # product, and otherwise cannot be transacted. The offer to be superseded # must be the offer associated with the active order. # # If this is set, then the `base_standard_offer` must contain the same # parent service as the parent service of the `amended_standard_offer`. # The price model of this offer must be compatible with the price model # of the `amended_standard_offer`: # # * Flat Fee, or Flat Fee with usage offers can amend Flat Fee or Flat # Fee with usage standard offers. # * Usage-only offers, or CUD offers can amend usage-only standard # offers. # # Other criteria for offer amendment are detailed elsewhere. # # Note: The following fields are mutually exclusive: `amended_standard_offer`, `amended_private_offer`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] standard_interval_price # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::StandardIntervalPrice] # Optional. Price configurations for offers with standard intervals. # A price must be set when publishing the offer. # # Note: The following fields are mutually exclusive: `standard_interval_price`, `custom_interval_price`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] custom_interval_price # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::CustomIntervalPrice] # Optional. Price configurations for offers with custom intervals. # Custom interval corresponds to "custom billing frequency", # see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule. # A price must be set when publishing the offer. # # Note: The following fields are mutually exclusive: `custom_interval_price`, `standard_interval_price`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] base_standard_offer # @return [::String] # Optional. The StandardOffer this PrivateOffer is based on. # Must be in the same project as the private offer, and must be effective # at the time of publishing. Must be present to publish the offer. # # Format: # projects/\\{project}/locations/\\{location}/services/\\{service}/standardOffers/\\{standard_offer} # @!attribute [r] service_level # @return [::String] # Output only. The service level (also known as the 'plan') of the base # standard offer. The value is populated at publish time from the base # standard offer. # @!attribute [r] reseller_private_offer_plan_id # @return [::String] # Output only. Present for offers created by a reseller from a reseller # private offer plan (RPOP). When set, contains the ID of the originating # RPOP. Not included for `PRIVATE_OFFER_VIEW_BASIC`. # @!attribute [rw] features # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Feature>] # Optional. The custom product features to display for this offer. # Feature `display_name` values must be unique to publish the offer. # The set of features specified here should generally include all features # included in the base service level, with optionally customized values, # but is not required to match exactly and may include additional features. # @!attribute [r] effective_installment_timeline # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Installment>] # Output only. The effective installment timeline of the offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. # Included for `PRIVATE_OFFER_VIEW_FULL` if all necessary information is # available to generate the timeline, and if the offer has # 'standard_interval_price' of 'MONTHLY_PRORATED', 'MONTHLY_NOT_PRORATED', # 'QUARTERLY_NOT_PRORATED', or 'YEARLY_NOT_PRORATED'. # @!attribute [r] contract_value # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::ContractValue] # Output only. Contract value of the offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. # @!attribute [r] revenue_share # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::RevenueShare] # Output only. Revenue share information for this Private Offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. class SingleProductOffer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Additional details used to describe customization of the service level. # # Features are used to distinguish service levels of the same product. # When a product has a single service level, all details can be contained # in the product documentation. When a product has multiple service levels, # each service level can be assigned a distinct set of features to # distinguish the key differences between the service levels. # # In addition to customizing pricing and other transaction details, a # private offer may include customization of partner-managed product # behavior. When this is the case, the details of the custom behavior are # described using features. # @!attribute [rw] display_name # @return [::String] # Optional. Human readable display text characterizing the feature. # Should be sufficiently detailed to identify the feature, allowing # features to be correlated across separate offers and service levels. # Must be non-empty to publish the offer. # The maximum allowed length is 128 characters. # Allows characters from the following Unicode Property Classes: # Letters, Numbers, Punctuation, Symbols, and Separators # @!attribute [rw] value # @return [::String] # Optional. Human readable display text reflecting the value of the # feature. Used for variable features not captured by the display_name # alone. The maximum allowed length is 3000 characters. Allows characters # from the following Unicode Property Classes: Letters, Numbers, # Punctuation, Symbols, and Separators class Feature include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price model of the private offer. # # Private offers are referred to as having different kinds of price models # based on the combination of fields set in the price model. The following # terminology is used in documentation and other reference material. # # * Usage-based: the price model does not set `flat_fee` # * Usage-only: the price model sets only `usage` # * CUD (committed use discount): the price model sets `commitment` # * Commitment discount with additional usage at list price: # The price model sets `commitment` and not `usage`. # * Commitment with all usage discounted: The price model sets # `commitment` and `usage`. # * Flat fee: the price model sets only `flat_fee` # * Flat fee with usage: the price model sets `flat_fee` and `usage` # # See # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-pricing-model#CUD # for the price models. # @!attribute [rw] flat_fee # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::FlatFee] # Optional. The price configurations for the flat fee subscription. # Must be unset when the base standard offer's price model does not # include subscription SKUs. # # Note: The following fields are mutually exclusive: `flat_fee`, `commitment`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] commitment # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Commitment] # Optional. The price configurations for the commitment based # subscription. Must be unset when the base standard offer's price # model includes subscription SKUs. # # Note: The following fields are mutually exclusive: `commitment`, `flat_fee`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] usage # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Usage] # Optional. The price configurations for the usage part. # If this field is set, the `Commitment.discount_percent` must be unset. # A private offer can apply a discount to all usage or to a usage # commitment, but not both. # Must be unset when the base standard offer's price model includes no # usage SKUs. class PriceModel include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # The discount for a specific SKU. # @!attribute [rw] sku # @return [::String] # Optional. The name of a partner SKU from this API. # # Must refer to a SKU in the price model of the base standard offer. # Inclusion in the base price model can occur either directly or # indirectly via inclusion in an included SkuGroup. # # Currently, standard offer price models include only partner SKUs # in the same project as the standard offer. This may change. # # Format: # projects/\\{project}/locations/\\{location}/services/\\{service}/skus/\\{sku} # # Note: The following fields are mutually exclusive: `sku`, `cloud_billing_sku`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] cloud_billing_sku # @return [::String] # Optional. The name of a Google SKU from the Cloud Billing API. # # Used for partner products sold by Google, such as Premium Operating # System Images sold for use in Compute Engine. This is not common. # SKUs of this type are not present on this API and can instead be # found on the Cloud Billing API or at https://cloud.google.com/skus. # # Must refer to a SKU in the price model of the base standard offer. # Google SKUs are always referenced in standard offers via SkuGroups. # # Format: services/\\{service}/skus/\\{sku} # # Note: The following fields are mutually exclusive: `cloud_billing_sku`, `sku`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] discount_percent # @return [::Google::Type::Decimal] # Optional. The discount percent for the SKU. # For example, `10` means a discount of 10%. If the original SKU # price is $100/hour then the discounted price will be $90/hour. # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", # and "". # Must be present to publish the offer. class SkuDiscount include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price for the usage SKUs. # @!attribute [rw] default_discount_percent # @return [::Google::Type::Decimal] # Optional. The default discount percent for usage SKUs. # An unset default discount percent is equivalent to 0 (no discount). # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "". # @!attribute [rw] sku_discounts # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::SkuDiscount>] # Optional. The discounts for the specific SKUs that override the # `default_discount_percent`. class Usage include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price configurations for the flat fee subscriptions. # @!attribute [rw] flat_fee_override # @return [::Google::Type::Money] # Optional. Flat fee overriding the default flat fee in the base # standard offer. Value cannot be negative. The currency must be "USD" # and precision is limited to cents. Must be present to publish the # offer, if the parent message is set. The maximum allowed value is # 1,000,000,000 USD. class FlatFee include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price configurations for the commitment based subscriptions. # @!attribute [rw] commitment_amount # @return [::Google::Type::Money] # Optional. The commitment balance that the customer will receive. # Value cannot be negative. # The currency must be "USD" and precision is limited to cents. # Must be present to publish the offer, if the parent message is set. # The maximum allowed value is 1,000,000,000 USD. # # If the current offer amends a private offer where the term has not # ended, and if the field # `single_product_offer.standard_interval_price.price_model.commitment.commitment_amount` # is set on both the current offer and the amended private offer, then # the commitment amount must be equal or higher on the current offer, # compared to the amended private offer. # @!attribute [rw] discount_percent # @return [::Google::Type::Decimal] # Optional. The discount percent on `commitment_amount`. # # For example, `10` means a discount of 10%. If the original # `commitment_amount` is $100 then the discounted amount will be $90. # The customer is charged $90 and receives $100 in credits. # # All reported usage will be charged at the standard price. # If this field is set, the `price_model.usage` must be unset. A # private offer can apply a discount to all usage or to a usage # commitment, but not both. # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "". # # Must be present to publish the offer. # @!attribute [rw] additional_credit # @return [::Google::Type::Money] # Optional. Additional credit granted to the customer. # Additional credits are only supported for custom interval offers. # Equivalent behavior can be achieved for standard interval offers by # varying the `commitment_amount` and `discount_percent`. # # Value cannot be negative. # The currency must be "USD" and precision is limited to cents. # The maximum allowed value is 1,000,000 USD. # @!attribute [rw] discard_previous_credit_balance # @return [::Boolean] # Optional. Whether to discard the previous credit balance when the # associated installment starts. If not set, the previous credit # balance will be rolled over to the current installment. # # If there are no previous installments, then the value of this field # will not matter - since it has no effect when no credits exist. class Commitment include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end end # Price configurations for offers with standard intervals. # @!attribute [rw] standard_interval # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::StandardIntervalPrice::StandardInterval] # Optional. The standard interval of the offer. # Must be present to publish unless the price model is usage-only. # @!attribute [rw] price_model # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel] # Optional. The price model of the offer. # Must be present to publish the offer. class StandardIntervalPrice include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # The options for offers with standard intervals. module StandardInterval # The private offer does not have an interval. # If this is set, then the offer is "usage-only". # Field `term.duration_months` must be positive. STANDARD_INTERVAL_UNSPECIFIED = 0 # The schedule of the monthly postpay offers. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # No longer supported as of May 2024. Cannot be used to publish # new offers. MONTHLY_POSTPAY = 1 # Monthly installments with proration. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 04/15, and the offer duration is # 3 months, the following installments will be created: # # 1: from 04/15 to 05/01, at the prorated price for April. # # # 2: from 05/01 to 06/01, at the full monthly price for May. # # # 3: from 06/01 to 07/01, at the full monthly price for June. # # # 4: from 07/01 to 07/15, at the prorated price for July. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. MONTHLY_PRORATED = 2 # Monthly installments without proration. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 04/15, and the offer duration is # 3 months, the following installments will be created: # # 1: from 04/15 to 05/15, at the full monthly price. # # # 2: from 05/15 to 06/15, at the full monthly price. # # # 3: from 06/15 to 07/15, at the full monthly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. MONTHLY_NOT_PRORATED = 3 # Quarterly installments which are not prorated. # This type of offer has "Quarterly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 01/15, and the offer duration is # 3 quarters, the following installments will be created: # # 1: from 01/15 to 04/15, at the full quarterly price. # # # 2: from 04/15 to 07/15, at the full quarterly price. # # # 3: from 07/15 to 10/15, at the full quarterly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. QUARTERLY_NOT_PRORATED = 4 # Yearly installments which are not prorated. # This type of offer has "Yearly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 01/15/2025, and the offer # duration is 3 years, the following installments will be created: # # 1: from 01/15/2025 to 01/15/2026, at the full yearly price. # # # 2: from 01/15/2026 to 01/15/2027, at the full yearly price. # # # 3: from 01/15/2027 to 01/15/2028, at the full yearly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. YEARLY_NOT_PRORATED = 5 end end # An installment of the offer. # @!attribute [rw] start_time # @return [::Google::Type::DateTime] # Optional. The start time of the installment. # Each installment must have a unique start time with one exception: # When the `term.start_policy` of the offer's term is `IMMEDIATE`, # the `start_time` of the first installment must be unset. # The actual start time is not recorded in the offer and instead is # determined by the time the resulting order became active. # # When the `term.start_policy` of the offer's term is # `SCHEDULED_START_TIME`, then the first installment's `start_time` must # match `term.scheduled_start_time`. # # If the `term.end_policy` of the offer's term is `SCHEDULED_END_TIME`, # then installment `start_time` must be before `term.scheduled_end_time`. # If it's `AFTER_DURATION`, then installment `start_time` must be before # the time calculated by adding the `term.duration_months` to # the start time of the offer. # # The `start_time` of the installments cannot be before the # `accept_deadline_time` of the offer. # # Installment start times must be in strictly increasing chronological # order. # @!attribute [rw] price_model # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel] # Optional. The price model of the installment. # All installments must have the same form of price model. class Installment include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Price configurations for offers with custom intervals. # @!attribute [rw] installments # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Installment>] # Optional. The installments that make up the installment timeline. # All installments must have the same form of price model (e.g. # all commitment, or all flat fee). A subscription must be present # under the price model for every installment. # # Must contain at least one installment to publish the offer. class CustomIntervalPrice include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The contract value of the offer. # @!attribute [r] total_contract_value # @return [::Google::Type::Money] # Output only. The total contract value of the offer. # This will be set for all non-draft private offers, as long as # 'PRIVATE_OFFER_VIEW_FULL' is requested. For DRAFT private offers, # this will be populated only when the end user's billing account is # set and when the pricing and term configuration is sufficiently # complete to allow for a calculation. class ContractValue include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Revenue Share information for a Private Offer. # For more details about the revenue share, including how the value is # determined, see # https://docs.cloud.google.com/marketplace/docs/partners/revenue-share-scenarios. # # Not included for `PRIVATE_OFFER_VIEW_BASIC`, or for DRAFT private offers. # # For non-draft private offers, these fields are populated based on the # following: # # * Offers published after April 20, 2025 will always have revenue # share fields populated. # * Offers published on or before April 20, 2025 will only have revenue # share fields populated if they were associated with an active, # unexpired order on that date. # @!attribute [r] current_term_vendor_net_revenue_percent # @return [::Google::Type::Decimal] # Output only. The revenue share currently in effect. # # The range of the value is between 0 and 100. For example, 80 # means the Vendor's current term revenue share is 80%. The vendor # will keep 80% of the revenue. # . # @!attribute [r] renewal_term_vendor_net_revenue_percent # @return [::Google::Type::Decimal] # Output only. The expected revenue share for the renewal term. # Not included if the offer does not have renewal terms. # # The range of the value is between 0 and 100. For example, 80 # means the Vendor's current term revenue share is 80%. The vendor # will keep 80% of the revenue after renewal. # . class RevenueShare include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end end # State of an offer. module State # Default value. This value is unused. STATE_UNSPECIFIED = 0 # The default state after creation when the offer can be edited. # In all other states, the contents of the offer cannot be edited. DRAFT = 1 # The offer is publishing. # Publishing will complete when all publishing requirements are satisfied. PUBLISHING = 2 # The offer has been published and is available to the customer to accept. PUBLISHED = 3 # The offer has been accepted by the customer. ACCEPTED = 4 # The offer was cancelled by the provider before it was transacted. # Cancelled offers can no longer be accepted by the customer. CANCELLED = 5 # The offer expired without being accepted by the customer. # Expired offers can no longer be accepted by the customer. EXPIRED = 6 # The offer has ended. # # Ended offers were accepted and active in the past, but have now reached # the end of their term or have been terminated. ENDED = 7 end # The type of the deal transacted with the offer. The deal type of an offer # is a factor in determining the offer's revenue share. module OfferDealType # Default value. This value is unused. OFFER_DEAL_TYPE_UNSPECIFIED = 0 # The offer corresponds to a preexisting commercial arrangement for a # workload on Google Cloud that is being transferred to the Cloud # Marketplace. CHANNEL_SHIFT = 1 # The offer corresponds to a preexisting commercial arrangement for a # workload previously not on Google Cloud that is being transferred to # Google Cloud. MIGRATION = 2 # The offer corresponds to a renewal of a deal initially transacted on # the Google Cloud Marketplace. NATIVE_RENEWAL = 3 # The offer corresponds to a new deal transacted on the Google Cloud # Marketplace. # # This value is not allowed if the offer amends another private offer # where the term has not ended, and the amended private offer has a deal # type of `MIGRATION`, `CHANNEL_SHIFT` or `NATIVE_RENEWAL`. NEW = 4 end end |
#cancel_time ⇒ ::Google::Protobuf::Timestamp (readonly)
Returns Output only. The time the offer transited to CANCELLED state.
148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 |
# File 'proto_docs/google/cloud/commerceproducer/v1beta/private_offer.rb', line 148 class PrivateOffer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Information about the Google review process. # @!attribute [r] review_approve_time # @return [::Google::Protobuf::Timestamp] # Output only. The approval time of the Google review process. class PublishRequirementGoogleReview include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Contact information for a reseller. # @!attribute [r] contact # @return [::String] # Output only. The name of the reseller contact for this offer. # @!attribute [r] email # @return [::String] # Output only. The email of the reseller contact for this offer. class ResellerContact include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Contact information for the partner representative. # @!attribute [rw] contact # @return [::String] # Optional. Display text identifying the partner sales contact. # Displayed to the customer. # Must be provided when publishing the offer. # Maximum length: 256 characters. # @!attribute [rw] email # @return [::String] # Optional. The email address of the partner sales contact. # Displayed to the customer. # The format of the provided email address is validated when publishing the # offer, but no verification is performed that the email address actually # exists, accepts email, or is otherwise functional. class PartnerContact include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Information about the customer. # @!attribute [rw] entity_title # @return [::String] # Optional. A string identifying the customer's entity (for example, the # customer's organization or company name). Must be provided when # publishing the offer. Maximum length: 256 characters. # @!attribute [rw] contact # @return [::String] # Optional. A string identifying the customer contact. # Must be provided when publishing the offer. # Maximum length: 256 characters. # @!attribute [rw] email # @return [::String] # Optional. Email of customer contact. # If provided, it must be a well-formed email address. # @!attribute [r] address # @deprecated This field is deprecated and may be removed in the next major version update. # @return [::String] # Output only. Legal address of the customer organization. # This field can no longer be set, but it is preserved to return the # data from existing offers where address is set. # @!attribute [rw] target_billing_account # @return [::String] # Optional. The customer's billing account targeted by the offer. # The private offer once published can be accepted by a billing # administrator of the target billing account. If the customer accepts the # offer and later moves the resulting order to a new billing account, this # field will continue to reflect the original billing account to which the # private offer was extended. Must be provided when publishing the offer. # # To publish this private offer: # # * The billing account must exist. # * The billing account must not be in a free trial. # * The billing account must comply with Marketplace Reselling Policies. # * Reseller parent billing accounts are prohibited. Reseller subaccounts # are prohibited unless the service is enabled for reselling. # # Format: billingAccounts/012345-567890-ABCDEF class Customer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Configurations for the offer term and renewal options. # Extending a private offer to a customer that covers a given term # constitutes a guarantee to the customer that the product will remain # available to them for the duration of the term. # @!attribute [rw] duration_months # @return [::Integer] # Optional. Duration in months of the offer term. # The offer will end on the same day of the month after this duration. If # that date is not available, the offer will end on the last day of the # month. For example, if the offer starts on 01/31/2024 and the duration # is 13 months, the offer will end on 02/28/2025. # Must be set to publish the offer if the end policy is `AFTER_DURATION` # or `MATCH_AMENDED_OFFER`, and must be a positive value. # # The maximum possible offer duration, including all renewal terms, # cannot exceed 7 years. For example, if `duration_months` is 9 and # `term.max_renewal_count` is 9, then the maximum possible offer duration # is 90 months and exceeds the 7 year limit. # # Note: The following fields are mutually exclusive: `duration_months`, `scheduled_end_time`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] scheduled_end_time # @return [::Google::Type::DateTime] # Optional. Specified end time of the offer. # Must be set to publish the offer if the end policy is # `SCHEDULED_END_TIME`. # When set, the time must be in the future and at a day boundary in the # America/Los_Angeles time zone, and must be after # `term.scheduled_start_time` if applicable. # # Note: The following fields are mutually exclusive: `scheduled_end_time`, `duration_months`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] max_renewal_count # @return [::Integer] # Optional. The max number of renewals allowed, after the initial term # ends. This field is only relevant to standard interval offers with # interval of 'MONTHLY_PRORATED', 'MONTHLY_NOT_PRORATED', # 'QUARTERLY_NOT_PRORATED' or 'YEARLY_NOT_PRORATED'. Other types of # offers cannot be renewed. # # For example, if the initial term is 1 year and the max renewals is 3, # the customer can renew the offer for up to 3 additional years after the # initial term ends. Customers control whether they renew the offer. # # Allowing a customer to renew an offer does not constitute a guarantee # to the customer that the offered product will still be available to be # renewed at the renewal date. # # An offer with a max renewal count of 0 cannot be renewed. # Must be non-negative. # # Note: The following fields are mutually exclusive: `max_renewal_count`, `unlimited_renewal`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [r] unlimited_renewal # @deprecated This field is deprecated and may be removed in the next major version update. # @return [::Boolean] # Output only. Deprecated: This field can only be true on existing offers # with standard interval of 'MONTHLY_POSTPAY'. As of May 2024, we no # longer allow unlimited renewals. # # Note: The following fields are mutually exclusive: `unlimited_renewal`, `max_renewal_count`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] start_policy # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::Term::StartPolicy] # Optional. Defines when the resulting order should start. # Must be set when publishing the offer. # @!attribute [rw] scheduled_start_time # @return [::Google::Type::DateTime] # Optional. The scheduled start time of the offer. Cannot exceed one year # from the time of publish. # # If the start policy is `SCHEDULED_START_TIME`, a future time at a day # boundary in the America/Los_Angeles time zone must be provided when # publishing the offer. # # If the offer amends another private or standard offer, then the # scheduled start time must be: # # * Before or equal to the amended offer's end time if the offer's # end policy is not MATCH_AMENDED_OFFER. Otherwise, it has to be # strictly before the amended offer's end time. # * Before or equal to the start time of the next pending installment of # the amended offer, if amending a private offer with custom # installments. For example, if the amended offer has installments on # 01/01, 02/01, 03/01, 04/01, and today is 02/15, then the new offer's # `scheduled_start_time` must be at or before 03/01. # @!attribute [rw] end_policy # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::Term::EndPolicy] # Optional. Defines when an offer should end. # Must be set when publishing the offer. # @!attribute [r] effective_term_end_time # @return [::Google::Type::DateTime] # Output only. The expected end time of the current offer term. # # At the end of each offer term, an offer associated with an active # order will either renew or end. When an offer renews, a new term begins # and this value changes to reflect the end time of the new term. # When an offer ends this value is no longer set and instead `end_time` is # set. # # When the term of an offer ends and the offer does not renew, the # associated order also ends if the base standard offer has a # subscription price model. Otherwise, the associated order does not end # and remains active. # # Not included for PRIVATE_OFFER_VIEW_BASIC. # Included for PRIVATE_OFFER_VIEW_FULL when the offer has not ended and # either the offer has started or the value can be derived from other # fields. # # For offers that have not started, this field is set when one of the # following conditions is true. # # * The offer sets `term.scheduled_end_time`. # * The offer sets `term.scheduled_start_time` and `term.duration_months`, # the offer's `term.end_policy` is not `MATCH_AMENDED_OFFER`, and the # offer does not have standard_interval set to `MONTHLY_POSTPAY`. class Term include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Defines when an offer should start. module StartPolicy # Default value. This value is unused. START_POLICY_UNSPECIFIED = 0 # The resulting order starts immediately upon the customer's acceptance # of the offer, if no partner approval is required, or else immediately # after the partner approves the purchase if order approval is required. # This enum value cannot be combined with `term.scheduled_start_time`. IMMEDIATE = 1 # The resulting order starts at the scheduled start time. SCHEDULED_START_TIME = 2 end # Defines when an offer should end. module EndPolicy # Default value. This value is unused. END_POLICY_UNSPECIFIED = 0 # Offer ends after the specified duration. # If this is set, then `duration_months` must be positive. AFTER_DURATION = 1 # Offer ends at the schduled time. SCHEDULED_END_TIME = 2 # Offer coterms to the amended offer - the offer ends at the end of the # amended offer's term # # For example, if the amended offer starts on 01/15/24, and has a # duration of 6 months, then it ends on 07/15/24. If the current offer # coterms to the previous offer, and the current offer starts on # 05/06/24, then it will still end on 07/15/24. Assuming the current # offer renews 3 times, then the terms on the current offer will be: # # 1. 05/06/24 - 07/15/24 (First term, ends on 07/15 to coterm with the # amended offer) # 2. 07/15/24 - 01/15/25 (First renewal term) # 3. 01/15/25 - 07/15/25 (Second renewal term) # 4. 07/15/25 - 01/15/26 (Third renewal term) # # As a contrast, if the current offer does not coterm with the amended # offer (such as when `end_policy` is `AFTER_DURATION`), then the # terms will be: # # 1. 05/06/24 - 11/06/24 (First term, ends on 11/06, no coterming) # 2. 11/06/24 - 05/06/25 (First renewal term) # 3. 05/06/25 - 11/06/25 (Second renewal term) # 4. 11/06/25 - 05/06/26 (Third renewal term) # # If this is set, then the following conditions must be met: # # * `single_product_offer.amended_private_offer` must be set, and the # amended private offer must not be ended. # * The proration policy must not change (e.g., you cannot switch # between `MONTHLY_PRORATED` and `MONTHLY_NOT_PRORATED`). # * The current offer must not have custom intervals (where # `custom_interval_price` is set). # * `term.duration_months` must match the amended private offer's # duration. # * The amended private offer must not have a standard interval # of `MONTHLY_POSTPAY`. # # This is currently not supported. MATCH_AMENDED_OFFER = 3 end end # Configurations for the offer that is associated with a single product. # @!attribute [rw] amended_private_offer # @return [::String] # Optional. An existing private offer that will be superseded by this # offer. Unless the private offer is for a product type that supports # [multiple active # orders](https://cloud.google.com/marketplace/docs/partners/offers/multiple-offers), # an amendment private offer must be transacted if and only if the # destination customer billing account already contains an active order # for the same product. The offer to be superseded must be the offer # associated with an active order. # # Amendments generally fall into one of two scenarios: # # 1. **Active Order / Ended Offer**: The term of the amended offer has # ended but it is still associated with an active order. The new # offer must amend the ended private offer. # 2. **Active Order / Active Offer**: The term of the amended offer is # still active and the associated order is active. Similar to above, # the new offer must amend the currently active offer (unless # "multiple active orders" are supported). # # If this is set, then the `base_standard_offer` parent service must # match the parent service of the `base_standard_offer` in the # `amended_private_offer`. # # **Active Term Restrictions**: # If the term of the amended private offer has *NOT* ended, then the # following compatibility rules apply: # # * **Price Model Compatibility**: # * Flat Fee (with or without usage) offers can amend Flat Fee # offers. # * Usage-only or CUD offers can amend usage-only offers. # * Commitment-based offers must amend offers of the same price # model subtype (e.g., "additional usage at list price" vs "all # usage discounted"). # * **Billing Frequency Compatibility**: Determined by # `standard_interval` or `custom_interval_price`. # * If the amended offer has a custom billing frequency, the new # offer must also have a custom frequency. # * If the amended offer has a standard frequency (Monthly, # Quarterly, or Yearly), the new offer must maintain the same # frequency or transition to a custom frequency. # * Switching between different standard frequencies (e.g., Monthly # to Quarterly) is not supported. # * For Monthly frequency, switching between `MONTHLY_PRORATED` # and `MONTHLY_NOT_PRORATED` is supported, unless the offer's # `term.end_policy` is `MATCH_AMENDED_OFFER`. # * For usage-only offers, there are no billing frequency # restrictions. # # Other criteria for offer amendment are detailed elsewhere. # # Note: The following fields are mutually exclusive: `amended_private_offer`, `amended_standard_offer`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] amended_standard_offer # @return [::String] # Optional. An existing standard offer that will be superseded by this # offer. An amendment private offer must be transacted if the destination # customer billing account already contains an active order for the same # product, and otherwise cannot be transacted. The offer to be superseded # must be the offer associated with the active order. # # If this is set, then the `base_standard_offer` must contain the same # parent service as the parent service of the `amended_standard_offer`. # The price model of this offer must be compatible with the price model # of the `amended_standard_offer`: # # * Flat Fee, or Flat Fee with usage offers can amend Flat Fee or Flat # Fee with usage standard offers. # * Usage-only offers, or CUD offers can amend usage-only standard # offers. # # Other criteria for offer amendment are detailed elsewhere. # # Note: The following fields are mutually exclusive: `amended_standard_offer`, `amended_private_offer`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] standard_interval_price # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::StandardIntervalPrice] # Optional. Price configurations for offers with standard intervals. # A price must be set when publishing the offer. # # Note: The following fields are mutually exclusive: `standard_interval_price`, `custom_interval_price`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] custom_interval_price # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::CustomIntervalPrice] # Optional. Price configurations for offers with custom intervals. # Custom interval corresponds to "custom billing frequency", # see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule. # A price must be set when publishing the offer. # # Note: The following fields are mutually exclusive: `custom_interval_price`, `standard_interval_price`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] base_standard_offer # @return [::String] # Optional. The StandardOffer this PrivateOffer is based on. # Must be in the same project as the private offer, and must be effective # at the time of publishing. Must be present to publish the offer. # # Format: # projects/\\{project}/locations/\\{location}/services/\\{service}/standardOffers/\\{standard_offer} # @!attribute [r] service_level # @return [::String] # Output only. The service level (also known as the 'plan') of the base # standard offer. The value is populated at publish time from the base # standard offer. # @!attribute [r] reseller_private_offer_plan_id # @return [::String] # Output only. Present for offers created by a reseller from a reseller # private offer plan (RPOP). When set, contains the ID of the originating # RPOP. Not included for `PRIVATE_OFFER_VIEW_BASIC`. # @!attribute [rw] features # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Feature>] # Optional. The custom product features to display for this offer. # Feature `display_name` values must be unique to publish the offer. # The set of features specified here should generally include all features # included in the base service level, with optionally customized values, # but is not required to match exactly and may include additional features. # @!attribute [r] effective_installment_timeline # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Installment>] # Output only. The effective installment timeline of the offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. # Included for `PRIVATE_OFFER_VIEW_FULL` if all necessary information is # available to generate the timeline, and if the offer has # 'standard_interval_price' of 'MONTHLY_PRORATED', 'MONTHLY_NOT_PRORATED', # 'QUARTERLY_NOT_PRORATED', or 'YEARLY_NOT_PRORATED'. # @!attribute [r] contract_value # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::ContractValue] # Output only. Contract value of the offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. # @!attribute [r] revenue_share # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::RevenueShare] # Output only. Revenue share information for this Private Offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. class SingleProductOffer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Additional details used to describe customization of the service level. # # Features are used to distinguish service levels of the same product. # When a product has a single service level, all details can be contained # in the product documentation. When a product has multiple service levels, # each service level can be assigned a distinct set of features to # distinguish the key differences between the service levels. # # In addition to customizing pricing and other transaction details, a # private offer may include customization of partner-managed product # behavior. When this is the case, the details of the custom behavior are # described using features. # @!attribute [rw] display_name # @return [::String] # Optional. Human readable display text characterizing the feature. # Should be sufficiently detailed to identify the feature, allowing # features to be correlated across separate offers and service levels. # Must be non-empty to publish the offer. # The maximum allowed length is 128 characters. # Allows characters from the following Unicode Property Classes: # Letters, Numbers, Punctuation, Symbols, and Separators # @!attribute [rw] value # @return [::String] # Optional. Human readable display text reflecting the value of the # feature. Used for variable features not captured by the display_name # alone. The maximum allowed length is 3000 characters. Allows characters # from the following Unicode Property Classes: Letters, Numbers, # Punctuation, Symbols, and Separators class Feature include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price model of the private offer. # # Private offers are referred to as having different kinds of price models # based on the combination of fields set in the price model. The following # terminology is used in documentation and other reference material. # # * Usage-based: the price model does not set `flat_fee` # * Usage-only: the price model sets only `usage` # * CUD (committed use discount): the price model sets `commitment` # * Commitment discount with additional usage at list price: # The price model sets `commitment` and not `usage`. # * Commitment with all usage discounted: The price model sets # `commitment` and `usage`. # * Flat fee: the price model sets only `flat_fee` # * Flat fee with usage: the price model sets `flat_fee` and `usage` # # See # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-pricing-model#CUD # for the price models. # @!attribute [rw] flat_fee # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::FlatFee] # Optional. The price configurations for the flat fee subscription. # Must be unset when the base standard offer's price model does not # include subscription SKUs. # # Note: The following fields are mutually exclusive: `flat_fee`, `commitment`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] commitment # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Commitment] # Optional. The price configurations for the commitment based # subscription. Must be unset when the base standard offer's price # model includes subscription SKUs. # # Note: The following fields are mutually exclusive: `commitment`, `flat_fee`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] usage # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Usage] # Optional. The price configurations for the usage part. # If this field is set, the `Commitment.discount_percent` must be unset. # A private offer can apply a discount to all usage or to a usage # commitment, but not both. # Must be unset when the base standard offer's price model includes no # usage SKUs. class PriceModel include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # The discount for a specific SKU. # @!attribute [rw] sku # @return [::String] # Optional. The name of a partner SKU from this API. # # Must refer to a SKU in the price model of the base standard offer. # Inclusion in the base price model can occur either directly or # indirectly via inclusion in an included SkuGroup. # # Currently, standard offer price models include only partner SKUs # in the same project as the standard offer. This may change. # # Format: # projects/\\{project}/locations/\\{location}/services/\\{service}/skus/\\{sku} # # Note: The following fields are mutually exclusive: `sku`, `cloud_billing_sku`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] cloud_billing_sku # @return [::String] # Optional. The name of a Google SKU from the Cloud Billing API. # # Used for partner products sold by Google, such as Premium Operating # System Images sold for use in Compute Engine. This is not common. # SKUs of this type are not present on this API and can instead be # found on the Cloud Billing API or at https://cloud.google.com/skus. # # Must refer to a SKU in the price model of the base standard offer. # Google SKUs are always referenced in standard offers via SkuGroups. # # Format: services/\\{service}/skus/\\{sku} # # Note: The following fields are mutually exclusive: `cloud_billing_sku`, `sku`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] discount_percent # @return [::Google::Type::Decimal] # Optional. The discount percent for the SKU. # For example, `10` means a discount of 10%. If the original SKU # price is $100/hour then the discounted price will be $90/hour. # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", # and "". # Must be present to publish the offer. class SkuDiscount include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price for the usage SKUs. # @!attribute [rw] default_discount_percent # @return [::Google::Type::Decimal] # Optional. The default discount percent for usage SKUs. # An unset default discount percent is equivalent to 0 (no discount). # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "". # @!attribute [rw] sku_discounts # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::SkuDiscount>] # Optional. The discounts for the specific SKUs that override the # `default_discount_percent`. class Usage include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price configurations for the flat fee subscriptions. # @!attribute [rw] flat_fee_override # @return [::Google::Type::Money] # Optional. Flat fee overriding the default flat fee in the base # standard offer. Value cannot be negative. The currency must be "USD" # and precision is limited to cents. Must be present to publish the # offer, if the parent message is set. The maximum allowed value is # 1,000,000,000 USD. class FlatFee include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price configurations for the commitment based subscriptions. # @!attribute [rw] commitment_amount # @return [::Google::Type::Money] # Optional. The commitment balance that the customer will receive. # Value cannot be negative. # The currency must be "USD" and precision is limited to cents. # Must be present to publish the offer, if the parent message is set. # The maximum allowed value is 1,000,000,000 USD. # # If the current offer amends a private offer where the term has not # ended, and if the field # `single_product_offer.standard_interval_price.price_model.commitment.commitment_amount` # is set on both the current offer and the amended private offer, then # the commitment amount must be equal or higher on the current offer, # compared to the amended private offer. # @!attribute [rw] discount_percent # @return [::Google::Type::Decimal] # Optional. The discount percent on `commitment_amount`. # # For example, `10` means a discount of 10%. If the original # `commitment_amount` is $100 then the discounted amount will be $90. # The customer is charged $90 and receives $100 in credits. # # All reported usage will be charged at the standard price. # If this field is set, the `price_model.usage` must be unset. A # private offer can apply a discount to all usage or to a usage # commitment, but not both. # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "". # # Must be present to publish the offer. # @!attribute [rw] additional_credit # @return [::Google::Type::Money] # Optional. Additional credit granted to the customer. # Additional credits are only supported for custom interval offers. # Equivalent behavior can be achieved for standard interval offers by # varying the `commitment_amount` and `discount_percent`. # # Value cannot be negative. # The currency must be "USD" and precision is limited to cents. # The maximum allowed value is 1,000,000 USD. # @!attribute [rw] discard_previous_credit_balance # @return [::Boolean] # Optional. Whether to discard the previous credit balance when the # associated installment starts. If not set, the previous credit # balance will be rolled over to the current installment. # # If there are no previous installments, then the value of this field # will not matter - since it has no effect when no credits exist. class Commitment include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end end # Price configurations for offers with standard intervals. # @!attribute [rw] standard_interval # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::StandardIntervalPrice::StandardInterval] # Optional. The standard interval of the offer. # Must be present to publish unless the price model is usage-only. # @!attribute [rw] price_model # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel] # Optional. The price model of the offer. # Must be present to publish the offer. class StandardIntervalPrice include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # The options for offers with standard intervals. module StandardInterval # The private offer does not have an interval. # If this is set, then the offer is "usage-only". # Field `term.duration_months` must be positive. STANDARD_INTERVAL_UNSPECIFIED = 0 # The schedule of the monthly postpay offers. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # No longer supported as of May 2024. Cannot be used to publish # new offers. MONTHLY_POSTPAY = 1 # Monthly installments with proration. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 04/15, and the offer duration is # 3 months, the following installments will be created: # # 1: from 04/15 to 05/01, at the prorated price for April. # # # 2: from 05/01 to 06/01, at the full monthly price for May. # # # 3: from 06/01 to 07/01, at the full monthly price for June. # # # 4: from 07/01 to 07/15, at the prorated price for July. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. MONTHLY_PRORATED = 2 # Monthly installments without proration. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 04/15, and the offer duration is # 3 months, the following installments will be created: # # 1: from 04/15 to 05/15, at the full monthly price. # # # 2: from 05/15 to 06/15, at the full monthly price. # # # 3: from 06/15 to 07/15, at the full monthly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. MONTHLY_NOT_PRORATED = 3 # Quarterly installments which are not prorated. # This type of offer has "Quarterly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 01/15, and the offer duration is # 3 quarters, the following installments will be created: # # 1: from 01/15 to 04/15, at the full quarterly price. # # # 2: from 04/15 to 07/15, at the full quarterly price. # # # 3: from 07/15 to 10/15, at the full quarterly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. QUARTERLY_NOT_PRORATED = 4 # Yearly installments which are not prorated. # This type of offer has "Yearly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 01/15/2025, and the offer # duration is 3 years, the following installments will be created: # # 1: from 01/15/2025 to 01/15/2026, at the full yearly price. # # # 2: from 01/15/2026 to 01/15/2027, at the full yearly price. # # # 3: from 01/15/2027 to 01/15/2028, at the full yearly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. YEARLY_NOT_PRORATED = 5 end end # An installment of the offer. # @!attribute [rw] start_time # @return [::Google::Type::DateTime] # Optional. The start time of the installment. # Each installment must have a unique start time with one exception: # When the `term.start_policy` of the offer's term is `IMMEDIATE`, # the `start_time` of the first installment must be unset. # The actual start time is not recorded in the offer and instead is # determined by the time the resulting order became active. # # When the `term.start_policy` of the offer's term is # `SCHEDULED_START_TIME`, then the first installment's `start_time` must # match `term.scheduled_start_time`. # # If the `term.end_policy` of the offer's term is `SCHEDULED_END_TIME`, # then installment `start_time` must be before `term.scheduled_end_time`. # If it's `AFTER_DURATION`, then installment `start_time` must be before # the time calculated by adding the `term.duration_months` to # the start time of the offer. # # The `start_time` of the installments cannot be before the # `accept_deadline_time` of the offer. # # Installment start times must be in strictly increasing chronological # order. # @!attribute [rw] price_model # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel] # Optional. The price model of the installment. # All installments must have the same form of price model. class Installment include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Price configurations for offers with custom intervals. # @!attribute [rw] installments # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Installment>] # Optional. The installments that make up the installment timeline. # All installments must have the same form of price model (e.g. # all commitment, or all flat fee). A subscription must be present # under the price model for every installment. # # Must contain at least one installment to publish the offer. class CustomIntervalPrice include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The contract value of the offer. # @!attribute [r] total_contract_value # @return [::Google::Type::Money] # Output only. The total contract value of the offer. # This will be set for all non-draft private offers, as long as # 'PRIVATE_OFFER_VIEW_FULL' is requested. For DRAFT private offers, # this will be populated only when the end user's billing account is # set and when the pricing and term configuration is sufficiently # complete to allow for a calculation. class ContractValue include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Revenue Share information for a Private Offer. # For more details about the revenue share, including how the value is # determined, see # https://docs.cloud.google.com/marketplace/docs/partners/revenue-share-scenarios. # # Not included for `PRIVATE_OFFER_VIEW_BASIC`, or for DRAFT private offers. # # For non-draft private offers, these fields are populated based on the # following: # # * Offers published after April 20, 2025 will always have revenue # share fields populated. # * Offers published on or before April 20, 2025 will only have revenue # share fields populated if they were associated with an active, # unexpired order on that date. # @!attribute [r] current_term_vendor_net_revenue_percent # @return [::Google::Type::Decimal] # Output only. The revenue share currently in effect. # # The range of the value is between 0 and 100. For example, 80 # means the Vendor's current term revenue share is 80%. The vendor # will keep 80% of the revenue. # . # @!attribute [r] renewal_term_vendor_net_revenue_percent # @return [::Google::Type::Decimal] # Output only. The expected revenue share for the renewal term. # Not included if the offer does not have renewal terms. # # The range of the value is between 0 and 100. For example, 80 # means the Vendor's current term revenue share is 80%. The vendor # will keep 80% of the revenue after renewal. # . class RevenueShare include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end end # State of an offer. module State # Default value. This value is unused. STATE_UNSPECIFIED = 0 # The default state after creation when the offer can be edited. # In all other states, the contents of the offer cannot be edited. DRAFT = 1 # The offer is publishing. # Publishing will complete when all publishing requirements are satisfied. PUBLISHING = 2 # The offer has been published and is available to the customer to accept. PUBLISHED = 3 # The offer has been accepted by the customer. ACCEPTED = 4 # The offer was cancelled by the provider before it was transacted. # Cancelled offers can no longer be accepted by the customer. CANCELLED = 5 # The offer expired without being accepted by the customer. # Expired offers can no longer be accepted by the customer. EXPIRED = 6 # The offer has ended. # # Ended offers were accepted and active in the past, but have now reached # the end of their term or have been terminated. ENDED = 7 end # The type of the deal transacted with the offer. The deal type of an offer # is a factor in determining the offer's revenue share. module OfferDealType # Default value. This value is unused. OFFER_DEAL_TYPE_UNSPECIFIED = 0 # The offer corresponds to a preexisting commercial arrangement for a # workload on Google Cloud that is being transferred to the Cloud # Marketplace. CHANNEL_SHIFT = 1 # The offer corresponds to a preexisting commercial arrangement for a # workload previously not on Google Cloud that is being transferred to # Google Cloud. MIGRATION = 2 # The offer corresponds to a renewal of a deal initially transacted on # the Google Cloud Marketplace. NATIVE_RENEWAL = 3 # The offer corresponds to a new deal transacted on the Google Cloud # Marketplace. # # This value is not allowed if the offer amends another private offer # where the term has not ended, and the amended private offer has a deal # type of `MIGRATION`, `CHANNEL_SHIFT` or `NATIVE_RENEWAL`. NEW = 4 end end |
#cancellation_note ⇒ ::String (readonly)
Returns Output only. Internal note supplied when the offer was cancelled. Present only for cancelled offers and only if a note was supplied.
148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 |
# File 'proto_docs/google/cloud/commerceproducer/v1beta/private_offer.rb', line 148 class PrivateOffer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Information about the Google review process. # @!attribute [r] review_approve_time # @return [::Google::Protobuf::Timestamp] # Output only. The approval time of the Google review process. class PublishRequirementGoogleReview include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Contact information for a reseller. # @!attribute [r] contact # @return [::String] # Output only. The name of the reseller contact for this offer. # @!attribute [r] email # @return [::String] # Output only. The email of the reseller contact for this offer. class ResellerContact include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Contact information for the partner representative. # @!attribute [rw] contact # @return [::String] # Optional. Display text identifying the partner sales contact. # Displayed to the customer. # Must be provided when publishing the offer. # Maximum length: 256 characters. # @!attribute [rw] email # @return [::String] # Optional. The email address of the partner sales contact. # Displayed to the customer. # The format of the provided email address is validated when publishing the # offer, but no verification is performed that the email address actually # exists, accepts email, or is otherwise functional. class PartnerContact include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Information about the customer. # @!attribute [rw] entity_title # @return [::String] # Optional. A string identifying the customer's entity (for example, the # customer's organization or company name). Must be provided when # publishing the offer. Maximum length: 256 characters. # @!attribute [rw] contact # @return [::String] # Optional. A string identifying the customer contact. # Must be provided when publishing the offer. # Maximum length: 256 characters. # @!attribute [rw] email # @return [::String] # Optional. Email of customer contact. # If provided, it must be a well-formed email address. # @!attribute [r] address # @deprecated This field is deprecated and may be removed in the next major version update. # @return [::String] # Output only. Legal address of the customer organization. # This field can no longer be set, but it is preserved to return the # data from existing offers where address is set. # @!attribute [rw] target_billing_account # @return [::String] # Optional. The customer's billing account targeted by the offer. # The private offer once published can be accepted by a billing # administrator of the target billing account. If the customer accepts the # offer and later moves the resulting order to a new billing account, this # field will continue to reflect the original billing account to which the # private offer was extended. Must be provided when publishing the offer. # # To publish this private offer: # # * The billing account must exist. # * The billing account must not be in a free trial. # * The billing account must comply with Marketplace Reselling Policies. # * Reseller parent billing accounts are prohibited. Reseller subaccounts # are prohibited unless the service is enabled for reselling. # # Format: billingAccounts/012345-567890-ABCDEF class Customer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Configurations for the offer term and renewal options. # Extending a private offer to a customer that covers a given term # constitutes a guarantee to the customer that the product will remain # available to them for the duration of the term. # @!attribute [rw] duration_months # @return [::Integer] # Optional. Duration in months of the offer term. # The offer will end on the same day of the month after this duration. If # that date is not available, the offer will end on the last day of the # month. For example, if the offer starts on 01/31/2024 and the duration # is 13 months, the offer will end on 02/28/2025. # Must be set to publish the offer if the end policy is `AFTER_DURATION` # or `MATCH_AMENDED_OFFER`, and must be a positive value. # # The maximum possible offer duration, including all renewal terms, # cannot exceed 7 years. For example, if `duration_months` is 9 and # `term.max_renewal_count` is 9, then the maximum possible offer duration # is 90 months and exceeds the 7 year limit. # # Note: The following fields are mutually exclusive: `duration_months`, `scheduled_end_time`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] scheduled_end_time # @return [::Google::Type::DateTime] # Optional. Specified end time of the offer. # Must be set to publish the offer if the end policy is # `SCHEDULED_END_TIME`. # When set, the time must be in the future and at a day boundary in the # America/Los_Angeles time zone, and must be after # `term.scheduled_start_time` if applicable. # # Note: The following fields are mutually exclusive: `scheduled_end_time`, `duration_months`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] max_renewal_count # @return [::Integer] # Optional. The max number of renewals allowed, after the initial term # ends. This field is only relevant to standard interval offers with # interval of 'MONTHLY_PRORATED', 'MONTHLY_NOT_PRORATED', # 'QUARTERLY_NOT_PRORATED' or 'YEARLY_NOT_PRORATED'. Other types of # offers cannot be renewed. # # For example, if the initial term is 1 year and the max renewals is 3, # the customer can renew the offer for up to 3 additional years after the # initial term ends. Customers control whether they renew the offer. # # Allowing a customer to renew an offer does not constitute a guarantee # to the customer that the offered product will still be available to be # renewed at the renewal date. # # An offer with a max renewal count of 0 cannot be renewed. # Must be non-negative. # # Note: The following fields are mutually exclusive: `max_renewal_count`, `unlimited_renewal`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [r] unlimited_renewal # @deprecated This field is deprecated and may be removed in the next major version update. # @return [::Boolean] # Output only. Deprecated: This field can only be true on existing offers # with standard interval of 'MONTHLY_POSTPAY'. As of May 2024, we no # longer allow unlimited renewals. # # Note: The following fields are mutually exclusive: `unlimited_renewal`, `max_renewal_count`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] start_policy # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::Term::StartPolicy] # Optional. Defines when the resulting order should start. # Must be set when publishing the offer. # @!attribute [rw] scheduled_start_time # @return [::Google::Type::DateTime] # Optional. The scheduled start time of the offer. Cannot exceed one year # from the time of publish. # # If the start policy is `SCHEDULED_START_TIME`, a future time at a day # boundary in the America/Los_Angeles time zone must be provided when # publishing the offer. # # If the offer amends another private or standard offer, then the # scheduled start time must be: # # * Before or equal to the amended offer's end time if the offer's # end policy is not MATCH_AMENDED_OFFER. Otherwise, it has to be # strictly before the amended offer's end time. # * Before or equal to the start time of the next pending installment of # the amended offer, if amending a private offer with custom # installments. For example, if the amended offer has installments on # 01/01, 02/01, 03/01, 04/01, and today is 02/15, then the new offer's # `scheduled_start_time` must be at or before 03/01. # @!attribute [rw] end_policy # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::Term::EndPolicy] # Optional. Defines when an offer should end. # Must be set when publishing the offer. # @!attribute [r] effective_term_end_time # @return [::Google::Type::DateTime] # Output only. The expected end time of the current offer term. # # At the end of each offer term, an offer associated with an active # order will either renew or end. When an offer renews, a new term begins # and this value changes to reflect the end time of the new term. # When an offer ends this value is no longer set and instead `end_time` is # set. # # When the term of an offer ends and the offer does not renew, the # associated order also ends if the base standard offer has a # subscription price model. Otherwise, the associated order does not end # and remains active. # # Not included for PRIVATE_OFFER_VIEW_BASIC. # Included for PRIVATE_OFFER_VIEW_FULL when the offer has not ended and # either the offer has started or the value can be derived from other # fields. # # For offers that have not started, this field is set when one of the # following conditions is true. # # * The offer sets `term.scheduled_end_time`. # * The offer sets `term.scheduled_start_time` and `term.duration_months`, # the offer's `term.end_policy` is not `MATCH_AMENDED_OFFER`, and the # offer does not have standard_interval set to `MONTHLY_POSTPAY`. class Term include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Defines when an offer should start. module StartPolicy # Default value. This value is unused. START_POLICY_UNSPECIFIED = 0 # The resulting order starts immediately upon the customer's acceptance # of the offer, if no partner approval is required, or else immediately # after the partner approves the purchase if order approval is required. # This enum value cannot be combined with `term.scheduled_start_time`. IMMEDIATE = 1 # The resulting order starts at the scheduled start time. SCHEDULED_START_TIME = 2 end # Defines when an offer should end. module EndPolicy # Default value. This value is unused. END_POLICY_UNSPECIFIED = 0 # Offer ends after the specified duration. # If this is set, then `duration_months` must be positive. AFTER_DURATION = 1 # Offer ends at the schduled time. SCHEDULED_END_TIME = 2 # Offer coterms to the amended offer - the offer ends at the end of the # amended offer's term # # For example, if the amended offer starts on 01/15/24, and has a # duration of 6 months, then it ends on 07/15/24. If the current offer # coterms to the previous offer, and the current offer starts on # 05/06/24, then it will still end on 07/15/24. Assuming the current # offer renews 3 times, then the terms on the current offer will be: # # 1. 05/06/24 - 07/15/24 (First term, ends on 07/15 to coterm with the # amended offer) # 2. 07/15/24 - 01/15/25 (First renewal term) # 3. 01/15/25 - 07/15/25 (Second renewal term) # 4. 07/15/25 - 01/15/26 (Third renewal term) # # As a contrast, if the current offer does not coterm with the amended # offer (such as when `end_policy` is `AFTER_DURATION`), then the # terms will be: # # 1. 05/06/24 - 11/06/24 (First term, ends on 11/06, no coterming) # 2. 11/06/24 - 05/06/25 (First renewal term) # 3. 05/06/25 - 11/06/25 (Second renewal term) # 4. 11/06/25 - 05/06/26 (Third renewal term) # # If this is set, then the following conditions must be met: # # * `single_product_offer.amended_private_offer` must be set, and the # amended private offer must not be ended. # * The proration policy must not change (e.g., you cannot switch # between `MONTHLY_PRORATED` and `MONTHLY_NOT_PRORATED`). # * The current offer must not have custom intervals (where # `custom_interval_price` is set). # * `term.duration_months` must match the amended private offer's # duration. # * The amended private offer must not have a standard interval # of `MONTHLY_POSTPAY`. # # This is currently not supported. MATCH_AMENDED_OFFER = 3 end end # Configurations for the offer that is associated with a single product. # @!attribute [rw] amended_private_offer # @return [::String] # Optional. An existing private offer that will be superseded by this # offer. Unless the private offer is for a product type that supports # [multiple active # orders](https://cloud.google.com/marketplace/docs/partners/offers/multiple-offers), # an amendment private offer must be transacted if and only if the # destination customer billing account already contains an active order # for the same product. The offer to be superseded must be the offer # associated with an active order. # # Amendments generally fall into one of two scenarios: # # 1. **Active Order / Ended Offer**: The term of the amended offer has # ended but it is still associated with an active order. The new # offer must amend the ended private offer. # 2. **Active Order / Active Offer**: The term of the amended offer is # still active and the associated order is active. Similar to above, # the new offer must amend the currently active offer (unless # "multiple active orders" are supported). # # If this is set, then the `base_standard_offer` parent service must # match the parent service of the `base_standard_offer` in the # `amended_private_offer`. # # **Active Term Restrictions**: # If the term of the amended private offer has *NOT* ended, then the # following compatibility rules apply: # # * **Price Model Compatibility**: # * Flat Fee (with or without usage) offers can amend Flat Fee # offers. # * Usage-only or CUD offers can amend usage-only offers. # * Commitment-based offers must amend offers of the same price # model subtype (e.g., "additional usage at list price" vs "all # usage discounted"). # * **Billing Frequency Compatibility**: Determined by # `standard_interval` or `custom_interval_price`. # * If the amended offer has a custom billing frequency, the new # offer must also have a custom frequency. # * If the amended offer has a standard frequency (Monthly, # Quarterly, or Yearly), the new offer must maintain the same # frequency or transition to a custom frequency. # * Switching between different standard frequencies (e.g., Monthly # to Quarterly) is not supported. # * For Monthly frequency, switching between `MONTHLY_PRORATED` # and `MONTHLY_NOT_PRORATED` is supported, unless the offer's # `term.end_policy` is `MATCH_AMENDED_OFFER`. # * For usage-only offers, there are no billing frequency # restrictions. # # Other criteria for offer amendment are detailed elsewhere. # # Note: The following fields are mutually exclusive: `amended_private_offer`, `amended_standard_offer`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] amended_standard_offer # @return [::String] # Optional. An existing standard offer that will be superseded by this # offer. An amendment private offer must be transacted if the destination # customer billing account already contains an active order for the same # product, and otherwise cannot be transacted. The offer to be superseded # must be the offer associated with the active order. # # If this is set, then the `base_standard_offer` must contain the same # parent service as the parent service of the `amended_standard_offer`. # The price model of this offer must be compatible with the price model # of the `amended_standard_offer`: # # * Flat Fee, or Flat Fee with usage offers can amend Flat Fee or Flat # Fee with usage standard offers. # * Usage-only offers, or CUD offers can amend usage-only standard # offers. # # Other criteria for offer amendment are detailed elsewhere. # # Note: The following fields are mutually exclusive: `amended_standard_offer`, `amended_private_offer`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] standard_interval_price # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::StandardIntervalPrice] # Optional. Price configurations for offers with standard intervals. # A price must be set when publishing the offer. # # Note: The following fields are mutually exclusive: `standard_interval_price`, `custom_interval_price`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] custom_interval_price # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::CustomIntervalPrice] # Optional. Price configurations for offers with custom intervals. # Custom interval corresponds to "custom billing frequency", # see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule. # A price must be set when publishing the offer. # # Note: The following fields are mutually exclusive: `custom_interval_price`, `standard_interval_price`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] base_standard_offer # @return [::String] # Optional. The StandardOffer this PrivateOffer is based on. # Must be in the same project as the private offer, and must be effective # at the time of publishing. Must be present to publish the offer. # # Format: # projects/\\{project}/locations/\\{location}/services/\\{service}/standardOffers/\\{standard_offer} # @!attribute [r] service_level # @return [::String] # Output only. The service level (also known as the 'plan') of the base # standard offer. The value is populated at publish time from the base # standard offer. # @!attribute [r] reseller_private_offer_plan_id # @return [::String] # Output only. Present for offers created by a reseller from a reseller # private offer plan (RPOP). When set, contains the ID of the originating # RPOP. Not included for `PRIVATE_OFFER_VIEW_BASIC`. # @!attribute [rw] features # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Feature>] # Optional. The custom product features to display for this offer. # Feature `display_name` values must be unique to publish the offer. # The set of features specified here should generally include all features # included in the base service level, with optionally customized values, # but is not required to match exactly and may include additional features. # @!attribute [r] effective_installment_timeline # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Installment>] # Output only. The effective installment timeline of the offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. # Included for `PRIVATE_OFFER_VIEW_FULL` if all necessary information is # available to generate the timeline, and if the offer has # 'standard_interval_price' of 'MONTHLY_PRORATED', 'MONTHLY_NOT_PRORATED', # 'QUARTERLY_NOT_PRORATED', or 'YEARLY_NOT_PRORATED'. # @!attribute [r] contract_value # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::ContractValue] # Output only. Contract value of the offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. # @!attribute [r] revenue_share # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::RevenueShare] # Output only. Revenue share information for this Private Offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. class SingleProductOffer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Additional details used to describe customization of the service level. # # Features are used to distinguish service levels of the same product. # When a product has a single service level, all details can be contained # in the product documentation. When a product has multiple service levels, # each service level can be assigned a distinct set of features to # distinguish the key differences between the service levels. # # In addition to customizing pricing and other transaction details, a # private offer may include customization of partner-managed product # behavior. When this is the case, the details of the custom behavior are # described using features. # @!attribute [rw] display_name # @return [::String] # Optional. Human readable display text characterizing the feature. # Should be sufficiently detailed to identify the feature, allowing # features to be correlated across separate offers and service levels. # Must be non-empty to publish the offer. # The maximum allowed length is 128 characters. # Allows characters from the following Unicode Property Classes: # Letters, Numbers, Punctuation, Symbols, and Separators # @!attribute [rw] value # @return [::String] # Optional. Human readable display text reflecting the value of the # feature. Used for variable features not captured by the display_name # alone. The maximum allowed length is 3000 characters. Allows characters # from the following Unicode Property Classes: Letters, Numbers, # Punctuation, Symbols, and Separators class Feature include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price model of the private offer. # # Private offers are referred to as having different kinds of price models # based on the combination of fields set in the price model. The following # terminology is used in documentation and other reference material. # # * Usage-based: the price model does not set `flat_fee` # * Usage-only: the price model sets only `usage` # * CUD (committed use discount): the price model sets `commitment` # * Commitment discount with additional usage at list price: # The price model sets `commitment` and not `usage`. # * Commitment with all usage discounted: The price model sets # `commitment` and `usage`. # * Flat fee: the price model sets only `flat_fee` # * Flat fee with usage: the price model sets `flat_fee` and `usage` # # See # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-pricing-model#CUD # for the price models. # @!attribute [rw] flat_fee # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::FlatFee] # Optional. The price configurations for the flat fee subscription. # Must be unset when the base standard offer's price model does not # include subscription SKUs. # # Note: The following fields are mutually exclusive: `flat_fee`, `commitment`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] commitment # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Commitment] # Optional. The price configurations for the commitment based # subscription. Must be unset when the base standard offer's price # model includes subscription SKUs. # # Note: The following fields are mutually exclusive: `commitment`, `flat_fee`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] usage # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Usage] # Optional. The price configurations for the usage part. # If this field is set, the `Commitment.discount_percent` must be unset. # A private offer can apply a discount to all usage or to a usage # commitment, but not both. # Must be unset when the base standard offer's price model includes no # usage SKUs. class PriceModel include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # The discount for a specific SKU. # @!attribute [rw] sku # @return [::String] # Optional. The name of a partner SKU from this API. # # Must refer to a SKU in the price model of the base standard offer. # Inclusion in the base price model can occur either directly or # indirectly via inclusion in an included SkuGroup. # # Currently, standard offer price models include only partner SKUs # in the same project as the standard offer. This may change. # # Format: # projects/\\{project}/locations/\\{location}/services/\\{service}/skus/\\{sku} # # Note: The following fields are mutually exclusive: `sku`, `cloud_billing_sku`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] cloud_billing_sku # @return [::String] # Optional. The name of a Google SKU from the Cloud Billing API. # # Used for partner products sold by Google, such as Premium Operating # System Images sold for use in Compute Engine. This is not common. # SKUs of this type are not present on this API and can instead be # found on the Cloud Billing API or at https://cloud.google.com/skus. # # Must refer to a SKU in the price model of the base standard offer. # Google SKUs are always referenced in standard offers via SkuGroups. # # Format: services/\\{service}/skus/\\{sku} # # Note: The following fields are mutually exclusive: `cloud_billing_sku`, `sku`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] discount_percent # @return [::Google::Type::Decimal] # Optional. The discount percent for the SKU. # For example, `10` means a discount of 10%. If the original SKU # price is $100/hour then the discounted price will be $90/hour. # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", # and "". # Must be present to publish the offer. class SkuDiscount include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price for the usage SKUs. # @!attribute [rw] default_discount_percent # @return [::Google::Type::Decimal] # Optional. The default discount percent for usage SKUs. # An unset default discount percent is equivalent to 0 (no discount). # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "". # @!attribute [rw] sku_discounts # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::SkuDiscount>] # Optional. The discounts for the specific SKUs that override the # `default_discount_percent`. class Usage include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price configurations for the flat fee subscriptions. # @!attribute [rw] flat_fee_override # @return [::Google::Type::Money] # Optional. Flat fee overriding the default flat fee in the base # standard offer. Value cannot be negative. The currency must be "USD" # and precision is limited to cents. Must be present to publish the # offer, if the parent message is set. The maximum allowed value is # 1,000,000,000 USD. class FlatFee include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price configurations for the commitment based subscriptions. # @!attribute [rw] commitment_amount # @return [::Google::Type::Money] # Optional. The commitment balance that the customer will receive. # Value cannot be negative. # The currency must be "USD" and precision is limited to cents. # Must be present to publish the offer, if the parent message is set. # The maximum allowed value is 1,000,000,000 USD. # # If the current offer amends a private offer where the term has not # ended, and if the field # `single_product_offer.standard_interval_price.price_model.commitment.commitment_amount` # is set on both the current offer and the amended private offer, then # the commitment amount must be equal or higher on the current offer, # compared to the amended private offer. # @!attribute [rw] discount_percent # @return [::Google::Type::Decimal] # Optional. The discount percent on `commitment_amount`. # # For example, `10` means a discount of 10%. If the original # `commitment_amount` is $100 then the discounted amount will be $90. # The customer is charged $90 and receives $100 in credits. # # All reported usage will be charged at the standard price. # If this field is set, the `price_model.usage` must be unset. A # private offer can apply a discount to all usage or to a usage # commitment, but not both. # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "". # # Must be present to publish the offer. # @!attribute [rw] additional_credit # @return [::Google::Type::Money] # Optional. Additional credit granted to the customer. # Additional credits are only supported for custom interval offers. # Equivalent behavior can be achieved for standard interval offers by # varying the `commitment_amount` and `discount_percent`. # # Value cannot be negative. # The currency must be "USD" and precision is limited to cents. # The maximum allowed value is 1,000,000 USD. # @!attribute [rw] discard_previous_credit_balance # @return [::Boolean] # Optional. Whether to discard the previous credit balance when the # associated installment starts. If not set, the previous credit # balance will be rolled over to the current installment. # # If there are no previous installments, then the value of this field # will not matter - since it has no effect when no credits exist. class Commitment include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end end # Price configurations for offers with standard intervals. # @!attribute [rw] standard_interval # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::StandardIntervalPrice::StandardInterval] # Optional. The standard interval of the offer. # Must be present to publish unless the price model is usage-only. # @!attribute [rw] price_model # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel] # Optional. The price model of the offer. # Must be present to publish the offer. class StandardIntervalPrice include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # The options for offers with standard intervals. module StandardInterval # The private offer does not have an interval. # If this is set, then the offer is "usage-only". # Field `term.duration_months` must be positive. STANDARD_INTERVAL_UNSPECIFIED = 0 # The schedule of the monthly postpay offers. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # No longer supported as of May 2024. Cannot be used to publish # new offers. MONTHLY_POSTPAY = 1 # Monthly installments with proration. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 04/15, and the offer duration is # 3 months, the following installments will be created: # # 1: from 04/15 to 05/01, at the prorated price for April. # # # 2: from 05/01 to 06/01, at the full monthly price for May. # # # 3: from 06/01 to 07/01, at the full monthly price for June. # # # 4: from 07/01 to 07/15, at the prorated price for July. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. MONTHLY_PRORATED = 2 # Monthly installments without proration. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 04/15, and the offer duration is # 3 months, the following installments will be created: # # 1: from 04/15 to 05/15, at the full monthly price. # # # 2: from 05/15 to 06/15, at the full monthly price. # # # 3: from 06/15 to 07/15, at the full monthly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. MONTHLY_NOT_PRORATED = 3 # Quarterly installments which are not prorated. # This type of offer has "Quarterly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 01/15, and the offer duration is # 3 quarters, the following installments will be created: # # 1: from 01/15 to 04/15, at the full quarterly price. # # # 2: from 04/15 to 07/15, at the full quarterly price. # # # 3: from 07/15 to 10/15, at the full quarterly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. QUARTERLY_NOT_PRORATED = 4 # Yearly installments which are not prorated. # This type of offer has "Yearly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 01/15/2025, and the offer # duration is 3 years, the following installments will be created: # # 1: from 01/15/2025 to 01/15/2026, at the full yearly price. # # # 2: from 01/15/2026 to 01/15/2027, at the full yearly price. # # # 3: from 01/15/2027 to 01/15/2028, at the full yearly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. YEARLY_NOT_PRORATED = 5 end end # An installment of the offer. # @!attribute [rw] start_time # @return [::Google::Type::DateTime] # Optional. The start time of the installment. # Each installment must have a unique start time with one exception: # When the `term.start_policy` of the offer's term is `IMMEDIATE`, # the `start_time` of the first installment must be unset. # The actual start time is not recorded in the offer and instead is # determined by the time the resulting order became active. # # When the `term.start_policy` of the offer's term is # `SCHEDULED_START_TIME`, then the first installment's `start_time` must # match `term.scheduled_start_time`. # # If the `term.end_policy` of the offer's term is `SCHEDULED_END_TIME`, # then installment `start_time` must be before `term.scheduled_end_time`. # If it's `AFTER_DURATION`, then installment `start_time` must be before # the time calculated by adding the `term.duration_months` to # the start time of the offer. # # The `start_time` of the installments cannot be before the # `accept_deadline_time` of the offer. # # Installment start times must be in strictly increasing chronological # order. # @!attribute [rw] price_model # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel] # Optional. The price model of the installment. # All installments must have the same form of price model. class Installment include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Price configurations for offers with custom intervals. # @!attribute [rw] installments # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Installment>] # Optional. The installments that make up the installment timeline. # All installments must have the same form of price model (e.g. # all commitment, or all flat fee). A subscription must be present # under the price model for every installment. # # Must contain at least one installment to publish the offer. class CustomIntervalPrice include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The contract value of the offer. # @!attribute [r] total_contract_value # @return [::Google::Type::Money] # Output only. The total contract value of the offer. # This will be set for all non-draft private offers, as long as # 'PRIVATE_OFFER_VIEW_FULL' is requested. For DRAFT private offers, # this will be populated only when the end user's billing account is # set and when the pricing and term configuration is sufficiently # complete to allow for a calculation. class ContractValue include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Revenue Share information for a Private Offer. # For more details about the revenue share, including how the value is # determined, see # https://docs.cloud.google.com/marketplace/docs/partners/revenue-share-scenarios. # # Not included for `PRIVATE_OFFER_VIEW_BASIC`, or for DRAFT private offers. # # For non-draft private offers, these fields are populated based on the # following: # # * Offers published after April 20, 2025 will always have revenue # share fields populated. # * Offers published on or before April 20, 2025 will only have revenue # share fields populated if they were associated with an active, # unexpired order on that date. # @!attribute [r] current_term_vendor_net_revenue_percent # @return [::Google::Type::Decimal] # Output only. The revenue share currently in effect. # # The range of the value is between 0 and 100. For example, 80 # means the Vendor's current term revenue share is 80%. The vendor # will keep 80% of the revenue. # . # @!attribute [r] renewal_term_vendor_net_revenue_percent # @return [::Google::Type::Decimal] # Output only. The expected revenue share for the renewal term. # Not included if the offer does not have renewal terms. # # The range of the value is between 0 and 100. For example, 80 # means the Vendor's current term revenue share is 80%. The vendor # will keep 80% of the revenue after renewal. # . class RevenueShare include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end end # State of an offer. module State # Default value. This value is unused. STATE_UNSPECIFIED = 0 # The default state after creation when the offer can be edited. # In all other states, the contents of the offer cannot be edited. DRAFT = 1 # The offer is publishing. # Publishing will complete when all publishing requirements are satisfied. PUBLISHING = 2 # The offer has been published and is available to the customer to accept. PUBLISHED = 3 # The offer has been accepted by the customer. ACCEPTED = 4 # The offer was cancelled by the provider before it was transacted. # Cancelled offers can no longer be accepted by the customer. CANCELLED = 5 # The offer expired without being accepted by the customer. # Expired offers can no longer be accepted by the customer. EXPIRED = 6 # The offer has ended. # # Ended offers were accepted and active in the past, but have now reached # the end of their term or have been terminated. ENDED = 7 end # The type of the deal transacted with the offer. The deal type of an offer # is a factor in determining the offer's revenue share. module OfferDealType # Default value. This value is unused. OFFER_DEAL_TYPE_UNSPECIFIED = 0 # The offer corresponds to a preexisting commercial arrangement for a # workload on Google Cloud that is being transferred to the Cloud # Marketplace. CHANNEL_SHIFT = 1 # The offer corresponds to a preexisting commercial arrangement for a # workload previously not on Google Cloud that is being transferred to # Google Cloud. MIGRATION = 2 # The offer corresponds to a renewal of a deal initially transacted on # the Google Cloud Marketplace. NATIVE_RENEWAL = 3 # The offer corresponds to a new deal transacted on the Google Cloud # Marketplace. # # This value is not allowed if the offer amends another private offer # where the term has not ended, and the amended private offer has a deal # type of `MIGRATION`, `CHANNEL_SHIFT` or `NATIVE_RENEWAL`. NEW = 4 end end |
#create_time ⇒ ::Google::Protobuf::Timestamp (readonly)
Returns Output only. The creation time.
148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 |
# File 'proto_docs/google/cloud/commerceproducer/v1beta/private_offer.rb', line 148 class PrivateOffer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Information about the Google review process. # @!attribute [r] review_approve_time # @return [::Google::Protobuf::Timestamp] # Output only. The approval time of the Google review process. class PublishRequirementGoogleReview include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Contact information for a reseller. # @!attribute [r] contact # @return [::String] # Output only. The name of the reseller contact for this offer. # @!attribute [r] email # @return [::String] # Output only. The email of the reseller contact for this offer. class ResellerContact include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Contact information for the partner representative. # @!attribute [rw] contact # @return [::String] # Optional. Display text identifying the partner sales contact. # Displayed to the customer. # Must be provided when publishing the offer. # Maximum length: 256 characters. # @!attribute [rw] email # @return [::String] # Optional. The email address of the partner sales contact. # Displayed to the customer. # The format of the provided email address is validated when publishing the # offer, but no verification is performed that the email address actually # exists, accepts email, or is otherwise functional. class PartnerContact include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Information about the customer. # @!attribute [rw] entity_title # @return [::String] # Optional. A string identifying the customer's entity (for example, the # customer's organization or company name). Must be provided when # publishing the offer. Maximum length: 256 characters. # @!attribute [rw] contact # @return [::String] # Optional. A string identifying the customer contact. # Must be provided when publishing the offer. # Maximum length: 256 characters. # @!attribute [rw] email # @return [::String] # Optional. Email of customer contact. # If provided, it must be a well-formed email address. # @!attribute [r] address # @deprecated This field is deprecated and may be removed in the next major version update. # @return [::String] # Output only. Legal address of the customer organization. # This field can no longer be set, but it is preserved to return the # data from existing offers where address is set. # @!attribute [rw] target_billing_account # @return [::String] # Optional. The customer's billing account targeted by the offer. # The private offer once published can be accepted by a billing # administrator of the target billing account. If the customer accepts the # offer and later moves the resulting order to a new billing account, this # field will continue to reflect the original billing account to which the # private offer was extended. Must be provided when publishing the offer. # # To publish this private offer: # # * The billing account must exist. # * The billing account must not be in a free trial. # * The billing account must comply with Marketplace Reselling Policies. # * Reseller parent billing accounts are prohibited. Reseller subaccounts # are prohibited unless the service is enabled for reselling. # # Format: billingAccounts/012345-567890-ABCDEF class Customer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Configurations for the offer term and renewal options. # Extending a private offer to a customer that covers a given term # constitutes a guarantee to the customer that the product will remain # available to them for the duration of the term. # @!attribute [rw] duration_months # @return [::Integer] # Optional. Duration in months of the offer term. # The offer will end on the same day of the month after this duration. If # that date is not available, the offer will end on the last day of the # month. For example, if the offer starts on 01/31/2024 and the duration # is 13 months, the offer will end on 02/28/2025. # Must be set to publish the offer if the end policy is `AFTER_DURATION` # or `MATCH_AMENDED_OFFER`, and must be a positive value. # # The maximum possible offer duration, including all renewal terms, # cannot exceed 7 years. For example, if `duration_months` is 9 and # `term.max_renewal_count` is 9, then the maximum possible offer duration # is 90 months and exceeds the 7 year limit. # # Note: The following fields are mutually exclusive: `duration_months`, `scheduled_end_time`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] scheduled_end_time # @return [::Google::Type::DateTime] # Optional. Specified end time of the offer. # Must be set to publish the offer if the end policy is # `SCHEDULED_END_TIME`. # When set, the time must be in the future and at a day boundary in the # America/Los_Angeles time zone, and must be after # `term.scheduled_start_time` if applicable. # # Note: The following fields are mutually exclusive: `scheduled_end_time`, `duration_months`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] max_renewal_count # @return [::Integer] # Optional. The max number of renewals allowed, after the initial term # ends. This field is only relevant to standard interval offers with # interval of 'MONTHLY_PRORATED', 'MONTHLY_NOT_PRORATED', # 'QUARTERLY_NOT_PRORATED' or 'YEARLY_NOT_PRORATED'. Other types of # offers cannot be renewed. # # For example, if the initial term is 1 year and the max renewals is 3, # the customer can renew the offer for up to 3 additional years after the # initial term ends. Customers control whether they renew the offer. # # Allowing a customer to renew an offer does not constitute a guarantee # to the customer that the offered product will still be available to be # renewed at the renewal date. # # An offer with a max renewal count of 0 cannot be renewed. # Must be non-negative. # # Note: The following fields are mutually exclusive: `max_renewal_count`, `unlimited_renewal`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [r] unlimited_renewal # @deprecated This field is deprecated and may be removed in the next major version update. # @return [::Boolean] # Output only. Deprecated: This field can only be true on existing offers # with standard interval of 'MONTHLY_POSTPAY'. As of May 2024, we no # longer allow unlimited renewals. # # Note: The following fields are mutually exclusive: `unlimited_renewal`, `max_renewal_count`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] start_policy # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::Term::StartPolicy] # Optional. Defines when the resulting order should start. # Must be set when publishing the offer. # @!attribute [rw] scheduled_start_time # @return [::Google::Type::DateTime] # Optional. The scheduled start time of the offer. Cannot exceed one year # from the time of publish. # # If the start policy is `SCHEDULED_START_TIME`, a future time at a day # boundary in the America/Los_Angeles time zone must be provided when # publishing the offer. # # If the offer amends another private or standard offer, then the # scheduled start time must be: # # * Before or equal to the amended offer's end time if the offer's # end policy is not MATCH_AMENDED_OFFER. Otherwise, it has to be # strictly before the amended offer's end time. # * Before or equal to the start time of the next pending installment of # the amended offer, if amending a private offer with custom # installments. For example, if the amended offer has installments on # 01/01, 02/01, 03/01, 04/01, and today is 02/15, then the new offer's # `scheduled_start_time` must be at or before 03/01. # @!attribute [rw] end_policy # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::Term::EndPolicy] # Optional. Defines when an offer should end. # Must be set when publishing the offer. # @!attribute [r] effective_term_end_time # @return [::Google::Type::DateTime] # Output only. The expected end time of the current offer term. # # At the end of each offer term, an offer associated with an active # order will either renew or end. When an offer renews, a new term begins # and this value changes to reflect the end time of the new term. # When an offer ends this value is no longer set and instead `end_time` is # set. # # When the term of an offer ends and the offer does not renew, the # associated order also ends if the base standard offer has a # subscription price model. Otherwise, the associated order does not end # and remains active. # # Not included for PRIVATE_OFFER_VIEW_BASIC. # Included for PRIVATE_OFFER_VIEW_FULL when the offer has not ended and # either the offer has started or the value can be derived from other # fields. # # For offers that have not started, this field is set when one of the # following conditions is true. # # * The offer sets `term.scheduled_end_time`. # * The offer sets `term.scheduled_start_time` and `term.duration_months`, # the offer's `term.end_policy` is not `MATCH_AMENDED_OFFER`, and the # offer does not have standard_interval set to `MONTHLY_POSTPAY`. class Term include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Defines when an offer should start. module StartPolicy # Default value. This value is unused. START_POLICY_UNSPECIFIED = 0 # The resulting order starts immediately upon the customer's acceptance # of the offer, if no partner approval is required, or else immediately # after the partner approves the purchase if order approval is required. # This enum value cannot be combined with `term.scheduled_start_time`. IMMEDIATE = 1 # The resulting order starts at the scheduled start time. SCHEDULED_START_TIME = 2 end # Defines when an offer should end. module EndPolicy # Default value. This value is unused. END_POLICY_UNSPECIFIED = 0 # Offer ends after the specified duration. # If this is set, then `duration_months` must be positive. AFTER_DURATION = 1 # Offer ends at the schduled time. SCHEDULED_END_TIME = 2 # Offer coterms to the amended offer - the offer ends at the end of the # amended offer's term # # For example, if the amended offer starts on 01/15/24, and has a # duration of 6 months, then it ends on 07/15/24. If the current offer # coterms to the previous offer, and the current offer starts on # 05/06/24, then it will still end on 07/15/24. Assuming the current # offer renews 3 times, then the terms on the current offer will be: # # 1. 05/06/24 - 07/15/24 (First term, ends on 07/15 to coterm with the # amended offer) # 2. 07/15/24 - 01/15/25 (First renewal term) # 3. 01/15/25 - 07/15/25 (Second renewal term) # 4. 07/15/25 - 01/15/26 (Third renewal term) # # As a contrast, if the current offer does not coterm with the amended # offer (such as when `end_policy` is `AFTER_DURATION`), then the # terms will be: # # 1. 05/06/24 - 11/06/24 (First term, ends on 11/06, no coterming) # 2. 11/06/24 - 05/06/25 (First renewal term) # 3. 05/06/25 - 11/06/25 (Second renewal term) # 4. 11/06/25 - 05/06/26 (Third renewal term) # # If this is set, then the following conditions must be met: # # * `single_product_offer.amended_private_offer` must be set, and the # amended private offer must not be ended. # * The proration policy must not change (e.g., you cannot switch # between `MONTHLY_PRORATED` and `MONTHLY_NOT_PRORATED`). # * The current offer must not have custom intervals (where # `custom_interval_price` is set). # * `term.duration_months` must match the amended private offer's # duration. # * The amended private offer must not have a standard interval # of `MONTHLY_POSTPAY`. # # This is currently not supported. MATCH_AMENDED_OFFER = 3 end end # Configurations for the offer that is associated with a single product. # @!attribute [rw] amended_private_offer # @return [::String] # Optional. An existing private offer that will be superseded by this # offer. Unless the private offer is for a product type that supports # [multiple active # orders](https://cloud.google.com/marketplace/docs/partners/offers/multiple-offers), # an amendment private offer must be transacted if and only if the # destination customer billing account already contains an active order # for the same product. The offer to be superseded must be the offer # associated with an active order. # # Amendments generally fall into one of two scenarios: # # 1. **Active Order / Ended Offer**: The term of the amended offer has # ended but it is still associated with an active order. The new # offer must amend the ended private offer. # 2. **Active Order / Active Offer**: The term of the amended offer is # still active and the associated order is active. Similar to above, # the new offer must amend the currently active offer (unless # "multiple active orders" are supported). # # If this is set, then the `base_standard_offer` parent service must # match the parent service of the `base_standard_offer` in the # `amended_private_offer`. # # **Active Term Restrictions**: # If the term of the amended private offer has *NOT* ended, then the # following compatibility rules apply: # # * **Price Model Compatibility**: # * Flat Fee (with or without usage) offers can amend Flat Fee # offers. # * Usage-only or CUD offers can amend usage-only offers. # * Commitment-based offers must amend offers of the same price # model subtype (e.g., "additional usage at list price" vs "all # usage discounted"). # * **Billing Frequency Compatibility**: Determined by # `standard_interval` or `custom_interval_price`. # * If the amended offer has a custom billing frequency, the new # offer must also have a custom frequency. # * If the amended offer has a standard frequency (Monthly, # Quarterly, or Yearly), the new offer must maintain the same # frequency or transition to a custom frequency. # * Switching between different standard frequencies (e.g., Monthly # to Quarterly) is not supported. # * For Monthly frequency, switching between `MONTHLY_PRORATED` # and `MONTHLY_NOT_PRORATED` is supported, unless the offer's # `term.end_policy` is `MATCH_AMENDED_OFFER`. # * For usage-only offers, there are no billing frequency # restrictions. # # Other criteria for offer amendment are detailed elsewhere. # # Note: The following fields are mutually exclusive: `amended_private_offer`, `amended_standard_offer`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] amended_standard_offer # @return [::String] # Optional. An existing standard offer that will be superseded by this # offer. An amendment private offer must be transacted if the destination # customer billing account already contains an active order for the same # product, and otherwise cannot be transacted. The offer to be superseded # must be the offer associated with the active order. # # If this is set, then the `base_standard_offer` must contain the same # parent service as the parent service of the `amended_standard_offer`. # The price model of this offer must be compatible with the price model # of the `amended_standard_offer`: # # * Flat Fee, or Flat Fee with usage offers can amend Flat Fee or Flat # Fee with usage standard offers. # * Usage-only offers, or CUD offers can amend usage-only standard # offers. # # Other criteria for offer amendment are detailed elsewhere. # # Note: The following fields are mutually exclusive: `amended_standard_offer`, `amended_private_offer`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] standard_interval_price # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::StandardIntervalPrice] # Optional. Price configurations for offers with standard intervals. # A price must be set when publishing the offer. # # Note: The following fields are mutually exclusive: `standard_interval_price`, `custom_interval_price`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] custom_interval_price # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::CustomIntervalPrice] # Optional. Price configurations for offers with custom intervals. # Custom interval corresponds to "custom billing frequency", # see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule. # A price must be set when publishing the offer. # # Note: The following fields are mutually exclusive: `custom_interval_price`, `standard_interval_price`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] base_standard_offer # @return [::String] # Optional. The StandardOffer this PrivateOffer is based on. # Must be in the same project as the private offer, and must be effective # at the time of publishing. Must be present to publish the offer. # # Format: # projects/\\{project}/locations/\\{location}/services/\\{service}/standardOffers/\\{standard_offer} # @!attribute [r] service_level # @return [::String] # Output only. The service level (also known as the 'plan') of the base # standard offer. The value is populated at publish time from the base # standard offer. # @!attribute [r] reseller_private_offer_plan_id # @return [::String] # Output only. Present for offers created by a reseller from a reseller # private offer plan (RPOP). When set, contains the ID of the originating # RPOP. Not included for `PRIVATE_OFFER_VIEW_BASIC`. # @!attribute [rw] features # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Feature>] # Optional. The custom product features to display for this offer. # Feature `display_name` values must be unique to publish the offer. # The set of features specified here should generally include all features # included in the base service level, with optionally customized values, # but is not required to match exactly and may include additional features. # @!attribute [r] effective_installment_timeline # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Installment>] # Output only. The effective installment timeline of the offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. # Included for `PRIVATE_OFFER_VIEW_FULL` if all necessary information is # available to generate the timeline, and if the offer has # 'standard_interval_price' of 'MONTHLY_PRORATED', 'MONTHLY_NOT_PRORATED', # 'QUARTERLY_NOT_PRORATED', or 'YEARLY_NOT_PRORATED'. # @!attribute [r] contract_value # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::ContractValue] # Output only. Contract value of the offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. # @!attribute [r] revenue_share # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::RevenueShare] # Output only. Revenue share information for this Private Offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. class SingleProductOffer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Additional details used to describe customization of the service level. # # Features are used to distinguish service levels of the same product. # When a product has a single service level, all details can be contained # in the product documentation. When a product has multiple service levels, # each service level can be assigned a distinct set of features to # distinguish the key differences between the service levels. # # In addition to customizing pricing and other transaction details, a # private offer may include customization of partner-managed product # behavior. When this is the case, the details of the custom behavior are # described using features. # @!attribute [rw] display_name # @return [::String] # Optional. Human readable display text characterizing the feature. # Should be sufficiently detailed to identify the feature, allowing # features to be correlated across separate offers and service levels. # Must be non-empty to publish the offer. # The maximum allowed length is 128 characters. # Allows characters from the following Unicode Property Classes: # Letters, Numbers, Punctuation, Symbols, and Separators # @!attribute [rw] value # @return [::String] # Optional. Human readable display text reflecting the value of the # feature. Used for variable features not captured by the display_name # alone. The maximum allowed length is 3000 characters. Allows characters # from the following Unicode Property Classes: Letters, Numbers, # Punctuation, Symbols, and Separators class Feature include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price model of the private offer. # # Private offers are referred to as having different kinds of price models # based on the combination of fields set in the price model. The following # terminology is used in documentation and other reference material. # # * Usage-based: the price model does not set `flat_fee` # * Usage-only: the price model sets only `usage` # * CUD (committed use discount): the price model sets `commitment` # * Commitment discount with additional usage at list price: # The price model sets `commitment` and not `usage`. # * Commitment with all usage discounted: The price model sets # `commitment` and `usage`. # * Flat fee: the price model sets only `flat_fee` # * Flat fee with usage: the price model sets `flat_fee` and `usage` # # See # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-pricing-model#CUD # for the price models. # @!attribute [rw] flat_fee # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::FlatFee] # Optional. The price configurations for the flat fee subscription. # Must be unset when the base standard offer's price model does not # include subscription SKUs. # # Note: The following fields are mutually exclusive: `flat_fee`, `commitment`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] commitment # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Commitment] # Optional. The price configurations for the commitment based # subscription. Must be unset when the base standard offer's price # model includes subscription SKUs. # # Note: The following fields are mutually exclusive: `commitment`, `flat_fee`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] usage # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Usage] # Optional. The price configurations for the usage part. # If this field is set, the `Commitment.discount_percent` must be unset. # A private offer can apply a discount to all usage or to a usage # commitment, but not both. # Must be unset when the base standard offer's price model includes no # usage SKUs. class PriceModel include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # The discount for a specific SKU. # @!attribute [rw] sku # @return [::String] # Optional. The name of a partner SKU from this API. # # Must refer to a SKU in the price model of the base standard offer. # Inclusion in the base price model can occur either directly or # indirectly via inclusion in an included SkuGroup. # # Currently, standard offer price models include only partner SKUs # in the same project as the standard offer. This may change. # # Format: # projects/\\{project}/locations/\\{location}/services/\\{service}/skus/\\{sku} # # Note: The following fields are mutually exclusive: `sku`, `cloud_billing_sku`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] cloud_billing_sku # @return [::String] # Optional. The name of a Google SKU from the Cloud Billing API. # # Used for partner products sold by Google, such as Premium Operating # System Images sold for use in Compute Engine. This is not common. # SKUs of this type are not present on this API and can instead be # found on the Cloud Billing API or at https://cloud.google.com/skus. # # Must refer to a SKU in the price model of the base standard offer. # Google SKUs are always referenced in standard offers via SkuGroups. # # Format: services/\\{service}/skus/\\{sku} # # Note: The following fields are mutually exclusive: `cloud_billing_sku`, `sku`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] discount_percent # @return [::Google::Type::Decimal] # Optional. The discount percent for the SKU. # For example, `10` means a discount of 10%. If the original SKU # price is $100/hour then the discounted price will be $90/hour. # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", # and "". # Must be present to publish the offer. class SkuDiscount include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price for the usage SKUs. # @!attribute [rw] default_discount_percent # @return [::Google::Type::Decimal] # Optional. The default discount percent for usage SKUs. # An unset default discount percent is equivalent to 0 (no discount). # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "". # @!attribute [rw] sku_discounts # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::SkuDiscount>] # Optional. The discounts for the specific SKUs that override the # `default_discount_percent`. class Usage include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price configurations for the flat fee subscriptions. # @!attribute [rw] flat_fee_override # @return [::Google::Type::Money] # Optional. Flat fee overriding the default flat fee in the base # standard offer. Value cannot be negative. The currency must be "USD" # and precision is limited to cents. Must be present to publish the # offer, if the parent message is set. The maximum allowed value is # 1,000,000,000 USD. class FlatFee include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price configurations for the commitment based subscriptions. # @!attribute [rw] commitment_amount # @return [::Google::Type::Money] # Optional. The commitment balance that the customer will receive. # Value cannot be negative. # The currency must be "USD" and precision is limited to cents. # Must be present to publish the offer, if the parent message is set. # The maximum allowed value is 1,000,000,000 USD. # # If the current offer amends a private offer where the term has not # ended, and if the field # `single_product_offer.standard_interval_price.price_model.commitment.commitment_amount` # is set on both the current offer and the amended private offer, then # the commitment amount must be equal or higher on the current offer, # compared to the amended private offer. # @!attribute [rw] discount_percent # @return [::Google::Type::Decimal] # Optional. The discount percent on `commitment_amount`. # # For example, `10` means a discount of 10%. If the original # `commitment_amount` is $100 then the discounted amount will be $90. # The customer is charged $90 and receives $100 in credits. # # All reported usage will be charged at the standard price. # If this field is set, the `price_model.usage` must be unset. A # private offer can apply a discount to all usage or to a usage # commitment, but not both. # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "". # # Must be present to publish the offer. # @!attribute [rw] additional_credit # @return [::Google::Type::Money] # Optional. Additional credit granted to the customer. # Additional credits are only supported for custom interval offers. # Equivalent behavior can be achieved for standard interval offers by # varying the `commitment_amount` and `discount_percent`. # # Value cannot be negative. # The currency must be "USD" and precision is limited to cents. # The maximum allowed value is 1,000,000 USD. # @!attribute [rw] discard_previous_credit_balance # @return [::Boolean] # Optional. Whether to discard the previous credit balance when the # associated installment starts. If not set, the previous credit # balance will be rolled over to the current installment. # # If there are no previous installments, then the value of this field # will not matter - since it has no effect when no credits exist. class Commitment include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end end # Price configurations for offers with standard intervals. # @!attribute [rw] standard_interval # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::StandardIntervalPrice::StandardInterval] # Optional. The standard interval of the offer. # Must be present to publish unless the price model is usage-only. # @!attribute [rw] price_model # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel] # Optional. The price model of the offer. # Must be present to publish the offer. class StandardIntervalPrice include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # The options for offers with standard intervals. module StandardInterval # The private offer does not have an interval. # If this is set, then the offer is "usage-only". # Field `term.duration_months` must be positive. STANDARD_INTERVAL_UNSPECIFIED = 0 # The schedule of the monthly postpay offers. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # No longer supported as of May 2024. Cannot be used to publish # new offers. MONTHLY_POSTPAY = 1 # Monthly installments with proration. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 04/15, and the offer duration is # 3 months, the following installments will be created: # # 1: from 04/15 to 05/01, at the prorated price for April. # # # 2: from 05/01 to 06/01, at the full monthly price for May. # # # 3: from 06/01 to 07/01, at the full monthly price for June. # # # 4: from 07/01 to 07/15, at the prorated price for July. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. MONTHLY_PRORATED = 2 # Monthly installments without proration. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 04/15, and the offer duration is # 3 months, the following installments will be created: # # 1: from 04/15 to 05/15, at the full monthly price. # # # 2: from 05/15 to 06/15, at the full monthly price. # # # 3: from 06/15 to 07/15, at the full monthly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. MONTHLY_NOT_PRORATED = 3 # Quarterly installments which are not prorated. # This type of offer has "Quarterly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 01/15, and the offer duration is # 3 quarters, the following installments will be created: # # 1: from 01/15 to 04/15, at the full quarterly price. # # # 2: from 04/15 to 07/15, at the full quarterly price. # # # 3: from 07/15 to 10/15, at the full quarterly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. QUARTERLY_NOT_PRORATED = 4 # Yearly installments which are not prorated. # This type of offer has "Yearly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 01/15/2025, and the offer # duration is 3 years, the following installments will be created: # # 1: from 01/15/2025 to 01/15/2026, at the full yearly price. # # # 2: from 01/15/2026 to 01/15/2027, at the full yearly price. # # # 3: from 01/15/2027 to 01/15/2028, at the full yearly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. YEARLY_NOT_PRORATED = 5 end end # An installment of the offer. # @!attribute [rw] start_time # @return [::Google::Type::DateTime] # Optional. The start time of the installment. # Each installment must have a unique start time with one exception: # When the `term.start_policy` of the offer's term is `IMMEDIATE`, # the `start_time` of the first installment must be unset. # The actual start time is not recorded in the offer and instead is # determined by the time the resulting order became active. # # When the `term.start_policy` of the offer's term is # `SCHEDULED_START_TIME`, then the first installment's `start_time` must # match `term.scheduled_start_time`. # # If the `term.end_policy` of the offer's term is `SCHEDULED_END_TIME`, # then installment `start_time` must be before `term.scheduled_end_time`. # If it's `AFTER_DURATION`, then installment `start_time` must be before # the time calculated by adding the `term.duration_months` to # the start time of the offer. # # The `start_time` of the installments cannot be before the # `accept_deadline_time` of the offer. # # Installment start times must be in strictly increasing chronological # order. # @!attribute [rw] price_model # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel] # Optional. The price model of the installment. # All installments must have the same form of price model. class Installment include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Price configurations for offers with custom intervals. # @!attribute [rw] installments # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Installment>] # Optional. The installments that make up the installment timeline. # All installments must have the same form of price model (e.g. # all commitment, or all flat fee). A subscription must be present # under the price model for every installment. # # Must contain at least one installment to publish the offer. class CustomIntervalPrice include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The contract value of the offer. # @!attribute [r] total_contract_value # @return [::Google::Type::Money] # Output only. The total contract value of the offer. # This will be set for all non-draft private offers, as long as # 'PRIVATE_OFFER_VIEW_FULL' is requested. For DRAFT private offers, # this will be populated only when the end user's billing account is # set and when the pricing and term configuration is sufficiently # complete to allow for a calculation. class ContractValue include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Revenue Share information for a Private Offer. # For more details about the revenue share, including how the value is # determined, see # https://docs.cloud.google.com/marketplace/docs/partners/revenue-share-scenarios. # # Not included for `PRIVATE_OFFER_VIEW_BASIC`, or for DRAFT private offers. # # For non-draft private offers, these fields are populated based on the # following: # # * Offers published after April 20, 2025 will always have revenue # share fields populated. # * Offers published on or before April 20, 2025 will only have revenue # share fields populated if they were associated with an active, # unexpired order on that date. # @!attribute [r] current_term_vendor_net_revenue_percent # @return [::Google::Type::Decimal] # Output only. The revenue share currently in effect. # # The range of the value is between 0 and 100. For example, 80 # means the Vendor's current term revenue share is 80%. The vendor # will keep 80% of the revenue. # . # @!attribute [r] renewal_term_vendor_net_revenue_percent # @return [::Google::Type::Decimal] # Output only. The expected revenue share for the renewal term. # Not included if the offer does not have renewal terms. # # The range of the value is between 0 and 100. For example, 80 # means the Vendor's current term revenue share is 80%. The vendor # will keep 80% of the revenue after renewal. # . class RevenueShare include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end end # State of an offer. module State # Default value. This value is unused. STATE_UNSPECIFIED = 0 # The default state after creation when the offer can be edited. # In all other states, the contents of the offer cannot be edited. DRAFT = 1 # The offer is publishing. # Publishing will complete when all publishing requirements are satisfied. PUBLISHING = 2 # The offer has been published and is available to the customer to accept. PUBLISHED = 3 # The offer has been accepted by the customer. ACCEPTED = 4 # The offer was cancelled by the provider before it was transacted. # Cancelled offers can no longer be accepted by the customer. CANCELLED = 5 # The offer expired without being accepted by the customer. # Expired offers can no longer be accepted by the customer. EXPIRED = 6 # The offer has ended. # # Ended offers were accepted and active in the past, but have now reached # the end of their term or have been terminated. ENDED = 7 end # The type of the deal transacted with the offer. The deal type of an offer # is a factor in determining the offer's revenue share. module OfferDealType # Default value. This value is unused. OFFER_DEAL_TYPE_UNSPECIFIED = 0 # The offer corresponds to a preexisting commercial arrangement for a # workload on Google Cloud that is being transferred to the Cloud # Marketplace. CHANNEL_SHIFT = 1 # The offer corresponds to a preexisting commercial arrangement for a # workload previously not on Google Cloud that is being transferred to # Google Cloud. MIGRATION = 2 # The offer corresponds to a renewal of a deal initially transacted on # the Google Cloud Marketplace. NATIVE_RENEWAL = 3 # The offer corresponds to a new deal transacted on the Google Cloud # Marketplace. # # This value is not allowed if the offer amends another private offer # where the term has not ended, and the amended private offer has a deal # type of `MIGRATION`, `CHANNEL_SHIFT` or `NATIVE_RENEWAL`. NEW = 4 end end |
#customer ⇒ ::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::Customer
Returns Optional. Information identifying the intended recipient of the offer. Must be provided when publishing the offer.
148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 |
# File 'proto_docs/google/cloud/commerceproducer/v1beta/private_offer.rb', line 148 class PrivateOffer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Information about the Google review process. # @!attribute [r] review_approve_time # @return [::Google::Protobuf::Timestamp] # Output only. The approval time of the Google review process. class PublishRequirementGoogleReview include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Contact information for a reseller. # @!attribute [r] contact # @return [::String] # Output only. The name of the reseller contact for this offer. # @!attribute [r] email # @return [::String] # Output only. The email of the reseller contact for this offer. class ResellerContact include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Contact information for the partner representative. # @!attribute [rw] contact # @return [::String] # Optional. Display text identifying the partner sales contact. # Displayed to the customer. # Must be provided when publishing the offer. # Maximum length: 256 characters. # @!attribute [rw] email # @return [::String] # Optional. The email address of the partner sales contact. # Displayed to the customer. # The format of the provided email address is validated when publishing the # offer, but no verification is performed that the email address actually # exists, accepts email, or is otherwise functional. class PartnerContact include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Information about the customer. # @!attribute [rw] entity_title # @return [::String] # Optional. A string identifying the customer's entity (for example, the # customer's organization or company name). Must be provided when # publishing the offer. Maximum length: 256 characters. # @!attribute [rw] contact # @return [::String] # Optional. A string identifying the customer contact. # Must be provided when publishing the offer. # Maximum length: 256 characters. # @!attribute [rw] email # @return [::String] # Optional. Email of customer contact. # If provided, it must be a well-formed email address. # @!attribute [r] address # @deprecated This field is deprecated and may be removed in the next major version update. # @return [::String] # Output only. Legal address of the customer organization. # This field can no longer be set, but it is preserved to return the # data from existing offers where address is set. # @!attribute [rw] target_billing_account # @return [::String] # Optional. The customer's billing account targeted by the offer. # The private offer once published can be accepted by a billing # administrator of the target billing account. If the customer accepts the # offer and later moves the resulting order to a new billing account, this # field will continue to reflect the original billing account to which the # private offer was extended. Must be provided when publishing the offer. # # To publish this private offer: # # * The billing account must exist. # * The billing account must not be in a free trial. # * The billing account must comply with Marketplace Reselling Policies. # * Reseller parent billing accounts are prohibited. Reseller subaccounts # are prohibited unless the service is enabled for reselling. # # Format: billingAccounts/012345-567890-ABCDEF class Customer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Configurations for the offer term and renewal options. # Extending a private offer to a customer that covers a given term # constitutes a guarantee to the customer that the product will remain # available to them for the duration of the term. # @!attribute [rw] duration_months # @return [::Integer] # Optional. Duration in months of the offer term. # The offer will end on the same day of the month after this duration. If # that date is not available, the offer will end on the last day of the # month. For example, if the offer starts on 01/31/2024 and the duration # is 13 months, the offer will end on 02/28/2025. # Must be set to publish the offer if the end policy is `AFTER_DURATION` # or `MATCH_AMENDED_OFFER`, and must be a positive value. # # The maximum possible offer duration, including all renewal terms, # cannot exceed 7 years. For example, if `duration_months` is 9 and # `term.max_renewal_count` is 9, then the maximum possible offer duration # is 90 months and exceeds the 7 year limit. # # Note: The following fields are mutually exclusive: `duration_months`, `scheduled_end_time`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] scheduled_end_time # @return [::Google::Type::DateTime] # Optional. Specified end time of the offer. # Must be set to publish the offer if the end policy is # `SCHEDULED_END_TIME`. # When set, the time must be in the future and at a day boundary in the # America/Los_Angeles time zone, and must be after # `term.scheduled_start_time` if applicable. # # Note: The following fields are mutually exclusive: `scheduled_end_time`, `duration_months`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] max_renewal_count # @return [::Integer] # Optional. The max number of renewals allowed, after the initial term # ends. This field is only relevant to standard interval offers with # interval of 'MONTHLY_PRORATED', 'MONTHLY_NOT_PRORATED', # 'QUARTERLY_NOT_PRORATED' or 'YEARLY_NOT_PRORATED'. Other types of # offers cannot be renewed. # # For example, if the initial term is 1 year and the max renewals is 3, # the customer can renew the offer for up to 3 additional years after the # initial term ends. Customers control whether they renew the offer. # # Allowing a customer to renew an offer does not constitute a guarantee # to the customer that the offered product will still be available to be # renewed at the renewal date. # # An offer with a max renewal count of 0 cannot be renewed. # Must be non-negative. # # Note: The following fields are mutually exclusive: `max_renewal_count`, `unlimited_renewal`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [r] unlimited_renewal # @deprecated This field is deprecated and may be removed in the next major version update. # @return [::Boolean] # Output only. Deprecated: This field can only be true on existing offers # with standard interval of 'MONTHLY_POSTPAY'. As of May 2024, we no # longer allow unlimited renewals. # # Note: The following fields are mutually exclusive: `unlimited_renewal`, `max_renewal_count`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] start_policy # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::Term::StartPolicy] # Optional. Defines when the resulting order should start. # Must be set when publishing the offer. # @!attribute [rw] scheduled_start_time # @return [::Google::Type::DateTime] # Optional. The scheduled start time of the offer. Cannot exceed one year # from the time of publish. # # If the start policy is `SCHEDULED_START_TIME`, a future time at a day # boundary in the America/Los_Angeles time zone must be provided when # publishing the offer. # # If the offer amends another private or standard offer, then the # scheduled start time must be: # # * Before or equal to the amended offer's end time if the offer's # end policy is not MATCH_AMENDED_OFFER. Otherwise, it has to be # strictly before the amended offer's end time. # * Before or equal to the start time of the next pending installment of # the amended offer, if amending a private offer with custom # installments. For example, if the amended offer has installments on # 01/01, 02/01, 03/01, 04/01, and today is 02/15, then the new offer's # `scheduled_start_time` must be at or before 03/01. # @!attribute [rw] end_policy # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::Term::EndPolicy] # Optional. Defines when an offer should end. # Must be set when publishing the offer. # @!attribute [r] effective_term_end_time # @return [::Google::Type::DateTime] # Output only. The expected end time of the current offer term. # # At the end of each offer term, an offer associated with an active # order will either renew or end. When an offer renews, a new term begins # and this value changes to reflect the end time of the new term. # When an offer ends this value is no longer set and instead `end_time` is # set. # # When the term of an offer ends and the offer does not renew, the # associated order also ends if the base standard offer has a # subscription price model. Otherwise, the associated order does not end # and remains active. # # Not included for PRIVATE_OFFER_VIEW_BASIC. # Included for PRIVATE_OFFER_VIEW_FULL when the offer has not ended and # either the offer has started or the value can be derived from other # fields. # # For offers that have not started, this field is set when one of the # following conditions is true. # # * The offer sets `term.scheduled_end_time`. # * The offer sets `term.scheduled_start_time` and `term.duration_months`, # the offer's `term.end_policy` is not `MATCH_AMENDED_OFFER`, and the # offer does not have standard_interval set to `MONTHLY_POSTPAY`. class Term include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Defines when an offer should start. module StartPolicy # Default value. This value is unused. START_POLICY_UNSPECIFIED = 0 # The resulting order starts immediately upon the customer's acceptance # of the offer, if no partner approval is required, or else immediately # after the partner approves the purchase if order approval is required. # This enum value cannot be combined with `term.scheduled_start_time`. IMMEDIATE = 1 # The resulting order starts at the scheduled start time. SCHEDULED_START_TIME = 2 end # Defines when an offer should end. module EndPolicy # Default value. This value is unused. END_POLICY_UNSPECIFIED = 0 # Offer ends after the specified duration. # If this is set, then `duration_months` must be positive. AFTER_DURATION = 1 # Offer ends at the schduled time. SCHEDULED_END_TIME = 2 # Offer coterms to the amended offer - the offer ends at the end of the # amended offer's term # # For example, if the amended offer starts on 01/15/24, and has a # duration of 6 months, then it ends on 07/15/24. If the current offer # coterms to the previous offer, and the current offer starts on # 05/06/24, then it will still end on 07/15/24. Assuming the current # offer renews 3 times, then the terms on the current offer will be: # # 1. 05/06/24 - 07/15/24 (First term, ends on 07/15 to coterm with the # amended offer) # 2. 07/15/24 - 01/15/25 (First renewal term) # 3. 01/15/25 - 07/15/25 (Second renewal term) # 4. 07/15/25 - 01/15/26 (Third renewal term) # # As a contrast, if the current offer does not coterm with the amended # offer (such as when `end_policy` is `AFTER_DURATION`), then the # terms will be: # # 1. 05/06/24 - 11/06/24 (First term, ends on 11/06, no coterming) # 2. 11/06/24 - 05/06/25 (First renewal term) # 3. 05/06/25 - 11/06/25 (Second renewal term) # 4. 11/06/25 - 05/06/26 (Third renewal term) # # If this is set, then the following conditions must be met: # # * `single_product_offer.amended_private_offer` must be set, and the # amended private offer must not be ended. # * The proration policy must not change (e.g., you cannot switch # between `MONTHLY_PRORATED` and `MONTHLY_NOT_PRORATED`). # * The current offer must not have custom intervals (where # `custom_interval_price` is set). # * `term.duration_months` must match the amended private offer's # duration. # * The amended private offer must not have a standard interval # of `MONTHLY_POSTPAY`. # # This is currently not supported. MATCH_AMENDED_OFFER = 3 end end # Configurations for the offer that is associated with a single product. # @!attribute [rw] amended_private_offer # @return [::String] # Optional. An existing private offer that will be superseded by this # offer. Unless the private offer is for a product type that supports # [multiple active # orders](https://cloud.google.com/marketplace/docs/partners/offers/multiple-offers), # an amendment private offer must be transacted if and only if the # destination customer billing account already contains an active order # for the same product. The offer to be superseded must be the offer # associated with an active order. # # Amendments generally fall into one of two scenarios: # # 1. **Active Order / Ended Offer**: The term of the amended offer has # ended but it is still associated with an active order. The new # offer must amend the ended private offer. # 2. **Active Order / Active Offer**: The term of the amended offer is # still active and the associated order is active. Similar to above, # the new offer must amend the currently active offer (unless # "multiple active orders" are supported). # # If this is set, then the `base_standard_offer` parent service must # match the parent service of the `base_standard_offer` in the # `amended_private_offer`. # # **Active Term Restrictions**: # If the term of the amended private offer has *NOT* ended, then the # following compatibility rules apply: # # * **Price Model Compatibility**: # * Flat Fee (with or without usage) offers can amend Flat Fee # offers. # * Usage-only or CUD offers can amend usage-only offers. # * Commitment-based offers must amend offers of the same price # model subtype (e.g., "additional usage at list price" vs "all # usage discounted"). # * **Billing Frequency Compatibility**: Determined by # `standard_interval` or `custom_interval_price`. # * If the amended offer has a custom billing frequency, the new # offer must also have a custom frequency. # * If the amended offer has a standard frequency (Monthly, # Quarterly, or Yearly), the new offer must maintain the same # frequency or transition to a custom frequency. # * Switching between different standard frequencies (e.g., Monthly # to Quarterly) is not supported. # * For Monthly frequency, switching between `MONTHLY_PRORATED` # and `MONTHLY_NOT_PRORATED` is supported, unless the offer's # `term.end_policy` is `MATCH_AMENDED_OFFER`. # * For usage-only offers, there are no billing frequency # restrictions. # # Other criteria for offer amendment are detailed elsewhere. # # Note: The following fields are mutually exclusive: `amended_private_offer`, `amended_standard_offer`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] amended_standard_offer # @return [::String] # Optional. An existing standard offer that will be superseded by this # offer. An amendment private offer must be transacted if the destination # customer billing account already contains an active order for the same # product, and otherwise cannot be transacted. The offer to be superseded # must be the offer associated with the active order. # # If this is set, then the `base_standard_offer` must contain the same # parent service as the parent service of the `amended_standard_offer`. # The price model of this offer must be compatible with the price model # of the `amended_standard_offer`: # # * Flat Fee, or Flat Fee with usage offers can amend Flat Fee or Flat # Fee with usage standard offers. # * Usage-only offers, or CUD offers can amend usage-only standard # offers. # # Other criteria for offer amendment are detailed elsewhere. # # Note: The following fields are mutually exclusive: `amended_standard_offer`, `amended_private_offer`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] standard_interval_price # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::StandardIntervalPrice] # Optional. Price configurations for offers with standard intervals. # A price must be set when publishing the offer. # # Note: The following fields are mutually exclusive: `standard_interval_price`, `custom_interval_price`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] custom_interval_price # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::CustomIntervalPrice] # Optional. Price configurations for offers with custom intervals. # Custom interval corresponds to "custom billing frequency", # see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule. # A price must be set when publishing the offer. # # Note: The following fields are mutually exclusive: `custom_interval_price`, `standard_interval_price`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] base_standard_offer # @return [::String] # Optional. The StandardOffer this PrivateOffer is based on. # Must be in the same project as the private offer, and must be effective # at the time of publishing. Must be present to publish the offer. # # Format: # projects/\\{project}/locations/\\{location}/services/\\{service}/standardOffers/\\{standard_offer} # @!attribute [r] service_level # @return [::String] # Output only. The service level (also known as the 'plan') of the base # standard offer. The value is populated at publish time from the base # standard offer. # @!attribute [r] reseller_private_offer_plan_id # @return [::String] # Output only. Present for offers created by a reseller from a reseller # private offer plan (RPOP). When set, contains the ID of the originating # RPOP. Not included for `PRIVATE_OFFER_VIEW_BASIC`. # @!attribute [rw] features # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Feature>] # Optional. The custom product features to display for this offer. # Feature `display_name` values must be unique to publish the offer. # The set of features specified here should generally include all features # included in the base service level, with optionally customized values, # but is not required to match exactly and may include additional features. # @!attribute [r] effective_installment_timeline # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Installment>] # Output only. The effective installment timeline of the offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. # Included for `PRIVATE_OFFER_VIEW_FULL` if all necessary information is # available to generate the timeline, and if the offer has # 'standard_interval_price' of 'MONTHLY_PRORATED', 'MONTHLY_NOT_PRORATED', # 'QUARTERLY_NOT_PRORATED', or 'YEARLY_NOT_PRORATED'. # @!attribute [r] contract_value # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::ContractValue] # Output only. Contract value of the offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. # @!attribute [r] revenue_share # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::RevenueShare] # Output only. Revenue share information for this Private Offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. class SingleProductOffer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Additional details used to describe customization of the service level. # # Features are used to distinguish service levels of the same product. # When a product has a single service level, all details can be contained # in the product documentation. When a product has multiple service levels, # each service level can be assigned a distinct set of features to # distinguish the key differences between the service levels. # # In addition to customizing pricing and other transaction details, a # private offer may include customization of partner-managed product # behavior. When this is the case, the details of the custom behavior are # described using features. # @!attribute [rw] display_name # @return [::String] # Optional. Human readable display text characterizing the feature. # Should be sufficiently detailed to identify the feature, allowing # features to be correlated across separate offers and service levels. # Must be non-empty to publish the offer. # The maximum allowed length is 128 characters. # Allows characters from the following Unicode Property Classes: # Letters, Numbers, Punctuation, Symbols, and Separators # @!attribute [rw] value # @return [::String] # Optional. Human readable display text reflecting the value of the # feature. Used for variable features not captured by the display_name # alone. The maximum allowed length is 3000 characters. Allows characters # from the following Unicode Property Classes: Letters, Numbers, # Punctuation, Symbols, and Separators class Feature include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price model of the private offer. # # Private offers are referred to as having different kinds of price models # based on the combination of fields set in the price model. The following # terminology is used in documentation and other reference material. # # * Usage-based: the price model does not set `flat_fee` # * Usage-only: the price model sets only `usage` # * CUD (committed use discount): the price model sets `commitment` # * Commitment discount with additional usage at list price: # The price model sets `commitment` and not `usage`. # * Commitment with all usage discounted: The price model sets # `commitment` and `usage`. # * Flat fee: the price model sets only `flat_fee` # * Flat fee with usage: the price model sets `flat_fee` and `usage` # # See # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-pricing-model#CUD # for the price models. # @!attribute [rw] flat_fee # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::FlatFee] # Optional. The price configurations for the flat fee subscription. # Must be unset when the base standard offer's price model does not # include subscription SKUs. # # Note: The following fields are mutually exclusive: `flat_fee`, `commitment`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] commitment # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Commitment] # Optional. The price configurations for the commitment based # subscription. Must be unset when the base standard offer's price # model includes subscription SKUs. # # Note: The following fields are mutually exclusive: `commitment`, `flat_fee`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] usage # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Usage] # Optional. The price configurations for the usage part. # If this field is set, the `Commitment.discount_percent` must be unset. # A private offer can apply a discount to all usage or to a usage # commitment, but not both. # Must be unset when the base standard offer's price model includes no # usage SKUs. class PriceModel include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # The discount for a specific SKU. # @!attribute [rw] sku # @return [::String] # Optional. The name of a partner SKU from this API. # # Must refer to a SKU in the price model of the base standard offer. # Inclusion in the base price model can occur either directly or # indirectly via inclusion in an included SkuGroup. # # Currently, standard offer price models include only partner SKUs # in the same project as the standard offer. This may change. # # Format: # projects/\\{project}/locations/\\{location}/services/\\{service}/skus/\\{sku} # # Note: The following fields are mutually exclusive: `sku`, `cloud_billing_sku`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] cloud_billing_sku # @return [::String] # Optional. The name of a Google SKU from the Cloud Billing API. # # Used for partner products sold by Google, such as Premium Operating # System Images sold for use in Compute Engine. This is not common. # SKUs of this type are not present on this API and can instead be # found on the Cloud Billing API or at https://cloud.google.com/skus. # # Must refer to a SKU in the price model of the base standard offer. # Google SKUs are always referenced in standard offers via SkuGroups. # # Format: services/\\{service}/skus/\\{sku} # # Note: The following fields are mutually exclusive: `cloud_billing_sku`, `sku`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] discount_percent # @return [::Google::Type::Decimal] # Optional. The discount percent for the SKU. # For example, `10` means a discount of 10%. If the original SKU # price is $100/hour then the discounted price will be $90/hour. # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", # and "". # Must be present to publish the offer. class SkuDiscount include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price for the usage SKUs. # @!attribute [rw] default_discount_percent # @return [::Google::Type::Decimal] # Optional. The default discount percent for usage SKUs. # An unset default discount percent is equivalent to 0 (no discount). # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "". # @!attribute [rw] sku_discounts # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::SkuDiscount>] # Optional. The discounts for the specific SKUs that override the # `default_discount_percent`. class Usage include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price configurations for the flat fee subscriptions. # @!attribute [rw] flat_fee_override # @return [::Google::Type::Money] # Optional. Flat fee overriding the default flat fee in the base # standard offer. Value cannot be negative. The currency must be "USD" # and precision is limited to cents. Must be present to publish the # offer, if the parent message is set. The maximum allowed value is # 1,000,000,000 USD. class FlatFee include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price configurations for the commitment based subscriptions. # @!attribute [rw] commitment_amount # @return [::Google::Type::Money] # Optional. The commitment balance that the customer will receive. # Value cannot be negative. # The currency must be "USD" and precision is limited to cents. # Must be present to publish the offer, if the parent message is set. # The maximum allowed value is 1,000,000,000 USD. # # If the current offer amends a private offer where the term has not # ended, and if the field # `single_product_offer.standard_interval_price.price_model.commitment.commitment_amount` # is set on both the current offer and the amended private offer, then # the commitment amount must be equal or higher on the current offer, # compared to the amended private offer. # @!attribute [rw] discount_percent # @return [::Google::Type::Decimal] # Optional. The discount percent on `commitment_amount`. # # For example, `10` means a discount of 10%. If the original # `commitment_amount` is $100 then the discounted amount will be $90. # The customer is charged $90 and receives $100 in credits. # # All reported usage will be charged at the standard price. # If this field is set, the `price_model.usage` must be unset. A # private offer can apply a discount to all usage or to a usage # commitment, but not both. # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "". # # Must be present to publish the offer. # @!attribute [rw] additional_credit # @return [::Google::Type::Money] # Optional. Additional credit granted to the customer. # Additional credits are only supported for custom interval offers. # Equivalent behavior can be achieved for standard interval offers by # varying the `commitment_amount` and `discount_percent`. # # Value cannot be negative. # The currency must be "USD" and precision is limited to cents. # The maximum allowed value is 1,000,000 USD. # @!attribute [rw] discard_previous_credit_balance # @return [::Boolean] # Optional. Whether to discard the previous credit balance when the # associated installment starts. If not set, the previous credit # balance will be rolled over to the current installment. # # If there are no previous installments, then the value of this field # will not matter - since it has no effect when no credits exist. class Commitment include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end end # Price configurations for offers with standard intervals. # @!attribute [rw] standard_interval # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::StandardIntervalPrice::StandardInterval] # Optional. The standard interval of the offer. # Must be present to publish unless the price model is usage-only. # @!attribute [rw] price_model # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel] # Optional. The price model of the offer. # Must be present to publish the offer. class StandardIntervalPrice include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # The options for offers with standard intervals. module StandardInterval # The private offer does not have an interval. # If this is set, then the offer is "usage-only". # Field `term.duration_months` must be positive. STANDARD_INTERVAL_UNSPECIFIED = 0 # The schedule of the monthly postpay offers. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # No longer supported as of May 2024. Cannot be used to publish # new offers. MONTHLY_POSTPAY = 1 # Monthly installments with proration. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 04/15, and the offer duration is # 3 months, the following installments will be created: # # 1: from 04/15 to 05/01, at the prorated price for April. # # # 2: from 05/01 to 06/01, at the full monthly price for May. # # # 3: from 06/01 to 07/01, at the full monthly price for June. # # # 4: from 07/01 to 07/15, at the prorated price for July. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. MONTHLY_PRORATED = 2 # Monthly installments without proration. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 04/15, and the offer duration is # 3 months, the following installments will be created: # # 1: from 04/15 to 05/15, at the full monthly price. # # # 2: from 05/15 to 06/15, at the full monthly price. # # # 3: from 06/15 to 07/15, at the full monthly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. MONTHLY_NOT_PRORATED = 3 # Quarterly installments which are not prorated. # This type of offer has "Quarterly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 01/15, and the offer duration is # 3 quarters, the following installments will be created: # # 1: from 01/15 to 04/15, at the full quarterly price. # # # 2: from 04/15 to 07/15, at the full quarterly price. # # # 3: from 07/15 to 10/15, at the full quarterly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. QUARTERLY_NOT_PRORATED = 4 # Yearly installments which are not prorated. # This type of offer has "Yearly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 01/15/2025, and the offer # duration is 3 years, the following installments will be created: # # 1: from 01/15/2025 to 01/15/2026, at the full yearly price. # # # 2: from 01/15/2026 to 01/15/2027, at the full yearly price. # # # 3: from 01/15/2027 to 01/15/2028, at the full yearly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. YEARLY_NOT_PRORATED = 5 end end # An installment of the offer. # @!attribute [rw] start_time # @return [::Google::Type::DateTime] # Optional. The start time of the installment. # Each installment must have a unique start time with one exception: # When the `term.start_policy` of the offer's term is `IMMEDIATE`, # the `start_time` of the first installment must be unset. # The actual start time is not recorded in the offer and instead is # determined by the time the resulting order became active. # # When the `term.start_policy` of the offer's term is # `SCHEDULED_START_TIME`, then the first installment's `start_time` must # match `term.scheduled_start_time`. # # If the `term.end_policy` of the offer's term is `SCHEDULED_END_TIME`, # then installment `start_time` must be before `term.scheduled_end_time`. # If it's `AFTER_DURATION`, then installment `start_time` must be before # the time calculated by adding the `term.duration_months` to # the start time of the offer. # # The `start_time` of the installments cannot be before the # `accept_deadline_time` of the offer. # # Installment start times must be in strictly increasing chronological # order. # @!attribute [rw] price_model # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel] # Optional. The price model of the installment. # All installments must have the same form of price model. class Installment include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Price configurations for offers with custom intervals. # @!attribute [rw] installments # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Installment>] # Optional. The installments that make up the installment timeline. # All installments must have the same form of price model (e.g. # all commitment, or all flat fee). A subscription must be present # under the price model for every installment. # # Must contain at least one installment to publish the offer. class CustomIntervalPrice include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The contract value of the offer. # @!attribute [r] total_contract_value # @return [::Google::Type::Money] # Output only. The total contract value of the offer. # This will be set for all non-draft private offers, as long as # 'PRIVATE_OFFER_VIEW_FULL' is requested. For DRAFT private offers, # this will be populated only when the end user's billing account is # set and when the pricing and term configuration is sufficiently # complete to allow for a calculation. class ContractValue include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Revenue Share information for a Private Offer. # For more details about the revenue share, including how the value is # determined, see # https://docs.cloud.google.com/marketplace/docs/partners/revenue-share-scenarios. # # Not included for `PRIVATE_OFFER_VIEW_BASIC`, or for DRAFT private offers. # # For non-draft private offers, these fields are populated based on the # following: # # * Offers published after April 20, 2025 will always have revenue # share fields populated. # * Offers published on or before April 20, 2025 will only have revenue # share fields populated if they were associated with an active, # unexpired order on that date. # @!attribute [r] current_term_vendor_net_revenue_percent # @return [::Google::Type::Decimal] # Output only. The revenue share currently in effect. # # The range of the value is between 0 and 100. For example, 80 # means the Vendor's current term revenue share is 80%. The vendor # will keep 80% of the revenue. # . # @!attribute [r] renewal_term_vendor_net_revenue_percent # @return [::Google::Type::Decimal] # Output only. The expected revenue share for the renewal term. # Not included if the offer does not have renewal terms. # # The range of the value is between 0 and 100. For example, 80 # means the Vendor's current term revenue share is 80%. The vendor # will keep 80% of the revenue after renewal. # . class RevenueShare include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end end # State of an offer. module State # Default value. This value is unused. STATE_UNSPECIFIED = 0 # The default state after creation when the offer can be edited. # In all other states, the contents of the offer cannot be edited. DRAFT = 1 # The offer is publishing. # Publishing will complete when all publishing requirements are satisfied. PUBLISHING = 2 # The offer has been published and is available to the customer to accept. PUBLISHED = 3 # The offer has been accepted by the customer. ACCEPTED = 4 # The offer was cancelled by the provider before it was transacted. # Cancelled offers can no longer be accepted by the customer. CANCELLED = 5 # The offer expired without being accepted by the customer. # Expired offers can no longer be accepted by the customer. EXPIRED = 6 # The offer has ended. # # Ended offers were accepted and active in the past, but have now reached # the end of their term or have been terminated. ENDED = 7 end # The type of the deal transacted with the offer. The deal type of an offer # is a factor in determining the offer's revenue share. module OfferDealType # Default value. This value is unused. OFFER_DEAL_TYPE_UNSPECIFIED = 0 # The offer corresponds to a preexisting commercial arrangement for a # workload on Google Cloud that is being transferred to the Cloud # Marketplace. CHANNEL_SHIFT = 1 # The offer corresponds to a preexisting commercial arrangement for a # workload previously not on Google Cloud that is being transferred to # Google Cloud. MIGRATION = 2 # The offer corresponds to a renewal of a deal initially transacted on # the Google Cloud Marketplace. NATIVE_RENEWAL = 3 # The offer corresponds to a new deal transacted on the Google Cloud # Marketplace. # # This value is not allowed if the offer amends another private offer # where the term has not ended, and the amended private offer has a deal # type of `MIGRATION`, `CHANNEL_SHIFT` or `NATIVE_RENEWAL`. NEW = 4 end end |
#customer_note ⇒ ::String
Returns Optional. Unstructured text content that is visible to the customer. Maximum length: 120 characters.
148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 |
# File 'proto_docs/google/cloud/commerceproducer/v1beta/private_offer.rb', line 148 class PrivateOffer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Information about the Google review process. # @!attribute [r] review_approve_time # @return [::Google::Protobuf::Timestamp] # Output only. The approval time of the Google review process. class PublishRequirementGoogleReview include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Contact information for a reseller. # @!attribute [r] contact # @return [::String] # Output only. The name of the reseller contact for this offer. # @!attribute [r] email # @return [::String] # Output only. The email of the reseller contact for this offer. class ResellerContact include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Contact information for the partner representative. # @!attribute [rw] contact # @return [::String] # Optional. Display text identifying the partner sales contact. # Displayed to the customer. # Must be provided when publishing the offer. # Maximum length: 256 characters. # @!attribute [rw] email # @return [::String] # Optional. The email address of the partner sales contact. # Displayed to the customer. # The format of the provided email address is validated when publishing the # offer, but no verification is performed that the email address actually # exists, accepts email, or is otherwise functional. class PartnerContact include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Information about the customer. # @!attribute [rw] entity_title # @return [::String] # Optional. A string identifying the customer's entity (for example, the # customer's organization or company name). Must be provided when # publishing the offer. Maximum length: 256 characters. # @!attribute [rw] contact # @return [::String] # Optional. A string identifying the customer contact. # Must be provided when publishing the offer. # Maximum length: 256 characters. # @!attribute [rw] email # @return [::String] # Optional. Email of customer contact. # If provided, it must be a well-formed email address. # @!attribute [r] address # @deprecated This field is deprecated and may be removed in the next major version update. # @return [::String] # Output only. Legal address of the customer organization. # This field can no longer be set, but it is preserved to return the # data from existing offers where address is set. # @!attribute [rw] target_billing_account # @return [::String] # Optional. The customer's billing account targeted by the offer. # The private offer once published can be accepted by a billing # administrator of the target billing account. If the customer accepts the # offer and later moves the resulting order to a new billing account, this # field will continue to reflect the original billing account to which the # private offer was extended. Must be provided when publishing the offer. # # To publish this private offer: # # * The billing account must exist. # * The billing account must not be in a free trial. # * The billing account must comply with Marketplace Reselling Policies. # * Reseller parent billing accounts are prohibited. Reseller subaccounts # are prohibited unless the service is enabled for reselling. # # Format: billingAccounts/012345-567890-ABCDEF class Customer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Configurations for the offer term and renewal options. # Extending a private offer to a customer that covers a given term # constitutes a guarantee to the customer that the product will remain # available to them for the duration of the term. # @!attribute [rw] duration_months # @return [::Integer] # Optional. Duration in months of the offer term. # The offer will end on the same day of the month after this duration. If # that date is not available, the offer will end on the last day of the # month. For example, if the offer starts on 01/31/2024 and the duration # is 13 months, the offer will end on 02/28/2025. # Must be set to publish the offer if the end policy is `AFTER_DURATION` # or `MATCH_AMENDED_OFFER`, and must be a positive value. # # The maximum possible offer duration, including all renewal terms, # cannot exceed 7 years. For example, if `duration_months` is 9 and # `term.max_renewal_count` is 9, then the maximum possible offer duration # is 90 months and exceeds the 7 year limit. # # Note: The following fields are mutually exclusive: `duration_months`, `scheduled_end_time`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] scheduled_end_time # @return [::Google::Type::DateTime] # Optional. Specified end time of the offer. # Must be set to publish the offer if the end policy is # `SCHEDULED_END_TIME`. # When set, the time must be in the future and at a day boundary in the # America/Los_Angeles time zone, and must be after # `term.scheduled_start_time` if applicable. # # Note: The following fields are mutually exclusive: `scheduled_end_time`, `duration_months`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] max_renewal_count # @return [::Integer] # Optional. The max number of renewals allowed, after the initial term # ends. This field is only relevant to standard interval offers with # interval of 'MONTHLY_PRORATED', 'MONTHLY_NOT_PRORATED', # 'QUARTERLY_NOT_PRORATED' or 'YEARLY_NOT_PRORATED'. Other types of # offers cannot be renewed. # # For example, if the initial term is 1 year and the max renewals is 3, # the customer can renew the offer for up to 3 additional years after the # initial term ends. Customers control whether they renew the offer. # # Allowing a customer to renew an offer does not constitute a guarantee # to the customer that the offered product will still be available to be # renewed at the renewal date. # # An offer with a max renewal count of 0 cannot be renewed. # Must be non-negative. # # Note: The following fields are mutually exclusive: `max_renewal_count`, `unlimited_renewal`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [r] unlimited_renewal # @deprecated This field is deprecated and may be removed in the next major version update. # @return [::Boolean] # Output only. Deprecated: This field can only be true on existing offers # with standard interval of 'MONTHLY_POSTPAY'. As of May 2024, we no # longer allow unlimited renewals. # # Note: The following fields are mutually exclusive: `unlimited_renewal`, `max_renewal_count`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] start_policy # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::Term::StartPolicy] # Optional. Defines when the resulting order should start. # Must be set when publishing the offer. # @!attribute [rw] scheduled_start_time # @return [::Google::Type::DateTime] # Optional. The scheduled start time of the offer. Cannot exceed one year # from the time of publish. # # If the start policy is `SCHEDULED_START_TIME`, a future time at a day # boundary in the America/Los_Angeles time zone must be provided when # publishing the offer. # # If the offer amends another private or standard offer, then the # scheduled start time must be: # # * Before or equal to the amended offer's end time if the offer's # end policy is not MATCH_AMENDED_OFFER. Otherwise, it has to be # strictly before the amended offer's end time. # * Before or equal to the start time of the next pending installment of # the amended offer, if amending a private offer with custom # installments. For example, if the amended offer has installments on # 01/01, 02/01, 03/01, 04/01, and today is 02/15, then the new offer's # `scheduled_start_time` must be at or before 03/01. # @!attribute [rw] end_policy # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::Term::EndPolicy] # Optional. Defines when an offer should end. # Must be set when publishing the offer. # @!attribute [r] effective_term_end_time # @return [::Google::Type::DateTime] # Output only. The expected end time of the current offer term. # # At the end of each offer term, an offer associated with an active # order will either renew or end. When an offer renews, a new term begins # and this value changes to reflect the end time of the new term. # When an offer ends this value is no longer set and instead `end_time` is # set. # # When the term of an offer ends and the offer does not renew, the # associated order also ends if the base standard offer has a # subscription price model. Otherwise, the associated order does not end # and remains active. # # Not included for PRIVATE_OFFER_VIEW_BASIC. # Included for PRIVATE_OFFER_VIEW_FULL when the offer has not ended and # either the offer has started or the value can be derived from other # fields. # # For offers that have not started, this field is set when one of the # following conditions is true. # # * The offer sets `term.scheduled_end_time`. # * The offer sets `term.scheduled_start_time` and `term.duration_months`, # the offer's `term.end_policy` is not `MATCH_AMENDED_OFFER`, and the # offer does not have standard_interval set to `MONTHLY_POSTPAY`. class Term include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Defines when an offer should start. module StartPolicy # Default value. This value is unused. START_POLICY_UNSPECIFIED = 0 # The resulting order starts immediately upon the customer's acceptance # of the offer, if no partner approval is required, or else immediately # after the partner approves the purchase if order approval is required. # This enum value cannot be combined with `term.scheduled_start_time`. IMMEDIATE = 1 # The resulting order starts at the scheduled start time. SCHEDULED_START_TIME = 2 end # Defines when an offer should end. module EndPolicy # Default value. This value is unused. END_POLICY_UNSPECIFIED = 0 # Offer ends after the specified duration. # If this is set, then `duration_months` must be positive. AFTER_DURATION = 1 # Offer ends at the schduled time. SCHEDULED_END_TIME = 2 # Offer coterms to the amended offer - the offer ends at the end of the # amended offer's term # # For example, if the amended offer starts on 01/15/24, and has a # duration of 6 months, then it ends on 07/15/24. If the current offer # coterms to the previous offer, and the current offer starts on # 05/06/24, then it will still end on 07/15/24. Assuming the current # offer renews 3 times, then the terms on the current offer will be: # # 1. 05/06/24 - 07/15/24 (First term, ends on 07/15 to coterm with the # amended offer) # 2. 07/15/24 - 01/15/25 (First renewal term) # 3. 01/15/25 - 07/15/25 (Second renewal term) # 4. 07/15/25 - 01/15/26 (Third renewal term) # # As a contrast, if the current offer does not coterm with the amended # offer (such as when `end_policy` is `AFTER_DURATION`), then the # terms will be: # # 1. 05/06/24 - 11/06/24 (First term, ends on 11/06, no coterming) # 2. 11/06/24 - 05/06/25 (First renewal term) # 3. 05/06/25 - 11/06/25 (Second renewal term) # 4. 11/06/25 - 05/06/26 (Third renewal term) # # If this is set, then the following conditions must be met: # # * `single_product_offer.amended_private_offer` must be set, and the # amended private offer must not be ended. # * The proration policy must not change (e.g., you cannot switch # between `MONTHLY_PRORATED` and `MONTHLY_NOT_PRORATED`). # * The current offer must not have custom intervals (where # `custom_interval_price` is set). # * `term.duration_months` must match the amended private offer's # duration. # * The amended private offer must not have a standard interval # of `MONTHLY_POSTPAY`. # # This is currently not supported. MATCH_AMENDED_OFFER = 3 end end # Configurations for the offer that is associated with a single product. # @!attribute [rw] amended_private_offer # @return [::String] # Optional. An existing private offer that will be superseded by this # offer. Unless the private offer is for a product type that supports # [multiple active # orders](https://cloud.google.com/marketplace/docs/partners/offers/multiple-offers), # an amendment private offer must be transacted if and only if the # destination customer billing account already contains an active order # for the same product. The offer to be superseded must be the offer # associated with an active order. # # Amendments generally fall into one of two scenarios: # # 1. **Active Order / Ended Offer**: The term of the amended offer has # ended but it is still associated with an active order. The new # offer must amend the ended private offer. # 2. **Active Order / Active Offer**: The term of the amended offer is # still active and the associated order is active. Similar to above, # the new offer must amend the currently active offer (unless # "multiple active orders" are supported). # # If this is set, then the `base_standard_offer` parent service must # match the parent service of the `base_standard_offer` in the # `amended_private_offer`. # # **Active Term Restrictions**: # If the term of the amended private offer has *NOT* ended, then the # following compatibility rules apply: # # * **Price Model Compatibility**: # * Flat Fee (with or without usage) offers can amend Flat Fee # offers. # * Usage-only or CUD offers can amend usage-only offers. # * Commitment-based offers must amend offers of the same price # model subtype (e.g., "additional usage at list price" vs "all # usage discounted"). # * **Billing Frequency Compatibility**: Determined by # `standard_interval` or `custom_interval_price`. # * If the amended offer has a custom billing frequency, the new # offer must also have a custom frequency. # * If the amended offer has a standard frequency (Monthly, # Quarterly, or Yearly), the new offer must maintain the same # frequency or transition to a custom frequency. # * Switching between different standard frequencies (e.g., Monthly # to Quarterly) is not supported. # * For Monthly frequency, switching between `MONTHLY_PRORATED` # and `MONTHLY_NOT_PRORATED` is supported, unless the offer's # `term.end_policy` is `MATCH_AMENDED_OFFER`. # * For usage-only offers, there are no billing frequency # restrictions. # # Other criteria for offer amendment are detailed elsewhere. # # Note: The following fields are mutually exclusive: `amended_private_offer`, `amended_standard_offer`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] amended_standard_offer # @return [::String] # Optional. An existing standard offer that will be superseded by this # offer. An amendment private offer must be transacted if the destination # customer billing account already contains an active order for the same # product, and otherwise cannot be transacted. The offer to be superseded # must be the offer associated with the active order. # # If this is set, then the `base_standard_offer` must contain the same # parent service as the parent service of the `amended_standard_offer`. # The price model of this offer must be compatible with the price model # of the `amended_standard_offer`: # # * Flat Fee, or Flat Fee with usage offers can amend Flat Fee or Flat # Fee with usage standard offers. # * Usage-only offers, or CUD offers can amend usage-only standard # offers. # # Other criteria for offer amendment are detailed elsewhere. # # Note: The following fields are mutually exclusive: `amended_standard_offer`, `amended_private_offer`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] standard_interval_price # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::StandardIntervalPrice] # Optional. Price configurations for offers with standard intervals. # A price must be set when publishing the offer. # # Note: The following fields are mutually exclusive: `standard_interval_price`, `custom_interval_price`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] custom_interval_price # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::CustomIntervalPrice] # Optional. Price configurations for offers with custom intervals. # Custom interval corresponds to "custom billing frequency", # see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule. # A price must be set when publishing the offer. # # Note: The following fields are mutually exclusive: `custom_interval_price`, `standard_interval_price`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] base_standard_offer # @return [::String] # Optional. The StandardOffer this PrivateOffer is based on. # Must be in the same project as the private offer, and must be effective # at the time of publishing. Must be present to publish the offer. # # Format: # projects/\\{project}/locations/\\{location}/services/\\{service}/standardOffers/\\{standard_offer} # @!attribute [r] service_level # @return [::String] # Output only. The service level (also known as the 'plan') of the base # standard offer. The value is populated at publish time from the base # standard offer. # @!attribute [r] reseller_private_offer_plan_id # @return [::String] # Output only. Present for offers created by a reseller from a reseller # private offer plan (RPOP). When set, contains the ID of the originating # RPOP. Not included for `PRIVATE_OFFER_VIEW_BASIC`. # @!attribute [rw] features # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Feature>] # Optional. The custom product features to display for this offer. # Feature `display_name` values must be unique to publish the offer. # The set of features specified here should generally include all features # included in the base service level, with optionally customized values, # but is not required to match exactly and may include additional features. # @!attribute [r] effective_installment_timeline # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Installment>] # Output only. The effective installment timeline of the offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. # Included for `PRIVATE_OFFER_VIEW_FULL` if all necessary information is # available to generate the timeline, and if the offer has # 'standard_interval_price' of 'MONTHLY_PRORATED', 'MONTHLY_NOT_PRORATED', # 'QUARTERLY_NOT_PRORATED', or 'YEARLY_NOT_PRORATED'. # @!attribute [r] contract_value # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::ContractValue] # Output only. Contract value of the offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. # @!attribute [r] revenue_share # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::RevenueShare] # Output only. Revenue share information for this Private Offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. class SingleProductOffer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Additional details used to describe customization of the service level. # # Features are used to distinguish service levels of the same product. # When a product has a single service level, all details can be contained # in the product documentation. When a product has multiple service levels, # each service level can be assigned a distinct set of features to # distinguish the key differences between the service levels. # # In addition to customizing pricing and other transaction details, a # private offer may include customization of partner-managed product # behavior. When this is the case, the details of the custom behavior are # described using features. # @!attribute [rw] display_name # @return [::String] # Optional. Human readable display text characterizing the feature. # Should be sufficiently detailed to identify the feature, allowing # features to be correlated across separate offers and service levels. # Must be non-empty to publish the offer. # The maximum allowed length is 128 characters. # Allows characters from the following Unicode Property Classes: # Letters, Numbers, Punctuation, Symbols, and Separators # @!attribute [rw] value # @return [::String] # Optional. Human readable display text reflecting the value of the # feature. Used for variable features not captured by the display_name # alone. The maximum allowed length is 3000 characters. Allows characters # from the following Unicode Property Classes: Letters, Numbers, # Punctuation, Symbols, and Separators class Feature include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price model of the private offer. # # Private offers are referred to as having different kinds of price models # based on the combination of fields set in the price model. The following # terminology is used in documentation and other reference material. # # * Usage-based: the price model does not set `flat_fee` # * Usage-only: the price model sets only `usage` # * CUD (committed use discount): the price model sets `commitment` # * Commitment discount with additional usage at list price: # The price model sets `commitment` and not `usage`. # * Commitment with all usage discounted: The price model sets # `commitment` and `usage`. # * Flat fee: the price model sets only `flat_fee` # * Flat fee with usage: the price model sets `flat_fee` and `usage` # # See # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-pricing-model#CUD # for the price models. # @!attribute [rw] flat_fee # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::FlatFee] # Optional. The price configurations for the flat fee subscription. # Must be unset when the base standard offer's price model does not # include subscription SKUs. # # Note: The following fields are mutually exclusive: `flat_fee`, `commitment`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] commitment # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Commitment] # Optional. The price configurations for the commitment based # subscription. Must be unset when the base standard offer's price # model includes subscription SKUs. # # Note: The following fields are mutually exclusive: `commitment`, `flat_fee`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] usage # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Usage] # Optional. The price configurations for the usage part. # If this field is set, the `Commitment.discount_percent` must be unset. # A private offer can apply a discount to all usage or to a usage # commitment, but not both. # Must be unset when the base standard offer's price model includes no # usage SKUs. class PriceModel include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # The discount for a specific SKU. # @!attribute [rw] sku # @return [::String] # Optional. The name of a partner SKU from this API. # # Must refer to a SKU in the price model of the base standard offer. # Inclusion in the base price model can occur either directly or # indirectly via inclusion in an included SkuGroup. # # Currently, standard offer price models include only partner SKUs # in the same project as the standard offer. This may change. # # Format: # projects/\\{project}/locations/\\{location}/services/\\{service}/skus/\\{sku} # # Note: The following fields are mutually exclusive: `sku`, `cloud_billing_sku`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] cloud_billing_sku # @return [::String] # Optional. The name of a Google SKU from the Cloud Billing API. # # Used for partner products sold by Google, such as Premium Operating # System Images sold for use in Compute Engine. This is not common. # SKUs of this type are not present on this API and can instead be # found on the Cloud Billing API or at https://cloud.google.com/skus. # # Must refer to a SKU in the price model of the base standard offer. # Google SKUs are always referenced in standard offers via SkuGroups. # # Format: services/\\{service}/skus/\\{sku} # # Note: The following fields are mutually exclusive: `cloud_billing_sku`, `sku`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] discount_percent # @return [::Google::Type::Decimal] # Optional. The discount percent for the SKU. # For example, `10` means a discount of 10%. If the original SKU # price is $100/hour then the discounted price will be $90/hour. # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", # and "". # Must be present to publish the offer. class SkuDiscount include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price for the usage SKUs. # @!attribute [rw] default_discount_percent # @return [::Google::Type::Decimal] # Optional. The default discount percent for usage SKUs. # An unset default discount percent is equivalent to 0 (no discount). # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "". # @!attribute [rw] sku_discounts # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::SkuDiscount>] # Optional. The discounts for the specific SKUs that override the # `default_discount_percent`. class Usage include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price configurations for the flat fee subscriptions. # @!attribute [rw] flat_fee_override # @return [::Google::Type::Money] # Optional. Flat fee overriding the default flat fee in the base # standard offer. Value cannot be negative. The currency must be "USD" # and precision is limited to cents. Must be present to publish the # offer, if the parent message is set. The maximum allowed value is # 1,000,000,000 USD. class FlatFee include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price configurations for the commitment based subscriptions. # @!attribute [rw] commitment_amount # @return [::Google::Type::Money] # Optional. The commitment balance that the customer will receive. # Value cannot be negative. # The currency must be "USD" and precision is limited to cents. # Must be present to publish the offer, if the parent message is set. # The maximum allowed value is 1,000,000,000 USD. # # If the current offer amends a private offer where the term has not # ended, and if the field # `single_product_offer.standard_interval_price.price_model.commitment.commitment_amount` # is set on both the current offer and the amended private offer, then # the commitment amount must be equal or higher on the current offer, # compared to the amended private offer. # @!attribute [rw] discount_percent # @return [::Google::Type::Decimal] # Optional. The discount percent on `commitment_amount`. # # For example, `10` means a discount of 10%. If the original # `commitment_amount` is $100 then the discounted amount will be $90. # The customer is charged $90 and receives $100 in credits. # # All reported usage will be charged at the standard price. # If this field is set, the `price_model.usage` must be unset. A # private offer can apply a discount to all usage or to a usage # commitment, but not both. # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "". # # Must be present to publish the offer. # @!attribute [rw] additional_credit # @return [::Google::Type::Money] # Optional. Additional credit granted to the customer. # Additional credits are only supported for custom interval offers. # Equivalent behavior can be achieved for standard interval offers by # varying the `commitment_amount` and `discount_percent`. # # Value cannot be negative. # The currency must be "USD" and precision is limited to cents. # The maximum allowed value is 1,000,000 USD. # @!attribute [rw] discard_previous_credit_balance # @return [::Boolean] # Optional. Whether to discard the previous credit balance when the # associated installment starts. If not set, the previous credit # balance will be rolled over to the current installment. # # If there are no previous installments, then the value of this field # will not matter - since it has no effect when no credits exist. class Commitment include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end end # Price configurations for offers with standard intervals. # @!attribute [rw] standard_interval # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::StandardIntervalPrice::StandardInterval] # Optional. The standard interval of the offer. # Must be present to publish unless the price model is usage-only. # @!attribute [rw] price_model # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel] # Optional. The price model of the offer. # Must be present to publish the offer. class StandardIntervalPrice include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # The options for offers with standard intervals. module StandardInterval # The private offer does not have an interval. # If this is set, then the offer is "usage-only". # Field `term.duration_months` must be positive. STANDARD_INTERVAL_UNSPECIFIED = 0 # The schedule of the monthly postpay offers. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # No longer supported as of May 2024. Cannot be used to publish # new offers. MONTHLY_POSTPAY = 1 # Monthly installments with proration. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 04/15, and the offer duration is # 3 months, the following installments will be created: # # 1: from 04/15 to 05/01, at the prorated price for April. # # # 2: from 05/01 to 06/01, at the full monthly price for May. # # # 3: from 06/01 to 07/01, at the full monthly price for June. # # # 4: from 07/01 to 07/15, at the prorated price for July. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. MONTHLY_PRORATED = 2 # Monthly installments without proration. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 04/15, and the offer duration is # 3 months, the following installments will be created: # # 1: from 04/15 to 05/15, at the full monthly price. # # # 2: from 05/15 to 06/15, at the full monthly price. # # # 3: from 06/15 to 07/15, at the full monthly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. MONTHLY_NOT_PRORATED = 3 # Quarterly installments which are not prorated. # This type of offer has "Quarterly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 01/15, and the offer duration is # 3 quarters, the following installments will be created: # # 1: from 01/15 to 04/15, at the full quarterly price. # # # 2: from 04/15 to 07/15, at the full quarterly price. # # # 3: from 07/15 to 10/15, at the full quarterly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. QUARTERLY_NOT_PRORATED = 4 # Yearly installments which are not prorated. # This type of offer has "Yearly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 01/15/2025, and the offer # duration is 3 years, the following installments will be created: # # 1: from 01/15/2025 to 01/15/2026, at the full yearly price. # # # 2: from 01/15/2026 to 01/15/2027, at the full yearly price. # # # 3: from 01/15/2027 to 01/15/2028, at the full yearly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. YEARLY_NOT_PRORATED = 5 end end # An installment of the offer. # @!attribute [rw] start_time # @return [::Google::Type::DateTime] # Optional. The start time of the installment. # Each installment must have a unique start time with one exception: # When the `term.start_policy` of the offer's term is `IMMEDIATE`, # the `start_time` of the first installment must be unset. # The actual start time is not recorded in the offer and instead is # determined by the time the resulting order became active. # # When the `term.start_policy` of the offer's term is # `SCHEDULED_START_TIME`, then the first installment's `start_time` must # match `term.scheduled_start_time`. # # If the `term.end_policy` of the offer's term is `SCHEDULED_END_TIME`, # then installment `start_time` must be before `term.scheduled_end_time`. # If it's `AFTER_DURATION`, then installment `start_time` must be before # the time calculated by adding the `term.duration_months` to # the start time of the offer. # # The `start_time` of the installments cannot be before the # `accept_deadline_time` of the offer. # # Installment start times must be in strictly increasing chronological # order. # @!attribute [rw] price_model # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel] # Optional. The price model of the installment. # All installments must have the same form of price model. class Installment include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Price configurations for offers with custom intervals. # @!attribute [rw] installments # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Installment>] # Optional. The installments that make up the installment timeline. # All installments must have the same form of price model (e.g. # all commitment, or all flat fee). A subscription must be present # under the price model for every installment. # # Must contain at least one installment to publish the offer. class CustomIntervalPrice include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The contract value of the offer. # @!attribute [r] total_contract_value # @return [::Google::Type::Money] # Output only. The total contract value of the offer. # This will be set for all non-draft private offers, as long as # 'PRIVATE_OFFER_VIEW_FULL' is requested. For DRAFT private offers, # this will be populated only when the end user's billing account is # set and when the pricing and term configuration is sufficiently # complete to allow for a calculation. class ContractValue include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Revenue Share information for a Private Offer. # For more details about the revenue share, including how the value is # determined, see # https://docs.cloud.google.com/marketplace/docs/partners/revenue-share-scenarios. # # Not included for `PRIVATE_OFFER_VIEW_BASIC`, or for DRAFT private offers. # # For non-draft private offers, these fields are populated based on the # following: # # * Offers published after April 20, 2025 will always have revenue # share fields populated. # * Offers published on or before April 20, 2025 will only have revenue # share fields populated if they were associated with an active, # unexpired order on that date. # @!attribute [r] current_term_vendor_net_revenue_percent # @return [::Google::Type::Decimal] # Output only. The revenue share currently in effect. # # The range of the value is between 0 and 100. For example, 80 # means the Vendor's current term revenue share is 80%. The vendor # will keep 80% of the revenue. # . # @!attribute [r] renewal_term_vendor_net_revenue_percent # @return [::Google::Type::Decimal] # Output only. The expected revenue share for the renewal term. # Not included if the offer does not have renewal terms. # # The range of the value is between 0 and 100. For example, 80 # means the Vendor's current term revenue share is 80%. The vendor # will keep 80% of the revenue after renewal. # . class RevenueShare include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end end # State of an offer. module State # Default value. This value is unused. STATE_UNSPECIFIED = 0 # The default state after creation when the offer can be edited. # In all other states, the contents of the offer cannot be edited. DRAFT = 1 # The offer is publishing. # Publishing will complete when all publishing requirements are satisfied. PUBLISHING = 2 # The offer has been published and is available to the customer to accept. PUBLISHED = 3 # The offer has been accepted by the customer. ACCEPTED = 4 # The offer was cancelled by the provider before it was transacted. # Cancelled offers can no longer be accepted by the customer. CANCELLED = 5 # The offer expired without being accepted by the customer. # Expired offers can no longer be accepted by the customer. EXPIRED = 6 # The offer has ended. # # Ended offers were accepted and active in the past, but have now reached # the end of their term or have been terminated. ENDED = 7 end # The type of the deal transacted with the offer. The deal type of an offer # is a factor in determining the offer's revenue share. module OfferDealType # Default value. This value is unused. OFFER_DEAL_TYPE_UNSPECIFIED = 0 # The offer corresponds to a preexisting commercial arrangement for a # workload on Google Cloud that is being transferred to the Cloud # Marketplace. CHANNEL_SHIFT = 1 # The offer corresponds to a preexisting commercial arrangement for a # workload previously not on Google Cloud that is being transferred to # Google Cloud. MIGRATION = 2 # The offer corresponds to a renewal of a deal initially transacted on # the Google Cloud Marketplace. NATIVE_RENEWAL = 3 # The offer corresponds to a new deal transacted on the Google Cloud # Marketplace. # # This value is not allowed if the offer amends another private offer # where the term has not ended, and the amended private offer has a deal # type of `MIGRATION`, `CHANNEL_SHIFT` or `NATIVE_RENEWAL`. NEW = 4 end end |
#end_time ⇒ ::Google::Protobuf::Timestamp (readonly)
Returns Output only. The time when the offer ended. This can only be set for offers
with ENDED state.
148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 |
# File 'proto_docs/google/cloud/commerceproducer/v1beta/private_offer.rb', line 148 class PrivateOffer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Information about the Google review process. # @!attribute [r] review_approve_time # @return [::Google::Protobuf::Timestamp] # Output only. The approval time of the Google review process. class PublishRequirementGoogleReview include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Contact information for a reseller. # @!attribute [r] contact # @return [::String] # Output only. The name of the reseller contact for this offer. # @!attribute [r] email # @return [::String] # Output only. The email of the reseller contact for this offer. class ResellerContact include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Contact information for the partner representative. # @!attribute [rw] contact # @return [::String] # Optional. Display text identifying the partner sales contact. # Displayed to the customer. # Must be provided when publishing the offer. # Maximum length: 256 characters. # @!attribute [rw] email # @return [::String] # Optional. The email address of the partner sales contact. # Displayed to the customer. # The format of the provided email address is validated when publishing the # offer, but no verification is performed that the email address actually # exists, accepts email, or is otherwise functional. class PartnerContact include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Information about the customer. # @!attribute [rw] entity_title # @return [::String] # Optional. A string identifying the customer's entity (for example, the # customer's organization or company name). Must be provided when # publishing the offer. Maximum length: 256 characters. # @!attribute [rw] contact # @return [::String] # Optional. A string identifying the customer contact. # Must be provided when publishing the offer. # Maximum length: 256 characters. # @!attribute [rw] email # @return [::String] # Optional. Email of customer contact. # If provided, it must be a well-formed email address. # @!attribute [r] address # @deprecated This field is deprecated and may be removed in the next major version update. # @return [::String] # Output only. Legal address of the customer organization. # This field can no longer be set, but it is preserved to return the # data from existing offers where address is set. # @!attribute [rw] target_billing_account # @return [::String] # Optional. The customer's billing account targeted by the offer. # The private offer once published can be accepted by a billing # administrator of the target billing account. If the customer accepts the # offer and later moves the resulting order to a new billing account, this # field will continue to reflect the original billing account to which the # private offer was extended. Must be provided when publishing the offer. # # To publish this private offer: # # * The billing account must exist. # * The billing account must not be in a free trial. # * The billing account must comply with Marketplace Reselling Policies. # * Reseller parent billing accounts are prohibited. Reseller subaccounts # are prohibited unless the service is enabled for reselling. # # Format: billingAccounts/012345-567890-ABCDEF class Customer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Configurations for the offer term and renewal options. # Extending a private offer to a customer that covers a given term # constitutes a guarantee to the customer that the product will remain # available to them for the duration of the term. # @!attribute [rw] duration_months # @return [::Integer] # Optional. Duration in months of the offer term. # The offer will end on the same day of the month after this duration. If # that date is not available, the offer will end on the last day of the # month. For example, if the offer starts on 01/31/2024 and the duration # is 13 months, the offer will end on 02/28/2025. # Must be set to publish the offer if the end policy is `AFTER_DURATION` # or `MATCH_AMENDED_OFFER`, and must be a positive value. # # The maximum possible offer duration, including all renewal terms, # cannot exceed 7 years. For example, if `duration_months` is 9 and # `term.max_renewal_count` is 9, then the maximum possible offer duration # is 90 months and exceeds the 7 year limit. # # Note: The following fields are mutually exclusive: `duration_months`, `scheduled_end_time`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] scheduled_end_time # @return [::Google::Type::DateTime] # Optional. Specified end time of the offer. # Must be set to publish the offer if the end policy is # `SCHEDULED_END_TIME`. # When set, the time must be in the future and at a day boundary in the # America/Los_Angeles time zone, and must be after # `term.scheduled_start_time` if applicable. # # Note: The following fields are mutually exclusive: `scheduled_end_time`, `duration_months`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] max_renewal_count # @return [::Integer] # Optional. The max number of renewals allowed, after the initial term # ends. This field is only relevant to standard interval offers with # interval of 'MONTHLY_PRORATED', 'MONTHLY_NOT_PRORATED', # 'QUARTERLY_NOT_PRORATED' or 'YEARLY_NOT_PRORATED'. Other types of # offers cannot be renewed. # # For example, if the initial term is 1 year and the max renewals is 3, # the customer can renew the offer for up to 3 additional years after the # initial term ends. Customers control whether they renew the offer. # # Allowing a customer to renew an offer does not constitute a guarantee # to the customer that the offered product will still be available to be # renewed at the renewal date. # # An offer with a max renewal count of 0 cannot be renewed. # Must be non-negative. # # Note: The following fields are mutually exclusive: `max_renewal_count`, `unlimited_renewal`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [r] unlimited_renewal # @deprecated This field is deprecated and may be removed in the next major version update. # @return [::Boolean] # Output only. Deprecated: This field can only be true on existing offers # with standard interval of 'MONTHLY_POSTPAY'. As of May 2024, we no # longer allow unlimited renewals. # # Note: The following fields are mutually exclusive: `unlimited_renewal`, `max_renewal_count`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] start_policy # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::Term::StartPolicy] # Optional. Defines when the resulting order should start. # Must be set when publishing the offer. # @!attribute [rw] scheduled_start_time # @return [::Google::Type::DateTime] # Optional. The scheduled start time of the offer. Cannot exceed one year # from the time of publish. # # If the start policy is `SCHEDULED_START_TIME`, a future time at a day # boundary in the America/Los_Angeles time zone must be provided when # publishing the offer. # # If the offer amends another private or standard offer, then the # scheduled start time must be: # # * Before or equal to the amended offer's end time if the offer's # end policy is not MATCH_AMENDED_OFFER. Otherwise, it has to be # strictly before the amended offer's end time. # * Before or equal to the start time of the next pending installment of # the amended offer, if amending a private offer with custom # installments. For example, if the amended offer has installments on # 01/01, 02/01, 03/01, 04/01, and today is 02/15, then the new offer's # `scheduled_start_time` must be at or before 03/01. # @!attribute [rw] end_policy # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::Term::EndPolicy] # Optional. Defines when an offer should end. # Must be set when publishing the offer. # @!attribute [r] effective_term_end_time # @return [::Google::Type::DateTime] # Output only. The expected end time of the current offer term. # # At the end of each offer term, an offer associated with an active # order will either renew or end. When an offer renews, a new term begins # and this value changes to reflect the end time of the new term. # When an offer ends this value is no longer set and instead `end_time` is # set. # # When the term of an offer ends and the offer does not renew, the # associated order also ends if the base standard offer has a # subscription price model. Otherwise, the associated order does not end # and remains active. # # Not included for PRIVATE_OFFER_VIEW_BASIC. # Included for PRIVATE_OFFER_VIEW_FULL when the offer has not ended and # either the offer has started or the value can be derived from other # fields. # # For offers that have not started, this field is set when one of the # following conditions is true. # # * The offer sets `term.scheduled_end_time`. # * The offer sets `term.scheduled_start_time` and `term.duration_months`, # the offer's `term.end_policy` is not `MATCH_AMENDED_OFFER`, and the # offer does not have standard_interval set to `MONTHLY_POSTPAY`. class Term include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Defines when an offer should start. module StartPolicy # Default value. This value is unused. START_POLICY_UNSPECIFIED = 0 # The resulting order starts immediately upon the customer's acceptance # of the offer, if no partner approval is required, or else immediately # after the partner approves the purchase if order approval is required. # This enum value cannot be combined with `term.scheduled_start_time`. IMMEDIATE = 1 # The resulting order starts at the scheduled start time. SCHEDULED_START_TIME = 2 end # Defines when an offer should end. module EndPolicy # Default value. This value is unused. END_POLICY_UNSPECIFIED = 0 # Offer ends after the specified duration. # If this is set, then `duration_months` must be positive. AFTER_DURATION = 1 # Offer ends at the schduled time. SCHEDULED_END_TIME = 2 # Offer coterms to the amended offer - the offer ends at the end of the # amended offer's term # # For example, if the amended offer starts on 01/15/24, and has a # duration of 6 months, then it ends on 07/15/24. If the current offer # coterms to the previous offer, and the current offer starts on # 05/06/24, then it will still end on 07/15/24. Assuming the current # offer renews 3 times, then the terms on the current offer will be: # # 1. 05/06/24 - 07/15/24 (First term, ends on 07/15 to coterm with the # amended offer) # 2. 07/15/24 - 01/15/25 (First renewal term) # 3. 01/15/25 - 07/15/25 (Second renewal term) # 4. 07/15/25 - 01/15/26 (Third renewal term) # # As a contrast, if the current offer does not coterm with the amended # offer (such as when `end_policy` is `AFTER_DURATION`), then the # terms will be: # # 1. 05/06/24 - 11/06/24 (First term, ends on 11/06, no coterming) # 2. 11/06/24 - 05/06/25 (First renewal term) # 3. 05/06/25 - 11/06/25 (Second renewal term) # 4. 11/06/25 - 05/06/26 (Third renewal term) # # If this is set, then the following conditions must be met: # # * `single_product_offer.amended_private_offer` must be set, and the # amended private offer must not be ended. # * The proration policy must not change (e.g., you cannot switch # between `MONTHLY_PRORATED` and `MONTHLY_NOT_PRORATED`). # * The current offer must not have custom intervals (where # `custom_interval_price` is set). # * `term.duration_months` must match the amended private offer's # duration. # * The amended private offer must not have a standard interval # of `MONTHLY_POSTPAY`. # # This is currently not supported. MATCH_AMENDED_OFFER = 3 end end # Configurations for the offer that is associated with a single product. # @!attribute [rw] amended_private_offer # @return [::String] # Optional. An existing private offer that will be superseded by this # offer. Unless the private offer is for a product type that supports # [multiple active # orders](https://cloud.google.com/marketplace/docs/partners/offers/multiple-offers), # an amendment private offer must be transacted if and only if the # destination customer billing account already contains an active order # for the same product. The offer to be superseded must be the offer # associated with an active order. # # Amendments generally fall into one of two scenarios: # # 1. **Active Order / Ended Offer**: The term of the amended offer has # ended but it is still associated with an active order. The new # offer must amend the ended private offer. # 2. **Active Order / Active Offer**: The term of the amended offer is # still active and the associated order is active. Similar to above, # the new offer must amend the currently active offer (unless # "multiple active orders" are supported). # # If this is set, then the `base_standard_offer` parent service must # match the parent service of the `base_standard_offer` in the # `amended_private_offer`. # # **Active Term Restrictions**: # If the term of the amended private offer has *NOT* ended, then the # following compatibility rules apply: # # * **Price Model Compatibility**: # * Flat Fee (with or without usage) offers can amend Flat Fee # offers. # * Usage-only or CUD offers can amend usage-only offers. # * Commitment-based offers must amend offers of the same price # model subtype (e.g., "additional usage at list price" vs "all # usage discounted"). # * **Billing Frequency Compatibility**: Determined by # `standard_interval` or `custom_interval_price`. # * If the amended offer has a custom billing frequency, the new # offer must also have a custom frequency. # * If the amended offer has a standard frequency (Monthly, # Quarterly, or Yearly), the new offer must maintain the same # frequency or transition to a custom frequency. # * Switching between different standard frequencies (e.g., Monthly # to Quarterly) is not supported. # * For Monthly frequency, switching between `MONTHLY_PRORATED` # and `MONTHLY_NOT_PRORATED` is supported, unless the offer's # `term.end_policy` is `MATCH_AMENDED_OFFER`. # * For usage-only offers, there are no billing frequency # restrictions. # # Other criteria for offer amendment are detailed elsewhere. # # Note: The following fields are mutually exclusive: `amended_private_offer`, `amended_standard_offer`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] amended_standard_offer # @return [::String] # Optional. An existing standard offer that will be superseded by this # offer. An amendment private offer must be transacted if the destination # customer billing account already contains an active order for the same # product, and otherwise cannot be transacted. The offer to be superseded # must be the offer associated with the active order. # # If this is set, then the `base_standard_offer` must contain the same # parent service as the parent service of the `amended_standard_offer`. # The price model of this offer must be compatible with the price model # of the `amended_standard_offer`: # # * Flat Fee, or Flat Fee with usage offers can amend Flat Fee or Flat # Fee with usage standard offers. # * Usage-only offers, or CUD offers can amend usage-only standard # offers. # # Other criteria for offer amendment are detailed elsewhere. # # Note: The following fields are mutually exclusive: `amended_standard_offer`, `amended_private_offer`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] standard_interval_price # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::StandardIntervalPrice] # Optional. Price configurations for offers with standard intervals. # A price must be set when publishing the offer. # # Note: The following fields are mutually exclusive: `standard_interval_price`, `custom_interval_price`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] custom_interval_price # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::CustomIntervalPrice] # Optional. Price configurations for offers with custom intervals. # Custom interval corresponds to "custom billing frequency", # see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule. # A price must be set when publishing the offer. # # Note: The following fields are mutually exclusive: `custom_interval_price`, `standard_interval_price`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] base_standard_offer # @return [::String] # Optional. The StandardOffer this PrivateOffer is based on. # Must be in the same project as the private offer, and must be effective # at the time of publishing. Must be present to publish the offer. # # Format: # projects/\\{project}/locations/\\{location}/services/\\{service}/standardOffers/\\{standard_offer} # @!attribute [r] service_level # @return [::String] # Output only. The service level (also known as the 'plan') of the base # standard offer. The value is populated at publish time from the base # standard offer. # @!attribute [r] reseller_private_offer_plan_id # @return [::String] # Output only. Present for offers created by a reseller from a reseller # private offer plan (RPOP). When set, contains the ID of the originating # RPOP. Not included for `PRIVATE_OFFER_VIEW_BASIC`. # @!attribute [rw] features # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Feature>] # Optional. The custom product features to display for this offer. # Feature `display_name` values must be unique to publish the offer. # The set of features specified here should generally include all features # included in the base service level, with optionally customized values, # but is not required to match exactly and may include additional features. # @!attribute [r] effective_installment_timeline # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Installment>] # Output only. The effective installment timeline of the offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. # Included for `PRIVATE_OFFER_VIEW_FULL` if all necessary information is # available to generate the timeline, and if the offer has # 'standard_interval_price' of 'MONTHLY_PRORATED', 'MONTHLY_NOT_PRORATED', # 'QUARTERLY_NOT_PRORATED', or 'YEARLY_NOT_PRORATED'. # @!attribute [r] contract_value # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::ContractValue] # Output only. Contract value of the offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. # @!attribute [r] revenue_share # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::RevenueShare] # Output only. Revenue share information for this Private Offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. class SingleProductOffer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Additional details used to describe customization of the service level. # # Features are used to distinguish service levels of the same product. # When a product has a single service level, all details can be contained # in the product documentation. When a product has multiple service levels, # each service level can be assigned a distinct set of features to # distinguish the key differences between the service levels. # # In addition to customizing pricing and other transaction details, a # private offer may include customization of partner-managed product # behavior. When this is the case, the details of the custom behavior are # described using features. # @!attribute [rw] display_name # @return [::String] # Optional. Human readable display text characterizing the feature. # Should be sufficiently detailed to identify the feature, allowing # features to be correlated across separate offers and service levels. # Must be non-empty to publish the offer. # The maximum allowed length is 128 characters. # Allows characters from the following Unicode Property Classes: # Letters, Numbers, Punctuation, Symbols, and Separators # @!attribute [rw] value # @return [::String] # Optional. Human readable display text reflecting the value of the # feature. Used for variable features not captured by the display_name # alone. The maximum allowed length is 3000 characters. Allows characters # from the following Unicode Property Classes: Letters, Numbers, # Punctuation, Symbols, and Separators class Feature include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price model of the private offer. # # Private offers are referred to as having different kinds of price models # based on the combination of fields set in the price model. The following # terminology is used in documentation and other reference material. # # * Usage-based: the price model does not set `flat_fee` # * Usage-only: the price model sets only `usage` # * CUD (committed use discount): the price model sets `commitment` # * Commitment discount with additional usage at list price: # The price model sets `commitment` and not `usage`. # * Commitment with all usage discounted: The price model sets # `commitment` and `usage`. # * Flat fee: the price model sets only `flat_fee` # * Flat fee with usage: the price model sets `flat_fee` and `usage` # # See # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-pricing-model#CUD # for the price models. # @!attribute [rw] flat_fee # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::FlatFee] # Optional. The price configurations for the flat fee subscription. # Must be unset when the base standard offer's price model does not # include subscription SKUs. # # Note: The following fields are mutually exclusive: `flat_fee`, `commitment`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] commitment # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Commitment] # Optional. The price configurations for the commitment based # subscription. Must be unset when the base standard offer's price # model includes subscription SKUs. # # Note: The following fields are mutually exclusive: `commitment`, `flat_fee`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] usage # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Usage] # Optional. The price configurations for the usage part. # If this field is set, the `Commitment.discount_percent` must be unset. # A private offer can apply a discount to all usage or to a usage # commitment, but not both. # Must be unset when the base standard offer's price model includes no # usage SKUs. class PriceModel include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # The discount for a specific SKU. # @!attribute [rw] sku # @return [::String] # Optional. The name of a partner SKU from this API. # # Must refer to a SKU in the price model of the base standard offer. # Inclusion in the base price model can occur either directly or # indirectly via inclusion in an included SkuGroup. # # Currently, standard offer price models include only partner SKUs # in the same project as the standard offer. This may change. # # Format: # projects/\\{project}/locations/\\{location}/services/\\{service}/skus/\\{sku} # # Note: The following fields are mutually exclusive: `sku`, `cloud_billing_sku`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] cloud_billing_sku # @return [::String] # Optional. The name of a Google SKU from the Cloud Billing API. # # Used for partner products sold by Google, such as Premium Operating # System Images sold for use in Compute Engine. This is not common. # SKUs of this type are not present on this API and can instead be # found on the Cloud Billing API or at https://cloud.google.com/skus. # # Must refer to a SKU in the price model of the base standard offer. # Google SKUs are always referenced in standard offers via SkuGroups. # # Format: services/\\{service}/skus/\\{sku} # # Note: The following fields are mutually exclusive: `cloud_billing_sku`, `sku`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] discount_percent # @return [::Google::Type::Decimal] # Optional. The discount percent for the SKU. # For example, `10` means a discount of 10%. If the original SKU # price is $100/hour then the discounted price will be $90/hour. # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", # and "". # Must be present to publish the offer. class SkuDiscount include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price for the usage SKUs. # @!attribute [rw] default_discount_percent # @return [::Google::Type::Decimal] # Optional. The default discount percent for usage SKUs. # An unset default discount percent is equivalent to 0 (no discount). # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "". # @!attribute [rw] sku_discounts # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::SkuDiscount>] # Optional. The discounts for the specific SKUs that override the # `default_discount_percent`. class Usage include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price configurations for the flat fee subscriptions. # @!attribute [rw] flat_fee_override # @return [::Google::Type::Money] # Optional. Flat fee overriding the default flat fee in the base # standard offer. Value cannot be negative. The currency must be "USD" # and precision is limited to cents. Must be present to publish the # offer, if the parent message is set. The maximum allowed value is # 1,000,000,000 USD. class FlatFee include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price configurations for the commitment based subscriptions. # @!attribute [rw] commitment_amount # @return [::Google::Type::Money] # Optional. The commitment balance that the customer will receive. # Value cannot be negative. # The currency must be "USD" and precision is limited to cents. # Must be present to publish the offer, if the parent message is set. # The maximum allowed value is 1,000,000,000 USD. # # If the current offer amends a private offer where the term has not # ended, and if the field # `single_product_offer.standard_interval_price.price_model.commitment.commitment_amount` # is set on both the current offer and the amended private offer, then # the commitment amount must be equal or higher on the current offer, # compared to the amended private offer. # @!attribute [rw] discount_percent # @return [::Google::Type::Decimal] # Optional. The discount percent on `commitment_amount`. # # For example, `10` means a discount of 10%. If the original # `commitment_amount` is $100 then the discounted amount will be $90. # The customer is charged $90 and receives $100 in credits. # # All reported usage will be charged at the standard price. # If this field is set, the `price_model.usage` must be unset. A # private offer can apply a discount to all usage or to a usage # commitment, but not both. # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "". # # Must be present to publish the offer. # @!attribute [rw] additional_credit # @return [::Google::Type::Money] # Optional. Additional credit granted to the customer. # Additional credits are only supported for custom interval offers. # Equivalent behavior can be achieved for standard interval offers by # varying the `commitment_amount` and `discount_percent`. # # Value cannot be negative. # The currency must be "USD" and precision is limited to cents. # The maximum allowed value is 1,000,000 USD. # @!attribute [rw] discard_previous_credit_balance # @return [::Boolean] # Optional. Whether to discard the previous credit balance when the # associated installment starts. If not set, the previous credit # balance will be rolled over to the current installment. # # If there are no previous installments, then the value of this field # will not matter - since it has no effect when no credits exist. class Commitment include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end end # Price configurations for offers with standard intervals. # @!attribute [rw] standard_interval # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::StandardIntervalPrice::StandardInterval] # Optional. The standard interval of the offer. # Must be present to publish unless the price model is usage-only. # @!attribute [rw] price_model # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel] # Optional. The price model of the offer. # Must be present to publish the offer. class StandardIntervalPrice include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # The options for offers with standard intervals. module StandardInterval # The private offer does not have an interval. # If this is set, then the offer is "usage-only". # Field `term.duration_months` must be positive. STANDARD_INTERVAL_UNSPECIFIED = 0 # The schedule of the monthly postpay offers. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # No longer supported as of May 2024. Cannot be used to publish # new offers. MONTHLY_POSTPAY = 1 # Monthly installments with proration. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 04/15, and the offer duration is # 3 months, the following installments will be created: # # 1: from 04/15 to 05/01, at the prorated price for April. # # # 2: from 05/01 to 06/01, at the full monthly price for May. # # # 3: from 06/01 to 07/01, at the full monthly price for June. # # # 4: from 07/01 to 07/15, at the prorated price for July. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. MONTHLY_PRORATED = 2 # Monthly installments without proration. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 04/15, and the offer duration is # 3 months, the following installments will be created: # # 1: from 04/15 to 05/15, at the full monthly price. # # # 2: from 05/15 to 06/15, at the full monthly price. # # # 3: from 06/15 to 07/15, at the full monthly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. MONTHLY_NOT_PRORATED = 3 # Quarterly installments which are not prorated. # This type of offer has "Quarterly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 01/15, and the offer duration is # 3 quarters, the following installments will be created: # # 1: from 01/15 to 04/15, at the full quarterly price. # # # 2: from 04/15 to 07/15, at the full quarterly price. # # # 3: from 07/15 to 10/15, at the full quarterly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. QUARTERLY_NOT_PRORATED = 4 # Yearly installments which are not prorated. # This type of offer has "Yearly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 01/15/2025, and the offer # duration is 3 years, the following installments will be created: # # 1: from 01/15/2025 to 01/15/2026, at the full yearly price. # # # 2: from 01/15/2026 to 01/15/2027, at the full yearly price. # # # 3: from 01/15/2027 to 01/15/2028, at the full yearly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. YEARLY_NOT_PRORATED = 5 end end # An installment of the offer. # @!attribute [rw] start_time # @return [::Google::Type::DateTime] # Optional. The start time of the installment. # Each installment must have a unique start time with one exception: # When the `term.start_policy` of the offer's term is `IMMEDIATE`, # the `start_time` of the first installment must be unset. # The actual start time is not recorded in the offer and instead is # determined by the time the resulting order became active. # # When the `term.start_policy` of the offer's term is # `SCHEDULED_START_TIME`, then the first installment's `start_time` must # match `term.scheduled_start_time`. # # If the `term.end_policy` of the offer's term is `SCHEDULED_END_TIME`, # then installment `start_time` must be before `term.scheduled_end_time`. # If it's `AFTER_DURATION`, then installment `start_time` must be before # the time calculated by adding the `term.duration_months` to # the start time of the offer. # # The `start_time` of the installments cannot be before the # `accept_deadline_time` of the offer. # # Installment start times must be in strictly increasing chronological # order. # @!attribute [rw] price_model # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel] # Optional. The price model of the installment. # All installments must have the same form of price model. class Installment include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Price configurations for offers with custom intervals. # @!attribute [rw] installments # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Installment>] # Optional. The installments that make up the installment timeline. # All installments must have the same form of price model (e.g. # all commitment, or all flat fee). A subscription must be present # under the price model for every installment. # # Must contain at least one installment to publish the offer. class CustomIntervalPrice include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The contract value of the offer. # @!attribute [r] total_contract_value # @return [::Google::Type::Money] # Output only. The total contract value of the offer. # This will be set for all non-draft private offers, as long as # 'PRIVATE_OFFER_VIEW_FULL' is requested. For DRAFT private offers, # this will be populated only when the end user's billing account is # set and when the pricing and term configuration is sufficiently # complete to allow for a calculation. class ContractValue include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Revenue Share information for a Private Offer. # For more details about the revenue share, including how the value is # determined, see # https://docs.cloud.google.com/marketplace/docs/partners/revenue-share-scenarios. # # Not included for `PRIVATE_OFFER_VIEW_BASIC`, or for DRAFT private offers. # # For non-draft private offers, these fields are populated based on the # following: # # * Offers published after April 20, 2025 will always have revenue # share fields populated. # * Offers published on or before April 20, 2025 will only have revenue # share fields populated if they were associated with an active, # unexpired order on that date. # @!attribute [r] current_term_vendor_net_revenue_percent # @return [::Google::Type::Decimal] # Output only. The revenue share currently in effect. # # The range of the value is between 0 and 100. For example, 80 # means the Vendor's current term revenue share is 80%. The vendor # will keep 80% of the revenue. # . # @!attribute [r] renewal_term_vendor_net_revenue_percent # @return [::Google::Type::Decimal] # Output only. The expected revenue share for the renewal term. # Not included if the offer does not have renewal terms. # # The range of the value is between 0 and 100. For example, 80 # means the Vendor's current term revenue share is 80%. The vendor # will keep 80% of the revenue after renewal. # . class RevenueShare include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end end # State of an offer. module State # Default value. This value is unused. STATE_UNSPECIFIED = 0 # The default state after creation when the offer can be edited. # In all other states, the contents of the offer cannot be edited. DRAFT = 1 # The offer is publishing. # Publishing will complete when all publishing requirements are satisfied. PUBLISHING = 2 # The offer has been published and is available to the customer to accept. PUBLISHED = 3 # The offer has been accepted by the customer. ACCEPTED = 4 # The offer was cancelled by the provider before it was transacted. # Cancelled offers can no longer be accepted by the customer. CANCELLED = 5 # The offer expired without being accepted by the customer. # Expired offers can no longer be accepted by the customer. EXPIRED = 6 # The offer has ended. # # Ended offers were accepted and active in the past, but have now reached # the end of their term or have been terminated. ENDED = 7 end # The type of the deal transacted with the offer. The deal type of an offer # is a factor in determining the offer's revenue share. module OfferDealType # Default value. This value is unused. OFFER_DEAL_TYPE_UNSPECIFIED = 0 # The offer corresponds to a preexisting commercial arrangement for a # workload on Google Cloud that is being transferred to the Cloud # Marketplace. CHANNEL_SHIFT = 1 # The offer corresponds to a preexisting commercial arrangement for a # workload previously not on Google Cloud that is being transferred to # Google Cloud. MIGRATION = 2 # The offer corresponds to a renewal of a deal initially transacted on # the Google Cloud Marketplace. NATIVE_RENEWAL = 3 # The offer corresponds to a new deal transacted on the Google Cloud # Marketplace. # # This value is not allowed if the offer amends another private offer # where the term has not ended, and the amended private offer has a deal # type of `MIGRATION`, `CHANNEL_SHIFT` or `NATIVE_RENEWAL`. NEW = 4 end end |
#internal_note ⇒ ::String
Returns Optional. Unstructured text content that is not visible to the customer. Intended to be used by partners for storing notes about the private offer. Maximum length: 1500 characters.
148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 |
# File 'proto_docs/google/cloud/commerceproducer/v1beta/private_offer.rb', line 148 class PrivateOffer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Information about the Google review process. # @!attribute [r] review_approve_time # @return [::Google::Protobuf::Timestamp] # Output only. The approval time of the Google review process. class PublishRequirementGoogleReview include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Contact information for a reseller. # @!attribute [r] contact # @return [::String] # Output only. The name of the reseller contact for this offer. # @!attribute [r] email # @return [::String] # Output only. The email of the reseller contact for this offer. class ResellerContact include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Contact information for the partner representative. # @!attribute [rw] contact # @return [::String] # Optional. Display text identifying the partner sales contact. # Displayed to the customer. # Must be provided when publishing the offer. # Maximum length: 256 characters. # @!attribute [rw] email # @return [::String] # Optional. The email address of the partner sales contact. # Displayed to the customer. # The format of the provided email address is validated when publishing the # offer, but no verification is performed that the email address actually # exists, accepts email, or is otherwise functional. class PartnerContact include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Information about the customer. # @!attribute [rw] entity_title # @return [::String] # Optional. A string identifying the customer's entity (for example, the # customer's organization or company name). Must be provided when # publishing the offer. Maximum length: 256 characters. # @!attribute [rw] contact # @return [::String] # Optional. A string identifying the customer contact. # Must be provided when publishing the offer. # Maximum length: 256 characters. # @!attribute [rw] email # @return [::String] # Optional. Email of customer contact. # If provided, it must be a well-formed email address. # @!attribute [r] address # @deprecated This field is deprecated and may be removed in the next major version update. # @return [::String] # Output only. Legal address of the customer organization. # This field can no longer be set, but it is preserved to return the # data from existing offers where address is set. # @!attribute [rw] target_billing_account # @return [::String] # Optional. The customer's billing account targeted by the offer. # The private offer once published can be accepted by a billing # administrator of the target billing account. If the customer accepts the # offer and later moves the resulting order to a new billing account, this # field will continue to reflect the original billing account to which the # private offer was extended. Must be provided when publishing the offer. # # To publish this private offer: # # * The billing account must exist. # * The billing account must not be in a free trial. # * The billing account must comply with Marketplace Reselling Policies. # * Reseller parent billing accounts are prohibited. Reseller subaccounts # are prohibited unless the service is enabled for reselling. # # Format: billingAccounts/012345-567890-ABCDEF class Customer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Configurations for the offer term and renewal options. # Extending a private offer to a customer that covers a given term # constitutes a guarantee to the customer that the product will remain # available to them for the duration of the term. # @!attribute [rw] duration_months # @return [::Integer] # Optional. Duration in months of the offer term. # The offer will end on the same day of the month after this duration. If # that date is not available, the offer will end on the last day of the # month. For example, if the offer starts on 01/31/2024 and the duration # is 13 months, the offer will end on 02/28/2025. # Must be set to publish the offer if the end policy is `AFTER_DURATION` # or `MATCH_AMENDED_OFFER`, and must be a positive value. # # The maximum possible offer duration, including all renewal terms, # cannot exceed 7 years. For example, if `duration_months` is 9 and # `term.max_renewal_count` is 9, then the maximum possible offer duration # is 90 months and exceeds the 7 year limit. # # Note: The following fields are mutually exclusive: `duration_months`, `scheduled_end_time`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] scheduled_end_time # @return [::Google::Type::DateTime] # Optional. Specified end time of the offer. # Must be set to publish the offer if the end policy is # `SCHEDULED_END_TIME`. # When set, the time must be in the future and at a day boundary in the # America/Los_Angeles time zone, and must be after # `term.scheduled_start_time` if applicable. # # Note: The following fields are mutually exclusive: `scheduled_end_time`, `duration_months`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] max_renewal_count # @return [::Integer] # Optional. The max number of renewals allowed, after the initial term # ends. This field is only relevant to standard interval offers with # interval of 'MONTHLY_PRORATED', 'MONTHLY_NOT_PRORATED', # 'QUARTERLY_NOT_PRORATED' or 'YEARLY_NOT_PRORATED'. Other types of # offers cannot be renewed. # # For example, if the initial term is 1 year and the max renewals is 3, # the customer can renew the offer for up to 3 additional years after the # initial term ends. Customers control whether they renew the offer. # # Allowing a customer to renew an offer does not constitute a guarantee # to the customer that the offered product will still be available to be # renewed at the renewal date. # # An offer with a max renewal count of 0 cannot be renewed. # Must be non-negative. # # Note: The following fields are mutually exclusive: `max_renewal_count`, `unlimited_renewal`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [r] unlimited_renewal # @deprecated This field is deprecated and may be removed in the next major version update. # @return [::Boolean] # Output only. Deprecated: This field can only be true on existing offers # with standard interval of 'MONTHLY_POSTPAY'. As of May 2024, we no # longer allow unlimited renewals. # # Note: The following fields are mutually exclusive: `unlimited_renewal`, `max_renewal_count`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] start_policy # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::Term::StartPolicy] # Optional. Defines when the resulting order should start. # Must be set when publishing the offer. # @!attribute [rw] scheduled_start_time # @return [::Google::Type::DateTime] # Optional. The scheduled start time of the offer. Cannot exceed one year # from the time of publish. # # If the start policy is `SCHEDULED_START_TIME`, a future time at a day # boundary in the America/Los_Angeles time zone must be provided when # publishing the offer. # # If the offer amends another private or standard offer, then the # scheduled start time must be: # # * Before or equal to the amended offer's end time if the offer's # end policy is not MATCH_AMENDED_OFFER. Otherwise, it has to be # strictly before the amended offer's end time. # * Before or equal to the start time of the next pending installment of # the amended offer, if amending a private offer with custom # installments. For example, if the amended offer has installments on # 01/01, 02/01, 03/01, 04/01, and today is 02/15, then the new offer's # `scheduled_start_time` must be at or before 03/01. # @!attribute [rw] end_policy # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::Term::EndPolicy] # Optional. Defines when an offer should end. # Must be set when publishing the offer. # @!attribute [r] effective_term_end_time # @return [::Google::Type::DateTime] # Output only. The expected end time of the current offer term. # # At the end of each offer term, an offer associated with an active # order will either renew or end. When an offer renews, a new term begins # and this value changes to reflect the end time of the new term. # When an offer ends this value is no longer set and instead `end_time` is # set. # # When the term of an offer ends and the offer does not renew, the # associated order also ends if the base standard offer has a # subscription price model. Otherwise, the associated order does not end # and remains active. # # Not included for PRIVATE_OFFER_VIEW_BASIC. # Included for PRIVATE_OFFER_VIEW_FULL when the offer has not ended and # either the offer has started or the value can be derived from other # fields. # # For offers that have not started, this field is set when one of the # following conditions is true. # # * The offer sets `term.scheduled_end_time`. # * The offer sets `term.scheduled_start_time` and `term.duration_months`, # the offer's `term.end_policy` is not `MATCH_AMENDED_OFFER`, and the # offer does not have standard_interval set to `MONTHLY_POSTPAY`. class Term include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Defines when an offer should start. module StartPolicy # Default value. This value is unused. START_POLICY_UNSPECIFIED = 0 # The resulting order starts immediately upon the customer's acceptance # of the offer, if no partner approval is required, or else immediately # after the partner approves the purchase if order approval is required. # This enum value cannot be combined with `term.scheduled_start_time`. IMMEDIATE = 1 # The resulting order starts at the scheduled start time. SCHEDULED_START_TIME = 2 end # Defines when an offer should end. module EndPolicy # Default value. This value is unused. END_POLICY_UNSPECIFIED = 0 # Offer ends after the specified duration. # If this is set, then `duration_months` must be positive. AFTER_DURATION = 1 # Offer ends at the schduled time. SCHEDULED_END_TIME = 2 # Offer coterms to the amended offer - the offer ends at the end of the # amended offer's term # # For example, if the amended offer starts on 01/15/24, and has a # duration of 6 months, then it ends on 07/15/24. If the current offer # coterms to the previous offer, and the current offer starts on # 05/06/24, then it will still end on 07/15/24. Assuming the current # offer renews 3 times, then the terms on the current offer will be: # # 1. 05/06/24 - 07/15/24 (First term, ends on 07/15 to coterm with the # amended offer) # 2. 07/15/24 - 01/15/25 (First renewal term) # 3. 01/15/25 - 07/15/25 (Second renewal term) # 4. 07/15/25 - 01/15/26 (Third renewal term) # # As a contrast, if the current offer does not coterm with the amended # offer (such as when `end_policy` is `AFTER_DURATION`), then the # terms will be: # # 1. 05/06/24 - 11/06/24 (First term, ends on 11/06, no coterming) # 2. 11/06/24 - 05/06/25 (First renewal term) # 3. 05/06/25 - 11/06/25 (Second renewal term) # 4. 11/06/25 - 05/06/26 (Third renewal term) # # If this is set, then the following conditions must be met: # # * `single_product_offer.amended_private_offer` must be set, and the # amended private offer must not be ended. # * The proration policy must not change (e.g., you cannot switch # between `MONTHLY_PRORATED` and `MONTHLY_NOT_PRORATED`). # * The current offer must not have custom intervals (where # `custom_interval_price` is set). # * `term.duration_months` must match the amended private offer's # duration. # * The amended private offer must not have a standard interval # of `MONTHLY_POSTPAY`. # # This is currently not supported. MATCH_AMENDED_OFFER = 3 end end # Configurations for the offer that is associated with a single product. # @!attribute [rw] amended_private_offer # @return [::String] # Optional. An existing private offer that will be superseded by this # offer. Unless the private offer is for a product type that supports # [multiple active # orders](https://cloud.google.com/marketplace/docs/partners/offers/multiple-offers), # an amendment private offer must be transacted if and only if the # destination customer billing account already contains an active order # for the same product. The offer to be superseded must be the offer # associated with an active order. # # Amendments generally fall into one of two scenarios: # # 1. **Active Order / Ended Offer**: The term of the amended offer has # ended but it is still associated with an active order. The new # offer must amend the ended private offer. # 2. **Active Order / Active Offer**: The term of the amended offer is # still active and the associated order is active. Similar to above, # the new offer must amend the currently active offer (unless # "multiple active orders" are supported). # # If this is set, then the `base_standard_offer` parent service must # match the parent service of the `base_standard_offer` in the # `amended_private_offer`. # # **Active Term Restrictions**: # If the term of the amended private offer has *NOT* ended, then the # following compatibility rules apply: # # * **Price Model Compatibility**: # * Flat Fee (with or without usage) offers can amend Flat Fee # offers. # * Usage-only or CUD offers can amend usage-only offers. # * Commitment-based offers must amend offers of the same price # model subtype (e.g., "additional usage at list price" vs "all # usage discounted"). # * **Billing Frequency Compatibility**: Determined by # `standard_interval` or `custom_interval_price`. # * If the amended offer has a custom billing frequency, the new # offer must also have a custom frequency. # * If the amended offer has a standard frequency (Monthly, # Quarterly, or Yearly), the new offer must maintain the same # frequency or transition to a custom frequency. # * Switching between different standard frequencies (e.g., Monthly # to Quarterly) is not supported. # * For Monthly frequency, switching between `MONTHLY_PRORATED` # and `MONTHLY_NOT_PRORATED` is supported, unless the offer's # `term.end_policy` is `MATCH_AMENDED_OFFER`. # * For usage-only offers, there are no billing frequency # restrictions. # # Other criteria for offer amendment are detailed elsewhere. # # Note: The following fields are mutually exclusive: `amended_private_offer`, `amended_standard_offer`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] amended_standard_offer # @return [::String] # Optional. An existing standard offer that will be superseded by this # offer. An amendment private offer must be transacted if the destination # customer billing account already contains an active order for the same # product, and otherwise cannot be transacted. The offer to be superseded # must be the offer associated with the active order. # # If this is set, then the `base_standard_offer` must contain the same # parent service as the parent service of the `amended_standard_offer`. # The price model of this offer must be compatible with the price model # of the `amended_standard_offer`: # # * Flat Fee, or Flat Fee with usage offers can amend Flat Fee or Flat # Fee with usage standard offers. # * Usage-only offers, or CUD offers can amend usage-only standard # offers. # # Other criteria for offer amendment are detailed elsewhere. # # Note: The following fields are mutually exclusive: `amended_standard_offer`, `amended_private_offer`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] standard_interval_price # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::StandardIntervalPrice] # Optional. Price configurations for offers with standard intervals. # A price must be set when publishing the offer. # # Note: The following fields are mutually exclusive: `standard_interval_price`, `custom_interval_price`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] custom_interval_price # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::CustomIntervalPrice] # Optional. Price configurations for offers with custom intervals. # Custom interval corresponds to "custom billing frequency", # see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule. # A price must be set when publishing the offer. # # Note: The following fields are mutually exclusive: `custom_interval_price`, `standard_interval_price`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] base_standard_offer # @return [::String] # Optional. The StandardOffer this PrivateOffer is based on. # Must be in the same project as the private offer, and must be effective # at the time of publishing. Must be present to publish the offer. # # Format: # projects/\\{project}/locations/\\{location}/services/\\{service}/standardOffers/\\{standard_offer} # @!attribute [r] service_level # @return [::String] # Output only. The service level (also known as the 'plan') of the base # standard offer. The value is populated at publish time from the base # standard offer. # @!attribute [r] reseller_private_offer_plan_id # @return [::String] # Output only. Present for offers created by a reseller from a reseller # private offer plan (RPOP). When set, contains the ID of the originating # RPOP. Not included for `PRIVATE_OFFER_VIEW_BASIC`. # @!attribute [rw] features # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Feature>] # Optional. The custom product features to display for this offer. # Feature `display_name` values must be unique to publish the offer. # The set of features specified here should generally include all features # included in the base service level, with optionally customized values, # but is not required to match exactly and may include additional features. # @!attribute [r] effective_installment_timeline # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Installment>] # Output only. The effective installment timeline of the offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. # Included for `PRIVATE_OFFER_VIEW_FULL` if all necessary information is # available to generate the timeline, and if the offer has # 'standard_interval_price' of 'MONTHLY_PRORATED', 'MONTHLY_NOT_PRORATED', # 'QUARTERLY_NOT_PRORATED', or 'YEARLY_NOT_PRORATED'. # @!attribute [r] contract_value # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::ContractValue] # Output only. Contract value of the offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. # @!attribute [r] revenue_share # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::RevenueShare] # Output only. Revenue share information for this Private Offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. class SingleProductOffer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Additional details used to describe customization of the service level. # # Features are used to distinguish service levels of the same product. # When a product has a single service level, all details can be contained # in the product documentation. When a product has multiple service levels, # each service level can be assigned a distinct set of features to # distinguish the key differences between the service levels. # # In addition to customizing pricing and other transaction details, a # private offer may include customization of partner-managed product # behavior. When this is the case, the details of the custom behavior are # described using features. # @!attribute [rw] display_name # @return [::String] # Optional. Human readable display text characterizing the feature. # Should be sufficiently detailed to identify the feature, allowing # features to be correlated across separate offers and service levels. # Must be non-empty to publish the offer. # The maximum allowed length is 128 characters. # Allows characters from the following Unicode Property Classes: # Letters, Numbers, Punctuation, Symbols, and Separators # @!attribute [rw] value # @return [::String] # Optional. Human readable display text reflecting the value of the # feature. Used for variable features not captured by the display_name # alone. The maximum allowed length is 3000 characters. Allows characters # from the following Unicode Property Classes: Letters, Numbers, # Punctuation, Symbols, and Separators class Feature include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price model of the private offer. # # Private offers are referred to as having different kinds of price models # based on the combination of fields set in the price model. The following # terminology is used in documentation and other reference material. # # * Usage-based: the price model does not set `flat_fee` # * Usage-only: the price model sets only `usage` # * CUD (committed use discount): the price model sets `commitment` # * Commitment discount with additional usage at list price: # The price model sets `commitment` and not `usage`. # * Commitment with all usage discounted: The price model sets # `commitment` and `usage`. # * Flat fee: the price model sets only `flat_fee` # * Flat fee with usage: the price model sets `flat_fee` and `usage` # # See # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-pricing-model#CUD # for the price models. # @!attribute [rw] flat_fee # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::FlatFee] # Optional. The price configurations for the flat fee subscription. # Must be unset when the base standard offer's price model does not # include subscription SKUs. # # Note: The following fields are mutually exclusive: `flat_fee`, `commitment`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] commitment # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Commitment] # Optional. The price configurations for the commitment based # subscription. Must be unset when the base standard offer's price # model includes subscription SKUs. # # Note: The following fields are mutually exclusive: `commitment`, `flat_fee`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] usage # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Usage] # Optional. The price configurations for the usage part. # If this field is set, the `Commitment.discount_percent` must be unset. # A private offer can apply a discount to all usage or to a usage # commitment, but not both. # Must be unset when the base standard offer's price model includes no # usage SKUs. class PriceModel include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # The discount for a specific SKU. # @!attribute [rw] sku # @return [::String] # Optional. The name of a partner SKU from this API. # # Must refer to a SKU in the price model of the base standard offer. # Inclusion in the base price model can occur either directly or # indirectly via inclusion in an included SkuGroup. # # Currently, standard offer price models include only partner SKUs # in the same project as the standard offer. This may change. # # Format: # projects/\\{project}/locations/\\{location}/services/\\{service}/skus/\\{sku} # # Note: The following fields are mutually exclusive: `sku`, `cloud_billing_sku`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] cloud_billing_sku # @return [::String] # Optional. The name of a Google SKU from the Cloud Billing API. # # Used for partner products sold by Google, such as Premium Operating # System Images sold for use in Compute Engine. This is not common. # SKUs of this type are not present on this API and can instead be # found on the Cloud Billing API or at https://cloud.google.com/skus. # # Must refer to a SKU in the price model of the base standard offer. # Google SKUs are always referenced in standard offers via SkuGroups. # # Format: services/\\{service}/skus/\\{sku} # # Note: The following fields are mutually exclusive: `cloud_billing_sku`, `sku`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] discount_percent # @return [::Google::Type::Decimal] # Optional. The discount percent for the SKU. # For example, `10` means a discount of 10%. If the original SKU # price is $100/hour then the discounted price will be $90/hour. # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", # and "". # Must be present to publish the offer. class SkuDiscount include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price for the usage SKUs. # @!attribute [rw] default_discount_percent # @return [::Google::Type::Decimal] # Optional. The default discount percent for usage SKUs. # An unset default discount percent is equivalent to 0 (no discount). # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "". # @!attribute [rw] sku_discounts # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::SkuDiscount>] # Optional. The discounts for the specific SKUs that override the # `default_discount_percent`. class Usage include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price configurations for the flat fee subscriptions. # @!attribute [rw] flat_fee_override # @return [::Google::Type::Money] # Optional. Flat fee overriding the default flat fee in the base # standard offer. Value cannot be negative. The currency must be "USD" # and precision is limited to cents. Must be present to publish the # offer, if the parent message is set. The maximum allowed value is # 1,000,000,000 USD. class FlatFee include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price configurations for the commitment based subscriptions. # @!attribute [rw] commitment_amount # @return [::Google::Type::Money] # Optional. The commitment balance that the customer will receive. # Value cannot be negative. # The currency must be "USD" and precision is limited to cents. # Must be present to publish the offer, if the parent message is set. # The maximum allowed value is 1,000,000,000 USD. # # If the current offer amends a private offer where the term has not # ended, and if the field # `single_product_offer.standard_interval_price.price_model.commitment.commitment_amount` # is set on both the current offer and the amended private offer, then # the commitment amount must be equal or higher on the current offer, # compared to the amended private offer. # @!attribute [rw] discount_percent # @return [::Google::Type::Decimal] # Optional. The discount percent on `commitment_amount`. # # For example, `10` means a discount of 10%. If the original # `commitment_amount` is $100 then the discounted amount will be $90. # The customer is charged $90 and receives $100 in credits. # # All reported usage will be charged at the standard price. # If this field is set, the `price_model.usage` must be unset. A # private offer can apply a discount to all usage or to a usage # commitment, but not both. # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "". # # Must be present to publish the offer. # @!attribute [rw] additional_credit # @return [::Google::Type::Money] # Optional. Additional credit granted to the customer. # Additional credits are only supported for custom interval offers. # Equivalent behavior can be achieved for standard interval offers by # varying the `commitment_amount` and `discount_percent`. # # Value cannot be negative. # The currency must be "USD" and precision is limited to cents. # The maximum allowed value is 1,000,000 USD. # @!attribute [rw] discard_previous_credit_balance # @return [::Boolean] # Optional. Whether to discard the previous credit balance when the # associated installment starts. If not set, the previous credit # balance will be rolled over to the current installment. # # If there are no previous installments, then the value of this field # will not matter - since it has no effect when no credits exist. class Commitment include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end end # Price configurations for offers with standard intervals. # @!attribute [rw] standard_interval # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::StandardIntervalPrice::StandardInterval] # Optional. The standard interval of the offer. # Must be present to publish unless the price model is usage-only. # @!attribute [rw] price_model # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel] # Optional. The price model of the offer. # Must be present to publish the offer. class StandardIntervalPrice include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # The options for offers with standard intervals. module StandardInterval # The private offer does not have an interval. # If this is set, then the offer is "usage-only". # Field `term.duration_months` must be positive. STANDARD_INTERVAL_UNSPECIFIED = 0 # The schedule of the monthly postpay offers. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # No longer supported as of May 2024. Cannot be used to publish # new offers. MONTHLY_POSTPAY = 1 # Monthly installments with proration. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 04/15, and the offer duration is # 3 months, the following installments will be created: # # 1: from 04/15 to 05/01, at the prorated price for April. # # # 2: from 05/01 to 06/01, at the full monthly price for May. # # # 3: from 06/01 to 07/01, at the full monthly price for June. # # # 4: from 07/01 to 07/15, at the prorated price for July. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. MONTHLY_PRORATED = 2 # Monthly installments without proration. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 04/15, and the offer duration is # 3 months, the following installments will be created: # # 1: from 04/15 to 05/15, at the full monthly price. # # # 2: from 05/15 to 06/15, at the full monthly price. # # # 3: from 06/15 to 07/15, at the full monthly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. MONTHLY_NOT_PRORATED = 3 # Quarterly installments which are not prorated. # This type of offer has "Quarterly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 01/15, and the offer duration is # 3 quarters, the following installments will be created: # # 1: from 01/15 to 04/15, at the full quarterly price. # # # 2: from 04/15 to 07/15, at the full quarterly price. # # # 3: from 07/15 to 10/15, at the full quarterly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. QUARTERLY_NOT_PRORATED = 4 # Yearly installments which are not prorated. # This type of offer has "Yearly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 01/15/2025, and the offer # duration is 3 years, the following installments will be created: # # 1: from 01/15/2025 to 01/15/2026, at the full yearly price. # # # 2: from 01/15/2026 to 01/15/2027, at the full yearly price. # # # 3: from 01/15/2027 to 01/15/2028, at the full yearly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. YEARLY_NOT_PRORATED = 5 end end # An installment of the offer. # @!attribute [rw] start_time # @return [::Google::Type::DateTime] # Optional. The start time of the installment. # Each installment must have a unique start time with one exception: # When the `term.start_policy` of the offer's term is `IMMEDIATE`, # the `start_time` of the first installment must be unset. # The actual start time is not recorded in the offer and instead is # determined by the time the resulting order became active. # # When the `term.start_policy` of the offer's term is # `SCHEDULED_START_TIME`, then the first installment's `start_time` must # match `term.scheduled_start_time`. # # If the `term.end_policy` of the offer's term is `SCHEDULED_END_TIME`, # then installment `start_time` must be before `term.scheduled_end_time`. # If it's `AFTER_DURATION`, then installment `start_time` must be before # the time calculated by adding the `term.duration_months` to # the start time of the offer. # # The `start_time` of the installments cannot be before the # `accept_deadline_time` of the offer. # # Installment start times must be in strictly increasing chronological # order. # @!attribute [rw] price_model # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel] # Optional. The price model of the installment. # All installments must have the same form of price model. class Installment include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Price configurations for offers with custom intervals. # @!attribute [rw] installments # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Installment>] # Optional. The installments that make up the installment timeline. # All installments must have the same form of price model (e.g. # all commitment, or all flat fee). A subscription must be present # under the price model for every installment. # # Must contain at least one installment to publish the offer. class CustomIntervalPrice include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The contract value of the offer. # @!attribute [r] total_contract_value # @return [::Google::Type::Money] # Output only. The total contract value of the offer. # This will be set for all non-draft private offers, as long as # 'PRIVATE_OFFER_VIEW_FULL' is requested. For DRAFT private offers, # this will be populated only when the end user's billing account is # set and when the pricing and term configuration is sufficiently # complete to allow for a calculation. class ContractValue include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Revenue Share information for a Private Offer. # For more details about the revenue share, including how the value is # determined, see # https://docs.cloud.google.com/marketplace/docs/partners/revenue-share-scenarios. # # Not included for `PRIVATE_OFFER_VIEW_BASIC`, or for DRAFT private offers. # # For non-draft private offers, these fields are populated based on the # following: # # * Offers published after April 20, 2025 will always have revenue # share fields populated. # * Offers published on or before April 20, 2025 will only have revenue # share fields populated if they were associated with an active, # unexpired order on that date. # @!attribute [r] current_term_vendor_net_revenue_percent # @return [::Google::Type::Decimal] # Output only. The revenue share currently in effect. # # The range of the value is between 0 and 100. For example, 80 # means the Vendor's current term revenue share is 80%. The vendor # will keep 80% of the revenue. # . # @!attribute [r] renewal_term_vendor_net_revenue_percent # @return [::Google::Type::Decimal] # Output only. The expected revenue share for the renewal term. # Not included if the offer does not have renewal terms. # # The range of the value is between 0 and 100. For example, 80 # means the Vendor's current term revenue share is 80%. The vendor # will keep 80% of the revenue after renewal. # . class RevenueShare include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end end # State of an offer. module State # Default value. This value is unused. STATE_UNSPECIFIED = 0 # The default state after creation when the offer can be edited. # In all other states, the contents of the offer cannot be edited. DRAFT = 1 # The offer is publishing. # Publishing will complete when all publishing requirements are satisfied. PUBLISHING = 2 # The offer has been published and is available to the customer to accept. PUBLISHED = 3 # The offer has been accepted by the customer. ACCEPTED = 4 # The offer was cancelled by the provider before it was transacted. # Cancelled offers can no longer be accepted by the customer. CANCELLED = 5 # The offer expired without being accepted by the customer. # Expired offers can no longer be accepted by the customer. EXPIRED = 6 # The offer has ended. # # Ended offers were accepted and active in the past, but have now reached # the end of their term or have been terminated. ENDED = 7 end # The type of the deal transacted with the offer. The deal type of an offer # is a factor in determining the offer's revenue share. module OfferDealType # Default value. This value is unused. OFFER_DEAL_TYPE_UNSPECIFIED = 0 # The offer corresponds to a preexisting commercial arrangement for a # workload on Google Cloud that is being transferred to the Cloud # Marketplace. CHANNEL_SHIFT = 1 # The offer corresponds to a preexisting commercial arrangement for a # workload previously not on Google Cloud that is being transferred to # Google Cloud. MIGRATION = 2 # The offer corresponds to a renewal of a deal initially transacted on # the Google Cloud Marketplace. NATIVE_RENEWAL = 3 # The offer corresponds to a new deal transacted on the Google Cloud # Marketplace. # # This value is not allowed if the offer amends another private offer # where the term has not ended, and the amended private offer has a deal # type of `MIGRATION`, `CHANNEL_SHIFT` or `NATIVE_RENEWAL`. NEW = 4 end end |
#name ⇒ ::String
Returns Identifier. Name of the resource.
148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 |
# File 'proto_docs/google/cloud/commerceproducer/v1beta/private_offer.rb', line 148 class PrivateOffer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Information about the Google review process. # @!attribute [r] review_approve_time # @return [::Google::Protobuf::Timestamp] # Output only. The approval time of the Google review process. class PublishRequirementGoogleReview include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Contact information for a reseller. # @!attribute [r] contact # @return [::String] # Output only. The name of the reseller contact for this offer. # @!attribute [r] email # @return [::String] # Output only. The email of the reseller contact for this offer. class ResellerContact include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Contact information for the partner representative. # @!attribute [rw] contact # @return [::String] # Optional. Display text identifying the partner sales contact. # Displayed to the customer. # Must be provided when publishing the offer. # Maximum length: 256 characters. # @!attribute [rw] email # @return [::String] # Optional. The email address of the partner sales contact. # Displayed to the customer. # The format of the provided email address is validated when publishing the # offer, but no verification is performed that the email address actually # exists, accepts email, or is otherwise functional. class PartnerContact include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Information about the customer. # @!attribute [rw] entity_title # @return [::String] # Optional. A string identifying the customer's entity (for example, the # customer's organization or company name). Must be provided when # publishing the offer. Maximum length: 256 characters. # @!attribute [rw] contact # @return [::String] # Optional. A string identifying the customer contact. # Must be provided when publishing the offer. # Maximum length: 256 characters. # @!attribute [rw] email # @return [::String] # Optional. Email of customer contact. # If provided, it must be a well-formed email address. # @!attribute [r] address # @deprecated This field is deprecated and may be removed in the next major version update. # @return [::String] # Output only. Legal address of the customer organization. # This field can no longer be set, but it is preserved to return the # data from existing offers where address is set. # @!attribute [rw] target_billing_account # @return [::String] # Optional. The customer's billing account targeted by the offer. # The private offer once published can be accepted by a billing # administrator of the target billing account. If the customer accepts the # offer and later moves the resulting order to a new billing account, this # field will continue to reflect the original billing account to which the # private offer was extended. Must be provided when publishing the offer. # # To publish this private offer: # # * The billing account must exist. # * The billing account must not be in a free trial. # * The billing account must comply with Marketplace Reselling Policies. # * Reseller parent billing accounts are prohibited. Reseller subaccounts # are prohibited unless the service is enabled for reselling. # # Format: billingAccounts/012345-567890-ABCDEF class Customer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Configurations for the offer term and renewal options. # Extending a private offer to a customer that covers a given term # constitutes a guarantee to the customer that the product will remain # available to them for the duration of the term. # @!attribute [rw] duration_months # @return [::Integer] # Optional. Duration in months of the offer term. # The offer will end on the same day of the month after this duration. If # that date is not available, the offer will end on the last day of the # month. For example, if the offer starts on 01/31/2024 and the duration # is 13 months, the offer will end on 02/28/2025. # Must be set to publish the offer if the end policy is `AFTER_DURATION` # or `MATCH_AMENDED_OFFER`, and must be a positive value. # # The maximum possible offer duration, including all renewal terms, # cannot exceed 7 years. For example, if `duration_months` is 9 and # `term.max_renewal_count` is 9, then the maximum possible offer duration # is 90 months and exceeds the 7 year limit. # # Note: The following fields are mutually exclusive: `duration_months`, `scheduled_end_time`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] scheduled_end_time # @return [::Google::Type::DateTime] # Optional. Specified end time of the offer. # Must be set to publish the offer if the end policy is # `SCHEDULED_END_TIME`. # When set, the time must be in the future and at a day boundary in the # America/Los_Angeles time zone, and must be after # `term.scheduled_start_time` if applicable. # # Note: The following fields are mutually exclusive: `scheduled_end_time`, `duration_months`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] max_renewal_count # @return [::Integer] # Optional. The max number of renewals allowed, after the initial term # ends. This field is only relevant to standard interval offers with # interval of 'MONTHLY_PRORATED', 'MONTHLY_NOT_PRORATED', # 'QUARTERLY_NOT_PRORATED' or 'YEARLY_NOT_PRORATED'. Other types of # offers cannot be renewed. # # For example, if the initial term is 1 year and the max renewals is 3, # the customer can renew the offer for up to 3 additional years after the # initial term ends. Customers control whether they renew the offer. # # Allowing a customer to renew an offer does not constitute a guarantee # to the customer that the offered product will still be available to be # renewed at the renewal date. # # An offer with a max renewal count of 0 cannot be renewed. # Must be non-negative. # # Note: The following fields are mutually exclusive: `max_renewal_count`, `unlimited_renewal`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [r] unlimited_renewal # @deprecated This field is deprecated and may be removed in the next major version update. # @return [::Boolean] # Output only. Deprecated: This field can only be true on existing offers # with standard interval of 'MONTHLY_POSTPAY'. As of May 2024, we no # longer allow unlimited renewals. # # Note: The following fields are mutually exclusive: `unlimited_renewal`, `max_renewal_count`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] start_policy # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::Term::StartPolicy] # Optional. Defines when the resulting order should start. # Must be set when publishing the offer. # @!attribute [rw] scheduled_start_time # @return [::Google::Type::DateTime] # Optional. The scheduled start time of the offer. Cannot exceed one year # from the time of publish. # # If the start policy is `SCHEDULED_START_TIME`, a future time at a day # boundary in the America/Los_Angeles time zone must be provided when # publishing the offer. # # If the offer amends another private or standard offer, then the # scheduled start time must be: # # * Before or equal to the amended offer's end time if the offer's # end policy is not MATCH_AMENDED_OFFER. Otherwise, it has to be # strictly before the amended offer's end time. # * Before or equal to the start time of the next pending installment of # the amended offer, if amending a private offer with custom # installments. For example, if the amended offer has installments on # 01/01, 02/01, 03/01, 04/01, and today is 02/15, then the new offer's # `scheduled_start_time` must be at or before 03/01. # @!attribute [rw] end_policy # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::Term::EndPolicy] # Optional. Defines when an offer should end. # Must be set when publishing the offer. # @!attribute [r] effective_term_end_time # @return [::Google::Type::DateTime] # Output only. The expected end time of the current offer term. # # At the end of each offer term, an offer associated with an active # order will either renew or end. When an offer renews, a new term begins # and this value changes to reflect the end time of the new term. # When an offer ends this value is no longer set and instead `end_time` is # set. # # When the term of an offer ends and the offer does not renew, the # associated order also ends if the base standard offer has a # subscription price model. Otherwise, the associated order does not end # and remains active. # # Not included for PRIVATE_OFFER_VIEW_BASIC. # Included for PRIVATE_OFFER_VIEW_FULL when the offer has not ended and # either the offer has started or the value can be derived from other # fields. # # For offers that have not started, this field is set when one of the # following conditions is true. # # * The offer sets `term.scheduled_end_time`. # * The offer sets `term.scheduled_start_time` and `term.duration_months`, # the offer's `term.end_policy` is not `MATCH_AMENDED_OFFER`, and the # offer does not have standard_interval set to `MONTHLY_POSTPAY`. class Term include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Defines when an offer should start. module StartPolicy # Default value. This value is unused. START_POLICY_UNSPECIFIED = 0 # The resulting order starts immediately upon the customer's acceptance # of the offer, if no partner approval is required, or else immediately # after the partner approves the purchase if order approval is required. # This enum value cannot be combined with `term.scheduled_start_time`. IMMEDIATE = 1 # The resulting order starts at the scheduled start time. SCHEDULED_START_TIME = 2 end # Defines when an offer should end. module EndPolicy # Default value. This value is unused. END_POLICY_UNSPECIFIED = 0 # Offer ends after the specified duration. # If this is set, then `duration_months` must be positive. AFTER_DURATION = 1 # Offer ends at the schduled time. SCHEDULED_END_TIME = 2 # Offer coterms to the amended offer - the offer ends at the end of the # amended offer's term # # For example, if the amended offer starts on 01/15/24, and has a # duration of 6 months, then it ends on 07/15/24. If the current offer # coterms to the previous offer, and the current offer starts on # 05/06/24, then it will still end on 07/15/24. Assuming the current # offer renews 3 times, then the terms on the current offer will be: # # 1. 05/06/24 - 07/15/24 (First term, ends on 07/15 to coterm with the # amended offer) # 2. 07/15/24 - 01/15/25 (First renewal term) # 3. 01/15/25 - 07/15/25 (Second renewal term) # 4. 07/15/25 - 01/15/26 (Third renewal term) # # As a contrast, if the current offer does not coterm with the amended # offer (such as when `end_policy` is `AFTER_DURATION`), then the # terms will be: # # 1. 05/06/24 - 11/06/24 (First term, ends on 11/06, no coterming) # 2. 11/06/24 - 05/06/25 (First renewal term) # 3. 05/06/25 - 11/06/25 (Second renewal term) # 4. 11/06/25 - 05/06/26 (Third renewal term) # # If this is set, then the following conditions must be met: # # * `single_product_offer.amended_private_offer` must be set, and the # amended private offer must not be ended. # * The proration policy must not change (e.g., you cannot switch # between `MONTHLY_PRORATED` and `MONTHLY_NOT_PRORATED`). # * The current offer must not have custom intervals (where # `custom_interval_price` is set). # * `term.duration_months` must match the amended private offer's # duration. # * The amended private offer must not have a standard interval # of `MONTHLY_POSTPAY`. # # This is currently not supported. MATCH_AMENDED_OFFER = 3 end end # Configurations for the offer that is associated with a single product. # @!attribute [rw] amended_private_offer # @return [::String] # Optional. An existing private offer that will be superseded by this # offer. Unless the private offer is for a product type that supports # [multiple active # orders](https://cloud.google.com/marketplace/docs/partners/offers/multiple-offers), # an amendment private offer must be transacted if and only if the # destination customer billing account already contains an active order # for the same product. The offer to be superseded must be the offer # associated with an active order. # # Amendments generally fall into one of two scenarios: # # 1. **Active Order / Ended Offer**: The term of the amended offer has # ended but it is still associated with an active order. The new # offer must amend the ended private offer. # 2. **Active Order / Active Offer**: The term of the amended offer is # still active and the associated order is active. Similar to above, # the new offer must amend the currently active offer (unless # "multiple active orders" are supported). # # If this is set, then the `base_standard_offer` parent service must # match the parent service of the `base_standard_offer` in the # `amended_private_offer`. # # **Active Term Restrictions**: # If the term of the amended private offer has *NOT* ended, then the # following compatibility rules apply: # # * **Price Model Compatibility**: # * Flat Fee (with or without usage) offers can amend Flat Fee # offers. # * Usage-only or CUD offers can amend usage-only offers. # * Commitment-based offers must amend offers of the same price # model subtype (e.g., "additional usage at list price" vs "all # usage discounted"). # * **Billing Frequency Compatibility**: Determined by # `standard_interval` or `custom_interval_price`. # * If the amended offer has a custom billing frequency, the new # offer must also have a custom frequency. # * If the amended offer has a standard frequency (Monthly, # Quarterly, or Yearly), the new offer must maintain the same # frequency or transition to a custom frequency. # * Switching between different standard frequencies (e.g., Monthly # to Quarterly) is not supported. # * For Monthly frequency, switching between `MONTHLY_PRORATED` # and `MONTHLY_NOT_PRORATED` is supported, unless the offer's # `term.end_policy` is `MATCH_AMENDED_OFFER`. # * For usage-only offers, there are no billing frequency # restrictions. # # Other criteria for offer amendment are detailed elsewhere. # # Note: The following fields are mutually exclusive: `amended_private_offer`, `amended_standard_offer`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] amended_standard_offer # @return [::String] # Optional. An existing standard offer that will be superseded by this # offer. An amendment private offer must be transacted if the destination # customer billing account already contains an active order for the same # product, and otherwise cannot be transacted. The offer to be superseded # must be the offer associated with the active order. # # If this is set, then the `base_standard_offer` must contain the same # parent service as the parent service of the `amended_standard_offer`. # The price model of this offer must be compatible with the price model # of the `amended_standard_offer`: # # * Flat Fee, or Flat Fee with usage offers can amend Flat Fee or Flat # Fee with usage standard offers. # * Usage-only offers, or CUD offers can amend usage-only standard # offers. # # Other criteria for offer amendment are detailed elsewhere. # # Note: The following fields are mutually exclusive: `amended_standard_offer`, `amended_private_offer`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] standard_interval_price # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::StandardIntervalPrice] # Optional. Price configurations for offers with standard intervals. # A price must be set when publishing the offer. # # Note: The following fields are mutually exclusive: `standard_interval_price`, `custom_interval_price`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] custom_interval_price # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::CustomIntervalPrice] # Optional. Price configurations for offers with custom intervals. # Custom interval corresponds to "custom billing frequency", # see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule. # A price must be set when publishing the offer. # # Note: The following fields are mutually exclusive: `custom_interval_price`, `standard_interval_price`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] base_standard_offer # @return [::String] # Optional. The StandardOffer this PrivateOffer is based on. # Must be in the same project as the private offer, and must be effective # at the time of publishing. Must be present to publish the offer. # # Format: # projects/\\{project}/locations/\\{location}/services/\\{service}/standardOffers/\\{standard_offer} # @!attribute [r] service_level # @return [::String] # Output only. The service level (also known as the 'plan') of the base # standard offer. The value is populated at publish time from the base # standard offer. # @!attribute [r] reseller_private_offer_plan_id # @return [::String] # Output only. Present for offers created by a reseller from a reseller # private offer plan (RPOP). When set, contains the ID of the originating # RPOP. Not included for `PRIVATE_OFFER_VIEW_BASIC`. # @!attribute [rw] features # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Feature>] # Optional. The custom product features to display for this offer. # Feature `display_name` values must be unique to publish the offer. # The set of features specified here should generally include all features # included in the base service level, with optionally customized values, # but is not required to match exactly and may include additional features. # @!attribute [r] effective_installment_timeline # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Installment>] # Output only. The effective installment timeline of the offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. # Included for `PRIVATE_OFFER_VIEW_FULL` if all necessary information is # available to generate the timeline, and if the offer has # 'standard_interval_price' of 'MONTHLY_PRORATED', 'MONTHLY_NOT_PRORATED', # 'QUARTERLY_NOT_PRORATED', or 'YEARLY_NOT_PRORATED'. # @!attribute [r] contract_value # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::ContractValue] # Output only. Contract value of the offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. # @!attribute [r] revenue_share # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::RevenueShare] # Output only. Revenue share information for this Private Offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. class SingleProductOffer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Additional details used to describe customization of the service level. # # Features are used to distinguish service levels of the same product. # When a product has a single service level, all details can be contained # in the product documentation. When a product has multiple service levels, # each service level can be assigned a distinct set of features to # distinguish the key differences between the service levels. # # In addition to customizing pricing and other transaction details, a # private offer may include customization of partner-managed product # behavior. When this is the case, the details of the custom behavior are # described using features. # @!attribute [rw] display_name # @return [::String] # Optional. Human readable display text characterizing the feature. # Should be sufficiently detailed to identify the feature, allowing # features to be correlated across separate offers and service levels. # Must be non-empty to publish the offer. # The maximum allowed length is 128 characters. # Allows characters from the following Unicode Property Classes: # Letters, Numbers, Punctuation, Symbols, and Separators # @!attribute [rw] value # @return [::String] # Optional. Human readable display text reflecting the value of the # feature. Used for variable features not captured by the display_name # alone. The maximum allowed length is 3000 characters. Allows characters # from the following Unicode Property Classes: Letters, Numbers, # Punctuation, Symbols, and Separators class Feature include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price model of the private offer. # # Private offers are referred to as having different kinds of price models # based on the combination of fields set in the price model. The following # terminology is used in documentation and other reference material. # # * Usage-based: the price model does not set `flat_fee` # * Usage-only: the price model sets only `usage` # * CUD (committed use discount): the price model sets `commitment` # * Commitment discount with additional usage at list price: # The price model sets `commitment` and not `usage`. # * Commitment with all usage discounted: The price model sets # `commitment` and `usage`. # * Flat fee: the price model sets only `flat_fee` # * Flat fee with usage: the price model sets `flat_fee` and `usage` # # See # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-pricing-model#CUD # for the price models. # @!attribute [rw] flat_fee # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::FlatFee] # Optional. The price configurations for the flat fee subscription. # Must be unset when the base standard offer's price model does not # include subscription SKUs. # # Note: The following fields are mutually exclusive: `flat_fee`, `commitment`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] commitment # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Commitment] # Optional. The price configurations for the commitment based # subscription. Must be unset when the base standard offer's price # model includes subscription SKUs. # # Note: The following fields are mutually exclusive: `commitment`, `flat_fee`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] usage # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Usage] # Optional. The price configurations for the usage part. # If this field is set, the `Commitment.discount_percent` must be unset. # A private offer can apply a discount to all usage or to a usage # commitment, but not both. # Must be unset when the base standard offer's price model includes no # usage SKUs. class PriceModel include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # The discount for a specific SKU. # @!attribute [rw] sku # @return [::String] # Optional. The name of a partner SKU from this API. # # Must refer to a SKU in the price model of the base standard offer. # Inclusion in the base price model can occur either directly or # indirectly via inclusion in an included SkuGroup. # # Currently, standard offer price models include only partner SKUs # in the same project as the standard offer. This may change. # # Format: # projects/\\{project}/locations/\\{location}/services/\\{service}/skus/\\{sku} # # Note: The following fields are mutually exclusive: `sku`, `cloud_billing_sku`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] cloud_billing_sku # @return [::String] # Optional. The name of a Google SKU from the Cloud Billing API. # # Used for partner products sold by Google, such as Premium Operating # System Images sold for use in Compute Engine. This is not common. # SKUs of this type are not present on this API and can instead be # found on the Cloud Billing API or at https://cloud.google.com/skus. # # Must refer to a SKU in the price model of the base standard offer. # Google SKUs are always referenced in standard offers via SkuGroups. # # Format: services/\\{service}/skus/\\{sku} # # Note: The following fields are mutually exclusive: `cloud_billing_sku`, `sku`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] discount_percent # @return [::Google::Type::Decimal] # Optional. The discount percent for the SKU. # For example, `10` means a discount of 10%. If the original SKU # price is $100/hour then the discounted price will be $90/hour. # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", # and "". # Must be present to publish the offer. class SkuDiscount include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price for the usage SKUs. # @!attribute [rw] default_discount_percent # @return [::Google::Type::Decimal] # Optional. The default discount percent for usage SKUs. # An unset default discount percent is equivalent to 0 (no discount). # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "". # @!attribute [rw] sku_discounts # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::SkuDiscount>] # Optional. The discounts for the specific SKUs that override the # `default_discount_percent`. class Usage include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price configurations for the flat fee subscriptions. # @!attribute [rw] flat_fee_override # @return [::Google::Type::Money] # Optional. Flat fee overriding the default flat fee in the base # standard offer. Value cannot be negative. The currency must be "USD" # and precision is limited to cents. Must be present to publish the # offer, if the parent message is set. The maximum allowed value is # 1,000,000,000 USD. class FlatFee include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price configurations for the commitment based subscriptions. # @!attribute [rw] commitment_amount # @return [::Google::Type::Money] # Optional. The commitment balance that the customer will receive. # Value cannot be negative. # The currency must be "USD" and precision is limited to cents. # Must be present to publish the offer, if the parent message is set. # The maximum allowed value is 1,000,000,000 USD. # # If the current offer amends a private offer where the term has not # ended, and if the field # `single_product_offer.standard_interval_price.price_model.commitment.commitment_amount` # is set on both the current offer and the amended private offer, then # the commitment amount must be equal or higher on the current offer, # compared to the amended private offer. # @!attribute [rw] discount_percent # @return [::Google::Type::Decimal] # Optional. The discount percent on `commitment_amount`. # # For example, `10` means a discount of 10%. If the original # `commitment_amount` is $100 then the discounted amount will be $90. # The customer is charged $90 and receives $100 in credits. # # All reported usage will be charged at the standard price. # If this field is set, the `price_model.usage` must be unset. A # private offer can apply a discount to all usage or to a usage # commitment, but not both. # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "". # # Must be present to publish the offer. # @!attribute [rw] additional_credit # @return [::Google::Type::Money] # Optional. Additional credit granted to the customer. # Additional credits are only supported for custom interval offers. # Equivalent behavior can be achieved for standard interval offers by # varying the `commitment_amount` and `discount_percent`. # # Value cannot be negative. # The currency must be "USD" and precision is limited to cents. # The maximum allowed value is 1,000,000 USD. # @!attribute [rw] discard_previous_credit_balance # @return [::Boolean] # Optional. Whether to discard the previous credit balance when the # associated installment starts. If not set, the previous credit # balance will be rolled over to the current installment. # # If there are no previous installments, then the value of this field # will not matter - since it has no effect when no credits exist. class Commitment include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end end # Price configurations for offers with standard intervals. # @!attribute [rw] standard_interval # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::StandardIntervalPrice::StandardInterval] # Optional. The standard interval of the offer. # Must be present to publish unless the price model is usage-only. # @!attribute [rw] price_model # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel] # Optional. The price model of the offer. # Must be present to publish the offer. class StandardIntervalPrice include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # The options for offers with standard intervals. module StandardInterval # The private offer does not have an interval. # If this is set, then the offer is "usage-only". # Field `term.duration_months` must be positive. STANDARD_INTERVAL_UNSPECIFIED = 0 # The schedule of the monthly postpay offers. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # No longer supported as of May 2024. Cannot be used to publish # new offers. MONTHLY_POSTPAY = 1 # Monthly installments with proration. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 04/15, and the offer duration is # 3 months, the following installments will be created: # # 1: from 04/15 to 05/01, at the prorated price for April. # # # 2: from 05/01 to 06/01, at the full monthly price for May. # # # 3: from 06/01 to 07/01, at the full monthly price for June. # # # 4: from 07/01 to 07/15, at the prorated price for July. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. MONTHLY_PRORATED = 2 # Monthly installments without proration. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 04/15, and the offer duration is # 3 months, the following installments will be created: # # 1: from 04/15 to 05/15, at the full monthly price. # # # 2: from 05/15 to 06/15, at the full monthly price. # # # 3: from 06/15 to 07/15, at the full monthly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. MONTHLY_NOT_PRORATED = 3 # Quarterly installments which are not prorated. # This type of offer has "Quarterly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 01/15, and the offer duration is # 3 quarters, the following installments will be created: # # 1: from 01/15 to 04/15, at the full quarterly price. # # # 2: from 04/15 to 07/15, at the full quarterly price. # # # 3: from 07/15 to 10/15, at the full quarterly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. QUARTERLY_NOT_PRORATED = 4 # Yearly installments which are not prorated. # This type of offer has "Yearly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 01/15/2025, and the offer # duration is 3 years, the following installments will be created: # # 1: from 01/15/2025 to 01/15/2026, at the full yearly price. # # # 2: from 01/15/2026 to 01/15/2027, at the full yearly price. # # # 3: from 01/15/2027 to 01/15/2028, at the full yearly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. YEARLY_NOT_PRORATED = 5 end end # An installment of the offer. # @!attribute [rw] start_time # @return [::Google::Type::DateTime] # Optional. The start time of the installment. # Each installment must have a unique start time with one exception: # When the `term.start_policy` of the offer's term is `IMMEDIATE`, # the `start_time` of the first installment must be unset. # The actual start time is not recorded in the offer and instead is # determined by the time the resulting order became active. # # When the `term.start_policy` of the offer's term is # `SCHEDULED_START_TIME`, then the first installment's `start_time` must # match `term.scheduled_start_time`. # # If the `term.end_policy` of the offer's term is `SCHEDULED_END_TIME`, # then installment `start_time` must be before `term.scheduled_end_time`. # If it's `AFTER_DURATION`, then installment `start_time` must be before # the time calculated by adding the `term.duration_months` to # the start time of the offer. # # The `start_time` of the installments cannot be before the # `accept_deadline_time` of the offer. # # Installment start times must be in strictly increasing chronological # order. # @!attribute [rw] price_model # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel] # Optional. The price model of the installment. # All installments must have the same form of price model. class Installment include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Price configurations for offers with custom intervals. # @!attribute [rw] installments # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Installment>] # Optional. The installments that make up the installment timeline. # All installments must have the same form of price model (e.g. # all commitment, or all flat fee). A subscription must be present # under the price model for every installment. # # Must contain at least one installment to publish the offer. class CustomIntervalPrice include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The contract value of the offer. # @!attribute [r] total_contract_value # @return [::Google::Type::Money] # Output only. The total contract value of the offer. # This will be set for all non-draft private offers, as long as # 'PRIVATE_OFFER_VIEW_FULL' is requested. For DRAFT private offers, # this will be populated only when the end user's billing account is # set and when the pricing and term configuration is sufficiently # complete to allow for a calculation. class ContractValue include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Revenue Share information for a Private Offer. # For more details about the revenue share, including how the value is # determined, see # https://docs.cloud.google.com/marketplace/docs/partners/revenue-share-scenarios. # # Not included for `PRIVATE_OFFER_VIEW_BASIC`, or for DRAFT private offers. # # For non-draft private offers, these fields are populated based on the # following: # # * Offers published after April 20, 2025 will always have revenue # share fields populated. # * Offers published on or before April 20, 2025 will only have revenue # share fields populated if they were associated with an active, # unexpired order on that date. # @!attribute [r] current_term_vendor_net_revenue_percent # @return [::Google::Type::Decimal] # Output only. The revenue share currently in effect. # # The range of the value is between 0 and 100. For example, 80 # means the Vendor's current term revenue share is 80%. The vendor # will keep 80% of the revenue. # . # @!attribute [r] renewal_term_vendor_net_revenue_percent # @return [::Google::Type::Decimal] # Output only. The expected revenue share for the renewal term. # Not included if the offer does not have renewal terms. # # The range of the value is between 0 and 100. For example, 80 # means the Vendor's current term revenue share is 80%. The vendor # will keep 80% of the revenue after renewal. # . class RevenueShare include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end end # State of an offer. module State # Default value. This value is unused. STATE_UNSPECIFIED = 0 # The default state after creation when the offer can be edited. # In all other states, the contents of the offer cannot be edited. DRAFT = 1 # The offer is publishing. # Publishing will complete when all publishing requirements are satisfied. PUBLISHING = 2 # The offer has been published and is available to the customer to accept. PUBLISHED = 3 # The offer has been accepted by the customer. ACCEPTED = 4 # The offer was cancelled by the provider before it was transacted. # Cancelled offers can no longer be accepted by the customer. CANCELLED = 5 # The offer expired without being accepted by the customer. # Expired offers can no longer be accepted by the customer. EXPIRED = 6 # The offer has ended. # # Ended offers were accepted and active in the past, but have now reached # the end of their term or have been terminated. ENDED = 7 end # The type of the deal transacted with the offer. The deal type of an offer # is a factor in determining the offer's revenue share. module OfferDealType # Default value. This value is unused. OFFER_DEAL_TYPE_UNSPECIFIED = 0 # The offer corresponds to a preexisting commercial arrangement for a # workload on Google Cloud that is being transferred to the Cloud # Marketplace. CHANNEL_SHIFT = 1 # The offer corresponds to a preexisting commercial arrangement for a # workload previously not on Google Cloud that is being transferred to # Google Cloud. MIGRATION = 2 # The offer corresponds to a renewal of a deal initially transacted on # the Google Cloud Marketplace. NATIVE_RENEWAL = 3 # The offer corresponds to a new deal transacted on the Google Cloud # Marketplace. # # This value is not allowed if the offer amends another private offer # where the term has not ended, and the amended private offer has a deal # type of `MIGRATION`, `CHANNEL_SHIFT` or `NATIVE_RENEWAL`. NEW = 4 end end |
#offer_deal_type ⇒ ::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::OfferDealType
Returns Optional. The type of the deal transacted with the offer.
The deal type is not visible to customers.
Must be present to publish the offer.
148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 |
# File 'proto_docs/google/cloud/commerceproducer/v1beta/private_offer.rb', line 148 class PrivateOffer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Information about the Google review process. # @!attribute [r] review_approve_time # @return [::Google::Protobuf::Timestamp] # Output only. The approval time of the Google review process. class PublishRequirementGoogleReview include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Contact information for a reseller. # @!attribute [r] contact # @return [::String] # Output only. The name of the reseller contact for this offer. # @!attribute [r] email # @return [::String] # Output only. The email of the reseller contact for this offer. class ResellerContact include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Contact information for the partner representative. # @!attribute [rw] contact # @return [::String] # Optional. Display text identifying the partner sales contact. # Displayed to the customer. # Must be provided when publishing the offer. # Maximum length: 256 characters. # @!attribute [rw] email # @return [::String] # Optional. The email address of the partner sales contact. # Displayed to the customer. # The format of the provided email address is validated when publishing the # offer, but no verification is performed that the email address actually # exists, accepts email, or is otherwise functional. class PartnerContact include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Information about the customer. # @!attribute [rw] entity_title # @return [::String] # Optional. A string identifying the customer's entity (for example, the # customer's organization or company name). Must be provided when # publishing the offer. Maximum length: 256 characters. # @!attribute [rw] contact # @return [::String] # Optional. A string identifying the customer contact. # Must be provided when publishing the offer. # Maximum length: 256 characters. # @!attribute [rw] email # @return [::String] # Optional. Email of customer contact. # If provided, it must be a well-formed email address. # @!attribute [r] address # @deprecated This field is deprecated and may be removed in the next major version update. # @return [::String] # Output only. Legal address of the customer organization. # This field can no longer be set, but it is preserved to return the # data from existing offers where address is set. # @!attribute [rw] target_billing_account # @return [::String] # Optional. The customer's billing account targeted by the offer. # The private offer once published can be accepted by a billing # administrator of the target billing account. If the customer accepts the # offer and later moves the resulting order to a new billing account, this # field will continue to reflect the original billing account to which the # private offer was extended. Must be provided when publishing the offer. # # To publish this private offer: # # * The billing account must exist. # * The billing account must not be in a free trial. # * The billing account must comply with Marketplace Reselling Policies. # * Reseller parent billing accounts are prohibited. Reseller subaccounts # are prohibited unless the service is enabled for reselling. # # Format: billingAccounts/012345-567890-ABCDEF class Customer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Configurations for the offer term and renewal options. # Extending a private offer to a customer that covers a given term # constitutes a guarantee to the customer that the product will remain # available to them for the duration of the term. # @!attribute [rw] duration_months # @return [::Integer] # Optional. Duration in months of the offer term. # The offer will end on the same day of the month after this duration. If # that date is not available, the offer will end on the last day of the # month. For example, if the offer starts on 01/31/2024 and the duration # is 13 months, the offer will end on 02/28/2025. # Must be set to publish the offer if the end policy is `AFTER_DURATION` # or `MATCH_AMENDED_OFFER`, and must be a positive value. # # The maximum possible offer duration, including all renewal terms, # cannot exceed 7 years. For example, if `duration_months` is 9 and # `term.max_renewal_count` is 9, then the maximum possible offer duration # is 90 months and exceeds the 7 year limit. # # Note: The following fields are mutually exclusive: `duration_months`, `scheduled_end_time`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] scheduled_end_time # @return [::Google::Type::DateTime] # Optional. Specified end time of the offer. # Must be set to publish the offer if the end policy is # `SCHEDULED_END_TIME`. # When set, the time must be in the future and at a day boundary in the # America/Los_Angeles time zone, and must be after # `term.scheduled_start_time` if applicable. # # Note: The following fields are mutually exclusive: `scheduled_end_time`, `duration_months`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] max_renewal_count # @return [::Integer] # Optional. The max number of renewals allowed, after the initial term # ends. This field is only relevant to standard interval offers with # interval of 'MONTHLY_PRORATED', 'MONTHLY_NOT_PRORATED', # 'QUARTERLY_NOT_PRORATED' or 'YEARLY_NOT_PRORATED'. Other types of # offers cannot be renewed. # # For example, if the initial term is 1 year and the max renewals is 3, # the customer can renew the offer for up to 3 additional years after the # initial term ends. Customers control whether they renew the offer. # # Allowing a customer to renew an offer does not constitute a guarantee # to the customer that the offered product will still be available to be # renewed at the renewal date. # # An offer with a max renewal count of 0 cannot be renewed. # Must be non-negative. # # Note: The following fields are mutually exclusive: `max_renewal_count`, `unlimited_renewal`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [r] unlimited_renewal # @deprecated This field is deprecated and may be removed in the next major version update. # @return [::Boolean] # Output only. Deprecated: This field can only be true on existing offers # with standard interval of 'MONTHLY_POSTPAY'. As of May 2024, we no # longer allow unlimited renewals. # # Note: The following fields are mutually exclusive: `unlimited_renewal`, `max_renewal_count`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] start_policy # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::Term::StartPolicy] # Optional. Defines when the resulting order should start. # Must be set when publishing the offer. # @!attribute [rw] scheduled_start_time # @return [::Google::Type::DateTime] # Optional. The scheduled start time of the offer. Cannot exceed one year # from the time of publish. # # If the start policy is `SCHEDULED_START_TIME`, a future time at a day # boundary in the America/Los_Angeles time zone must be provided when # publishing the offer. # # If the offer amends another private or standard offer, then the # scheduled start time must be: # # * Before or equal to the amended offer's end time if the offer's # end policy is not MATCH_AMENDED_OFFER. Otherwise, it has to be # strictly before the amended offer's end time. # * Before or equal to the start time of the next pending installment of # the amended offer, if amending a private offer with custom # installments. For example, if the amended offer has installments on # 01/01, 02/01, 03/01, 04/01, and today is 02/15, then the new offer's # `scheduled_start_time` must be at or before 03/01. # @!attribute [rw] end_policy # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::Term::EndPolicy] # Optional. Defines when an offer should end. # Must be set when publishing the offer. # @!attribute [r] effective_term_end_time # @return [::Google::Type::DateTime] # Output only. The expected end time of the current offer term. # # At the end of each offer term, an offer associated with an active # order will either renew or end. When an offer renews, a new term begins # and this value changes to reflect the end time of the new term. # When an offer ends this value is no longer set and instead `end_time` is # set. # # When the term of an offer ends and the offer does not renew, the # associated order also ends if the base standard offer has a # subscription price model. Otherwise, the associated order does not end # and remains active. # # Not included for PRIVATE_OFFER_VIEW_BASIC. # Included for PRIVATE_OFFER_VIEW_FULL when the offer has not ended and # either the offer has started or the value can be derived from other # fields. # # For offers that have not started, this field is set when one of the # following conditions is true. # # * The offer sets `term.scheduled_end_time`. # * The offer sets `term.scheduled_start_time` and `term.duration_months`, # the offer's `term.end_policy` is not `MATCH_AMENDED_OFFER`, and the # offer does not have standard_interval set to `MONTHLY_POSTPAY`. class Term include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Defines when an offer should start. module StartPolicy # Default value. This value is unused. START_POLICY_UNSPECIFIED = 0 # The resulting order starts immediately upon the customer's acceptance # of the offer, if no partner approval is required, or else immediately # after the partner approves the purchase if order approval is required. # This enum value cannot be combined with `term.scheduled_start_time`. IMMEDIATE = 1 # The resulting order starts at the scheduled start time. SCHEDULED_START_TIME = 2 end # Defines when an offer should end. module EndPolicy # Default value. This value is unused. END_POLICY_UNSPECIFIED = 0 # Offer ends after the specified duration. # If this is set, then `duration_months` must be positive. AFTER_DURATION = 1 # Offer ends at the schduled time. SCHEDULED_END_TIME = 2 # Offer coterms to the amended offer - the offer ends at the end of the # amended offer's term # # For example, if the amended offer starts on 01/15/24, and has a # duration of 6 months, then it ends on 07/15/24. If the current offer # coterms to the previous offer, and the current offer starts on # 05/06/24, then it will still end on 07/15/24. Assuming the current # offer renews 3 times, then the terms on the current offer will be: # # 1. 05/06/24 - 07/15/24 (First term, ends on 07/15 to coterm with the # amended offer) # 2. 07/15/24 - 01/15/25 (First renewal term) # 3. 01/15/25 - 07/15/25 (Second renewal term) # 4. 07/15/25 - 01/15/26 (Third renewal term) # # As a contrast, if the current offer does not coterm with the amended # offer (such as when `end_policy` is `AFTER_DURATION`), then the # terms will be: # # 1. 05/06/24 - 11/06/24 (First term, ends on 11/06, no coterming) # 2. 11/06/24 - 05/06/25 (First renewal term) # 3. 05/06/25 - 11/06/25 (Second renewal term) # 4. 11/06/25 - 05/06/26 (Third renewal term) # # If this is set, then the following conditions must be met: # # * `single_product_offer.amended_private_offer` must be set, and the # amended private offer must not be ended. # * The proration policy must not change (e.g., you cannot switch # between `MONTHLY_PRORATED` and `MONTHLY_NOT_PRORATED`). # * The current offer must not have custom intervals (where # `custom_interval_price` is set). # * `term.duration_months` must match the amended private offer's # duration. # * The amended private offer must not have a standard interval # of `MONTHLY_POSTPAY`. # # This is currently not supported. MATCH_AMENDED_OFFER = 3 end end # Configurations for the offer that is associated with a single product. # @!attribute [rw] amended_private_offer # @return [::String] # Optional. An existing private offer that will be superseded by this # offer. Unless the private offer is for a product type that supports # [multiple active # orders](https://cloud.google.com/marketplace/docs/partners/offers/multiple-offers), # an amendment private offer must be transacted if and only if the # destination customer billing account already contains an active order # for the same product. The offer to be superseded must be the offer # associated with an active order. # # Amendments generally fall into one of two scenarios: # # 1. **Active Order / Ended Offer**: The term of the amended offer has # ended but it is still associated with an active order. The new # offer must amend the ended private offer. # 2. **Active Order / Active Offer**: The term of the amended offer is # still active and the associated order is active. Similar to above, # the new offer must amend the currently active offer (unless # "multiple active orders" are supported). # # If this is set, then the `base_standard_offer` parent service must # match the parent service of the `base_standard_offer` in the # `amended_private_offer`. # # **Active Term Restrictions**: # If the term of the amended private offer has *NOT* ended, then the # following compatibility rules apply: # # * **Price Model Compatibility**: # * Flat Fee (with or without usage) offers can amend Flat Fee # offers. # * Usage-only or CUD offers can amend usage-only offers. # * Commitment-based offers must amend offers of the same price # model subtype (e.g., "additional usage at list price" vs "all # usage discounted"). # * **Billing Frequency Compatibility**: Determined by # `standard_interval` or `custom_interval_price`. # * If the amended offer has a custom billing frequency, the new # offer must also have a custom frequency. # * If the amended offer has a standard frequency (Monthly, # Quarterly, or Yearly), the new offer must maintain the same # frequency or transition to a custom frequency. # * Switching between different standard frequencies (e.g., Monthly # to Quarterly) is not supported. # * For Monthly frequency, switching between `MONTHLY_PRORATED` # and `MONTHLY_NOT_PRORATED` is supported, unless the offer's # `term.end_policy` is `MATCH_AMENDED_OFFER`. # * For usage-only offers, there are no billing frequency # restrictions. # # Other criteria for offer amendment are detailed elsewhere. # # Note: The following fields are mutually exclusive: `amended_private_offer`, `amended_standard_offer`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] amended_standard_offer # @return [::String] # Optional. An existing standard offer that will be superseded by this # offer. An amendment private offer must be transacted if the destination # customer billing account already contains an active order for the same # product, and otherwise cannot be transacted. The offer to be superseded # must be the offer associated with the active order. # # If this is set, then the `base_standard_offer` must contain the same # parent service as the parent service of the `amended_standard_offer`. # The price model of this offer must be compatible with the price model # of the `amended_standard_offer`: # # * Flat Fee, or Flat Fee with usage offers can amend Flat Fee or Flat # Fee with usage standard offers. # * Usage-only offers, or CUD offers can amend usage-only standard # offers. # # Other criteria for offer amendment are detailed elsewhere. # # Note: The following fields are mutually exclusive: `amended_standard_offer`, `amended_private_offer`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] standard_interval_price # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::StandardIntervalPrice] # Optional. Price configurations for offers with standard intervals. # A price must be set when publishing the offer. # # Note: The following fields are mutually exclusive: `standard_interval_price`, `custom_interval_price`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] custom_interval_price # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::CustomIntervalPrice] # Optional. Price configurations for offers with custom intervals. # Custom interval corresponds to "custom billing frequency", # see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule. # A price must be set when publishing the offer. # # Note: The following fields are mutually exclusive: `custom_interval_price`, `standard_interval_price`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] base_standard_offer # @return [::String] # Optional. The StandardOffer this PrivateOffer is based on. # Must be in the same project as the private offer, and must be effective # at the time of publishing. Must be present to publish the offer. # # Format: # projects/\\{project}/locations/\\{location}/services/\\{service}/standardOffers/\\{standard_offer} # @!attribute [r] service_level # @return [::String] # Output only. The service level (also known as the 'plan') of the base # standard offer. The value is populated at publish time from the base # standard offer. # @!attribute [r] reseller_private_offer_plan_id # @return [::String] # Output only. Present for offers created by a reseller from a reseller # private offer plan (RPOP). When set, contains the ID of the originating # RPOP. Not included for `PRIVATE_OFFER_VIEW_BASIC`. # @!attribute [rw] features # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Feature>] # Optional. The custom product features to display for this offer. # Feature `display_name` values must be unique to publish the offer. # The set of features specified here should generally include all features # included in the base service level, with optionally customized values, # but is not required to match exactly and may include additional features. # @!attribute [r] effective_installment_timeline # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Installment>] # Output only. The effective installment timeline of the offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. # Included for `PRIVATE_OFFER_VIEW_FULL` if all necessary information is # available to generate the timeline, and if the offer has # 'standard_interval_price' of 'MONTHLY_PRORATED', 'MONTHLY_NOT_PRORATED', # 'QUARTERLY_NOT_PRORATED', or 'YEARLY_NOT_PRORATED'. # @!attribute [r] contract_value # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::ContractValue] # Output only. Contract value of the offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. # @!attribute [r] revenue_share # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::RevenueShare] # Output only. Revenue share information for this Private Offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. class SingleProductOffer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Additional details used to describe customization of the service level. # # Features are used to distinguish service levels of the same product. # When a product has a single service level, all details can be contained # in the product documentation. When a product has multiple service levels, # each service level can be assigned a distinct set of features to # distinguish the key differences between the service levels. # # In addition to customizing pricing and other transaction details, a # private offer may include customization of partner-managed product # behavior. When this is the case, the details of the custom behavior are # described using features. # @!attribute [rw] display_name # @return [::String] # Optional. Human readable display text characterizing the feature. # Should be sufficiently detailed to identify the feature, allowing # features to be correlated across separate offers and service levels. # Must be non-empty to publish the offer. # The maximum allowed length is 128 characters. # Allows characters from the following Unicode Property Classes: # Letters, Numbers, Punctuation, Symbols, and Separators # @!attribute [rw] value # @return [::String] # Optional. Human readable display text reflecting the value of the # feature. Used for variable features not captured by the display_name # alone. The maximum allowed length is 3000 characters. Allows characters # from the following Unicode Property Classes: Letters, Numbers, # Punctuation, Symbols, and Separators class Feature include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price model of the private offer. # # Private offers are referred to as having different kinds of price models # based on the combination of fields set in the price model. The following # terminology is used in documentation and other reference material. # # * Usage-based: the price model does not set `flat_fee` # * Usage-only: the price model sets only `usage` # * CUD (committed use discount): the price model sets `commitment` # * Commitment discount with additional usage at list price: # The price model sets `commitment` and not `usage`. # * Commitment with all usage discounted: The price model sets # `commitment` and `usage`. # * Flat fee: the price model sets only `flat_fee` # * Flat fee with usage: the price model sets `flat_fee` and `usage` # # See # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-pricing-model#CUD # for the price models. # @!attribute [rw] flat_fee # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::FlatFee] # Optional. The price configurations for the flat fee subscription. # Must be unset when the base standard offer's price model does not # include subscription SKUs. # # Note: The following fields are mutually exclusive: `flat_fee`, `commitment`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] commitment # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Commitment] # Optional. The price configurations for the commitment based # subscription. Must be unset when the base standard offer's price # model includes subscription SKUs. # # Note: The following fields are mutually exclusive: `commitment`, `flat_fee`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] usage # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Usage] # Optional. The price configurations for the usage part. # If this field is set, the `Commitment.discount_percent` must be unset. # A private offer can apply a discount to all usage or to a usage # commitment, but not both. # Must be unset when the base standard offer's price model includes no # usage SKUs. class PriceModel include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # The discount for a specific SKU. # @!attribute [rw] sku # @return [::String] # Optional. The name of a partner SKU from this API. # # Must refer to a SKU in the price model of the base standard offer. # Inclusion in the base price model can occur either directly or # indirectly via inclusion in an included SkuGroup. # # Currently, standard offer price models include only partner SKUs # in the same project as the standard offer. This may change. # # Format: # projects/\\{project}/locations/\\{location}/services/\\{service}/skus/\\{sku} # # Note: The following fields are mutually exclusive: `sku`, `cloud_billing_sku`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] cloud_billing_sku # @return [::String] # Optional. The name of a Google SKU from the Cloud Billing API. # # Used for partner products sold by Google, such as Premium Operating # System Images sold for use in Compute Engine. This is not common. # SKUs of this type are not present on this API and can instead be # found on the Cloud Billing API or at https://cloud.google.com/skus. # # Must refer to a SKU in the price model of the base standard offer. # Google SKUs are always referenced in standard offers via SkuGroups. # # Format: services/\\{service}/skus/\\{sku} # # Note: The following fields are mutually exclusive: `cloud_billing_sku`, `sku`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] discount_percent # @return [::Google::Type::Decimal] # Optional. The discount percent for the SKU. # For example, `10` means a discount of 10%. If the original SKU # price is $100/hour then the discounted price will be $90/hour. # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", # and "". # Must be present to publish the offer. class SkuDiscount include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price for the usage SKUs. # @!attribute [rw] default_discount_percent # @return [::Google::Type::Decimal] # Optional. The default discount percent for usage SKUs. # An unset default discount percent is equivalent to 0 (no discount). # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "". # @!attribute [rw] sku_discounts # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::SkuDiscount>] # Optional. The discounts for the specific SKUs that override the # `default_discount_percent`. class Usage include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price configurations for the flat fee subscriptions. # @!attribute [rw] flat_fee_override # @return [::Google::Type::Money] # Optional. Flat fee overriding the default flat fee in the base # standard offer. Value cannot be negative. The currency must be "USD" # and precision is limited to cents. Must be present to publish the # offer, if the parent message is set. The maximum allowed value is # 1,000,000,000 USD. class FlatFee include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price configurations for the commitment based subscriptions. # @!attribute [rw] commitment_amount # @return [::Google::Type::Money] # Optional. The commitment balance that the customer will receive. # Value cannot be negative. # The currency must be "USD" and precision is limited to cents. # Must be present to publish the offer, if the parent message is set. # The maximum allowed value is 1,000,000,000 USD. # # If the current offer amends a private offer where the term has not # ended, and if the field # `single_product_offer.standard_interval_price.price_model.commitment.commitment_amount` # is set on both the current offer and the amended private offer, then # the commitment amount must be equal or higher on the current offer, # compared to the amended private offer. # @!attribute [rw] discount_percent # @return [::Google::Type::Decimal] # Optional. The discount percent on `commitment_amount`. # # For example, `10` means a discount of 10%. If the original # `commitment_amount` is $100 then the discounted amount will be $90. # The customer is charged $90 and receives $100 in credits. # # All reported usage will be charged at the standard price. # If this field is set, the `price_model.usage` must be unset. A # private offer can apply a discount to all usage or to a usage # commitment, but not both. # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "". # # Must be present to publish the offer. # @!attribute [rw] additional_credit # @return [::Google::Type::Money] # Optional. Additional credit granted to the customer. # Additional credits are only supported for custom interval offers. # Equivalent behavior can be achieved for standard interval offers by # varying the `commitment_amount` and `discount_percent`. # # Value cannot be negative. # The currency must be "USD" and precision is limited to cents. # The maximum allowed value is 1,000,000 USD. # @!attribute [rw] discard_previous_credit_balance # @return [::Boolean] # Optional. Whether to discard the previous credit balance when the # associated installment starts. If not set, the previous credit # balance will be rolled over to the current installment. # # If there are no previous installments, then the value of this field # will not matter - since it has no effect when no credits exist. class Commitment include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end end # Price configurations for offers with standard intervals. # @!attribute [rw] standard_interval # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::StandardIntervalPrice::StandardInterval] # Optional. The standard interval of the offer. # Must be present to publish unless the price model is usage-only. # @!attribute [rw] price_model # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel] # Optional. The price model of the offer. # Must be present to publish the offer. class StandardIntervalPrice include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # The options for offers with standard intervals. module StandardInterval # The private offer does not have an interval. # If this is set, then the offer is "usage-only". # Field `term.duration_months` must be positive. STANDARD_INTERVAL_UNSPECIFIED = 0 # The schedule of the monthly postpay offers. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # No longer supported as of May 2024. Cannot be used to publish # new offers. MONTHLY_POSTPAY = 1 # Monthly installments with proration. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 04/15, and the offer duration is # 3 months, the following installments will be created: # # 1: from 04/15 to 05/01, at the prorated price for April. # # # 2: from 05/01 to 06/01, at the full monthly price for May. # # # 3: from 06/01 to 07/01, at the full monthly price for June. # # # 4: from 07/01 to 07/15, at the prorated price for July. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. MONTHLY_PRORATED = 2 # Monthly installments without proration. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 04/15, and the offer duration is # 3 months, the following installments will be created: # # 1: from 04/15 to 05/15, at the full monthly price. # # # 2: from 05/15 to 06/15, at the full monthly price. # # # 3: from 06/15 to 07/15, at the full monthly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. MONTHLY_NOT_PRORATED = 3 # Quarterly installments which are not prorated. # This type of offer has "Quarterly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 01/15, and the offer duration is # 3 quarters, the following installments will be created: # # 1: from 01/15 to 04/15, at the full quarterly price. # # # 2: from 04/15 to 07/15, at the full quarterly price. # # # 3: from 07/15 to 10/15, at the full quarterly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. QUARTERLY_NOT_PRORATED = 4 # Yearly installments which are not prorated. # This type of offer has "Yearly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 01/15/2025, and the offer # duration is 3 years, the following installments will be created: # # 1: from 01/15/2025 to 01/15/2026, at the full yearly price. # # # 2: from 01/15/2026 to 01/15/2027, at the full yearly price. # # # 3: from 01/15/2027 to 01/15/2028, at the full yearly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. YEARLY_NOT_PRORATED = 5 end end # An installment of the offer. # @!attribute [rw] start_time # @return [::Google::Type::DateTime] # Optional. The start time of the installment. # Each installment must have a unique start time with one exception: # When the `term.start_policy` of the offer's term is `IMMEDIATE`, # the `start_time` of the first installment must be unset. # The actual start time is not recorded in the offer and instead is # determined by the time the resulting order became active. # # When the `term.start_policy` of the offer's term is # `SCHEDULED_START_TIME`, then the first installment's `start_time` must # match `term.scheduled_start_time`. # # If the `term.end_policy` of the offer's term is `SCHEDULED_END_TIME`, # then installment `start_time` must be before `term.scheduled_end_time`. # If it's `AFTER_DURATION`, then installment `start_time` must be before # the time calculated by adding the `term.duration_months` to # the start time of the offer. # # The `start_time` of the installments cannot be before the # `accept_deadline_time` of the offer. # # Installment start times must be in strictly increasing chronological # order. # @!attribute [rw] price_model # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel] # Optional. The price model of the installment. # All installments must have the same form of price model. class Installment include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Price configurations for offers with custom intervals. # @!attribute [rw] installments # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Installment>] # Optional. The installments that make up the installment timeline. # All installments must have the same form of price model (e.g. # all commitment, or all flat fee). A subscription must be present # under the price model for every installment. # # Must contain at least one installment to publish the offer. class CustomIntervalPrice include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The contract value of the offer. # @!attribute [r] total_contract_value # @return [::Google::Type::Money] # Output only. The total contract value of the offer. # This will be set for all non-draft private offers, as long as # 'PRIVATE_OFFER_VIEW_FULL' is requested. For DRAFT private offers, # this will be populated only when the end user's billing account is # set and when the pricing and term configuration is sufficiently # complete to allow for a calculation. class ContractValue include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Revenue Share information for a Private Offer. # For more details about the revenue share, including how the value is # determined, see # https://docs.cloud.google.com/marketplace/docs/partners/revenue-share-scenarios. # # Not included for `PRIVATE_OFFER_VIEW_BASIC`, or for DRAFT private offers. # # For non-draft private offers, these fields are populated based on the # following: # # * Offers published after April 20, 2025 will always have revenue # share fields populated. # * Offers published on or before April 20, 2025 will only have revenue # share fields populated if they were associated with an active, # unexpired order on that date. # @!attribute [r] current_term_vendor_net_revenue_percent # @return [::Google::Type::Decimal] # Output only. The revenue share currently in effect. # # The range of the value is between 0 and 100. For example, 80 # means the Vendor's current term revenue share is 80%. The vendor # will keep 80% of the revenue. # . # @!attribute [r] renewal_term_vendor_net_revenue_percent # @return [::Google::Type::Decimal] # Output only. The expected revenue share for the renewal term. # Not included if the offer does not have renewal terms. # # The range of the value is between 0 and 100. For example, 80 # means the Vendor's current term revenue share is 80%. The vendor # will keep 80% of the revenue after renewal. # . class RevenueShare include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end end # State of an offer. module State # Default value. This value is unused. STATE_UNSPECIFIED = 0 # The default state after creation when the offer can be edited. # In all other states, the contents of the offer cannot be edited. DRAFT = 1 # The offer is publishing. # Publishing will complete when all publishing requirements are satisfied. PUBLISHING = 2 # The offer has been published and is available to the customer to accept. PUBLISHED = 3 # The offer has been accepted by the customer. ACCEPTED = 4 # The offer was cancelled by the provider before it was transacted. # Cancelled offers can no longer be accepted by the customer. CANCELLED = 5 # The offer expired without being accepted by the customer. # Expired offers can no longer be accepted by the customer. EXPIRED = 6 # The offer has ended. # # Ended offers were accepted and active in the past, but have now reached # the end of their term or have been terminated. ENDED = 7 end # The type of the deal transacted with the offer. The deal type of an offer # is a factor in determining the offer's revenue share. module OfferDealType # Default value. This value is unused. OFFER_DEAL_TYPE_UNSPECIFIED = 0 # The offer corresponds to a preexisting commercial arrangement for a # workload on Google Cloud that is being transferred to the Cloud # Marketplace. CHANNEL_SHIFT = 1 # The offer corresponds to a preexisting commercial arrangement for a # workload previously not on Google Cloud that is being transferred to # Google Cloud. MIGRATION = 2 # The offer corresponds to a renewal of a deal initially transacted on # the Google Cloud Marketplace. NATIVE_RENEWAL = 3 # The offer corresponds to a new deal transacted on the Google Cloud # Marketplace. # # This value is not allowed if the offer amends another private offer # where the term has not ended, and the amended private offer has a deal # type of `MIGRATION`, `CHANNEL_SHIFT` or `NATIVE_RENEWAL`. NEW = 4 end end |
#partner_contact ⇒ ::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::PartnerContact
Returns Optional. Information about the partner contact. Must be provided when publishing the offer.
148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 |
# File 'proto_docs/google/cloud/commerceproducer/v1beta/private_offer.rb', line 148 class PrivateOffer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Information about the Google review process. # @!attribute [r] review_approve_time # @return [::Google::Protobuf::Timestamp] # Output only. The approval time of the Google review process. class PublishRequirementGoogleReview include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Contact information for a reseller. # @!attribute [r] contact # @return [::String] # Output only. The name of the reseller contact for this offer. # @!attribute [r] email # @return [::String] # Output only. The email of the reseller contact for this offer. class ResellerContact include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Contact information for the partner representative. # @!attribute [rw] contact # @return [::String] # Optional. Display text identifying the partner sales contact. # Displayed to the customer. # Must be provided when publishing the offer. # Maximum length: 256 characters. # @!attribute [rw] email # @return [::String] # Optional. The email address of the partner sales contact. # Displayed to the customer. # The format of the provided email address is validated when publishing the # offer, but no verification is performed that the email address actually # exists, accepts email, or is otherwise functional. class PartnerContact include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Information about the customer. # @!attribute [rw] entity_title # @return [::String] # Optional. A string identifying the customer's entity (for example, the # customer's organization or company name). Must be provided when # publishing the offer. Maximum length: 256 characters. # @!attribute [rw] contact # @return [::String] # Optional. A string identifying the customer contact. # Must be provided when publishing the offer. # Maximum length: 256 characters. # @!attribute [rw] email # @return [::String] # Optional. Email of customer contact. # If provided, it must be a well-formed email address. # @!attribute [r] address # @deprecated This field is deprecated and may be removed in the next major version update. # @return [::String] # Output only. Legal address of the customer organization. # This field can no longer be set, but it is preserved to return the # data from existing offers where address is set. # @!attribute [rw] target_billing_account # @return [::String] # Optional. The customer's billing account targeted by the offer. # The private offer once published can be accepted by a billing # administrator of the target billing account. If the customer accepts the # offer and later moves the resulting order to a new billing account, this # field will continue to reflect the original billing account to which the # private offer was extended. Must be provided when publishing the offer. # # To publish this private offer: # # * The billing account must exist. # * The billing account must not be in a free trial. # * The billing account must comply with Marketplace Reselling Policies. # * Reseller parent billing accounts are prohibited. Reseller subaccounts # are prohibited unless the service is enabled for reselling. # # Format: billingAccounts/012345-567890-ABCDEF class Customer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Configurations for the offer term and renewal options. # Extending a private offer to a customer that covers a given term # constitutes a guarantee to the customer that the product will remain # available to them for the duration of the term. # @!attribute [rw] duration_months # @return [::Integer] # Optional. Duration in months of the offer term. # The offer will end on the same day of the month after this duration. If # that date is not available, the offer will end on the last day of the # month. For example, if the offer starts on 01/31/2024 and the duration # is 13 months, the offer will end on 02/28/2025. # Must be set to publish the offer if the end policy is `AFTER_DURATION` # or `MATCH_AMENDED_OFFER`, and must be a positive value. # # The maximum possible offer duration, including all renewal terms, # cannot exceed 7 years. For example, if `duration_months` is 9 and # `term.max_renewal_count` is 9, then the maximum possible offer duration # is 90 months and exceeds the 7 year limit. # # Note: The following fields are mutually exclusive: `duration_months`, `scheduled_end_time`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] scheduled_end_time # @return [::Google::Type::DateTime] # Optional. Specified end time of the offer. # Must be set to publish the offer if the end policy is # `SCHEDULED_END_TIME`. # When set, the time must be in the future and at a day boundary in the # America/Los_Angeles time zone, and must be after # `term.scheduled_start_time` if applicable. # # Note: The following fields are mutually exclusive: `scheduled_end_time`, `duration_months`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] max_renewal_count # @return [::Integer] # Optional. The max number of renewals allowed, after the initial term # ends. This field is only relevant to standard interval offers with # interval of 'MONTHLY_PRORATED', 'MONTHLY_NOT_PRORATED', # 'QUARTERLY_NOT_PRORATED' or 'YEARLY_NOT_PRORATED'. Other types of # offers cannot be renewed. # # For example, if the initial term is 1 year and the max renewals is 3, # the customer can renew the offer for up to 3 additional years after the # initial term ends. Customers control whether they renew the offer. # # Allowing a customer to renew an offer does not constitute a guarantee # to the customer that the offered product will still be available to be # renewed at the renewal date. # # An offer with a max renewal count of 0 cannot be renewed. # Must be non-negative. # # Note: The following fields are mutually exclusive: `max_renewal_count`, `unlimited_renewal`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [r] unlimited_renewal # @deprecated This field is deprecated and may be removed in the next major version update. # @return [::Boolean] # Output only. Deprecated: This field can only be true on existing offers # with standard interval of 'MONTHLY_POSTPAY'. As of May 2024, we no # longer allow unlimited renewals. # # Note: The following fields are mutually exclusive: `unlimited_renewal`, `max_renewal_count`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] start_policy # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::Term::StartPolicy] # Optional. Defines when the resulting order should start. # Must be set when publishing the offer. # @!attribute [rw] scheduled_start_time # @return [::Google::Type::DateTime] # Optional. The scheduled start time of the offer. Cannot exceed one year # from the time of publish. # # If the start policy is `SCHEDULED_START_TIME`, a future time at a day # boundary in the America/Los_Angeles time zone must be provided when # publishing the offer. # # If the offer amends another private or standard offer, then the # scheduled start time must be: # # * Before or equal to the amended offer's end time if the offer's # end policy is not MATCH_AMENDED_OFFER. Otherwise, it has to be # strictly before the amended offer's end time. # * Before or equal to the start time of the next pending installment of # the amended offer, if amending a private offer with custom # installments. For example, if the amended offer has installments on # 01/01, 02/01, 03/01, 04/01, and today is 02/15, then the new offer's # `scheduled_start_time` must be at or before 03/01. # @!attribute [rw] end_policy # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::Term::EndPolicy] # Optional. Defines when an offer should end. # Must be set when publishing the offer. # @!attribute [r] effective_term_end_time # @return [::Google::Type::DateTime] # Output only. The expected end time of the current offer term. # # At the end of each offer term, an offer associated with an active # order will either renew or end. When an offer renews, a new term begins # and this value changes to reflect the end time of the new term. # When an offer ends this value is no longer set and instead `end_time` is # set. # # When the term of an offer ends and the offer does not renew, the # associated order also ends if the base standard offer has a # subscription price model. Otherwise, the associated order does not end # and remains active. # # Not included for PRIVATE_OFFER_VIEW_BASIC. # Included for PRIVATE_OFFER_VIEW_FULL when the offer has not ended and # either the offer has started or the value can be derived from other # fields. # # For offers that have not started, this field is set when one of the # following conditions is true. # # * The offer sets `term.scheduled_end_time`. # * The offer sets `term.scheduled_start_time` and `term.duration_months`, # the offer's `term.end_policy` is not `MATCH_AMENDED_OFFER`, and the # offer does not have standard_interval set to `MONTHLY_POSTPAY`. class Term include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Defines when an offer should start. module StartPolicy # Default value. This value is unused. START_POLICY_UNSPECIFIED = 0 # The resulting order starts immediately upon the customer's acceptance # of the offer, if no partner approval is required, or else immediately # after the partner approves the purchase if order approval is required. # This enum value cannot be combined with `term.scheduled_start_time`. IMMEDIATE = 1 # The resulting order starts at the scheduled start time. SCHEDULED_START_TIME = 2 end # Defines when an offer should end. module EndPolicy # Default value. This value is unused. END_POLICY_UNSPECIFIED = 0 # Offer ends after the specified duration. # If this is set, then `duration_months` must be positive. AFTER_DURATION = 1 # Offer ends at the schduled time. SCHEDULED_END_TIME = 2 # Offer coterms to the amended offer - the offer ends at the end of the # amended offer's term # # For example, if the amended offer starts on 01/15/24, and has a # duration of 6 months, then it ends on 07/15/24. If the current offer # coterms to the previous offer, and the current offer starts on # 05/06/24, then it will still end on 07/15/24. Assuming the current # offer renews 3 times, then the terms on the current offer will be: # # 1. 05/06/24 - 07/15/24 (First term, ends on 07/15 to coterm with the # amended offer) # 2. 07/15/24 - 01/15/25 (First renewal term) # 3. 01/15/25 - 07/15/25 (Second renewal term) # 4. 07/15/25 - 01/15/26 (Third renewal term) # # As a contrast, if the current offer does not coterm with the amended # offer (such as when `end_policy` is `AFTER_DURATION`), then the # terms will be: # # 1. 05/06/24 - 11/06/24 (First term, ends on 11/06, no coterming) # 2. 11/06/24 - 05/06/25 (First renewal term) # 3. 05/06/25 - 11/06/25 (Second renewal term) # 4. 11/06/25 - 05/06/26 (Third renewal term) # # If this is set, then the following conditions must be met: # # * `single_product_offer.amended_private_offer` must be set, and the # amended private offer must not be ended. # * The proration policy must not change (e.g., you cannot switch # between `MONTHLY_PRORATED` and `MONTHLY_NOT_PRORATED`). # * The current offer must not have custom intervals (where # `custom_interval_price` is set). # * `term.duration_months` must match the amended private offer's # duration. # * The amended private offer must not have a standard interval # of `MONTHLY_POSTPAY`. # # This is currently not supported. MATCH_AMENDED_OFFER = 3 end end # Configurations for the offer that is associated with a single product. # @!attribute [rw] amended_private_offer # @return [::String] # Optional. An existing private offer that will be superseded by this # offer. Unless the private offer is for a product type that supports # [multiple active # orders](https://cloud.google.com/marketplace/docs/partners/offers/multiple-offers), # an amendment private offer must be transacted if and only if the # destination customer billing account already contains an active order # for the same product. The offer to be superseded must be the offer # associated with an active order. # # Amendments generally fall into one of two scenarios: # # 1. **Active Order / Ended Offer**: The term of the amended offer has # ended but it is still associated with an active order. The new # offer must amend the ended private offer. # 2. **Active Order / Active Offer**: The term of the amended offer is # still active and the associated order is active. Similar to above, # the new offer must amend the currently active offer (unless # "multiple active orders" are supported). # # If this is set, then the `base_standard_offer` parent service must # match the parent service of the `base_standard_offer` in the # `amended_private_offer`. # # **Active Term Restrictions**: # If the term of the amended private offer has *NOT* ended, then the # following compatibility rules apply: # # * **Price Model Compatibility**: # * Flat Fee (with or without usage) offers can amend Flat Fee # offers. # * Usage-only or CUD offers can amend usage-only offers. # * Commitment-based offers must amend offers of the same price # model subtype (e.g., "additional usage at list price" vs "all # usage discounted"). # * **Billing Frequency Compatibility**: Determined by # `standard_interval` or `custom_interval_price`. # * If the amended offer has a custom billing frequency, the new # offer must also have a custom frequency. # * If the amended offer has a standard frequency (Monthly, # Quarterly, or Yearly), the new offer must maintain the same # frequency or transition to a custom frequency. # * Switching between different standard frequencies (e.g., Monthly # to Quarterly) is not supported. # * For Monthly frequency, switching between `MONTHLY_PRORATED` # and `MONTHLY_NOT_PRORATED` is supported, unless the offer's # `term.end_policy` is `MATCH_AMENDED_OFFER`. # * For usage-only offers, there are no billing frequency # restrictions. # # Other criteria for offer amendment are detailed elsewhere. # # Note: The following fields are mutually exclusive: `amended_private_offer`, `amended_standard_offer`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] amended_standard_offer # @return [::String] # Optional. An existing standard offer that will be superseded by this # offer. An amendment private offer must be transacted if the destination # customer billing account already contains an active order for the same # product, and otherwise cannot be transacted. The offer to be superseded # must be the offer associated with the active order. # # If this is set, then the `base_standard_offer` must contain the same # parent service as the parent service of the `amended_standard_offer`. # The price model of this offer must be compatible with the price model # of the `amended_standard_offer`: # # * Flat Fee, or Flat Fee with usage offers can amend Flat Fee or Flat # Fee with usage standard offers. # * Usage-only offers, or CUD offers can amend usage-only standard # offers. # # Other criteria for offer amendment are detailed elsewhere. # # Note: The following fields are mutually exclusive: `amended_standard_offer`, `amended_private_offer`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] standard_interval_price # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::StandardIntervalPrice] # Optional. Price configurations for offers with standard intervals. # A price must be set when publishing the offer. # # Note: The following fields are mutually exclusive: `standard_interval_price`, `custom_interval_price`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] custom_interval_price # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::CustomIntervalPrice] # Optional. Price configurations for offers with custom intervals. # Custom interval corresponds to "custom billing frequency", # see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule. # A price must be set when publishing the offer. # # Note: The following fields are mutually exclusive: `custom_interval_price`, `standard_interval_price`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] base_standard_offer # @return [::String] # Optional. The StandardOffer this PrivateOffer is based on. # Must be in the same project as the private offer, and must be effective # at the time of publishing. Must be present to publish the offer. # # Format: # projects/\\{project}/locations/\\{location}/services/\\{service}/standardOffers/\\{standard_offer} # @!attribute [r] service_level # @return [::String] # Output only. The service level (also known as the 'plan') of the base # standard offer. The value is populated at publish time from the base # standard offer. # @!attribute [r] reseller_private_offer_plan_id # @return [::String] # Output only. Present for offers created by a reseller from a reseller # private offer plan (RPOP). When set, contains the ID of the originating # RPOP. Not included for `PRIVATE_OFFER_VIEW_BASIC`. # @!attribute [rw] features # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Feature>] # Optional. The custom product features to display for this offer. # Feature `display_name` values must be unique to publish the offer. # The set of features specified here should generally include all features # included in the base service level, with optionally customized values, # but is not required to match exactly and may include additional features. # @!attribute [r] effective_installment_timeline # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Installment>] # Output only. The effective installment timeline of the offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. # Included for `PRIVATE_OFFER_VIEW_FULL` if all necessary information is # available to generate the timeline, and if the offer has # 'standard_interval_price' of 'MONTHLY_PRORATED', 'MONTHLY_NOT_PRORATED', # 'QUARTERLY_NOT_PRORATED', or 'YEARLY_NOT_PRORATED'. # @!attribute [r] contract_value # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::ContractValue] # Output only. Contract value of the offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. # @!attribute [r] revenue_share # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::RevenueShare] # Output only. Revenue share information for this Private Offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. class SingleProductOffer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Additional details used to describe customization of the service level. # # Features are used to distinguish service levels of the same product. # When a product has a single service level, all details can be contained # in the product documentation. When a product has multiple service levels, # each service level can be assigned a distinct set of features to # distinguish the key differences between the service levels. # # In addition to customizing pricing and other transaction details, a # private offer may include customization of partner-managed product # behavior. When this is the case, the details of the custom behavior are # described using features. # @!attribute [rw] display_name # @return [::String] # Optional. Human readable display text characterizing the feature. # Should be sufficiently detailed to identify the feature, allowing # features to be correlated across separate offers and service levels. # Must be non-empty to publish the offer. # The maximum allowed length is 128 characters. # Allows characters from the following Unicode Property Classes: # Letters, Numbers, Punctuation, Symbols, and Separators # @!attribute [rw] value # @return [::String] # Optional. Human readable display text reflecting the value of the # feature. Used for variable features not captured by the display_name # alone. The maximum allowed length is 3000 characters. Allows characters # from the following Unicode Property Classes: Letters, Numbers, # Punctuation, Symbols, and Separators class Feature include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price model of the private offer. # # Private offers are referred to as having different kinds of price models # based on the combination of fields set in the price model. The following # terminology is used in documentation and other reference material. # # * Usage-based: the price model does not set `flat_fee` # * Usage-only: the price model sets only `usage` # * CUD (committed use discount): the price model sets `commitment` # * Commitment discount with additional usage at list price: # The price model sets `commitment` and not `usage`. # * Commitment with all usage discounted: The price model sets # `commitment` and `usage`. # * Flat fee: the price model sets only `flat_fee` # * Flat fee with usage: the price model sets `flat_fee` and `usage` # # See # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-pricing-model#CUD # for the price models. # @!attribute [rw] flat_fee # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::FlatFee] # Optional. The price configurations for the flat fee subscription. # Must be unset when the base standard offer's price model does not # include subscription SKUs. # # Note: The following fields are mutually exclusive: `flat_fee`, `commitment`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] commitment # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Commitment] # Optional. The price configurations for the commitment based # subscription. Must be unset when the base standard offer's price # model includes subscription SKUs. # # Note: The following fields are mutually exclusive: `commitment`, `flat_fee`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] usage # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Usage] # Optional. The price configurations for the usage part. # If this field is set, the `Commitment.discount_percent` must be unset. # A private offer can apply a discount to all usage or to a usage # commitment, but not both. # Must be unset when the base standard offer's price model includes no # usage SKUs. class PriceModel include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # The discount for a specific SKU. # @!attribute [rw] sku # @return [::String] # Optional. The name of a partner SKU from this API. # # Must refer to a SKU in the price model of the base standard offer. # Inclusion in the base price model can occur either directly or # indirectly via inclusion in an included SkuGroup. # # Currently, standard offer price models include only partner SKUs # in the same project as the standard offer. This may change. # # Format: # projects/\\{project}/locations/\\{location}/services/\\{service}/skus/\\{sku} # # Note: The following fields are mutually exclusive: `sku`, `cloud_billing_sku`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] cloud_billing_sku # @return [::String] # Optional. The name of a Google SKU from the Cloud Billing API. # # Used for partner products sold by Google, such as Premium Operating # System Images sold for use in Compute Engine. This is not common. # SKUs of this type are not present on this API and can instead be # found on the Cloud Billing API or at https://cloud.google.com/skus. # # Must refer to a SKU in the price model of the base standard offer. # Google SKUs are always referenced in standard offers via SkuGroups. # # Format: services/\\{service}/skus/\\{sku} # # Note: The following fields are mutually exclusive: `cloud_billing_sku`, `sku`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] discount_percent # @return [::Google::Type::Decimal] # Optional. The discount percent for the SKU. # For example, `10` means a discount of 10%. If the original SKU # price is $100/hour then the discounted price will be $90/hour. # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", # and "". # Must be present to publish the offer. class SkuDiscount include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price for the usage SKUs. # @!attribute [rw] default_discount_percent # @return [::Google::Type::Decimal] # Optional. The default discount percent for usage SKUs. # An unset default discount percent is equivalent to 0 (no discount). # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "". # @!attribute [rw] sku_discounts # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::SkuDiscount>] # Optional. The discounts for the specific SKUs that override the # `default_discount_percent`. class Usage include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price configurations for the flat fee subscriptions. # @!attribute [rw] flat_fee_override # @return [::Google::Type::Money] # Optional. Flat fee overriding the default flat fee in the base # standard offer. Value cannot be negative. The currency must be "USD" # and precision is limited to cents. Must be present to publish the # offer, if the parent message is set. The maximum allowed value is # 1,000,000,000 USD. class FlatFee include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price configurations for the commitment based subscriptions. # @!attribute [rw] commitment_amount # @return [::Google::Type::Money] # Optional. The commitment balance that the customer will receive. # Value cannot be negative. # The currency must be "USD" and precision is limited to cents. # Must be present to publish the offer, if the parent message is set. # The maximum allowed value is 1,000,000,000 USD. # # If the current offer amends a private offer where the term has not # ended, and if the field # `single_product_offer.standard_interval_price.price_model.commitment.commitment_amount` # is set on both the current offer and the amended private offer, then # the commitment amount must be equal or higher on the current offer, # compared to the amended private offer. # @!attribute [rw] discount_percent # @return [::Google::Type::Decimal] # Optional. The discount percent on `commitment_amount`. # # For example, `10` means a discount of 10%. If the original # `commitment_amount` is $100 then the discounted amount will be $90. # The customer is charged $90 and receives $100 in credits. # # All reported usage will be charged at the standard price. # If this field is set, the `price_model.usage` must be unset. A # private offer can apply a discount to all usage or to a usage # commitment, but not both. # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "". # # Must be present to publish the offer. # @!attribute [rw] additional_credit # @return [::Google::Type::Money] # Optional. Additional credit granted to the customer. # Additional credits are only supported for custom interval offers. # Equivalent behavior can be achieved for standard interval offers by # varying the `commitment_amount` and `discount_percent`. # # Value cannot be negative. # The currency must be "USD" and precision is limited to cents. # The maximum allowed value is 1,000,000 USD. # @!attribute [rw] discard_previous_credit_balance # @return [::Boolean] # Optional. Whether to discard the previous credit balance when the # associated installment starts. If not set, the previous credit # balance will be rolled over to the current installment. # # If there are no previous installments, then the value of this field # will not matter - since it has no effect when no credits exist. class Commitment include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end end # Price configurations for offers with standard intervals. # @!attribute [rw] standard_interval # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::StandardIntervalPrice::StandardInterval] # Optional. The standard interval of the offer. # Must be present to publish unless the price model is usage-only. # @!attribute [rw] price_model # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel] # Optional. The price model of the offer. # Must be present to publish the offer. class StandardIntervalPrice include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # The options for offers with standard intervals. module StandardInterval # The private offer does not have an interval. # If this is set, then the offer is "usage-only". # Field `term.duration_months` must be positive. STANDARD_INTERVAL_UNSPECIFIED = 0 # The schedule of the monthly postpay offers. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # No longer supported as of May 2024. Cannot be used to publish # new offers. MONTHLY_POSTPAY = 1 # Monthly installments with proration. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 04/15, and the offer duration is # 3 months, the following installments will be created: # # 1: from 04/15 to 05/01, at the prorated price for April. # # # 2: from 05/01 to 06/01, at the full monthly price for May. # # # 3: from 06/01 to 07/01, at the full monthly price for June. # # # 4: from 07/01 to 07/15, at the prorated price for July. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. MONTHLY_PRORATED = 2 # Monthly installments without proration. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 04/15, and the offer duration is # 3 months, the following installments will be created: # # 1: from 04/15 to 05/15, at the full monthly price. # # # 2: from 05/15 to 06/15, at the full monthly price. # # # 3: from 06/15 to 07/15, at the full monthly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. MONTHLY_NOT_PRORATED = 3 # Quarterly installments which are not prorated. # This type of offer has "Quarterly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 01/15, and the offer duration is # 3 quarters, the following installments will be created: # # 1: from 01/15 to 04/15, at the full quarterly price. # # # 2: from 04/15 to 07/15, at the full quarterly price. # # # 3: from 07/15 to 10/15, at the full quarterly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. QUARTERLY_NOT_PRORATED = 4 # Yearly installments which are not prorated. # This type of offer has "Yearly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 01/15/2025, and the offer # duration is 3 years, the following installments will be created: # # 1: from 01/15/2025 to 01/15/2026, at the full yearly price. # # # 2: from 01/15/2026 to 01/15/2027, at the full yearly price. # # # 3: from 01/15/2027 to 01/15/2028, at the full yearly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. YEARLY_NOT_PRORATED = 5 end end # An installment of the offer. # @!attribute [rw] start_time # @return [::Google::Type::DateTime] # Optional. The start time of the installment. # Each installment must have a unique start time with one exception: # When the `term.start_policy` of the offer's term is `IMMEDIATE`, # the `start_time` of the first installment must be unset. # The actual start time is not recorded in the offer and instead is # determined by the time the resulting order became active. # # When the `term.start_policy` of the offer's term is # `SCHEDULED_START_TIME`, then the first installment's `start_time` must # match `term.scheduled_start_time`. # # If the `term.end_policy` of the offer's term is `SCHEDULED_END_TIME`, # then installment `start_time` must be before `term.scheduled_end_time`. # If it's `AFTER_DURATION`, then installment `start_time` must be before # the time calculated by adding the `term.duration_months` to # the start time of the offer. # # The `start_time` of the installments cannot be before the # `accept_deadline_time` of the offer. # # Installment start times must be in strictly increasing chronological # order. # @!attribute [rw] price_model # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel] # Optional. The price model of the installment. # All installments must have the same form of price model. class Installment include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Price configurations for offers with custom intervals. # @!attribute [rw] installments # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Installment>] # Optional. The installments that make up the installment timeline. # All installments must have the same form of price model (e.g. # all commitment, or all flat fee). A subscription must be present # under the price model for every installment. # # Must contain at least one installment to publish the offer. class CustomIntervalPrice include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The contract value of the offer. # @!attribute [r] total_contract_value # @return [::Google::Type::Money] # Output only. The total contract value of the offer. # This will be set for all non-draft private offers, as long as # 'PRIVATE_OFFER_VIEW_FULL' is requested. For DRAFT private offers, # this will be populated only when the end user's billing account is # set and when the pricing and term configuration is sufficiently # complete to allow for a calculation. class ContractValue include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Revenue Share information for a Private Offer. # For more details about the revenue share, including how the value is # determined, see # https://docs.cloud.google.com/marketplace/docs/partners/revenue-share-scenarios. # # Not included for `PRIVATE_OFFER_VIEW_BASIC`, or for DRAFT private offers. # # For non-draft private offers, these fields are populated based on the # following: # # * Offers published after April 20, 2025 will always have revenue # share fields populated. # * Offers published on or before April 20, 2025 will only have revenue # share fields populated if they were associated with an active, # unexpired order on that date. # @!attribute [r] current_term_vendor_net_revenue_percent # @return [::Google::Type::Decimal] # Output only. The revenue share currently in effect. # # The range of the value is between 0 and 100. For example, 80 # means the Vendor's current term revenue share is 80%. The vendor # will keep 80% of the revenue. # . # @!attribute [r] renewal_term_vendor_net_revenue_percent # @return [::Google::Type::Decimal] # Output only. The expected revenue share for the renewal term. # Not included if the offer does not have renewal terms. # # The range of the value is between 0 and 100. For example, 80 # means the Vendor's current term revenue share is 80%. The vendor # will keep 80% of the revenue after renewal. # . class RevenueShare include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end end # State of an offer. module State # Default value. This value is unused. STATE_UNSPECIFIED = 0 # The default state after creation when the offer can be edited. # In all other states, the contents of the offer cannot be edited. DRAFT = 1 # The offer is publishing. # Publishing will complete when all publishing requirements are satisfied. PUBLISHING = 2 # The offer has been published and is available to the customer to accept. PUBLISHED = 3 # The offer has been accepted by the customer. ACCEPTED = 4 # The offer was cancelled by the provider before it was transacted. # Cancelled offers can no longer be accepted by the customer. CANCELLED = 5 # The offer expired without being accepted by the customer. # Expired offers can no longer be accepted by the customer. EXPIRED = 6 # The offer has ended. # # Ended offers were accepted and active in the past, but have now reached # the end of their term or have been terminated. ENDED = 7 end # The type of the deal transacted with the offer. The deal type of an offer # is a factor in determining the offer's revenue share. module OfferDealType # Default value. This value is unused. OFFER_DEAL_TYPE_UNSPECIFIED = 0 # The offer corresponds to a preexisting commercial arrangement for a # workload on Google Cloud that is being transferred to the Cloud # Marketplace. CHANNEL_SHIFT = 1 # The offer corresponds to a preexisting commercial arrangement for a # workload previously not on Google Cloud that is being transferred to # Google Cloud. MIGRATION = 2 # The offer corresponds to a renewal of a deal initially transacted on # the Google Cloud Marketplace. NATIVE_RENEWAL = 3 # The offer corresponds to a new deal transacted on the Google Cloud # Marketplace. # # This value is not allowed if the offer amends another private offer # where the term has not ended, and the amended private offer has a deal # type of `MIGRATION`, `CHANNEL_SHIFT` or `NATIVE_RENEWAL`. NEW = 4 end end |
#publish_requirement_google_review ⇒ ::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::PublishRequirementGoogleReview (readonly)
Returns Output only. Information about the Google review process. Present only when the offer is determined to require review by Google.
148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 |
# File 'proto_docs/google/cloud/commerceproducer/v1beta/private_offer.rb', line 148 class PrivateOffer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Information about the Google review process. # @!attribute [r] review_approve_time # @return [::Google::Protobuf::Timestamp] # Output only. The approval time of the Google review process. class PublishRequirementGoogleReview include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Contact information for a reseller. # @!attribute [r] contact # @return [::String] # Output only. The name of the reseller contact for this offer. # @!attribute [r] email # @return [::String] # Output only. The email of the reseller contact for this offer. class ResellerContact include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Contact information for the partner representative. # @!attribute [rw] contact # @return [::String] # Optional. Display text identifying the partner sales contact. # Displayed to the customer. # Must be provided when publishing the offer. # Maximum length: 256 characters. # @!attribute [rw] email # @return [::String] # Optional. The email address of the partner sales contact. # Displayed to the customer. # The format of the provided email address is validated when publishing the # offer, but no verification is performed that the email address actually # exists, accepts email, or is otherwise functional. class PartnerContact include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Information about the customer. # @!attribute [rw] entity_title # @return [::String] # Optional. A string identifying the customer's entity (for example, the # customer's organization or company name). Must be provided when # publishing the offer. Maximum length: 256 characters. # @!attribute [rw] contact # @return [::String] # Optional. A string identifying the customer contact. # Must be provided when publishing the offer. # Maximum length: 256 characters. # @!attribute [rw] email # @return [::String] # Optional. Email of customer contact. # If provided, it must be a well-formed email address. # @!attribute [r] address # @deprecated This field is deprecated and may be removed in the next major version update. # @return [::String] # Output only. Legal address of the customer organization. # This field can no longer be set, but it is preserved to return the # data from existing offers where address is set. # @!attribute [rw] target_billing_account # @return [::String] # Optional. The customer's billing account targeted by the offer. # The private offer once published can be accepted by a billing # administrator of the target billing account. If the customer accepts the # offer and later moves the resulting order to a new billing account, this # field will continue to reflect the original billing account to which the # private offer was extended. Must be provided when publishing the offer. # # To publish this private offer: # # * The billing account must exist. # * The billing account must not be in a free trial. # * The billing account must comply with Marketplace Reselling Policies. # * Reseller parent billing accounts are prohibited. Reseller subaccounts # are prohibited unless the service is enabled for reselling. # # Format: billingAccounts/012345-567890-ABCDEF class Customer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Configurations for the offer term and renewal options. # Extending a private offer to a customer that covers a given term # constitutes a guarantee to the customer that the product will remain # available to them for the duration of the term. # @!attribute [rw] duration_months # @return [::Integer] # Optional. Duration in months of the offer term. # The offer will end on the same day of the month after this duration. If # that date is not available, the offer will end on the last day of the # month. For example, if the offer starts on 01/31/2024 and the duration # is 13 months, the offer will end on 02/28/2025. # Must be set to publish the offer if the end policy is `AFTER_DURATION` # or `MATCH_AMENDED_OFFER`, and must be a positive value. # # The maximum possible offer duration, including all renewal terms, # cannot exceed 7 years. For example, if `duration_months` is 9 and # `term.max_renewal_count` is 9, then the maximum possible offer duration # is 90 months and exceeds the 7 year limit. # # Note: The following fields are mutually exclusive: `duration_months`, `scheduled_end_time`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] scheduled_end_time # @return [::Google::Type::DateTime] # Optional. Specified end time of the offer. # Must be set to publish the offer if the end policy is # `SCHEDULED_END_TIME`. # When set, the time must be in the future and at a day boundary in the # America/Los_Angeles time zone, and must be after # `term.scheduled_start_time` if applicable. # # Note: The following fields are mutually exclusive: `scheduled_end_time`, `duration_months`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] max_renewal_count # @return [::Integer] # Optional. The max number of renewals allowed, after the initial term # ends. This field is only relevant to standard interval offers with # interval of 'MONTHLY_PRORATED', 'MONTHLY_NOT_PRORATED', # 'QUARTERLY_NOT_PRORATED' or 'YEARLY_NOT_PRORATED'. Other types of # offers cannot be renewed. # # For example, if the initial term is 1 year and the max renewals is 3, # the customer can renew the offer for up to 3 additional years after the # initial term ends. Customers control whether they renew the offer. # # Allowing a customer to renew an offer does not constitute a guarantee # to the customer that the offered product will still be available to be # renewed at the renewal date. # # An offer with a max renewal count of 0 cannot be renewed. # Must be non-negative. # # Note: The following fields are mutually exclusive: `max_renewal_count`, `unlimited_renewal`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [r] unlimited_renewal # @deprecated This field is deprecated and may be removed in the next major version update. # @return [::Boolean] # Output only. Deprecated: This field can only be true on existing offers # with standard interval of 'MONTHLY_POSTPAY'. As of May 2024, we no # longer allow unlimited renewals. # # Note: The following fields are mutually exclusive: `unlimited_renewal`, `max_renewal_count`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] start_policy # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::Term::StartPolicy] # Optional. Defines when the resulting order should start. # Must be set when publishing the offer. # @!attribute [rw] scheduled_start_time # @return [::Google::Type::DateTime] # Optional. The scheduled start time of the offer. Cannot exceed one year # from the time of publish. # # If the start policy is `SCHEDULED_START_TIME`, a future time at a day # boundary in the America/Los_Angeles time zone must be provided when # publishing the offer. # # If the offer amends another private or standard offer, then the # scheduled start time must be: # # * Before or equal to the amended offer's end time if the offer's # end policy is not MATCH_AMENDED_OFFER. Otherwise, it has to be # strictly before the amended offer's end time. # * Before or equal to the start time of the next pending installment of # the amended offer, if amending a private offer with custom # installments. For example, if the amended offer has installments on # 01/01, 02/01, 03/01, 04/01, and today is 02/15, then the new offer's # `scheduled_start_time` must be at or before 03/01. # @!attribute [rw] end_policy # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::Term::EndPolicy] # Optional. Defines when an offer should end. # Must be set when publishing the offer. # @!attribute [r] effective_term_end_time # @return [::Google::Type::DateTime] # Output only. The expected end time of the current offer term. # # At the end of each offer term, an offer associated with an active # order will either renew or end. When an offer renews, a new term begins # and this value changes to reflect the end time of the new term. # When an offer ends this value is no longer set and instead `end_time` is # set. # # When the term of an offer ends and the offer does not renew, the # associated order also ends if the base standard offer has a # subscription price model. Otherwise, the associated order does not end # and remains active. # # Not included for PRIVATE_OFFER_VIEW_BASIC. # Included for PRIVATE_OFFER_VIEW_FULL when the offer has not ended and # either the offer has started or the value can be derived from other # fields. # # For offers that have not started, this field is set when one of the # following conditions is true. # # * The offer sets `term.scheduled_end_time`. # * The offer sets `term.scheduled_start_time` and `term.duration_months`, # the offer's `term.end_policy` is not `MATCH_AMENDED_OFFER`, and the # offer does not have standard_interval set to `MONTHLY_POSTPAY`. class Term include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Defines when an offer should start. module StartPolicy # Default value. This value is unused. START_POLICY_UNSPECIFIED = 0 # The resulting order starts immediately upon the customer's acceptance # of the offer, if no partner approval is required, or else immediately # after the partner approves the purchase if order approval is required. # This enum value cannot be combined with `term.scheduled_start_time`. IMMEDIATE = 1 # The resulting order starts at the scheduled start time. SCHEDULED_START_TIME = 2 end # Defines when an offer should end. module EndPolicy # Default value. This value is unused. END_POLICY_UNSPECIFIED = 0 # Offer ends after the specified duration. # If this is set, then `duration_months` must be positive. AFTER_DURATION = 1 # Offer ends at the schduled time. SCHEDULED_END_TIME = 2 # Offer coterms to the amended offer - the offer ends at the end of the # amended offer's term # # For example, if the amended offer starts on 01/15/24, and has a # duration of 6 months, then it ends on 07/15/24. If the current offer # coterms to the previous offer, and the current offer starts on # 05/06/24, then it will still end on 07/15/24. Assuming the current # offer renews 3 times, then the terms on the current offer will be: # # 1. 05/06/24 - 07/15/24 (First term, ends on 07/15 to coterm with the # amended offer) # 2. 07/15/24 - 01/15/25 (First renewal term) # 3. 01/15/25 - 07/15/25 (Second renewal term) # 4. 07/15/25 - 01/15/26 (Third renewal term) # # As a contrast, if the current offer does not coterm with the amended # offer (such as when `end_policy` is `AFTER_DURATION`), then the # terms will be: # # 1. 05/06/24 - 11/06/24 (First term, ends on 11/06, no coterming) # 2. 11/06/24 - 05/06/25 (First renewal term) # 3. 05/06/25 - 11/06/25 (Second renewal term) # 4. 11/06/25 - 05/06/26 (Third renewal term) # # If this is set, then the following conditions must be met: # # * `single_product_offer.amended_private_offer` must be set, and the # amended private offer must not be ended. # * The proration policy must not change (e.g., you cannot switch # between `MONTHLY_PRORATED` and `MONTHLY_NOT_PRORATED`). # * The current offer must not have custom intervals (where # `custom_interval_price` is set). # * `term.duration_months` must match the amended private offer's # duration. # * The amended private offer must not have a standard interval # of `MONTHLY_POSTPAY`. # # This is currently not supported. MATCH_AMENDED_OFFER = 3 end end # Configurations for the offer that is associated with a single product. # @!attribute [rw] amended_private_offer # @return [::String] # Optional. An existing private offer that will be superseded by this # offer. Unless the private offer is for a product type that supports # [multiple active # orders](https://cloud.google.com/marketplace/docs/partners/offers/multiple-offers), # an amendment private offer must be transacted if and only if the # destination customer billing account already contains an active order # for the same product. The offer to be superseded must be the offer # associated with an active order. # # Amendments generally fall into one of two scenarios: # # 1. **Active Order / Ended Offer**: The term of the amended offer has # ended but it is still associated with an active order. The new # offer must amend the ended private offer. # 2. **Active Order / Active Offer**: The term of the amended offer is # still active and the associated order is active. Similar to above, # the new offer must amend the currently active offer (unless # "multiple active orders" are supported). # # If this is set, then the `base_standard_offer` parent service must # match the parent service of the `base_standard_offer` in the # `amended_private_offer`. # # **Active Term Restrictions**: # If the term of the amended private offer has *NOT* ended, then the # following compatibility rules apply: # # * **Price Model Compatibility**: # * Flat Fee (with or without usage) offers can amend Flat Fee # offers. # * Usage-only or CUD offers can amend usage-only offers. # * Commitment-based offers must amend offers of the same price # model subtype (e.g., "additional usage at list price" vs "all # usage discounted"). # * **Billing Frequency Compatibility**: Determined by # `standard_interval` or `custom_interval_price`. # * If the amended offer has a custom billing frequency, the new # offer must also have a custom frequency. # * If the amended offer has a standard frequency (Monthly, # Quarterly, or Yearly), the new offer must maintain the same # frequency or transition to a custom frequency. # * Switching between different standard frequencies (e.g., Monthly # to Quarterly) is not supported. # * For Monthly frequency, switching between `MONTHLY_PRORATED` # and `MONTHLY_NOT_PRORATED` is supported, unless the offer's # `term.end_policy` is `MATCH_AMENDED_OFFER`. # * For usage-only offers, there are no billing frequency # restrictions. # # Other criteria for offer amendment are detailed elsewhere. # # Note: The following fields are mutually exclusive: `amended_private_offer`, `amended_standard_offer`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] amended_standard_offer # @return [::String] # Optional. An existing standard offer that will be superseded by this # offer. An amendment private offer must be transacted if the destination # customer billing account already contains an active order for the same # product, and otherwise cannot be transacted. The offer to be superseded # must be the offer associated with the active order. # # If this is set, then the `base_standard_offer` must contain the same # parent service as the parent service of the `amended_standard_offer`. # The price model of this offer must be compatible with the price model # of the `amended_standard_offer`: # # * Flat Fee, or Flat Fee with usage offers can amend Flat Fee or Flat # Fee with usage standard offers. # * Usage-only offers, or CUD offers can amend usage-only standard # offers. # # Other criteria for offer amendment are detailed elsewhere. # # Note: The following fields are mutually exclusive: `amended_standard_offer`, `amended_private_offer`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] standard_interval_price # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::StandardIntervalPrice] # Optional. Price configurations for offers with standard intervals. # A price must be set when publishing the offer. # # Note: The following fields are mutually exclusive: `standard_interval_price`, `custom_interval_price`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] custom_interval_price # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::CustomIntervalPrice] # Optional. Price configurations for offers with custom intervals. # Custom interval corresponds to "custom billing frequency", # see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule. # A price must be set when publishing the offer. # # Note: The following fields are mutually exclusive: `custom_interval_price`, `standard_interval_price`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] base_standard_offer # @return [::String] # Optional. The StandardOffer this PrivateOffer is based on. # Must be in the same project as the private offer, and must be effective # at the time of publishing. Must be present to publish the offer. # # Format: # projects/\\{project}/locations/\\{location}/services/\\{service}/standardOffers/\\{standard_offer} # @!attribute [r] service_level # @return [::String] # Output only. The service level (also known as the 'plan') of the base # standard offer. The value is populated at publish time from the base # standard offer. # @!attribute [r] reseller_private_offer_plan_id # @return [::String] # Output only. Present for offers created by a reseller from a reseller # private offer plan (RPOP). When set, contains the ID of the originating # RPOP. Not included for `PRIVATE_OFFER_VIEW_BASIC`. # @!attribute [rw] features # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Feature>] # Optional. The custom product features to display for this offer. # Feature `display_name` values must be unique to publish the offer. # The set of features specified here should generally include all features # included in the base service level, with optionally customized values, # but is not required to match exactly and may include additional features. # @!attribute [r] effective_installment_timeline # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Installment>] # Output only. The effective installment timeline of the offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. # Included for `PRIVATE_OFFER_VIEW_FULL` if all necessary information is # available to generate the timeline, and if the offer has # 'standard_interval_price' of 'MONTHLY_PRORATED', 'MONTHLY_NOT_PRORATED', # 'QUARTERLY_NOT_PRORATED', or 'YEARLY_NOT_PRORATED'. # @!attribute [r] contract_value # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::ContractValue] # Output only. Contract value of the offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. # @!attribute [r] revenue_share # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::RevenueShare] # Output only. Revenue share information for this Private Offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. class SingleProductOffer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Additional details used to describe customization of the service level. # # Features are used to distinguish service levels of the same product. # When a product has a single service level, all details can be contained # in the product documentation. When a product has multiple service levels, # each service level can be assigned a distinct set of features to # distinguish the key differences between the service levels. # # In addition to customizing pricing and other transaction details, a # private offer may include customization of partner-managed product # behavior. When this is the case, the details of the custom behavior are # described using features. # @!attribute [rw] display_name # @return [::String] # Optional. Human readable display text characterizing the feature. # Should be sufficiently detailed to identify the feature, allowing # features to be correlated across separate offers and service levels. # Must be non-empty to publish the offer. # The maximum allowed length is 128 characters. # Allows characters from the following Unicode Property Classes: # Letters, Numbers, Punctuation, Symbols, and Separators # @!attribute [rw] value # @return [::String] # Optional. Human readable display text reflecting the value of the # feature. Used for variable features not captured by the display_name # alone. The maximum allowed length is 3000 characters. Allows characters # from the following Unicode Property Classes: Letters, Numbers, # Punctuation, Symbols, and Separators class Feature include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price model of the private offer. # # Private offers are referred to as having different kinds of price models # based on the combination of fields set in the price model. The following # terminology is used in documentation and other reference material. # # * Usage-based: the price model does not set `flat_fee` # * Usage-only: the price model sets only `usage` # * CUD (committed use discount): the price model sets `commitment` # * Commitment discount with additional usage at list price: # The price model sets `commitment` and not `usage`. # * Commitment with all usage discounted: The price model sets # `commitment` and `usage`. # * Flat fee: the price model sets only `flat_fee` # * Flat fee with usage: the price model sets `flat_fee` and `usage` # # See # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-pricing-model#CUD # for the price models. # @!attribute [rw] flat_fee # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::FlatFee] # Optional. The price configurations for the flat fee subscription. # Must be unset when the base standard offer's price model does not # include subscription SKUs. # # Note: The following fields are mutually exclusive: `flat_fee`, `commitment`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] commitment # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Commitment] # Optional. The price configurations for the commitment based # subscription. Must be unset when the base standard offer's price # model includes subscription SKUs. # # Note: The following fields are mutually exclusive: `commitment`, `flat_fee`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] usage # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Usage] # Optional. The price configurations for the usage part. # If this field is set, the `Commitment.discount_percent` must be unset. # A private offer can apply a discount to all usage or to a usage # commitment, but not both. # Must be unset when the base standard offer's price model includes no # usage SKUs. class PriceModel include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # The discount for a specific SKU. # @!attribute [rw] sku # @return [::String] # Optional. The name of a partner SKU from this API. # # Must refer to a SKU in the price model of the base standard offer. # Inclusion in the base price model can occur either directly or # indirectly via inclusion in an included SkuGroup. # # Currently, standard offer price models include only partner SKUs # in the same project as the standard offer. This may change. # # Format: # projects/\\{project}/locations/\\{location}/services/\\{service}/skus/\\{sku} # # Note: The following fields are mutually exclusive: `sku`, `cloud_billing_sku`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] cloud_billing_sku # @return [::String] # Optional. The name of a Google SKU from the Cloud Billing API. # # Used for partner products sold by Google, such as Premium Operating # System Images sold for use in Compute Engine. This is not common. # SKUs of this type are not present on this API and can instead be # found on the Cloud Billing API or at https://cloud.google.com/skus. # # Must refer to a SKU in the price model of the base standard offer. # Google SKUs are always referenced in standard offers via SkuGroups. # # Format: services/\\{service}/skus/\\{sku} # # Note: The following fields are mutually exclusive: `cloud_billing_sku`, `sku`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] discount_percent # @return [::Google::Type::Decimal] # Optional. The discount percent for the SKU. # For example, `10` means a discount of 10%. If the original SKU # price is $100/hour then the discounted price will be $90/hour. # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", # and "". # Must be present to publish the offer. class SkuDiscount include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price for the usage SKUs. # @!attribute [rw] default_discount_percent # @return [::Google::Type::Decimal] # Optional. The default discount percent for usage SKUs. # An unset default discount percent is equivalent to 0 (no discount). # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "". # @!attribute [rw] sku_discounts # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::SkuDiscount>] # Optional. The discounts for the specific SKUs that override the # `default_discount_percent`. class Usage include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price configurations for the flat fee subscriptions. # @!attribute [rw] flat_fee_override # @return [::Google::Type::Money] # Optional. Flat fee overriding the default flat fee in the base # standard offer. Value cannot be negative. The currency must be "USD" # and precision is limited to cents. Must be present to publish the # offer, if the parent message is set. The maximum allowed value is # 1,000,000,000 USD. class FlatFee include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price configurations for the commitment based subscriptions. # @!attribute [rw] commitment_amount # @return [::Google::Type::Money] # Optional. The commitment balance that the customer will receive. # Value cannot be negative. # The currency must be "USD" and precision is limited to cents. # Must be present to publish the offer, if the parent message is set. # The maximum allowed value is 1,000,000,000 USD. # # If the current offer amends a private offer where the term has not # ended, and if the field # `single_product_offer.standard_interval_price.price_model.commitment.commitment_amount` # is set on both the current offer and the amended private offer, then # the commitment amount must be equal or higher on the current offer, # compared to the amended private offer. # @!attribute [rw] discount_percent # @return [::Google::Type::Decimal] # Optional. The discount percent on `commitment_amount`. # # For example, `10` means a discount of 10%. If the original # `commitment_amount` is $100 then the discounted amount will be $90. # The customer is charged $90 and receives $100 in credits. # # All reported usage will be charged at the standard price. # If this field is set, the `price_model.usage` must be unset. A # private offer can apply a discount to all usage or to a usage # commitment, but not both. # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "". # # Must be present to publish the offer. # @!attribute [rw] additional_credit # @return [::Google::Type::Money] # Optional. Additional credit granted to the customer. # Additional credits are only supported for custom interval offers. # Equivalent behavior can be achieved for standard interval offers by # varying the `commitment_amount` and `discount_percent`. # # Value cannot be negative. # The currency must be "USD" and precision is limited to cents. # The maximum allowed value is 1,000,000 USD. # @!attribute [rw] discard_previous_credit_balance # @return [::Boolean] # Optional. Whether to discard the previous credit balance when the # associated installment starts. If not set, the previous credit # balance will be rolled over to the current installment. # # If there are no previous installments, then the value of this field # will not matter - since it has no effect when no credits exist. class Commitment include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end end # Price configurations for offers with standard intervals. # @!attribute [rw] standard_interval # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::StandardIntervalPrice::StandardInterval] # Optional. The standard interval of the offer. # Must be present to publish unless the price model is usage-only. # @!attribute [rw] price_model # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel] # Optional. The price model of the offer. # Must be present to publish the offer. class StandardIntervalPrice include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # The options for offers with standard intervals. module StandardInterval # The private offer does not have an interval. # If this is set, then the offer is "usage-only". # Field `term.duration_months` must be positive. STANDARD_INTERVAL_UNSPECIFIED = 0 # The schedule of the monthly postpay offers. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # No longer supported as of May 2024. Cannot be used to publish # new offers. MONTHLY_POSTPAY = 1 # Monthly installments with proration. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 04/15, and the offer duration is # 3 months, the following installments will be created: # # 1: from 04/15 to 05/01, at the prorated price for April. # # # 2: from 05/01 to 06/01, at the full monthly price for May. # # # 3: from 06/01 to 07/01, at the full monthly price for June. # # # 4: from 07/01 to 07/15, at the prorated price for July. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. MONTHLY_PRORATED = 2 # Monthly installments without proration. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 04/15, and the offer duration is # 3 months, the following installments will be created: # # 1: from 04/15 to 05/15, at the full monthly price. # # # 2: from 05/15 to 06/15, at the full monthly price. # # # 3: from 06/15 to 07/15, at the full monthly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. MONTHLY_NOT_PRORATED = 3 # Quarterly installments which are not prorated. # This type of offer has "Quarterly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 01/15, and the offer duration is # 3 quarters, the following installments will be created: # # 1: from 01/15 to 04/15, at the full quarterly price. # # # 2: from 04/15 to 07/15, at the full quarterly price. # # # 3: from 07/15 to 10/15, at the full quarterly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. QUARTERLY_NOT_PRORATED = 4 # Yearly installments which are not prorated. # This type of offer has "Yearly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 01/15/2025, and the offer # duration is 3 years, the following installments will be created: # # 1: from 01/15/2025 to 01/15/2026, at the full yearly price. # # # 2: from 01/15/2026 to 01/15/2027, at the full yearly price. # # # 3: from 01/15/2027 to 01/15/2028, at the full yearly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. YEARLY_NOT_PRORATED = 5 end end # An installment of the offer. # @!attribute [rw] start_time # @return [::Google::Type::DateTime] # Optional. The start time of the installment. # Each installment must have a unique start time with one exception: # When the `term.start_policy` of the offer's term is `IMMEDIATE`, # the `start_time` of the first installment must be unset. # The actual start time is not recorded in the offer and instead is # determined by the time the resulting order became active. # # When the `term.start_policy` of the offer's term is # `SCHEDULED_START_TIME`, then the first installment's `start_time` must # match `term.scheduled_start_time`. # # If the `term.end_policy` of the offer's term is `SCHEDULED_END_TIME`, # then installment `start_time` must be before `term.scheduled_end_time`. # If it's `AFTER_DURATION`, then installment `start_time` must be before # the time calculated by adding the `term.duration_months` to # the start time of the offer. # # The `start_time` of the installments cannot be before the # `accept_deadline_time` of the offer. # # Installment start times must be in strictly increasing chronological # order. # @!attribute [rw] price_model # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel] # Optional. The price model of the installment. # All installments must have the same form of price model. class Installment include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Price configurations for offers with custom intervals. # @!attribute [rw] installments # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Installment>] # Optional. The installments that make up the installment timeline. # All installments must have the same form of price model (e.g. # all commitment, or all flat fee). A subscription must be present # under the price model for every installment. # # Must contain at least one installment to publish the offer. class CustomIntervalPrice include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The contract value of the offer. # @!attribute [r] total_contract_value # @return [::Google::Type::Money] # Output only. The total contract value of the offer. # This will be set for all non-draft private offers, as long as # 'PRIVATE_OFFER_VIEW_FULL' is requested. For DRAFT private offers, # this will be populated only when the end user's billing account is # set and when the pricing and term configuration is sufficiently # complete to allow for a calculation. class ContractValue include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Revenue Share information for a Private Offer. # For more details about the revenue share, including how the value is # determined, see # https://docs.cloud.google.com/marketplace/docs/partners/revenue-share-scenarios. # # Not included for `PRIVATE_OFFER_VIEW_BASIC`, or for DRAFT private offers. # # For non-draft private offers, these fields are populated based on the # following: # # * Offers published after April 20, 2025 will always have revenue # share fields populated. # * Offers published on or before April 20, 2025 will only have revenue # share fields populated if they were associated with an active, # unexpired order on that date. # @!attribute [r] current_term_vendor_net_revenue_percent # @return [::Google::Type::Decimal] # Output only. The revenue share currently in effect. # # The range of the value is between 0 and 100. For example, 80 # means the Vendor's current term revenue share is 80%. The vendor # will keep 80% of the revenue. # . # @!attribute [r] renewal_term_vendor_net_revenue_percent # @return [::Google::Type::Decimal] # Output only. The expected revenue share for the renewal term. # Not included if the offer does not have renewal terms. # # The range of the value is between 0 and 100. For example, 80 # means the Vendor's current term revenue share is 80%. The vendor # will keep 80% of the revenue after renewal. # . class RevenueShare include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end end # State of an offer. module State # Default value. This value is unused. STATE_UNSPECIFIED = 0 # The default state after creation when the offer can be edited. # In all other states, the contents of the offer cannot be edited. DRAFT = 1 # The offer is publishing. # Publishing will complete when all publishing requirements are satisfied. PUBLISHING = 2 # The offer has been published and is available to the customer to accept. PUBLISHED = 3 # The offer has been accepted by the customer. ACCEPTED = 4 # The offer was cancelled by the provider before it was transacted. # Cancelled offers can no longer be accepted by the customer. CANCELLED = 5 # The offer expired without being accepted by the customer. # Expired offers can no longer be accepted by the customer. EXPIRED = 6 # The offer has ended. # # Ended offers were accepted and active in the past, but have now reached # the end of their term or have been terminated. ENDED = 7 end # The type of the deal transacted with the offer. The deal type of an offer # is a factor in determining the offer's revenue share. module OfferDealType # Default value. This value is unused. OFFER_DEAL_TYPE_UNSPECIFIED = 0 # The offer corresponds to a preexisting commercial arrangement for a # workload on Google Cloud that is being transferred to the Cloud # Marketplace. CHANNEL_SHIFT = 1 # The offer corresponds to a preexisting commercial arrangement for a # workload previously not on Google Cloud that is being transferred to # Google Cloud. MIGRATION = 2 # The offer corresponds to a renewal of a deal initially transacted on # the Google Cloud Marketplace. NATIVE_RENEWAL = 3 # The offer corresponds to a new deal transacted on the Google Cloud # Marketplace. # # This value is not allowed if the offer amends another private offer # where the term has not ended, and the amended private offer has a deal # type of `MIGRATION`, `CHANNEL_SHIFT` or `NATIVE_RENEWAL`. NEW = 4 end end |
#publish_time ⇒ ::Google::Protobuf::Timestamp (readonly)
Returns Output only. The time the offer transitioned to PUBLISHED state.
148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 |
# File 'proto_docs/google/cloud/commerceproducer/v1beta/private_offer.rb', line 148 class PrivateOffer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Information about the Google review process. # @!attribute [r] review_approve_time # @return [::Google::Protobuf::Timestamp] # Output only. The approval time of the Google review process. class PublishRequirementGoogleReview include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Contact information for a reseller. # @!attribute [r] contact # @return [::String] # Output only. The name of the reseller contact for this offer. # @!attribute [r] email # @return [::String] # Output only. The email of the reseller contact for this offer. class ResellerContact include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Contact information for the partner representative. # @!attribute [rw] contact # @return [::String] # Optional. Display text identifying the partner sales contact. # Displayed to the customer. # Must be provided when publishing the offer. # Maximum length: 256 characters. # @!attribute [rw] email # @return [::String] # Optional. The email address of the partner sales contact. # Displayed to the customer. # The format of the provided email address is validated when publishing the # offer, but no verification is performed that the email address actually # exists, accepts email, or is otherwise functional. class PartnerContact include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Information about the customer. # @!attribute [rw] entity_title # @return [::String] # Optional. A string identifying the customer's entity (for example, the # customer's organization or company name). Must be provided when # publishing the offer. Maximum length: 256 characters. # @!attribute [rw] contact # @return [::String] # Optional. A string identifying the customer contact. # Must be provided when publishing the offer. # Maximum length: 256 characters. # @!attribute [rw] email # @return [::String] # Optional. Email of customer contact. # If provided, it must be a well-formed email address. # @!attribute [r] address # @deprecated This field is deprecated and may be removed in the next major version update. # @return [::String] # Output only. Legal address of the customer organization. # This field can no longer be set, but it is preserved to return the # data from existing offers where address is set. # @!attribute [rw] target_billing_account # @return [::String] # Optional. The customer's billing account targeted by the offer. # The private offer once published can be accepted by a billing # administrator of the target billing account. If the customer accepts the # offer and later moves the resulting order to a new billing account, this # field will continue to reflect the original billing account to which the # private offer was extended. Must be provided when publishing the offer. # # To publish this private offer: # # * The billing account must exist. # * The billing account must not be in a free trial. # * The billing account must comply with Marketplace Reselling Policies. # * Reseller parent billing accounts are prohibited. Reseller subaccounts # are prohibited unless the service is enabled for reselling. # # Format: billingAccounts/012345-567890-ABCDEF class Customer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Configurations for the offer term and renewal options. # Extending a private offer to a customer that covers a given term # constitutes a guarantee to the customer that the product will remain # available to them for the duration of the term. # @!attribute [rw] duration_months # @return [::Integer] # Optional. Duration in months of the offer term. # The offer will end on the same day of the month after this duration. If # that date is not available, the offer will end on the last day of the # month. For example, if the offer starts on 01/31/2024 and the duration # is 13 months, the offer will end on 02/28/2025. # Must be set to publish the offer if the end policy is `AFTER_DURATION` # or `MATCH_AMENDED_OFFER`, and must be a positive value. # # The maximum possible offer duration, including all renewal terms, # cannot exceed 7 years. For example, if `duration_months` is 9 and # `term.max_renewal_count` is 9, then the maximum possible offer duration # is 90 months and exceeds the 7 year limit. # # Note: The following fields are mutually exclusive: `duration_months`, `scheduled_end_time`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] scheduled_end_time # @return [::Google::Type::DateTime] # Optional. Specified end time of the offer. # Must be set to publish the offer if the end policy is # `SCHEDULED_END_TIME`. # When set, the time must be in the future and at a day boundary in the # America/Los_Angeles time zone, and must be after # `term.scheduled_start_time` if applicable. # # Note: The following fields are mutually exclusive: `scheduled_end_time`, `duration_months`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] max_renewal_count # @return [::Integer] # Optional. The max number of renewals allowed, after the initial term # ends. This field is only relevant to standard interval offers with # interval of 'MONTHLY_PRORATED', 'MONTHLY_NOT_PRORATED', # 'QUARTERLY_NOT_PRORATED' or 'YEARLY_NOT_PRORATED'. Other types of # offers cannot be renewed. # # For example, if the initial term is 1 year and the max renewals is 3, # the customer can renew the offer for up to 3 additional years after the # initial term ends. Customers control whether they renew the offer. # # Allowing a customer to renew an offer does not constitute a guarantee # to the customer that the offered product will still be available to be # renewed at the renewal date. # # An offer with a max renewal count of 0 cannot be renewed. # Must be non-negative. # # Note: The following fields are mutually exclusive: `max_renewal_count`, `unlimited_renewal`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [r] unlimited_renewal # @deprecated This field is deprecated and may be removed in the next major version update. # @return [::Boolean] # Output only. Deprecated: This field can only be true on existing offers # with standard interval of 'MONTHLY_POSTPAY'. As of May 2024, we no # longer allow unlimited renewals. # # Note: The following fields are mutually exclusive: `unlimited_renewal`, `max_renewal_count`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] start_policy # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::Term::StartPolicy] # Optional. Defines when the resulting order should start. # Must be set when publishing the offer. # @!attribute [rw] scheduled_start_time # @return [::Google::Type::DateTime] # Optional. The scheduled start time of the offer. Cannot exceed one year # from the time of publish. # # If the start policy is `SCHEDULED_START_TIME`, a future time at a day # boundary in the America/Los_Angeles time zone must be provided when # publishing the offer. # # If the offer amends another private or standard offer, then the # scheduled start time must be: # # * Before or equal to the amended offer's end time if the offer's # end policy is not MATCH_AMENDED_OFFER. Otherwise, it has to be # strictly before the amended offer's end time. # * Before or equal to the start time of the next pending installment of # the amended offer, if amending a private offer with custom # installments. For example, if the amended offer has installments on # 01/01, 02/01, 03/01, 04/01, and today is 02/15, then the new offer's # `scheduled_start_time` must be at or before 03/01. # @!attribute [rw] end_policy # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::Term::EndPolicy] # Optional. Defines when an offer should end. # Must be set when publishing the offer. # @!attribute [r] effective_term_end_time # @return [::Google::Type::DateTime] # Output only. The expected end time of the current offer term. # # At the end of each offer term, an offer associated with an active # order will either renew or end. When an offer renews, a new term begins # and this value changes to reflect the end time of the new term. # When an offer ends this value is no longer set and instead `end_time` is # set. # # When the term of an offer ends and the offer does not renew, the # associated order also ends if the base standard offer has a # subscription price model. Otherwise, the associated order does not end # and remains active. # # Not included for PRIVATE_OFFER_VIEW_BASIC. # Included for PRIVATE_OFFER_VIEW_FULL when the offer has not ended and # either the offer has started or the value can be derived from other # fields. # # For offers that have not started, this field is set when one of the # following conditions is true. # # * The offer sets `term.scheduled_end_time`. # * The offer sets `term.scheduled_start_time` and `term.duration_months`, # the offer's `term.end_policy` is not `MATCH_AMENDED_OFFER`, and the # offer does not have standard_interval set to `MONTHLY_POSTPAY`. class Term include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Defines when an offer should start. module StartPolicy # Default value. This value is unused. START_POLICY_UNSPECIFIED = 0 # The resulting order starts immediately upon the customer's acceptance # of the offer, if no partner approval is required, or else immediately # after the partner approves the purchase if order approval is required. # This enum value cannot be combined with `term.scheduled_start_time`. IMMEDIATE = 1 # The resulting order starts at the scheduled start time. SCHEDULED_START_TIME = 2 end # Defines when an offer should end. module EndPolicy # Default value. This value is unused. END_POLICY_UNSPECIFIED = 0 # Offer ends after the specified duration. # If this is set, then `duration_months` must be positive. AFTER_DURATION = 1 # Offer ends at the schduled time. SCHEDULED_END_TIME = 2 # Offer coterms to the amended offer - the offer ends at the end of the # amended offer's term # # For example, if the amended offer starts on 01/15/24, and has a # duration of 6 months, then it ends on 07/15/24. If the current offer # coterms to the previous offer, and the current offer starts on # 05/06/24, then it will still end on 07/15/24. Assuming the current # offer renews 3 times, then the terms on the current offer will be: # # 1. 05/06/24 - 07/15/24 (First term, ends on 07/15 to coterm with the # amended offer) # 2. 07/15/24 - 01/15/25 (First renewal term) # 3. 01/15/25 - 07/15/25 (Second renewal term) # 4. 07/15/25 - 01/15/26 (Third renewal term) # # As a contrast, if the current offer does not coterm with the amended # offer (such as when `end_policy` is `AFTER_DURATION`), then the # terms will be: # # 1. 05/06/24 - 11/06/24 (First term, ends on 11/06, no coterming) # 2. 11/06/24 - 05/06/25 (First renewal term) # 3. 05/06/25 - 11/06/25 (Second renewal term) # 4. 11/06/25 - 05/06/26 (Third renewal term) # # If this is set, then the following conditions must be met: # # * `single_product_offer.amended_private_offer` must be set, and the # amended private offer must not be ended. # * The proration policy must not change (e.g., you cannot switch # between `MONTHLY_PRORATED` and `MONTHLY_NOT_PRORATED`). # * The current offer must not have custom intervals (where # `custom_interval_price` is set). # * `term.duration_months` must match the amended private offer's # duration. # * The amended private offer must not have a standard interval # of `MONTHLY_POSTPAY`. # # This is currently not supported. MATCH_AMENDED_OFFER = 3 end end # Configurations for the offer that is associated with a single product. # @!attribute [rw] amended_private_offer # @return [::String] # Optional. An existing private offer that will be superseded by this # offer. Unless the private offer is for a product type that supports # [multiple active # orders](https://cloud.google.com/marketplace/docs/partners/offers/multiple-offers), # an amendment private offer must be transacted if and only if the # destination customer billing account already contains an active order # for the same product. The offer to be superseded must be the offer # associated with an active order. # # Amendments generally fall into one of two scenarios: # # 1. **Active Order / Ended Offer**: The term of the amended offer has # ended but it is still associated with an active order. The new # offer must amend the ended private offer. # 2. **Active Order / Active Offer**: The term of the amended offer is # still active and the associated order is active. Similar to above, # the new offer must amend the currently active offer (unless # "multiple active orders" are supported). # # If this is set, then the `base_standard_offer` parent service must # match the parent service of the `base_standard_offer` in the # `amended_private_offer`. # # **Active Term Restrictions**: # If the term of the amended private offer has *NOT* ended, then the # following compatibility rules apply: # # * **Price Model Compatibility**: # * Flat Fee (with or without usage) offers can amend Flat Fee # offers. # * Usage-only or CUD offers can amend usage-only offers. # * Commitment-based offers must amend offers of the same price # model subtype (e.g., "additional usage at list price" vs "all # usage discounted"). # * **Billing Frequency Compatibility**: Determined by # `standard_interval` or `custom_interval_price`. # * If the amended offer has a custom billing frequency, the new # offer must also have a custom frequency. # * If the amended offer has a standard frequency (Monthly, # Quarterly, or Yearly), the new offer must maintain the same # frequency or transition to a custom frequency. # * Switching between different standard frequencies (e.g., Monthly # to Quarterly) is not supported. # * For Monthly frequency, switching between `MONTHLY_PRORATED` # and `MONTHLY_NOT_PRORATED` is supported, unless the offer's # `term.end_policy` is `MATCH_AMENDED_OFFER`. # * For usage-only offers, there are no billing frequency # restrictions. # # Other criteria for offer amendment are detailed elsewhere. # # Note: The following fields are mutually exclusive: `amended_private_offer`, `amended_standard_offer`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] amended_standard_offer # @return [::String] # Optional. An existing standard offer that will be superseded by this # offer. An amendment private offer must be transacted if the destination # customer billing account already contains an active order for the same # product, and otherwise cannot be transacted. The offer to be superseded # must be the offer associated with the active order. # # If this is set, then the `base_standard_offer` must contain the same # parent service as the parent service of the `amended_standard_offer`. # The price model of this offer must be compatible with the price model # of the `amended_standard_offer`: # # * Flat Fee, or Flat Fee with usage offers can amend Flat Fee or Flat # Fee with usage standard offers. # * Usage-only offers, or CUD offers can amend usage-only standard # offers. # # Other criteria for offer amendment are detailed elsewhere. # # Note: The following fields are mutually exclusive: `amended_standard_offer`, `amended_private_offer`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] standard_interval_price # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::StandardIntervalPrice] # Optional. Price configurations for offers with standard intervals. # A price must be set when publishing the offer. # # Note: The following fields are mutually exclusive: `standard_interval_price`, `custom_interval_price`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] custom_interval_price # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::CustomIntervalPrice] # Optional. Price configurations for offers with custom intervals. # Custom interval corresponds to "custom billing frequency", # see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule. # A price must be set when publishing the offer. # # Note: The following fields are mutually exclusive: `custom_interval_price`, `standard_interval_price`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] base_standard_offer # @return [::String] # Optional. The StandardOffer this PrivateOffer is based on. # Must be in the same project as the private offer, and must be effective # at the time of publishing. Must be present to publish the offer. # # Format: # projects/\\{project}/locations/\\{location}/services/\\{service}/standardOffers/\\{standard_offer} # @!attribute [r] service_level # @return [::String] # Output only. The service level (also known as the 'plan') of the base # standard offer. The value is populated at publish time from the base # standard offer. # @!attribute [r] reseller_private_offer_plan_id # @return [::String] # Output only. Present for offers created by a reseller from a reseller # private offer plan (RPOP). When set, contains the ID of the originating # RPOP. Not included for `PRIVATE_OFFER_VIEW_BASIC`. # @!attribute [rw] features # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Feature>] # Optional. The custom product features to display for this offer. # Feature `display_name` values must be unique to publish the offer. # The set of features specified here should generally include all features # included in the base service level, with optionally customized values, # but is not required to match exactly and may include additional features. # @!attribute [r] effective_installment_timeline # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Installment>] # Output only. The effective installment timeline of the offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. # Included for `PRIVATE_OFFER_VIEW_FULL` if all necessary information is # available to generate the timeline, and if the offer has # 'standard_interval_price' of 'MONTHLY_PRORATED', 'MONTHLY_NOT_PRORATED', # 'QUARTERLY_NOT_PRORATED', or 'YEARLY_NOT_PRORATED'. # @!attribute [r] contract_value # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::ContractValue] # Output only. Contract value of the offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. # @!attribute [r] revenue_share # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::RevenueShare] # Output only. Revenue share information for this Private Offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. class SingleProductOffer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Additional details used to describe customization of the service level. # # Features are used to distinguish service levels of the same product. # When a product has a single service level, all details can be contained # in the product documentation. When a product has multiple service levels, # each service level can be assigned a distinct set of features to # distinguish the key differences between the service levels. # # In addition to customizing pricing and other transaction details, a # private offer may include customization of partner-managed product # behavior. When this is the case, the details of the custom behavior are # described using features. # @!attribute [rw] display_name # @return [::String] # Optional. Human readable display text characterizing the feature. # Should be sufficiently detailed to identify the feature, allowing # features to be correlated across separate offers and service levels. # Must be non-empty to publish the offer. # The maximum allowed length is 128 characters. # Allows characters from the following Unicode Property Classes: # Letters, Numbers, Punctuation, Symbols, and Separators # @!attribute [rw] value # @return [::String] # Optional. Human readable display text reflecting the value of the # feature. Used for variable features not captured by the display_name # alone. The maximum allowed length is 3000 characters. Allows characters # from the following Unicode Property Classes: Letters, Numbers, # Punctuation, Symbols, and Separators class Feature include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price model of the private offer. # # Private offers are referred to as having different kinds of price models # based on the combination of fields set in the price model. The following # terminology is used in documentation and other reference material. # # * Usage-based: the price model does not set `flat_fee` # * Usage-only: the price model sets only `usage` # * CUD (committed use discount): the price model sets `commitment` # * Commitment discount with additional usage at list price: # The price model sets `commitment` and not `usage`. # * Commitment with all usage discounted: The price model sets # `commitment` and `usage`. # * Flat fee: the price model sets only `flat_fee` # * Flat fee with usage: the price model sets `flat_fee` and `usage` # # See # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-pricing-model#CUD # for the price models. # @!attribute [rw] flat_fee # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::FlatFee] # Optional. The price configurations for the flat fee subscription. # Must be unset when the base standard offer's price model does not # include subscription SKUs. # # Note: The following fields are mutually exclusive: `flat_fee`, `commitment`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] commitment # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Commitment] # Optional. The price configurations for the commitment based # subscription. Must be unset when the base standard offer's price # model includes subscription SKUs. # # Note: The following fields are mutually exclusive: `commitment`, `flat_fee`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] usage # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Usage] # Optional. The price configurations for the usage part. # If this field is set, the `Commitment.discount_percent` must be unset. # A private offer can apply a discount to all usage or to a usage # commitment, but not both. # Must be unset when the base standard offer's price model includes no # usage SKUs. class PriceModel include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # The discount for a specific SKU. # @!attribute [rw] sku # @return [::String] # Optional. The name of a partner SKU from this API. # # Must refer to a SKU in the price model of the base standard offer. # Inclusion in the base price model can occur either directly or # indirectly via inclusion in an included SkuGroup. # # Currently, standard offer price models include only partner SKUs # in the same project as the standard offer. This may change. # # Format: # projects/\\{project}/locations/\\{location}/services/\\{service}/skus/\\{sku} # # Note: The following fields are mutually exclusive: `sku`, `cloud_billing_sku`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] cloud_billing_sku # @return [::String] # Optional. The name of a Google SKU from the Cloud Billing API. # # Used for partner products sold by Google, such as Premium Operating # System Images sold for use in Compute Engine. This is not common. # SKUs of this type are not present on this API and can instead be # found on the Cloud Billing API or at https://cloud.google.com/skus. # # Must refer to a SKU in the price model of the base standard offer. # Google SKUs are always referenced in standard offers via SkuGroups. # # Format: services/\\{service}/skus/\\{sku} # # Note: The following fields are mutually exclusive: `cloud_billing_sku`, `sku`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] discount_percent # @return [::Google::Type::Decimal] # Optional. The discount percent for the SKU. # For example, `10` means a discount of 10%. If the original SKU # price is $100/hour then the discounted price will be $90/hour. # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", # and "". # Must be present to publish the offer. class SkuDiscount include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price for the usage SKUs. # @!attribute [rw] default_discount_percent # @return [::Google::Type::Decimal] # Optional. The default discount percent for usage SKUs. # An unset default discount percent is equivalent to 0 (no discount). # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "". # @!attribute [rw] sku_discounts # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::SkuDiscount>] # Optional. The discounts for the specific SKUs that override the # `default_discount_percent`. class Usage include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price configurations for the flat fee subscriptions. # @!attribute [rw] flat_fee_override # @return [::Google::Type::Money] # Optional. Flat fee overriding the default flat fee in the base # standard offer. Value cannot be negative. The currency must be "USD" # and precision is limited to cents. Must be present to publish the # offer, if the parent message is set. The maximum allowed value is # 1,000,000,000 USD. class FlatFee include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price configurations for the commitment based subscriptions. # @!attribute [rw] commitment_amount # @return [::Google::Type::Money] # Optional. The commitment balance that the customer will receive. # Value cannot be negative. # The currency must be "USD" and precision is limited to cents. # Must be present to publish the offer, if the parent message is set. # The maximum allowed value is 1,000,000,000 USD. # # If the current offer amends a private offer where the term has not # ended, and if the field # `single_product_offer.standard_interval_price.price_model.commitment.commitment_amount` # is set on both the current offer and the amended private offer, then # the commitment amount must be equal or higher on the current offer, # compared to the amended private offer. # @!attribute [rw] discount_percent # @return [::Google::Type::Decimal] # Optional. The discount percent on `commitment_amount`. # # For example, `10` means a discount of 10%. If the original # `commitment_amount` is $100 then the discounted amount will be $90. # The customer is charged $90 and receives $100 in credits. # # All reported usage will be charged at the standard price. # If this field is set, the `price_model.usage` must be unset. A # private offer can apply a discount to all usage or to a usage # commitment, but not both. # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "". # # Must be present to publish the offer. # @!attribute [rw] additional_credit # @return [::Google::Type::Money] # Optional. Additional credit granted to the customer. # Additional credits are only supported for custom interval offers. # Equivalent behavior can be achieved for standard interval offers by # varying the `commitment_amount` and `discount_percent`. # # Value cannot be negative. # The currency must be "USD" and precision is limited to cents. # The maximum allowed value is 1,000,000 USD. # @!attribute [rw] discard_previous_credit_balance # @return [::Boolean] # Optional. Whether to discard the previous credit balance when the # associated installment starts. If not set, the previous credit # balance will be rolled over to the current installment. # # If there are no previous installments, then the value of this field # will not matter - since it has no effect when no credits exist. class Commitment include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end end # Price configurations for offers with standard intervals. # @!attribute [rw] standard_interval # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::StandardIntervalPrice::StandardInterval] # Optional. The standard interval of the offer. # Must be present to publish unless the price model is usage-only. # @!attribute [rw] price_model # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel] # Optional. The price model of the offer. # Must be present to publish the offer. class StandardIntervalPrice include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # The options for offers with standard intervals. module StandardInterval # The private offer does not have an interval. # If this is set, then the offer is "usage-only". # Field `term.duration_months` must be positive. STANDARD_INTERVAL_UNSPECIFIED = 0 # The schedule of the monthly postpay offers. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # No longer supported as of May 2024. Cannot be used to publish # new offers. MONTHLY_POSTPAY = 1 # Monthly installments with proration. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 04/15, and the offer duration is # 3 months, the following installments will be created: # # 1: from 04/15 to 05/01, at the prorated price for April. # # # 2: from 05/01 to 06/01, at the full monthly price for May. # # # 3: from 06/01 to 07/01, at the full monthly price for June. # # # 4: from 07/01 to 07/15, at the prorated price for July. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. MONTHLY_PRORATED = 2 # Monthly installments without proration. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 04/15, and the offer duration is # 3 months, the following installments will be created: # # 1: from 04/15 to 05/15, at the full monthly price. # # # 2: from 05/15 to 06/15, at the full monthly price. # # # 3: from 06/15 to 07/15, at the full monthly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. MONTHLY_NOT_PRORATED = 3 # Quarterly installments which are not prorated. # This type of offer has "Quarterly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 01/15, and the offer duration is # 3 quarters, the following installments will be created: # # 1: from 01/15 to 04/15, at the full quarterly price. # # # 2: from 04/15 to 07/15, at the full quarterly price. # # # 3: from 07/15 to 10/15, at the full quarterly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. QUARTERLY_NOT_PRORATED = 4 # Yearly installments which are not prorated. # This type of offer has "Yearly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 01/15/2025, and the offer # duration is 3 years, the following installments will be created: # # 1: from 01/15/2025 to 01/15/2026, at the full yearly price. # # # 2: from 01/15/2026 to 01/15/2027, at the full yearly price. # # # 3: from 01/15/2027 to 01/15/2028, at the full yearly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. YEARLY_NOT_PRORATED = 5 end end # An installment of the offer. # @!attribute [rw] start_time # @return [::Google::Type::DateTime] # Optional. The start time of the installment. # Each installment must have a unique start time with one exception: # When the `term.start_policy` of the offer's term is `IMMEDIATE`, # the `start_time` of the first installment must be unset. # The actual start time is not recorded in the offer and instead is # determined by the time the resulting order became active. # # When the `term.start_policy` of the offer's term is # `SCHEDULED_START_TIME`, then the first installment's `start_time` must # match `term.scheduled_start_time`. # # If the `term.end_policy` of the offer's term is `SCHEDULED_END_TIME`, # then installment `start_time` must be before `term.scheduled_end_time`. # If it's `AFTER_DURATION`, then installment `start_time` must be before # the time calculated by adding the `term.duration_months` to # the start time of the offer. # # The `start_time` of the installments cannot be before the # `accept_deadline_time` of the offer. # # Installment start times must be in strictly increasing chronological # order. # @!attribute [rw] price_model # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel] # Optional. The price model of the installment. # All installments must have the same form of price model. class Installment include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Price configurations for offers with custom intervals. # @!attribute [rw] installments # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Installment>] # Optional. The installments that make up the installment timeline. # All installments must have the same form of price model (e.g. # all commitment, or all flat fee). A subscription must be present # under the price model for every installment. # # Must contain at least one installment to publish the offer. class CustomIntervalPrice include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The contract value of the offer. # @!attribute [r] total_contract_value # @return [::Google::Type::Money] # Output only. The total contract value of the offer. # This will be set for all non-draft private offers, as long as # 'PRIVATE_OFFER_VIEW_FULL' is requested. For DRAFT private offers, # this will be populated only when the end user's billing account is # set and when the pricing and term configuration is sufficiently # complete to allow for a calculation. class ContractValue include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Revenue Share information for a Private Offer. # For more details about the revenue share, including how the value is # determined, see # https://docs.cloud.google.com/marketplace/docs/partners/revenue-share-scenarios. # # Not included for `PRIVATE_OFFER_VIEW_BASIC`, or for DRAFT private offers. # # For non-draft private offers, these fields are populated based on the # following: # # * Offers published after April 20, 2025 will always have revenue # share fields populated. # * Offers published on or before April 20, 2025 will only have revenue # share fields populated if they were associated with an active, # unexpired order on that date. # @!attribute [r] current_term_vendor_net_revenue_percent # @return [::Google::Type::Decimal] # Output only. The revenue share currently in effect. # # The range of the value is between 0 and 100. For example, 80 # means the Vendor's current term revenue share is 80%. The vendor # will keep 80% of the revenue. # . # @!attribute [r] renewal_term_vendor_net_revenue_percent # @return [::Google::Type::Decimal] # Output only. The expected revenue share for the renewal term. # Not included if the offer does not have renewal terms. # # The range of the value is between 0 and 100. For example, 80 # means the Vendor's current term revenue share is 80%. The vendor # will keep 80% of the revenue after renewal. # . class RevenueShare include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end end # State of an offer. module State # Default value. This value is unused. STATE_UNSPECIFIED = 0 # The default state after creation when the offer can be edited. # In all other states, the contents of the offer cannot be edited. DRAFT = 1 # The offer is publishing. # Publishing will complete when all publishing requirements are satisfied. PUBLISHING = 2 # The offer has been published and is available to the customer to accept. PUBLISHED = 3 # The offer has been accepted by the customer. ACCEPTED = 4 # The offer was cancelled by the provider before it was transacted. # Cancelled offers can no longer be accepted by the customer. CANCELLED = 5 # The offer expired without being accepted by the customer. # Expired offers can no longer be accepted by the customer. EXPIRED = 6 # The offer has ended. # # Ended offers were accepted and active in the past, but have now reached # the end of their term or have been terminated. ENDED = 7 end # The type of the deal transacted with the offer. The deal type of an offer # is a factor in determining the offer's revenue share. module OfferDealType # Default value. This value is unused. OFFER_DEAL_TYPE_UNSPECIFIED = 0 # The offer corresponds to a preexisting commercial arrangement for a # workload on Google Cloud that is being transferred to the Cloud # Marketplace. CHANNEL_SHIFT = 1 # The offer corresponds to a preexisting commercial arrangement for a # workload previously not on Google Cloud that is being transferred to # Google Cloud. MIGRATION = 2 # The offer corresponds to a renewal of a deal initially transacted on # the Google Cloud Marketplace. NATIVE_RENEWAL = 3 # The offer corresponds to a new deal transacted on the Google Cloud # Marketplace. # # This value is not allowed if the offer amends another private offer # where the term has not ended, and the amended private offer has a deal # type of `MIGRATION`, `CHANNEL_SHIFT` or `NATIVE_RENEWAL`. NEW = 4 end end |
#reseller_contact ⇒ ::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::ResellerContact (readonly)
Returns Output only. Information about the reseller contact. Present only for offers created by a reseller.
148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 |
# File 'proto_docs/google/cloud/commerceproducer/v1beta/private_offer.rb', line 148 class PrivateOffer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Information about the Google review process. # @!attribute [r] review_approve_time # @return [::Google::Protobuf::Timestamp] # Output only. The approval time of the Google review process. class PublishRequirementGoogleReview include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Contact information for a reseller. # @!attribute [r] contact # @return [::String] # Output only. The name of the reseller contact for this offer. # @!attribute [r] email # @return [::String] # Output only. The email of the reseller contact for this offer. class ResellerContact include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Contact information for the partner representative. # @!attribute [rw] contact # @return [::String] # Optional. Display text identifying the partner sales contact. # Displayed to the customer. # Must be provided when publishing the offer. # Maximum length: 256 characters. # @!attribute [rw] email # @return [::String] # Optional. The email address of the partner sales contact. # Displayed to the customer. # The format of the provided email address is validated when publishing the # offer, but no verification is performed that the email address actually # exists, accepts email, or is otherwise functional. class PartnerContact include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Information about the customer. # @!attribute [rw] entity_title # @return [::String] # Optional. A string identifying the customer's entity (for example, the # customer's organization or company name). Must be provided when # publishing the offer. Maximum length: 256 characters. # @!attribute [rw] contact # @return [::String] # Optional. A string identifying the customer contact. # Must be provided when publishing the offer. # Maximum length: 256 characters. # @!attribute [rw] email # @return [::String] # Optional. Email of customer contact. # If provided, it must be a well-formed email address. # @!attribute [r] address # @deprecated This field is deprecated and may be removed in the next major version update. # @return [::String] # Output only. Legal address of the customer organization. # This field can no longer be set, but it is preserved to return the # data from existing offers where address is set. # @!attribute [rw] target_billing_account # @return [::String] # Optional. The customer's billing account targeted by the offer. # The private offer once published can be accepted by a billing # administrator of the target billing account. If the customer accepts the # offer and later moves the resulting order to a new billing account, this # field will continue to reflect the original billing account to which the # private offer was extended. Must be provided when publishing the offer. # # To publish this private offer: # # * The billing account must exist. # * The billing account must not be in a free trial. # * The billing account must comply with Marketplace Reselling Policies. # * Reseller parent billing accounts are prohibited. Reseller subaccounts # are prohibited unless the service is enabled for reselling. # # Format: billingAccounts/012345-567890-ABCDEF class Customer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Configurations for the offer term and renewal options. # Extending a private offer to a customer that covers a given term # constitutes a guarantee to the customer that the product will remain # available to them for the duration of the term. # @!attribute [rw] duration_months # @return [::Integer] # Optional. Duration in months of the offer term. # The offer will end on the same day of the month after this duration. If # that date is not available, the offer will end on the last day of the # month. For example, if the offer starts on 01/31/2024 and the duration # is 13 months, the offer will end on 02/28/2025. # Must be set to publish the offer if the end policy is `AFTER_DURATION` # or `MATCH_AMENDED_OFFER`, and must be a positive value. # # The maximum possible offer duration, including all renewal terms, # cannot exceed 7 years. For example, if `duration_months` is 9 and # `term.max_renewal_count` is 9, then the maximum possible offer duration # is 90 months and exceeds the 7 year limit. # # Note: The following fields are mutually exclusive: `duration_months`, `scheduled_end_time`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] scheduled_end_time # @return [::Google::Type::DateTime] # Optional. Specified end time of the offer. # Must be set to publish the offer if the end policy is # `SCHEDULED_END_TIME`. # When set, the time must be in the future and at a day boundary in the # America/Los_Angeles time zone, and must be after # `term.scheduled_start_time` if applicable. # # Note: The following fields are mutually exclusive: `scheduled_end_time`, `duration_months`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] max_renewal_count # @return [::Integer] # Optional. The max number of renewals allowed, after the initial term # ends. This field is only relevant to standard interval offers with # interval of 'MONTHLY_PRORATED', 'MONTHLY_NOT_PRORATED', # 'QUARTERLY_NOT_PRORATED' or 'YEARLY_NOT_PRORATED'. Other types of # offers cannot be renewed. # # For example, if the initial term is 1 year and the max renewals is 3, # the customer can renew the offer for up to 3 additional years after the # initial term ends. Customers control whether they renew the offer. # # Allowing a customer to renew an offer does not constitute a guarantee # to the customer that the offered product will still be available to be # renewed at the renewal date. # # An offer with a max renewal count of 0 cannot be renewed. # Must be non-negative. # # Note: The following fields are mutually exclusive: `max_renewal_count`, `unlimited_renewal`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [r] unlimited_renewal # @deprecated This field is deprecated and may be removed in the next major version update. # @return [::Boolean] # Output only. Deprecated: This field can only be true on existing offers # with standard interval of 'MONTHLY_POSTPAY'. As of May 2024, we no # longer allow unlimited renewals. # # Note: The following fields are mutually exclusive: `unlimited_renewal`, `max_renewal_count`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] start_policy # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::Term::StartPolicy] # Optional. Defines when the resulting order should start. # Must be set when publishing the offer. # @!attribute [rw] scheduled_start_time # @return [::Google::Type::DateTime] # Optional. The scheduled start time of the offer. Cannot exceed one year # from the time of publish. # # If the start policy is `SCHEDULED_START_TIME`, a future time at a day # boundary in the America/Los_Angeles time zone must be provided when # publishing the offer. # # If the offer amends another private or standard offer, then the # scheduled start time must be: # # * Before or equal to the amended offer's end time if the offer's # end policy is not MATCH_AMENDED_OFFER. Otherwise, it has to be # strictly before the amended offer's end time. # * Before or equal to the start time of the next pending installment of # the amended offer, if amending a private offer with custom # installments. For example, if the amended offer has installments on # 01/01, 02/01, 03/01, 04/01, and today is 02/15, then the new offer's # `scheduled_start_time` must be at or before 03/01. # @!attribute [rw] end_policy # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::Term::EndPolicy] # Optional. Defines when an offer should end. # Must be set when publishing the offer. # @!attribute [r] effective_term_end_time # @return [::Google::Type::DateTime] # Output only. The expected end time of the current offer term. # # At the end of each offer term, an offer associated with an active # order will either renew or end. When an offer renews, a new term begins # and this value changes to reflect the end time of the new term. # When an offer ends this value is no longer set and instead `end_time` is # set. # # When the term of an offer ends and the offer does not renew, the # associated order also ends if the base standard offer has a # subscription price model. Otherwise, the associated order does not end # and remains active. # # Not included for PRIVATE_OFFER_VIEW_BASIC. # Included for PRIVATE_OFFER_VIEW_FULL when the offer has not ended and # either the offer has started or the value can be derived from other # fields. # # For offers that have not started, this field is set when one of the # following conditions is true. # # * The offer sets `term.scheduled_end_time`. # * The offer sets `term.scheduled_start_time` and `term.duration_months`, # the offer's `term.end_policy` is not `MATCH_AMENDED_OFFER`, and the # offer does not have standard_interval set to `MONTHLY_POSTPAY`. class Term include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Defines when an offer should start. module StartPolicy # Default value. This value is unused. START_POLICY_UNSPECIFIED = 0 # The resulting order starts immediately upon the customer's acceptance # of the offer, if no partner approval is required, or else immediately # after the partner approves the purchase if order approval is required. # This enum value cannot be combined with `term.scheduled_start_time`. IMMEDIATE = 1 # The resulting order starts at the scheduled start time. SCHEDULED_START_TIME = 2 end # Defines when an offer should end. module EndPolicy # Default value. This value is unused. END_POLICY_UNSPECIFIED = 0 # Offer ends after the specified duration. # If this is set, then `duration_months` must be positive. AFTER_DURATION = 1 # Offer ends at the schduled time. SCHEDULED_END_TIME = 2 # Offer coterms to the amended offer - the offer ends at the end of the # amended offer's term # # For example, if the amended offer starts on 01/15/24, and has a # duration of 6 months, then it ends on 07/15/24. If the current offer # coterms to the previous offer, and the current offer starts on # 05/06/24, then it will still end on 07/15/24. Assuming the current # offer renews 3 times, then the terms on the current offer will be: # # 1. 05/06/24 - 07/15/24 (First term, ends on 07/15 to coterm with the # amended offer) # 2. 07/15/24 - 01/15/25 (First renewal term) # 3. 01/15/25 - 07/15/25 (Second renewal term) # 4. 07/15/25 - 01/15/26 (Third renewal term) # # As a contrast, if the current offer does not coterm with the amended # offer (such as when `end_policy` is `AFTER_DURATION`), then the # terms will be: # # 1. 05/06/24 - 11/06/24 (First term, ends on 11/06, no coterming) # 2. 11/06/24 - 05/06/25 (First renewal term) # 3. 05/06/25 - 11/06/25 (Second renewal term) # 4. 11/06/25 - 05/06/26 (Third renewal term) # # If this is set, then the following conditions must be met: # # * `single_product_offer.amended_private_offer` must be set, and the # amended private offer must not be ended. # * The proration policy must not change (e.g., you cannot switch # between `MONTHLY_PRORATED` and `MONTHLY_NOT_PRORATED`). # * The current offer must not have custom intervals (where # `custom_interval_price` is set). # * `term.duration_months` must match the amended private offer's # duration. # * The amended private offer must not have a standard interval # of `MONTHLY_POSTPAY`. # # This is currently not supported. MATCH_AMENDED_OFFER = 3 end end # Configurations for the offer that is associated with a single product. # @!attribute [rw] amended_private_offer # @return [::String] # Optional. An existing private offer that will be superseded by this # offer. Unless the private offer is for a product type that supports # [multiple active # orders](https://cloud.google.com/marketplace/docs/partners/offers/multiple-offers), # an amendment private offer must be transacted if and only if the # destination customer billing account already contains an active order # for the same product. The offer to be superseded must be the offer # associated with an active order. # # Amendments generally fall into one of two scenarios: # # 1. **Active Order / Ended Offer**: The term of the amended offer has # ended but it is still associated with an active order. The new # offer must amend the ended private offer. # 2. **Active Order / Active Offer**: The term of the amended offer is # still active and the associated order is active. Similar to above, # the new offer must amend the currently active offer (unless # "multiple active orders" are supported). # # If this is set, then the `base_standard_offer` parent service must # match the parent service of the `base_standard_offer` in the # `amended_private_offer`. # # **Active Term Restrictions**: # If the term of the amended private offer has *NOT* ended, then the # following compatibility rules apply: # # * **Price Model Compatibility**: # * Flat Fee (with or without usage) offers can amend Flat Fee # offers. # * Usage-only or CUD offers can amend usage-only offers. # * Commitment-based offers must amend offers of the same price # model subtype (e.g., "additional usage at list price" vs "all # usage discounted"). # * **Billing Frequency Compatibility**: Determined by # `standard_interval` or `custom_interval_price`. # * If the amended offer has a custom billing frequency, the new # offer must also have a custom frequency. # * If the amended offer has a standard frequency (Monthly, # Quarterly, or Yearly), the new offer must maintain the same # frequency or transition to a custom frequency. # * Switching between different standard frequencies (e.g., Monthly # to Quarterly) is not supported. # * For Monthly frequency, switching between `MONTHLY_PRORATED` # and `MONTHLY_NOT_PRORATED` is supported, unless the offer's # `term.end_policy` is `MATCH_AMENDED_OFFER`. # * For usage-only offers, there are no billing frequency # restrictions. # # Other criteria for offer amendment are detailed elsewhere. # # Note: The following fields are mutually exclusive: `amended_private_offer`, `amended_standard_offer`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] amended_standard_offer # @return [::String] # Optional. An existing standard offer that will be superseded by this # offer. An amendment private offer must be transacted if the destination # customer billing account already contains an active order for the same # product, and otherwise cannot be transacted. The offer to be superseded # must be the offer associated with the active order. # # If this is set, then the `base_standard_offer` must contain the same # parent service as the parent service of the `amended_standard_offer`. # The price model of this offer must be compatible with the price model # of the `amended_standard_offer`: # # * Flat Fee, or Flat Fee with usage offers can amend Flat Fee or Flat # Fee with usage standard offers. # * Usage-only offers, or CUD offers can amend usage-only standard # offers. # # Other criteria for offer amendment are detailed elsewhere. # # Note: The following fields are mutually exclusive: `amended_standard_offer`, `amended_private_offer`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] standard_interval_price # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::StandardIntervalPrice] # Optional. Price configurations for offers with standard intervals. # A price must be set when publishing the offer. # # Note: The following fields are mutually exclusive: `standard_interval_price`, `custom_interval_price`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] custom_interval_price # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::CustomIntervalPrice] # Optional. Price configurations for offers with custom intervals. # Custom interval corresponds to "custom billing frequency", # see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule. # A price must be set when publishing the offer. # # Note: The following fields are mutually exclusive: `custom_interval_price`, `standard_interval_price`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] base_standard_offer # @return [::String] # Optional. The StandardOffer this PrivateOffer is based on. # Must be in the same project as the private offer, and must be effective # at the time of publishing. Must be present to publish the offer. # # Format: # projects/\\{project}/locations/\\{location}/services/\\{service}/standardOffers/\\{standard_offer} # @!attribute [r] service_level # @return [::String] # Output only. The service level (also known as the 'plan') of the base # standard offer. The value is populated at publish time from the base # standard offer. # @!attribute [r] reseller_private_offer_plan_id # @return [::String] # Output only. Present for offers created by a reseller from a reseller # private offer plan (RPOP). When set, contains the ID of the originating # RPOP. Not included for `PRIVATE_OFFER_VIEW_BASIC`. # @!attribute [rw] features # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Feature>] # Optional. The custom product features to display for this offer. # Feature `display_name` values must be unique to publish the offer. # The set of features specified here should generally include all features # included in the base service level, with optionally customized values, # but is not required to match exactly and may include additional features. # @!attribute [r] effective_installment_timeline # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Installment>] # Output only. The effective installment timeline of the offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. # Included for `PRIVATE_OFFER_VIEW_FULL` if all necessary information is # available to generate the timeline, and if the offer has # 'standard_interval_price' of 'MONTHLY_PRORATED', 'MONTHLY_NOT_PRORATED', # 'QUARTERLY_NOT_PRORATED', or 'YEARLY_NOT_PRORATED'. # @!attribute [r] contract_value # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::ContractValue] # Output only. Contract value of the offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. # @!attribute [r] revenue_share # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::RevenueShare] # Output only. Revenue share information for this Private Offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. class SingleProductOffer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Additional details used to describe customization of the service level. # # Features are used to distinguish service levels of the same product. # When a product has a single service level, all details can be contained # in the product documentation. When a product has multiple service levels, # each service level can be assigned a distinct set of features to # distinguish the key differences between the service levels. # # In addition to customizing pricing and other transaction details, a # private offer may include customization of partner-managed product # behavior. When this is the case, the details of the custom behavior are # described using features. # @!attribute [rw] display_name # @return [::String] # Optional. Human readable display text characterizing the feature. # Should be sufficiently detailed to identify the feature, allowing # features to be correlated across separate offers and service levels. # Must be non-empty to publish the offer. # The maximum allowed length is 128 characters. # Allows characters from the following Unicode Property Classes: # Letters, Numbers, Punctuation, Symbols, and Separators # @!attribute [rw] value # @return [::String] # Optional. Human readable display text reflecting the value of the # feature. Used for variable features not captured by the display_name # alone. The maximum allowed length is 3000 characters. Allows characters # from the following Unicode Property Classes: Letters, Numbers, # Punctuation, Symbols, and Separators class Feature include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price model of the private offer. # # Private offers are referred to as having different kinds of price models # based on the combination of fields set in the price model. The following # terminology is used in documentation and other reference material. # # * Usage-based: the price model does not set `flat_fee` # * Usage-only: the price model sets only `usage` # * CUD (committed use discount): the price model sets `commitment` # * Commitment discount with additional usage at list price: # The price model sets `commitment` and not `usage`. # * Commitment with all usage discounted: The price model sets # `commitment` and `usage`. # * Flat fee: the price model sets only `flat_fee` # * Flat fee with usage: the price model sets `flat_fee` and `usage` # # See # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-pricing-model#CUD # for the price models. # @!attribute [rw] flat_fee # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::FlatFee] # Optional. The price configurations for the flat fee subscription. # Must be unset when the base standard offer's price model does not # include subscription SKUs. # # Note: The following fields are mutually exclusive: `flat_fee`, `commitment`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] commitment # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Commitment] # Optional. The price configurations for the commitment based # subscription. Must be unset when the base standard offer's price # model includes subscription SKUs. # # Note: The following fields are mutually exclusive: `commitment`, `flat_fee`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] usage # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Usage] # Optional. The price configurations for the usage part. # If this field is set, the `Commitment.discount_percent` must be unset. # A private offer can apply a discount to all usage or to a usage # commitment, but not both. # Must be unset when the base standard offer's price model includes no # usage SKUs. class PriceModel include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # The discount for a specific SKU. # @!attribute [rw] sku # @return [::String] # Optional. The name of a partner SKU from this API. # # Must refer to a SKU in the price model of the base standard offer. # Inclusion in the base price model can occur either directly or # indirectly via inclusion in an included SkuGroup. # # Currently, standard offer price models include only partner SKUs # in the same project as the standard offer. This may change. # # Format: # projects/\\{project}/locations/\\{location}/services/\\{service}/skus/\\{sku} # # Note: The following fields are mutually exclusive: `sku`, `cloud_billing_sku`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] cloud_billing_sku # @return [::String] # Optional. The name of a Google SKU from the Cloud Billing API. # # Used for partner products sold by Google, such as Premium Operating # System Images sold for use in Compute Engine. This is not common. # SKUs of this type are not present on this API and can instead be # found on the Cloud Billing API or at https://cloud.google.com/skus. # # Must refer to a SKU in the price model of the base standard offer. # Google SKUs are always referenced in standard offers via SkuGroups. # # Format: services/\\{service}/skus/\\{sku} # # Note: The following fields are mutually exclusive: `cloud_billing_sku`, `sku`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] discount_percent # @return [::Google::Type::Decimal] # Optional. The discount percent for the SKU. # For example, `10` means a discount of 10%. If the original SKU # price is $100/hour then the discounted price will be $90/hour. # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", # and "". # Must be present to publish the offer. class SkuDiscount include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price for the usage SKUs. # @!attribute [rw] default_discount_percent # @return [::Google::Type::Decimal] # Optional. The default discount percent for usage SKUs. # An unset default discount percent is equivalent to 0 (no discount). # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "". # @!attribute [rw] sku_discounts # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::SkuDiscount>] # Optional. The discounts for the specific SKUs that override the # `default_discount_percent`. class Usage include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price configurations for the flat fee subscriptions. # @!attribute [rw] flat_fee_override # @return [::Google::Type::Money] # Optional. Flat fee overriding the default flat fee in the base # standard offer. Value cannot be negative. The currency must be "USD" # and precision is limited to cents. Must be present to publish the # offer, if the parent message is set. The maximum allowed value is # 1,000,000,000 USD. class FlatFee include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price configurations for the commitment based subscriptions. # @!attribute [rw] commitment_amount # @return [::Google::Type::Money] # Optional. The commitment balance that the customer will receive. # Value cannot be negative. # The currency must be "USD" and precision is limited to cents. # Must be present to publish the offer, if the parent message is set. # The maximum allowed value is 1,000,000,000 USD. # # If the current offer amends a private offer where the term has not # ended, and if the field # `single_product_offer.standard_interval_price.price_model.commitment.commitment_amount` # is set on both the current offer and the amended private offer, then # the commitment amount must be equal or higher on the current offer, # compared to the amended private offer. # @!attribute [rw] discount_percent # @return [::Google::Type::Decimal] # Optional. The discount percent on `commitment_amount`. # # For example, `10` means a discount of 10%. If the original # `commitment_amount` is $100 then the discounted amount will be $90. # The customer is charged $90 and receives $100 in credits. # # All reported usage will be charged at the standard price. # If this field is set, the `price_model.usage` must be unset. A # private offer can apply a discount to all usage or to a usage # commitment, but not both. # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "". # # Must be present to publish the offer. # @!attribute [rw] additional_credit # @return [::Google::Type::Money] # Optional. Additional credit granted to the customer. # Additional credits are only supported for custom interval offers. # Equivalent behavior can be achieved for standard interval offers by # varying the `commitment_amount` and `discount_percent`. # # Value cannot be negative. # The currency must be "USD" and precision is limited to cents. # The maximum allowed value is 1,000,000 USD. # @!attribute [rw] discard_previous_credit_balance # @return [::Boolean] # Optional. Whether to discard the previous credit balance when the # associated installment starts. If not set, the previous credit # balance will be rolled over to the current installment. # # If there are no previous installments, then the value of this field # will not matter - since it has no effect when no credits exist. class Commitment include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end end # Price configurations for offers with standard intervals. # @!attribute [rw] standard_interval # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::StandardIntervalPrice::StandardInterval] # Optional. The standard interval of the offer. # Must be present to publish unless the price model is usage-only. # @!attribute [rw] price_model # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel] # Optional. The price model of the offer. # Must be present to publish the offer. class StandardIntervalPrice include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # The options for offers with standard intervals. module StandardInterval # The private offer does not have an interval. # If this is set, then the offer is "usage-only". # Field `term.duration_months` must be positive. STANDARD_INTERVAL_UNSPECIFIED = 0 # The schedule of the monthly postpay offers. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # No longer supported as of May 2024. Cannot be used to publish # new offers. MONTHLY_POSTPAY = 1 # Monthly installments with proration. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 04/15, and the offer duration is # 3 months, the following installments will be created: # # 1: from 04/15 to 05/01, at the prorated price for April. # # # 2: from 05/01 to 06/01, at the full monthly price for May. # # # 3: from 06/01 to 07/01, at the full monthly price for June. # # # 4: from 07/01 to 07/15, at the prorated price for July. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. MONTHLY_PRORATED = 2 # Monthly installments without proration. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 04/15, and the offer duration is # 3 months, the following installments will be created: # # 1: from 04/15 to 05/15, at the full monthly price. # # # 2: from 05/15 to 06/15, at the full monthly price. # # # 3: from 06/15 to 07/15, at the full monthly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. MONTHLY_NOT_PRORATED = 3 # Quarterly installments which are not prorated. # This type of offer has "Quarterly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 01/15, and the offer duration is # 3 quarters, the following installments will be created: # # 1: from 01/15 to 04/15, at the full quarterly price. # # # 2: from 04/15 to 07/15, at the full quarterly price. # # # 3: from 07/15 to 10/15, at the full quarterly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. QUARTERLY_NOT_PRORATED = 4 # Yearly installments which are not prorated. # This type of offer has "Yearly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 01/15/2025, and the offer # duration is 3 years, the following installments will be created: # # 1: from 01/15/2025 to 01/15/2026, at the full yearly price. # # # 2: from 01/15/2026 to 01/15/2027, at the full yearly price. # # # 3: from 01/15/2027 to 01/15/2028, at the full yearly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. YEARLY_NOT_PRORATED = 5 end end # An installment of the offer. # @!attribute [rw] start_time # @return [::Google::Type::DateTime] # Optional. The start time of the installment. # Each installment must have a unique start time with one exception: # When the `term.start_policy` of the offer's term is `IMMEDIATE`, # the `start_time` of the first installment must be unset. # The actual start time is not recorded in the offer and instead is # determined by the time the resulting order became active. # # When the `term.start_policy` of the offer's term is # `SCHEDULED_START_TIME`, then the first installment's `start_time` must # match `term.scheduled_start_time`. # # If the `term.end_policy` of the offer's term is `SCHEDULED_END_TIME`, # then installment `start_time` must be before `term.scheduled_end_time`. # If it's `AFTER_DURATION`, then installment `start_time` must be before # the time calculated by adding the `term.duration_months` to # the start time of the offer. # # The `start_time` of the installments cannot be before the # `accept_deadline_time` of the offer. # # Installment start times must be in strictly increasing chronological # order. # @!attribute [rw] price_model # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel] # Optional. The price model of the installment. # All installments must have the same form of price model. class Installment include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Price configurations for offers with custom intervals. # @!attribute [rw] installments # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Installment>] # Optional. The installments that make up the installment timeline. # All installments must have the same form of price model (e.g. # all commitment, or all flat fee). A subscription must be present # under the price model for every installment. # # Must contain at least one installment to publish the offer. class CustomIntervalPrice include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The contract value of the offer. # @!attribute [r] total_contract_value # @return [::Google::Type::Money] # Output only. The total contract value of the offer. # This will be set for all non-draft private offers, as long as # 'PRIVATE_OFFER_VIEW_FULL' is requested. For DRAFT private offers, # this will be populated only when the end user's billing account is # set and when the pricing and term configuration is sufficiently # complete to allow for a calculation. class ContractValue include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Revenue Share information for a Private Offer. # For more details about the revenue share, including how the value is # determined, see # https://docs.cloud.google.com/marketplace/docs/partners/revenue-share-scenarios. # # Not included for `PRIVATE_OFFER_VIEW_BASIC`, or for DRAFT private offers. # # For non-draft private offers, these fields are populated based on the # following: # # * Offers published after April 20, 2025 will always have revenue # share fields populated. # * Offers published on or before April 20, 2025 will only have revenue # share fields populated if they were associated with an active, # unexpired order on that date. # @!attribute [r] current_term_vendor_net_revenue_percent # @return [::Google::Type::Decimal] # Output only. The revenue share currently in effect. # # The range of the value is between 0 and 100. For example, 80 # means the Vendor's current term revenue share is 80%. The vendor # will keep 80% of the revenue. # . # @!attribute [r] renewal_term_vendor_net_revenue_percent # @return [::Google::Type::Decimal] # Output only. The expected revenue share for the renewal term. # Not included if the offer does not have renewal terms. # # The range of the value is between 0 and 100. For example, 80 # means the Vendor's current term revenue share is 80%. The vendor # will keep 80% of the revenue after renewal. # . class RevenueShare include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end end # State of an offer. module State # Default value. This value is unused. STATE_UNSPECIFIED = 0 # The default state after creation when the offer can be edited. # In all other states, the contents of the offer cannot be edited. DRAFT = 1 # The offer is publishing. # Publishing will complete when all publishing requirements are satisfied. PUBLISHING = 2 # The offer has been published and is available to the customer to accept. PUBLISHED = 3 # The offer has been accepted by the customer. ACCEPTED = 4 # The offer was cancelled by the provider before it was transacted. # Cancelled offers can no longer be accepted by the customer. CANCELLED = 5 # The offer expired without being accepted by the customer. # Expired offers can no longer be accepted by the customer. EXPIRED = 6 # The offer has ended. # # Ended offers were accepted and active in the past, but have now reached # the end of their term or have been terminated. ENDED = 7 end # The type of the deal transacted with the offer. The deal type of an offer # is a factor in determining the offer's revenue share. module OfferDealType # Default value. This value is unused. OFFER_DEAL_TYPE_UNSPECIFIED = 0 # The offer corresponds to a preexisting commercial arrangement for a # workload on Google Cloud that is being transferred to the Cloud # Marketplace. CHANNEL_SHIFT = 1 # The offer corresponds to a preexisting commercial arrangement for a # workload previously not on Google Cloud that is being transferred to # Google Cloud. MIGRATION = 2 # The offer corresponds to a renewal of a deal initially transacted on # the Google Cloud Marketplace. NATIVE_RENEWAL = 3 # The offer corresponds to a new deal transacted on the Google Cloud # Marketplace. # # This value is not allowed if the offer amends another private offer # where the term has not ended, and the amended private offer has a deal # type of `MIGRATION`, `CHANNEL_SHIFT` or `NATIVE_RENEWAL`. NEW = 4 end end |
#single_product_offer ⇒ ::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer
Returns Optional. Configurations for the offer that is associated with a single product.
148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 |
# File 'proto_docs/google/cloud/commerceproducer/v1beta/private_offer.rb', line 148 class PrivateOffer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Information about the Google review process. # @!attribute [r] review_approve_time # @return [::Google::Protobuf::Timestamp] # Output only. The approval time of the Google review process. class PublishRequirementGoogleReview include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Contact information for a reseller. # @!attribute [r] contact # @return [::String] # Output only. The name of the reseller contact for this offer. # @!attribute [r] email # @return [::String] # Output only. The email of the reseller contact for this offer. class ResellerContact include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Contact information for the partner representative. # @!attribute [rw] contact # @return [::String] # Optional. Display text identifying the partner sales contact. # Displayed to the customer. # Must be provided when publishing the offer. # Maximum length: 256 characters. # @!attribute [rw] email # @return [::String] # Optional. The email address of the partner sales contact. # Displayed to the customer. # The format of the provided email address is validated when publishing the # offer, but no verification is performed that the email address actually # exists, accepts email, or is otherwise functional. class PartnerContact include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Information about the customer. # @!attribute [rw] entity_title # @return [::String] # Optional. A string identifying the customer's entity (for example, the # customer's organization or company name). Must be provided when # publishing the offer. Maximum length: 256 characters. # @!attribute [rw] contact # @return [::String] # Optional. A string identifying the customer contact. # Must be provided when publishing the offer. # Maximum length: 256 characters. # @!attribute [rw] email # @return [::String] # Optional. Email of customer contact. # If provided, it must be a well-formed email address. # @!attribute [r] address # @deprecated This field is deprecated and may be removed in the next major version update. # @return [::String] # Output only. Legal address of the customer organization. # This field can no longer be set, but it is preserved to return the # data from existing offers where address is set. # @!attribute [rw] target_billing_account # @return [::String] # Optional. The customer's billing account targeted by the offer. # The private offer once published can be accepted by a billing # administrator of the target billing account. If the customer accepts the # offer and later moves the resulting order to a new billing account, this # field will continue to reflect the original billing account to which the # private offer was extended. Must be provided when publishing the offer. # # To publish this private offer: # # * The billing account must exist. # * The billing account must not be in a free trial. # * The billing account must comply with Marketplace Reselling Policies. # * Reseller parent billing accounts are prohibited. Reseller subaccounts # are prohibited unless the service is enabled for reselling. # # Format: billingAccounts/012345-567890-ABCDEF class Customer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Configurations for the offer term and renewal options. # Extending a private offer to a customer that covers a given term # constitutes a guarantee to the customer that the product will remain # available to them for the duration of the term. # @!attribute [rw] duration_months # @return [::Integer] # Optional. Duration in months of the offer term. # The offer will end on the same day of the month after this duration. If # that date is not available, the offer will end on the last day of the # month. For example, if the offer starts on 01/31/2024 and the duration # is 13 months, the offer will end on 02/28/2025. # Must be set to publish the offer if the end policy is `AFTER_DURATION` # or `MATCH_AMENDED_OFFER`, and must be a positive value. # # The maximum possible offer duration, including all renewal terms, # cannot exceed 7 years. For example, if `duration_months` is 9 and # `term.max_renewal_count` is 9, then the maximum possible offer duration # is 90 months and exceeds the 7 year limit. # # Note: The following fields are mutually exclusive: `duration_months`, `scheduled_end_time`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] scheduled_end_time # @return [::Google::Type::DateTime] # Optional. Specified end time of the offer. # Must be set to publish the offer if the end policy is # `SCHEDULED_END_TIME`. # When set, the time must be in the future and at a day boundary in the # America/Los_Angeles time zone, and must be after # `term.scheduled_start_time` if applicable. # # Note: The following fields are mutually exclusive: `scheduled_end_time`, `duration_months`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] max_renewal_count # @return [::Integer] # Optional. The max number of renewals allowed, after the initial term # ends. This field is only relevant to standard interval offers with # interval of 'MONTHLY_PRORATED', 'MONTHLY_NOT_PRORATED', # 'QUARTERLY_NOT_PRORATED' or 'YEARLY_NOT_PRORATED'. Other types of # offers cannot be renewed. # # For example, if the initial term is 1 year and the max renewals is 3, # the customer can renew the offer for up to 3 additional years after the # initial term ends. Customers control whether they renew the offer. # # Allowing a customer to renew an offer does not constitute a guarantee # to the customer that the offered product will still be available to be # renewed at the renewal date. # # An offer with a max renewal count of 0 cannot be renewed. # Must be non-negative. # # Note: The following fields are mutually exclusive: `max_renewal_count`, `unlimited_renewal`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [r] unlimited_renewal # @deprecated This field is deprecated and may be removed in the next major version update. # @return [::Boolean] # Output only. Deprecated: This field can only be true on existing offers # with standard interval of 'MONTHLY_POSTPAY'. As of May 2024, we no # longer allow unlimited renewals. # # Note: The following fields are mutually exclusive: `unlimited_renewal`, `max_renewal_count`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] start_policy # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::Term::StartPolicy] # Optional. Defines when the resulting order should start. # Must be set when publishing the offer. # @!attribute [rw] scheduled_start_time # @return [::Google::Type::DateTime] # Optional. The scheduled start time of the offer. Cannot exceed one year # from the time of publish. # # If the start policy is `SCHEDULED_START_TIME`, a future time at a day # boundary in the America/Los_Angeles time zone must be provided when # publishing the offer. # # If the offer amends another private or standard offer, then the # scheduled start time must be: # # * Before or equal to the amended offer's end time if the offer's # end policy is not MATCH_AMENDED_OFFER. Otherwise, it has to be # strictly before the amended offer's end time. # * Before or equal to the start time of the next pending installment of # the amended offer, if amending a private offer with custom # installments. For example, if the amended offer has installments on # 01/01, 02/01, 03/01, 04/01, and today is 02/15, then the new offer's # `scheduled_start_time` must be at or before 03/01. # @!attribute [rw] end_policy # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::Term::EndPolicy] # Optional. Defines when an offer should end. # Must be set when publishing the offer. # @!attribute [r] effective_term_end_time # @return [::Google::Type::DateTime] # Output only. The expected end time of the current offer term. # # At the end of each offer term, an offer associated with an active # order will either renew or end. When an offer renews, a new term begins # and this value changes to reflect the end time of the new term. # When an offer ends this value is no longer set and instead `end_time` is # set. # # When the term of an offer ends and the offer does not renew, the # associated order also ends if the base standard offer has a # subscription price model. Otherwise, the associated order does not end # and remains active. # # Not included for PRIVATE_OFFER_VIEW_BASIC. # Included for PRIVATE_OFFER_VIEW_FULL when the offer has not ended and # either the offer has started or the value can be derived from other # fields. # # For offers that have not started, this field is set when one of the # following conditions is true. # # * The offer sets `term.scheduled_end_time`. # * The offer sets `term.scheduled_start_time` and `term.duration_months`, # the offer's `term.end_policy` is not `MATCH_AMENDED_OFFER`, and the # offer does not have standard_interval set to `MONTHLY_POSTPAY`. class Term include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Defines when an offer should start. module StartPolicy # Default value. This value is unused. START_POLICY_UNSPECIFIED = 0 # The resulting order starts immediately upon the customer's acceptance # of the offer, if no partner approval is required, or else immediately # after the partner approves the purchase if order approval is required. # This enum value cannot be combined with `term.scheduled_start_time`. IMMEDIATE = 1 # The resulting order starts at the scheduled start time. SCHEDULED_START_TIME = 2 end # Defines when an offer should end. module EndPolicy # Default value. This value is unused. END_POLICY_UNSPECIFIED = 0 # Offer ends after the specified duration. # If this is set, then `duration_months` must be positive. AFTER_DURATION = 1 # Offer ends at the schduled time. SCHEDULED_END_TIME = 2 # Offer coterms to the amended offer - the offer ends at the end of the # amended offer's term # # For example, if the amended offer starts on 01/15/24, and has a # duration of 6 months, then it ends on 07/15/24. If the current offer # coterms to the previous offer, and the current offer starts on # 05/06/24, then it will still end on 07/15/24. Assuming the current # offer renews 3 times, then the terms on the current offer will be: # # 1. 05/06/24 - 07/15/24 (First term, ends on 07/15 to coterm with the # amended offer) # 2. 07/15/24 - 01/15/25 (First renewal term) # 3. 01/15/25 - 07/15/25 (Second renewal term) # 4. 07/15/25 - 01/15/26 (Third renewal term) # # As a contrast, if the current offer does not coterm with the amended # offer (such as when `end_policy` is `AFTER_DURATION`), then the # terms will be: # # 1. 05/06/24 - 11/06/24 (First term, ends on 11/06, no coterming) # 2. 11/06/24 - 05/06/25 (First renewal term) # 3. 05/06/25 - 11/06/25 (Second renewal term) # 4. 11/06/25 - 05/06/26 (Third renewal term) # # If this is set, then the following conditions must be met: # # * `single_product_offer.amended_private_offer` must be set, and the # amended private offer must not be ended. # * The proration policy must not change (e.g., you cannot switch # between `MONTHLY_PRORATED` and `MONTHLY_NOT_PRORATED`). # * The current offer must not have custom intervals (where # `custom_interval_price` is set). # * `term.duration_months` must match the amended private offer's # duration. # * The amended private offer must not have a standard interval # of `MONTHLY_POSTPAY`. # # This is currently not supported. MATCH_AMENDED_OFFER = 3 end end # Configurations for the offer that is associated with a single product. # @!attribute [rw] amended_private_offer # @return [::String] # Optional. An existing private offer that will be superseded by this # offer. Unless the private offer is for a product type that supports # [multiple active # orders](https://cloud.google.com/marketplace/docs/partners/offers/multiple-offers), # an amendment private offer must be transacted if and only if the # destination customer billing account already contains an active order # for the same product. The offer to be superseded must be the offer # associated with an active order. # # Amendments generally fall into one of two scenarios: # # 1. **Active Order / Ended Offer**: The term of the amended offer has # ended but it is still associated with an active order. The new # offer must amend the ended private offer. # 2. **Active Order / Active Offer**: The term of the amended offer is # still active and the associated order is active. Similar to above, # the new offer must amend the currently active offer (unless # "multiple active orders" are supported). # # If this is set, then the `base_standard_offer` parent service must # match the parent service of the `base_standard_offer` in the # `amended_private_offer`. # # **Active Term Restrictions**: # If the term of the amended private offer has *NOT* ended, then the # following compatibility rules apply: # # * **Price Model Compatibility**: # * Flat Fee (with or without usage) offers can amend Flat Fee # offers. # * Usage-only or CUD offers can amend usage-only offers. # * Commitment-based offers must amend offers of the same price # model subtype (e.g., "additional usage at list price" vs "all # usage discounted"). # * **Billing Frequency Compatibility**: Determined by # `standard_interval` or `custom_interval_price`. # * If the amended offer has a custom billing frequency, the new # offer must also have a custom frequency. # * If the amended offer has a standard frequency (Monthly, # Quarterly, or Yearly), the new offer must maintain the same # frequency or transition to a custom frequency. # * Switching between different standard frequencies (e.g., Monthly # to Quarterly) is not supported. # * For Monthly frequency, switching between `MONTHLY_PRORATED` # and `MONTHLY_NOT_PRORATED` is supported, unless the offer's # `term.end_policy` is `MATCH_AMENDED_OFFER`. # * For usage-only offers, there are no billing frequency # restrictions. # # Other criteria for offer amendment are detailed elsewhere. # # Note: The following fields are mutually exclusive: `amended_private_offer`, `amended_standard_offer`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] amended_standard_offer # @return [::String] # Optional. An existing standard offer that will be superseded by this # offer. An amendment private offer must be transacted if the destination # customer billing account already contains an active order for the same # product, and otherwise cannot be transacted. The offer to be superseded # must be the offer associated with the active order. # # If this is set, then the `base_standard_offer` must contain the same # parent service as the parent service of the `amended_standard_offer`. # The price model of this offer must be compatible with the price model # of the `amended_standard_offer`: # # * Flat Fee, or Flat Fee with usage offers can amend Flat Fee or Flat # Fee with usage standard offers. # * Usage-only offers, or CUD offers can amend usage-only standard # offers. # # Other criteria for offer amendment are detailed elsewhere. # # Note: The following fields are mutually exclusive: `amended_standard_offer`, `amended_private_offer`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] standard_interval_price # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::StandardIntervalPrice] # Optional. Price configurations for offers with standard intervals. # A price must be set when publishing the offer. # # Note: The following fields are mutually exclusive: `standard_interval_price`, `custom_interval_price`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] custom_interval_price # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::CustomIntervalPrice] # Optional. Price configurations for offers with custom intervals. # Custom interval corresponds to "custom billing frequency", # see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule. # A price must be set when publishing the offer. # # Note: The following fields are mutually exclusive: `custom_interval_price`, `standard_interval_price`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] base_standard_offer # @return [::String] # Optional. The StandardOffer this PrivateOffer is based on. # Must be in the same project as the private offer, and must be effective # at the time of publishing. Must be present to publish the offer. # # Format: # projects/\\{project}/locations/\\{location}/services/\\{service}/standardOffers/\\{standard_offer} # @!attribute [r] service_level # @return [::String] # Output only. The service level (also known as the 'plan') of the base # standard offer. The value is populated at publish time from the base # standard offer. # @!attribute [r] reseller_private_offer_plan_id # @return [::String] # Output only. Present for offers created by a reseller from a reseller # private offer plan (RPOP). When set, contains the ID of the originating # RPOP. Not included for `PRIVATE_OFFER_VIEW_BASIC`. # @!attribute [rw] features # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Feature>] # Optional. The custom product features to display for this offer. # Feature `display_name` values must be unique to publish the offer. # The set of features specified here should generally include all features # included in the base service level, with optionally customized values, # but is not required to match exactly and may include additional features. # @!attribute [r] effective_installment_timeline # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Installment>] # Output only. The effective installment timeline of the offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. # Included for `PRIVATE_OFFER_VIEW_FULL` if all necessary information is # available to generate the timeline, and if the offer has # 'standard_interval_price' of 'MONTHLY_PRORATED', 'MONTHLY_NOT_PRORATED', # 'QUARTERLY_NOT_PRORATED', or 'YEARLY_NOT_PRORATED'. # @!attribute [r] contract_value # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::ContractValue] # Output only. Contract value of the offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. # @!attribute [r] revenue_share # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::RevenueShare] # Output only. Revenue share information for this Private Offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. class SingleProductOffer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Additional details used to describe customization of the service level. # # Features are used to distinguish service levels of the same product. # When a product has a single service level, all details can be contained # in the product documentation. When a product has multiple service levels, # each service level can be assigned a distinct set of features to # distinguish the key differences between the service levels. # # In addition to customizing pricing and other transaction details, a # private offer may include customization of partner-managed product # behavior. When this is the case, the details of the custom behavior are # described using features. # @!attribute [rw] display_name # @return [::String] # Optional. Human readable display text characterizing the feature. # Should be sufficiently detailed to identify the feature, allowing # features to be correlated across separate offers and service levels. # Must be non-empty to publish the offer. # The maximum allowed length is 128 characters. # Allows characters from the following Unicode Property Classes: # Letters, Numbers, Punctuation, Symbols, and Separators # @!attribute [rw] value # @return [::String] # Optional. Human readable display text reflecting the value of the # feature. Used for variable features not captured by the display_name # alone. The maximum allowed length is 3000 characters. Allows characters # from the following Unicode Property Classes: Letters, Numbers, # Punctuation, Symbols, and Separators class Feature include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price model of the private offer. # # Private offers are referred to as having different kinds of price models # based on the combination of fields set in the price model. The following # terminology is used in documentation and other reference material. # # * Usage-based: the price model does not set `flat_fee` # * Usage-only: the price model sets only `usage` # * CUD (committed use discount): the price model sets `commitment` # * Commitment discount with additional usage at list price: # The price model sets `commitment` and not `usage`. # * Commitment with all usage discounted: The price model sets # `commitment` and `usage`. # * Flat fee: the price model sets only `flat_fee` # * Flat fee with usage: the price model sets `flat_fee` and `usage` # # See # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-pricing-model#CUD # for the price models. # @!attribute [rw] flat_fee # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::FlatFee] # Optional. The price configurations for the flat fee subscription. # Must be unset when the base standard offer's price model does not # include subscription SKUs. # # Note: The following fields are mutually exclusive: `flat_fee`, `commitment`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] commitment # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Commitment] # Optional. The price configurations for the commitment based # subscription. Must be unset when the base standard offer's price # model includes subscription SKUs. # # Note: The following fields are mutually exclusive: `commitment`, `flat_fee`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] usage # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Usage] # Optional. The price configurations for the usage part. # If this field is set, the `Commitment.discount_percent` must be unset. # A private offer can apply a discount to all usage or to a usage # commitment, but not both. # Must be unset when the base standard offer's price model includes no # usage SKUs. class PriceModel include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # The discount for a specific SKU. # @!attribute [rw] sku # @return [::String] # Optional. The name of a partner SKU from this API. # # Must refer to a SKU in the price model of the base standard offer. # Inclusion in the base price model can occur either directly or # indirectly via inclusion in an included SkuGroup. # # Currently, standard offer price models include only partner SKUs # in the same project as the standard offer. This may change. # # Format: # projects/\\{project}/locations/\\{location}/services/\\{service}/skus/\\{sku} # # Note: The following fields are mutually exclusive: `sku`, `cloud_billing_sku`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] cloud_billing_sku # @return [::String] # Optional. The name of a Google SKU from the Cloud Billing API. # # Used for partner products sold by Google, such as Premium Operating # System Images sold for use in Compute Engine. This is not common. # SKUs of this type are not present on this API and can instead be # found on the Cloud Billing API or at https://cloud.google.com/skus. # # Must refer to a SKU in the price model of the base standard offer. # Google SKUs are always referenced in standard offers via SkuGroups. # # Format: services/\\{service}/skus/\\{sku} # # Note: The following fields are mutually exclusive: `cloud_billing_sku`, `sku`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] discount_percent # @return [::Google::Type::Decimal] # Optional. The discount percent for the SKU. # For example, `10` means a discount of 10%. If the original SKU # price is $100/hour then the discounted price will be $90/hour. # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", # and "". # Must be present to publish the offer. class SkuDiscount include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price for the usage SKUs. # @!attribute [rw] default_discount_percent # @return [::Google::Type::Decimal] # Optional. The default discount percent for usage SKUs. # An unset default discount percent is equivalent to 0 (no discount). # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "". # @!attribute [rw] sku_discounts # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::SkuDiscount>] # Optional. The discounts for the specific SKUs that override the # `default_discount_percent`. class Usage include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price configurations for the flat fee subscriptions. # @!attribute [rw] flat_fee_override # @return [::Google::Type::Money] # Optional. Flat fee overriding the default flat fee in the base # standard offer. Value cannot be negative. The currency must be "USD" # and precision is limited to cents. Must be present to publish the # offer, if the parent message is set. The maximum allowed value is # 1,000,000,000 USD. class FlatFee include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price configurations for the commitment based subscriptions. # @!attribute [rw] commitment_amount # @return [::Google::Type::Money] # Optional. The commitment balance that the customer will receive. # Value cannot be negative. # The currency must be "USD" and precision is limited to cents. # Must be present to publish the offer, if the parent message is set. # The maximum allowed value is 1,000,000,000 USD. # # If the current offer amends a private offer where the term has not # ended, and if the field # `single_product_offer.standard_interval_price.price_model.commitment.commitment_amount` # is set on both the current offer and the amended private offer, then # the commitment amount must be equal or higher on the current offer, # compared to the amended private offer. # @!attribute [rw] discount_percent # @return [::Google::Type::Decimal] # Optional. The discount percent on `commitment_amount`. # # For example, `10` means a discount of 10%. If the original # `commitment_amount` is $100 then the discounted amount will be $90. # The customer is charged $90 and receives $100 in credits. # # All reported usage will be charged at the standard price. # If this field is set, the `price_model.usage` must be unset. A # private offer can apply a discount to all usage or to a usage # commitment, but not both. # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "". # # Must be present to publish the offer. # @!attribute [rw] additional_credit # @return [::Google::Type::Money] # Optional. Additional credit granted to the customer. # Additional credits are only supported for custom interval offers. # Equivalent behavior can be achieved for standard interval offers by # varying the `commitment_amount` and `discount_percent`. # # Value cannot be negative. # The currency must be "USD" and precision is limited to cents. # The maximum allowed value is 1,000,000 USD. # @!attribute [rw] discard_previous_credit_balance # @return [::Boolean] # Optional. Whether to discard the previous credit balance when the # associated installment starts. If not set, the previous credit # balance will be rolled over to the current installment. # # If there are no previous installments, then the value of this field # will not matter - since it has no effect when no credits exist. class Commitment include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end end # Price configurations for offers with standard intervals. # @!attribute [rw] standard_interval # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::StandardIntervalPrice::StandardInterval] # Optional. The standard interval of the offer. # Must be present to publish unless the price model is usage-only. # @!attribute [rw] price_model # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel] # Optional. The price model of the offer. # Must be present to publish the offer. class StandardIntervalPrice include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # The options for offers with standard intervals. module StandardInterval # The private offer does not have an interval. # If this is set, then the offer is "usage-only". # Field `term.duration_months` must be positive. STANDARD_INTERVAL_UNSPECIFIED = 0 # The schedule of the monthly postpay offers. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # No longer supported as of May 2024. Cannot be used to publish # new offers. MONTHLY_POSTPAY = 1 # Monthly installments with proration. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 04/15, and the offer duration is # 3 months, the following installments will be created: # # 1: from 04/15 to 05/01, at the prorated price for April. # # # 2: from 05/01 to 06/01, at the full monthly price for May. # # # 3: from 06/01 to 07/01, at the full monthly price for June. # # # 4: from 07/01 to 07/15, at the prorated price for July. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. MONTHLY_PRORATED = 2 # Monthly installments without proration. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 04/15, and the offer duration is # 3 months, the following installments will be created: # # 1: from 04/15 to 05/15, at the full monthly price. # # # 2: from 05/15 to 06/15, at the full monthly price. # # # 3: from 06/15 to 07/15, at the full monthly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. MONTHLY_NOT_PRORATED = 3 # Quarterly installments which are not prorated. # This type of offer has "Quarterly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 01/15, and the offer duration is # 3 quarters, the following installments will be created: # # 1: from 01/15 to 04/15, at the full quarterly price. # # # 2: from 04/15 to 07/15, at the full quarterly price. # # # 3: from 07/15 to 10/15, at the full quarterly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. QUARTERLY_NOT_PRORATED = 4 # Yearly installments which are not prorated. # This type of offer has "Yearly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 01/15/2025, and the offer # duration is 3 years, the following installments will be created: # # 1: from 01/15/2025 to 01/15/2026, at the full yearly price. # # # 2: from 01/15/2026 to 01/15/2027, at the full yearly price. # # # 3: from 01/15/2027 to 01/15/2028, at the full yearly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. YEARLY_NOT_PRORATED = 5 end end # An installment of the offer. # @!attribute [rw] start_time # @return [::Google::Type::DateTime] # Optional. The start time of the installment. # Each installment must have a unique start time with one exception: # When the `term.start_policy` of the offer's term is `IMMEDIATE`, # the `start_time` of the first installment must be unset. # The actual start time is not recorded in the offer and instead is # determined by the time the resulting order became active. # # When the `term.start_policy` of the offer's term is # `SCHEDULED_START_TIME`, then the first installment's `start_time` must # match `term.scheduled_start_time`. # # If the `term.end_policy` of the offer's term is `SCHEDULED_END_TIME`, # then installment `start_time` must be before `term.scheduled_end_time`. # If it's `AFTER_DURATION`, then installment `start_time` must be before # the time calculated by adding the `term.duration_months` to # the start time of the offer. # # The `start_time` of the installments cannot be before the # `accept_deadline_time` of the offer. # # Installment start times must be in strictly increasing chronological # order. # @!attribute [rw] price_model # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel] # Optional. The price model of the installment. # All installments must have the same form of price model. class Installment include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Price configurations for offers with custom intervals. # @!attribute [rw] installments # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Installment>] # Optional. The installments that make up the installment timeline. # All installments must have the same form of price model (e.g. # all commitment, or all flat fee). A subscription must be present # under the price model for every installment. # # Must contain at least one installment to publish the offer. class CustomIntervalPrice include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The contract value of the offer. # @!attribute [r] total_contract_value # @return [::Google::Type::Money] # Output only. The total contract value of the offer. # This will be set for all non-draft private offers, as long as # 'PRIVATE_OFFER_VIEW_FULL' is requested. For DRAFT private offers, # this will be populated only when the end user's billing account is # set and when the pricing and term configuration is sufficiently # complete to allow for a calculation. class ContractValue include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Revenue Share information for a Private Offer. # For more details about the revenue share, including how the value is # determined, see # https://docs.cloud.google.com/marketplace/docs/partners/revenue-share-scenarios. # # Not included for `PRIVATE_OFFER_VIEW_BASIC`, or for DRAFT private offers. # # For non-draft private offers, these fields are populated based on the # following: # # * Offers published after April 20, 2025 will always have revenue # share fields populated. # * Offers published on or before April 20, 2025 will only have revenue # share fields populated if they were associated with an active, # unexpired order on that date. # @!attribute [r] current_term_vendor_net_revenue_percent # @return [::Google::Type::Decimal] # Output only. The revenue share currently in effect. # # The range of the value is between 0 and 100. For example, 80 # means the Vendor's current term revenue share is 80%. The vendor # will keep 80% of the revenue. # . # @!attribute [r] renewal_term_vendor_net_revenue_percent # @return [::Google::Type::Decimal] # Output only. The expected revenue share for the renewal term. # Not included if the offer does not have renewal terms. # # The range of the value is between 0 and 100. For example, 80 # means the Vendor's current term revenue share is 80%. The vendor # will keep 80% of the revenue after renewal. # . class RevenueShare include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end end # State of an offer. module State # Default value. This value is unused. STATE_UNSPECIFIED = 0 # The default state after creation when the offer can be edited. # In all other states, the contents of the offer cannot be edited. DRAFT = 1 # The offer is publishing. # Publishing will complete when all publishing requirements are satisfied. PUBLISHING = 2 # The offer has been published and is available to the customer to accept. PUBLISHED = 3 # The offer has been accepted by the customer. ACCEPTED = 4 # The offer was cancelled by the provider before it was transacted. # Cancelled offers can no longer be accepted by the customer. CANCELLED = 5 # The offer expired without being accepted by the customer. # Expired offers can no longer be accepted by the customer. EXPIRED = 6 # The offer has ended. # # Ended offers were accepted and active in the past, but have now reached # the end of their term or have been terminated. ENDED = 7 end # The type of the deal transacted with the offer. The deal type of an offer # is a factor in determining the offer's revenue share. module OfferDealType # Default value. This value is unused. OFFER_DEAL_TYPE_UNSPECIFIED = 0 # The offer corresponds to a preexisting commercial arrangement for a # workload on Google Cloud that is being transferred to the Cloud # Marketplace. CHANNEL_SHIFT = 1 # The offer corresponds to a preexisting commercial arrangement for a # workload previously not on Google Cloud that is being transferred to # Google Cloud. MIGRATION = 2 # The offer corresponds to a renewal of a deal initially transacted on # the Google Cloud Marketplace. NATIVE_RENEWAL = 3 # The offer corresponds to a new deal transacted on the Google Cloud # Marketplace. # # This value is not allowed if the offer amends another private offer # where the term has not ended, and the amended private offer has a deal # type of `MIGRATION`, `CHANNEL_SHIFT` or `NATIVE_RENEWAL`. NEW = 4 end end |
#state ⇒ ::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::State (readonly)
Returns Output only. The state of the private offer.
148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 |
# File 'proto_docs/google/cloud/commerceproducer/v1beta/private_offer.rb', line 148 class PrivateOffer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Information about the Google review process. # @!attribute [r] review_approve_time # @return [::Google::Protobuf::Timestamp] # Output only. The approval time of the Google review process. class PublishRequirementGoogleReview include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Contact information for a reseller. # @!attribute [r] contact # @return [::String] # Output only. The name of the reseller contact for this offer. # @!attribute [r] email # @return [::String] # Output only. The email of the reseller contact for this offer. class ResellerContact include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Contact information for the partner representative. # @!attribute [rw] contact # @return [::String] # Optional. Display text identifying the partner sales contact. # Displayed to the customer. # Must be provided when publishing the offer. # Maximum length: 256 characters. # @!attribute [rw] email # @return [::String] # Optional. The email address of the partner sales contact. # Displayed to the customer. # The format of the provided email address is validated when publishing the # offer, but no verification is performed that the email address actually # exists, accepts email, or is otherwise functional. class PartnerContact include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Information about the customer. # @!attribute [rw] entity_title # @return [::String] # Optional. A string identifying the customer's entity (for example, the # customer's organization or company name). Must be provided when # publishing the offer. Maximum length: 256 characters. # @!attribute [rw] contact # @return [::String] # Optional. A string identifying the customer contact. # Must be provided when publishing the offer. # Maximum length: 256 characters. # @!attribute [rw] email # @return [::String] # Optional. Email of customer contact. # If provided, it must be a well-formed email address. # @!attribute [r] address # @deprecated This field is deprecated and may be removed in the next major version update. # @return [::String] # Output only. Legal address of the customer organization. # This field can no longer be set, but it is preserved to return the # data from existing offers where address is set. # @!attribute [rw] target_billing_account # @return [::String] # Optional. The customer's billing account targeted by the offer. # The private offer once published can be accepted by a billing # administrator of the target billing account. If the customer accepts the # offer and later moves the resulting order to a new billing account, this # field will continue to reflect the original billing account to which the # private offer was extended. Must be provided when publishing the offer. # # To publish this private offer: # # * The billing account must exist. # * The billing account must not be in a free trial. # * The billing account must comply with Marketplace Reselling Policies. # * Reseller parent billing accounts are prohibited. Reseller subaccounts # are prohibited unless the service is enabled for reselling. # # Format: billingAccounts/012345-567890-ABCDEF class Customer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Configurations for the offer term and renewal options. # Extending a private offer to a customer that covers a given term # constitutes a guarantee to the customer that the product will remain # available to them for the duration of the term. # @!attribute [rw] duration_months # @return [::Integer] # Optional. Duration in months of the offer term. # The offer will end on the same day of the month after this duration. If # that date is not available, the offer will end on the last day of the # month. For example, if the offer starts on 01/31/2024 and the duration # is 13 months, the offer will end on 02/28/2025. # Must be set to publish the offer if the end policy is `AFTER_DURATION` # or `MATCH_AMENDED_OFFER`, and must be a positive value. # # The maximum possible offer duration, including all renewal terms, # cannot exceed 7 years. For example, if `duration_months` is 9 and # `term.max_renewal_count` is 9, then the maximum possible offer duration # is 90 months and exceeds the 7 year limit. # # Note: The following fields are mutually exclusive: `duration_months`, `scheduled_end_time`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] scheduled_end_time # @return [::Google::Type::DateTime] # Optional. Specified end time of the offer. # Must be set to publish the offer if the end policy is # `SCHEDULED_END_TIME`. # When set, the time must be in the future and at a day boundary in the # America/Los_Angeles time zone, and must be after # `term.scheduled_start_time` if applicable. # # Note: The following fields are mutually exclusive: `scheduled_end_time`, `duration_months`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] max_renewal_count # @return [::Integer] # Optional. The max number of renewals allowed, after the initial term # ends. This field is only relevant to standard interval offers with # interval of 'MONTHLY_PRORATED', 'MONTHLY_NOT_PRORATED', # 'QUARTERLY_NOT_PRORATED' or 'YEARLY_NOT_PRORATED'. Other types of # offers cannot be renewed. # # For example, if the initial term is 1 year and the max renewals is 3, # the customer can renew the offer for up to 3 additional years after the # initial term ends. Customers control whether they renew the offer. # # Allowing a customer to renew an offer does not constitute a guarantee # to the customer that the offered product will still be available to be # renewed at the renewal date. # # An offer with a max renewal count of 0 cannot be renewed. # Must be non-negative. # # Note: The following fields are mutually exclusive: `max_renewal_count`, `unlimited_renewal`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [r] unlimited_renewal # @deprecated This field is deprecated and may be removed in the next major version update. # @return [::Boolean] # Output only. Deprecated: This field can only be true on existing offers # with standard interval of 'MONTHLY_POSTPAY'. As of May 2024, we no # longer allow unlimited renewals. # # Note: The following fields are mutually exclusive: `unlimited_renewal`, `max_renewal_count`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] start_policy # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::Term::StartPolicy] # Optional. Defines when the resulting order should start. # Must be set when publishing the offer. # @!attribute [rw] scheduled_start_time # @return [::Google::Type::DateTime] # Optional. The scheduled start time of the offer. Cannot exceed one year # from the time of publish. # # If the start policy is `SCHEDULED_START_TIME`, a future time at a day # boundary in the America/Los_Angeles time zone must be provided when # publishing the offer. # # If the offer amends another private or standard offer, then the # scheduled start time must be: # # * Before or equal to the amended offer's end time if the offer's # end policy is not MATCH_AMENDED_OFFER. Otherwise, it has to be # strictly before the amended offer's end time. # * Before or equal to the start time of the next pending installment of # the amended offer, if amending a private offer with custom # installments. For example, if the amended offer has installments on # 01/01, 02/01, 03/01, 04/01, and today is 02/15, then the new offer's # `scheduled_start_time` must be at or before 03/01. # @!attribute [rw] end_policy # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::Term::EndPolicy] # Optional. Defines when an offer should end. # Must be set when publishing the offer. # @!attribute [r] effective_term_end_time # @return [::Google::Type::DateTime] # Output only. The expected end time of the current offer term. # # At the end of each offer term, an offer associated with an active # order will either renew or end. When an offer renews, a new term begins # and this value changes to reflect the end time of the new term. # When an offer ends this value is no longer set and instead `end_time` is # set. # # When the term of an offer ends and the offer does not renew, the # associated order also ends if the base standard offer has a # subscription price model. Otherwise, the associated order does not end # and remains active. # # Not included for PRIVATE_OFFER_VIEW_BASIC. # Included for PRIVATE_OFFER_VIEW_FULL when the offer has not ended and # either the offer has started or the value can be derived from other # fields. # # For offers that have not started, this field is set when one of the # following conditions is true. # # * The offer sets `term.scheduled_end_time`. # * The offer sets `term.scheduled_start_time` and `term.duration_months`, # the offer's `term.end_policy` is not `MATCH_AMENDED_OFFER`, and the # offer does not have standard_interval set to `MONTHLY_POSTPAY`. class Term include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Defines when an offer should start. module StartPolicy # Default value. This value is unused. START_POLICY_UNSPECIFIED = 0 # The resulting order starts immediately upon the customer's acceptance # of the offer, if no partner approval is required, or else immediately # after the partner approves the purchase if order approval is required. # This enum value cannot be combined with `term.scheduled_start_time`. IMMEDIATE = 1 # The resulting order starts at the scheduled start time. SCHEDULED_START_TIME = 2 end # Defines when an offer should end. module EndPolicy # Default value. This value is unused. END_POLICY_UNSPECIFIED = 0 # Offer ends after the specified duration. # If this is set, then `duration_months` must be positive. AFTER_DURATION = 1 # Offer ends at the schduled time. SCHEDULED_END_TIME = 2 # Offer coterms to the amended offer - the offer ends at the end of the # amended offer's term # # For example, if the amended offer starts on 01/15/24, and has a # duration of 6 months, then it ends on 07/15/24. If the current offer # coterms to the previous offer, and the current offer starts on # 05/06/24, then it will still end on 07/15/24. Assuming the current # offer renews 3 times, then the terms on the current offer will be: # # 1. 05/06/24 - 07/15/24 (First term, ends on 07/15 to coterm with the # amended offer) # 2. 07/15/24 - 01/15/25 (First renewal term) # 3. 01/15/25 - 07/15/25 (Second renewal term) # 4. 07/15/25 - 01/15/26 (Third renewal term) # # As a contrast, if the current offer does not coterm with the amended # offer (such as when `end_policy` is `AFTER_DURATION`), then the # terms will be: # # 1. 05/06/24 - 11/06/24 (First term, ends on 11/06, no coterming) # 2. 11/06/24 - 05/06/25 (First renewal term) # 3. 05/06/25 - 11/06/25 (Second renewal term) # 4. 11/06/25 - 05/06/26 (Third renewal term) # # If this is set, then the following conditions must be met: # # * `single_product_offer.amended_private_offer` must be set, and the # amended private offer must not be ended. # * The proration policy must not change (e.g., you cannot switch # between `MONTHLY_PRORATED` and `MONTHLY_NOT_PRORATED`). # * The current offer must not have custom intervals (where # `custom_interval_price` is set). # * `term.duration_months` must match the amended private offer's # duration. # * The amended private offer must not have a standard interval # of `MONTHLY_POSTPAY`. # # This is currently not supported. MATCH_AMENDED_OFFER = 3 end end # Configurations for the offer that is associated with a single product. # @!attribute [rw] amended_private_offer # @return [::String] # Optional. An existing private offer that will be superseded by this # offer. Unless the private offer is for a product type that supports # [multiple active # orders](https://cloud.google.com/marketplace/docs/partners/offers/multiple-offers), # an amendment private offer must be transacted if and only if the # destination customer billing account already contains an active order # for the same product. The offer to be superseded must be the offer # associated with an active order. # # Amendments generally fall into one of two scenarios: # # 1. **Active Order / Ended Offer**: The term of the amended offer has # ended but it is still associated with an active order. The new # offer must amend the ended private offer. # 2. **Active Order / Active Offer**: The term of the amended offer is # still active and the associated order is active. Similar to above, # the new offer must amend the currently active offer (unless # "multiple active orders" are supported). # # If this is set, then the `base_standard_offer` parent service must # match the parent service of the `base_standard_offer` in the # `amended_private_offer`. # # **Active Term Restrictions**: # If the term of the amended private offer has *NOT* ended, then the # following compatibility rules apply: # # * **Price Model Compatibility**: # * Flat Fee (with or without usage) offers can amend Flat Fee # offers. # * Usage-only or CUD offers can amend usage-only offers. # * Commitment-based offers must amend offers of the same price # model subtype (e.g., "additional usage at list price" vs "all # usage discounted"). # * **Billing Frequency Compatibility**: Determined by # `standard_interval` or `custom_interval_price`. # * If the amended offer has a custom billing frequency, the new # offer must also have a custom frequency. # * If the amended offer has a standard frequency (Monthly, # Quarterly, or Yearly), the new offer must maintain the same # frequency or transition to a custom frequency. # * Switching between different standard frequencies (e.g., Monthly # to Quarterly) is not supported. # * For Monthly frequency, switching between `MONTHLY_PRORATED` # and `MONTHLY_NOT_PRORATED` is supported, unless the offer's # `term.end_policy` is `MATCH_AMENDED_OFFER`. # * For usage-only offers, there are no billing frequency # restrictions. # # Other criteria for offer amendment are detailed elsewhere. # # Note: The following fields are mutually exclusive: `amended_private_offer`, `amended_standard_offer`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] amended_standard_offer # @return [::String] # Optional. An existing standard offer that will be superseded by this # offer. An amendment private offer must be transacted if the destination # customer billing account already contains an active order for the same # product, and otherwise cannot be transacted. The offer to be superseded # must be the offer associated with the active order. # # If this is set, then the `base_standard_offer` must contain the same # parent service as the parent service of the `amended_standard_offer`. # The price model of this offer must be compatible with the price model # of the `amended_standard_offer`: # # * Flat Fee, or Flat Fee with usage offers can amend Flat Fee or Flat # Fee with usage standard offers. # * Usage-only offers, or CUD offers can amend usage-only standard # offers. # # Other criteria for offer amendment are detailed elsewhere. # # Note: The following fields are mutually exclusive: `amended_standard_offer`, `amended_private_offer`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] standard_interval_price # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::StandardIntervalPrice] # Optional. Price configurations for offers with standard intervals. # A price must be set when publishing the offer. # # Note: The following fields are mutually exclusive: `standard_interval_price`, `custom_interval_price`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] custom_interval_price # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::CustomIntervalPrice] # Optional. Price configurations for offers with custom intervals. # Custom interval corresponds to "custom billing frequency", # see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule. # A price must be set when publishing the offer. # # Note: The following fields are mutually exclusive: `custom_interval_price`, `standard_interval_price`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] base_standard_offer # @return [::String] # Optional. The StandardOffer this PrivateOffer is based on. # Must be in the same project as the private offer, and must be effective # at the time of publishing. Must be present to publish the offer. # # Format: # projects/\\{project}/locations/\\{location}/services/\\{service}/standardOffers/\\{standard_offer} # @!attribute [r] service_level # @return [::String] # Output only. The service level (also known as the 'plan') of the base # standard offer. The value is populated at publish time from the base # standard offer. # @!attribute [r] reseller_private_offer_plan_id # @return [::String] # Output only. Present for offers created by a reseller from a reseller # private offer plan (RPOP). When set, contains the ID of the originating # RPOP. Not included for `PRIVATE_OFFER_VIEW_BASIC`. # @!attribute [rw] features # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Feature>] # Optional. The custom product features to display for this offer. # Feature `display_name` values must be unique to publish the offer. # The set of features specified here should generally include all features # included in the base service level, with optionally customized values, # but is not required to match exactly and may include additional features. # @!attribute [r] effective_installment_timeline # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Installment>] # Output only. The effective installment timeline of the offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. # Included for `PRIVATE_OFFER_VIEW_FULL` if all necessary information is # available to generate the timeline, and if the offer has # 'standard_interval_price' of 'MONTHLY_PRORATED', 'MONTHLY_NOT_PRORATED', # 'QUARTERLY_NOT_PRORATED', or 'YEARLY_NOT_PRORATED'. # @!attribute [r] contract_value # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::ContractValue] # Output only. Contract value of the offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. # @!attribute [r] revenue_share # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::RevenueShare] # Output only. Revenue share information for this Private Offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. class SingleProductOffer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Additional details used to describe customization of the service level. # # Features are used to distinguish service levels of the same product. # When a product has a single service level, all details can be contained # in the product documentation. When a product has multiple service levels, # each service level can be assigned a distinct set of features to # distinguish the key differences between the service levels. # # In addition to customizing pricing and other transaction details, a # private offer may include customization of partner-managed product # behavior. When this is the case, the details of the custom behavior are # described using features. # @!attribute [rw] display_name # @return [::String] # Optional. Human readable display text characterizing the feature. # Should be sufficiently detailed to identify the feature, allowing # features to be correlated across separate offers and service levels. # Must be non-empty to publish the offer. # The maximum allowed length is 128 characters. # Allows characters from the following Unicode Property Classes: # Letters, Numbers, Punctuation, Symbols, and Separators # @!attribute [rw] value # @return [::String] # Optional. Human readable display text reflecting the value of the # feature. Used for variable features not captured by the display_name # alone. The maximum allowed length is 3000 characters. Allows characters # from the following Unicode Property Classes: Letters, Numbers, # Punctuation, Symbols, and Separators class Feature include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price model of the private offer. # # Private offers are referred to as having different kinds of price models # based on the combination of fields set in the price model. The following # terminology is used in documentation and other reference material. # # * Usage-based: the price model does not set `flat_fee` # * Usage-only: the price model sets only `usage` # * CUD (committed use discount): the price model sets `commitment` # * Commitment discount with additional usage at list price: # The price model sets `commitment` and not `usage`. # * Commitment with all usage discounted: The price model sets # `commitment` and `usage`. # * Flat fee: the price model sets only `flat_fee` # * Flat fee with usage: the price model sets `flat_fee` and `usage` # # See # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-pricing-model#CUD # for the price models. # @!attribute [rw] flat_fee # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::FlatFee] # Optional. The price configurations for the flat fee subscription. # Must be unset when the base standard offer's price model does not # include subscription SKUs. # # Note: The following fields are mutually exclusive: `flat_fee`, `commitment`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] commitment # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Commitment] # Optional. The price configurations for the commitment based # subscription. Must be unset when the base standard offer's price # model includes subscription SKUs. # # Note: The following fields are mutually exclusive: `commitment`, `flat_fee`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] usage # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Usage] # Optional. The price configurations for the usage part. # If this field is set, the `Commitment.discount_percent` must be unset. # A private offer can apply a discount to all usage or to a usage # commitment, but not both. # Must be unset when the base standard offer's price model includes no # usage SKUs. class PriceModel include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # The discount for a specific SKU. # @!attribute [rw] sku # @return [::String] # Optional. The name of a partner SKU from this API. # # Must refer to a SKU in the price model of the base standard offer. # Inclusion in the base price model can occur either directly or # indirectly via inclusion in an included SkuGroup. # # Currently, standard offer price models include only partner SKUs # in the same project as the standard offer. This may change. # # Format: # projects/\\{project}/locations/\\{location}/services/\\{service}/skus/\\{sku} # # Note: The following fields are mutually exclusive: `sku`, `cloud_billing_sku`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] cloud_billing_sku # @return [::String] # Optional. The name of a Google SKU from the Cloud Billing API. # # Used for partner products sold by Google, such as Premium Operating # System Images sold for use in Compute Engine. This is not common. # SKUs of this type are not present on this API and can instead be # found on the Cloud Billing API or at https://cloud.google.com/skus. # # Must refer to a SKU in the price model of the base standard offer. # Google SKUs are always referenced in standard offers via SkuGroups. # # Format: services/\\{service}/skus/\\{sku} # # Note: The following fields are mutually exclusive: `cloud_billing_sku`, `sku`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] discount_percent # @return [::Google::Type::Decimal] # Optional. The discount percent for the SKU. # For example, `10` means a discount of 10%. If the original SKU # price is $100/hour then the discounted price will be $90/hour. # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", # and "". # Must be present to publish the offer. class SkuDiscount include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price for the usage SKUs. # @!attribute [rw] default_discount_percent # @return [::Google::Type::Decimal] # Optional. The default discount percent for usage SKUs. # An unset default discount percent is equivalent to 0 (no discount). # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "". # @!attribute [rw] sku_discounts # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::SkuDiscount>] # Optional. The discounts for the specific SKUs that override the # `default_discount_percent`. class Usage include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price configurations for the flat fee subscriptions. # @!attribute [rw] flat_fee_override # @return [::Google::Type::Money] # Optional. Flat fee overriding the default flat fee in the base # standard offer. Value cannot be negative. The currency must be "USD" # and precision is limited to cents. Must be present to publish the # offer, if the parent message is set. The maximum allowed value is # 1,000,000,000 USD. class FlatFee include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price configurations for the commitment based subscriptions. # @!attribute [rw] commitment_amount # @return [::Google::Type::Money] # Optional. The commitment balance that the customer will receive. # Value cannot be negative. # The currency must be "USD" and precision is limited to cents. # Must be present to publish the offer, if the parent message is set. # The maximum allowed value is 1,000,000,000 USD. # # If the current offer amends a private offer where the term has not # ended, and if the field # `single_product_offer.standard_interval_price.price_model.commitment.commitment_amount` # is set on both the current offer and the amended private offer, then # the commitment amount must be equal or higher on the current offer, # compared to the amended private offer. # @!attribute [rw] discount_percent # @return [::Google::Type::Decimal] # Optional. The discount percent on `commitment_amount`. # # For example, `10` means a discount of 10%. If the original # `commitment_amount` is $100 then the discounted amount will be $90. # The customer is charged $90 and receives $100 in credits. # # All reported usage will be charged at the standard price. # If this field is set, the `price_model.usage` must be unset. A # private offer can apply a discount to all usage or to a usage # commitment, but not both. # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "". # # Must be present to publish the offer. # @!attribute [rw] additional_credit # @return [::Google::Type::Money] # Optional. Additional credit granted to the customer. # Additional credits are only supported for custom interval offers. # Equivalent behavior can be achieved for standard interval offers by # varying the `commitment_amount` and `discount_percent`. # # Value cannot be negative. # The currency must be "USD" and precision is limited to cents. # The maximum allowed value is 1,000,000 USD. # @!attribute [rw] discard_previous_credit_balance # @return [::Boolean] # Optional. Whether to discard the previous credit balance when the # associated installment starts. If not set, the previous credit # balance will be rolled over to the current installment. # # If there are no previous installments, then the value of this field # will not matter - since it has no effect when no credits exist. class Commitment include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end end # Price configurations for offers with standard intervals. # @!attribute [rw] standard_interval # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::StandardIntervalPrice::StandardInterval] # Optional. The standard interval of the offer. # Must be present to publish unless the price model is usage-only. # @!attribute [rw] price_model # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel] # Optional. The price model of the offer. # Must be present to publish the offer. class StandardIntervalPrice include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # The options for offers with standard intervals. module StandardInterval # The private offer does not have an interval. # If this is set, then the offer is "usage-only". # Field `term.duration_months` must be positive. STANDARD_INTERVAL_UNSPECIFIED = 0 # The schedule of the monthly postpay offers. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # No longer supported as of May 2024. Cannot be used to publish # new offers. MONTHLY_POSTPAY = 1 # Monthly installments with proration. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 04/15, and the offer duration is # 3 months, the following installments will be created: # # 1: from 04/15 to 05/01, at the prorated price for April. # # # 2: from 05/01 to 06/01, at the full monthly price for May. # # # 3: from 06/01 to 07/01, at the full monthly price for June. # # # 4: from 07/01 to 07/15, at the prorated price for July. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. MONTHLY_PRORATED = 2 # Monthly installments without proration. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 04/15, and the offer duration is # 3 months, the following installments will be created: # # 1: from 04/15 to 05/15, at the full monthly price. # # # 2: from 05/15 to 06/15, at the full monthly price. # # # 3: from 06/15 to 07/15, at the full monthly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. MONTHLY_NOT_PRORATED = 3 # Quarterly installments which are not prorated. # This type of offer has "Quarterly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 01/15, and the offer duration is # 3 quarters, the following installments will be created: # # 1: from 01/15 to 04/15, at the full quarterly price. # # # 2: from 04/15 to 07/15, at the full quarterly price. # # # 3: from 07/15 to 10/15, at the full quarterly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. QUARTERLY_NOT_PRORATED = 4 # Yearly installments which are not prorated. # This type of offer has "Yearly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 01/15/2025, and the offer # duration is 3 years, the following installments will be created: # # 1: from 01/15/2025 to 01/15/2026, at the full yearly price. # # # 2: from 01/15/2026 to 01/15/2027, at the full yearly price. # # # 3: from 01/15/2027 to 01/15/2028, at the full yearly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. YEARLY_NOT_PRORATED = 5 end end # An installment of the offer. # @!attribute [rw] start_time # @return [::Google::Type::DateTime] # Optional. The start time of the installment. # Each installment must have a unique start time with one exception: # When the `term.start_policy` of the offer's term is `IMMEDIATE`, # the `start_time` of the first installment must be unset. # The actual start time is not recorded in the offer and instead is # determined by the time the resulting order became active. # # When the `term.start_policy` of the offer's term is # `SCHEDULED_START_TIME`, then the first installment's `start_time` must # match `term.scheduled_start_time`. # # If the `term.end_policy` of the offer's term is `SCHEDULED_END_TIME`, # then installment `start_time` must be before `term.scheduled_end_time`. # If it's `AFTER_DURATION`, then installment `start_time` must be before # the time calculated by adding the `term.duration_months` to # the start time of the offer. # # The `start_time` of the installments cannot be before the # `accept_deadline_time` of the offer. # # Installment start times must be in strictly increasing chronological # order. # @!attribute [rw] price_model # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel] # Optional. The price model of the installment. # All installments must have the same form of price model. class Installment include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Price configurations for offers with custom intervals. # @!attribute [rw] installments # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Installment>] # Optional. The installments that make up the installment timeline. # All installments must have the same form of price model (e.g. # all commitment, or all flat fee). A subscription must be present # under the price model for every installment. # # Must contain at least one installment to publish the offer. class CustomIntervalPrice include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The contract value of the offer. # @!attribute [r] total_contract_value # @return [::Google::Type::Money] # Output only. The total contract value of the offer. # This will be set for all non-draft private offers, as long as # 'PRIVATE_OFFER_VIEW_FULL' is requested. For DRAFT private offers, # this will be populated only when the end user's billing account is # set and when the pricing and term configuration is sufficiently # complete to allow for a calculation. class ContractValue include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Revenue Share information for a Private Offer. # For more details about the revenue share, including how the value is # determined, see # https://docs.cloud.google.com/marketplace/docs/partners/revenue-share-scenarios. # # Not included for `PRIVATE_OFFER_VIEW_BASIC`, or for DRAFT private offers. # # For non-draft private offers, these fields are populated based on the # following: # # * Offers published after April 20, 2025 will always have revenue # share fields populated. # * Offers published on or before April 20, 2025 will only have revenue # share fields populated if they were associated with an active, # unexpired order on that date. # @!attribute [r] current_term_vendor_net_revenue_percent # @return [::Google::Type::Decimal] # Output only. The revenue share currently in effect. # # The range of the value is between 0 and 100. For example, 80 # means the Vendor's current term revenue share is 80%. The vendor # will keep 80% of the revenue. # . # @!attribute [r] renewal_term_vendor_net_revenue_percent # @return [::Google::Type::Decimal] # Output only. The expected revenue share for the renewal term. # Not included if the offer does not have renewal terms. # # The range of the value is between 0 and 100. For example, 80 # means the Vendor's current term revenue share is 80%. The vendor # will keep 80% of the revenue after renewal. # . class RevenueShare include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end end # State of an offer. module State # Default value. This value is unused. STATE_UNSPECIFIED = 0 # The default state after creation when the offer can be edited. # In all other states, the contents of the offer cannot be edited. DRAFT = 1 # The offer is publishing. # Publishing will complete when all publishing requirements are satisfied. PUBLISHING = 2 # The offer has been published and is available to the customer to accept. PUBLISHED = 3 # The offer has been accepted by the customer. ACCEPTED = 4 # The offer was cancelled by the provider before it was transacted. # Cancelled offers can no longer be accepted by the customer. CANCELLED = 5 # The offer expired without being accepted by the customer. # Expired offers can no longer be accepted by the customer. EXPIRED = 6 # The offer has ended. # # Ended offers were accepted and active in the past, but have now reached # the end of their term or have been terminated. ENDED = 7 end # The type of the deal transacted with the offer. The deal type of an offer # is a factor in determining the offer's revenue share. module OfferDealType # Default value. This value is unused. OFFER_DEAL_TYPE_UNSPECIFIED = 0 # The offer corresponds to a preexisting commercial arrangement for a # workload on Google Cloud that is being transferred to the Cloud # Marketplace. CHANNEL_SHIFT = 1 # The offer corresponds to a preexisting commercial arrangement for a # workload previously not on Google Cloud that is being transferred to # Google Cloud. MIGRATION = 2 # The offer corresponds to a renewal of a deal initially transacted on # the Google Cloud Marketplace. NATIVE_RENEWAL = 3 # The offer corresponds to a new deal transacted on the Google Cloud # Marketplace. # # This value is not allowed if the offer amends another private offer # where the term has not ended, and the amended private offer has a deal # type of `MIGRATION`, `CHANNEL_SHIFT` or `NATIVE_RENEWAL`. NEW = 4 end end |
#term ⇒ ::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::Term
Returns Optional. Configuration for the offer term. Must be set when publishing the offer.
148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 |
# File 'proto_docs/google/cloud/commerceproducer/v1beta/private_offer.rb', line 148 class PrivateOffer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Information about the Google review process. # @!attribute [r] review_approve_time # @return [::Google::Protobuf::Timestamp] # Output only. The approval time of the Google review process. class PublishRequirementGoogleReview include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Contact information for a reseller. # @!attribute [r] contact # @return [::String] # Output only. The name of the reseller contact for this offer. # @!attribute [r] email # @return [::String] # Output only. The email of the reseller contact for this offer. class ResellerContact include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Contact information for the partner representative. # @!attribute [rw] contact # @return [::String] # Optional. Display text identifying the partner sales contact. # Displayed to the customer. # Must be provided when publishing the offer. # Maximum length: 256 characters. # @!attribute [rw] email # @return [::String] # Optional. The email address of the partner sales contact. # Displayed to the customer. # The format of the provided email address is validated when publishing the # offer, but no verification is performed that the email address actually # exists, accepts email, or is otherwise functional. class PartnerContact include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Information about the customer. # @!attribute [rw] entity_title # @return [::String] # Optional. A string identifying the customer's entity (for example, the # customer's organization or company name). Must be provided when # publishing the offer. Maximum length: 256 characters. # @!attribute [rw] contact # @return [::String] # Optional. A string identifying the customer contact. # Must be provided when publishing the offer. # Maximum length: 256 characters. # @!attribute [rw] email # @return [::String] # Optional. Email of customer contact. # If provided, it must be a well-formed email address. # @!attribute [r] address # @deprecated This field is deprecated and may be removed in the next major version update. # @return [::String] # Output only. Legal address of the customer organization. # This field can no longer be set, but it is preserved to return the # data from existing offers where address is set. # @!attribute [rw] target_billing_account # @return [::String] # Optional. The customer's billing account targeted by the offer. # The private offer once published can be accepted by a billing # administrator of the target billing account. If the customer accepts the # offer and later moves the resulting order to a new billing account, this # field will continue to reflect the original billing account to which the # private offer was extended. Must be provided when publishing the offer. # # To publish this private offer: # # * The billing account must exist. # * The billing account must not be in a free trial. # * The billing account must comply with Marketplace Reselling Policies. # * Reseller parent billing accounts are prohibited. Reseller subaccounts # are prohibited unless the service is enabled for reselling. # # Format: billingAccounts/012345-567890-ABCDEF class Customer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Configurations for the offer term and renewal options. # Extending a private offer to a customer that covers a given term # constitutes a guarantee to the customer that the product will remain # available to them for the duration of the term. # @!attribute [rw] duration_months # @return [::Integer] # Optional. Duration in months of the offer term. # The offer will end on the same day of the month after this duration. If # that date is not available, the offer will end on the last day of the # month. For example, if the offer starts on 01/31/2024 and the duration # is 13 months, the offer will end on 02/28/2025. # Must be set to publish the offer if the end policy is `AFTER_DURATION` # or `MATCH_AMENDED_OFFER`, and must be a positive value. # # The maximum possible offer duration, including all renewal terms, # cannot exceed 7 years. For example, if `duration_months` is 9 and # `term.max_renewal_count` is 9, then the maximum possible offer duration # is 90 months and exceeds the 7 year limit. # # Note: The following fields are mutually exclusive: `duration_months`, `scheduled_end_time`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] scheduled_end_time # @return [::Google::Type::DateTime] # Optional. Specified end time of the offer. # Must be set to publish the offer if the end policy is # `SCHEDULED_END_TIME`. # When set, the time must be in the future and at a day boundary in the # America/Los_Angeles time zone, and must be after # `term.scheduled_start_time` if applicable. # # Note: The following fields are mutually exclusive: `scheduled_end_time`, `duration_months`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] max_renewal_count # @return [::Integer] # Optional. The max number of renewals allowed, after the initial term # ends. This field is only relevant to standard interval offers with # interval of 'MONTHLY_PRORATED', 'MONTHLY_NOT_PRORATED', # 'QUARTERLY_NOT_PRORATED' or 'YEARLY_NOT_PRORATED'. Other types of # offers cannot be renewed. # # For example, if the initial term is 1 year and the max renewals is 3, # the customer can renew the offer for up to 3 additional years after the # initial term ends. Customers control whether they renew the offer. # # Allowing a customer to renew an offer does not constitute a guarantee # to the customer that the offered product will still be available to be # renewed at the renewal date. # # An offer with a max renewal count of 0 cannot be renewed. # Must be non-negative. # # Note: The following fields are mutually exclusive: `max_renewal_count`, `unlimited_renewal`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [r] unlimited_renewal # @deprecated This field is deprecated and may be removed in the next major version update. # @return [::Boolean] # Output only. Deprecated: This field can only be true on existing offers # with standard interval of 'MONTHLY_POSTPAY'. As of May 2024, we no # longer allow unlimited renewals. # # Note: The following fields are mutually exclusive: `unlimited_renewal`, `max_renewal_count`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] start_policy # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::Term::StartPolicy] # Optional. Defines when the resulting order should start. # Must be set when publishing the offer. # @!attribute [rw] scheduled_start_time # @return [::Google::Type::DateTime] # Optional. The scheduled start time of the offer. Cannot exceed one year # from the time of publish. # # If the start policy is `SCHEDULED_START_TIME`, a future time at a day # boundary in the America/Los_Angeles time zone must be provided when # publishing the offer. # # If the offer amends another private or standard offer, then the # scheduled start time must be: # # * Before or equal to the amended offer's end time if the offer's # end policy is not MATCH_AMENDED_OFFER. Otherwise, it has to be # strictly before the amended offer's end time. # * Before or equal to the start time of the next pending installment of # the amended offer, if amending a private offer with custom # installments. For example, if the amended offer has installments on # 01/01, 02/01, 03/01, 04/01, and today is 02/15, then the new offer's # `scheduled_start_time` must be at or before 03/01. # @!attribute [rw] end_policy # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::Term::EndPolicy] # Optional. Defines when an offer should end. # Must be set when publishing the offer. # @!attribute [r] effective_term_end_time # @return [::Google::Type::DateTime] # Output only. The expected end time of the current offer term. # # At the end of each offer term, an offer associated with an active # order will either renew or end. When an offer renews, a new term begins # and this value changes to reflect the end time of the new term. # When an offer ends this value is no longer set and instead `end_time` is # set. # # When the term of an offer ends and the offer does not renew, the # associated order also ends if the base standard offer has a # subscription price model. Otherwise, the associated order does not end # and remains active. # # Not included for PRIVATE_OFFER_VIEW_BASIC. # Included for PRIVATE_OFFER_VIEW_FULL when the offer has not ended and # either the offer has started or the value can be derived from other # fields. # # For offers that have not started, this field is set when one of the # following conditions is true. # # * The offer sets `term.scheduled_end_time`. # * The offer sets `term.scheduled_start_time` and `term.duration_months`, # the offer's `term.end_policy` is not `MATCH_AMENDED_OFFER`, and the # offer does not have standard_interval set to `MONTHLY_POSTPAY`. class Term include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Defines when an offer should start. module StartPolicy # Default value. This value is unused. START_POLICY_UNSPECIFIED = 0 # The resulting order starts immediately upon the customer's acceptance # of the offer, if no partner approval is required, or else immediately # after the partner approves the purchase if order approval is required. # This enum value cannot be combined with `term.scheduled_start_time`. IMMEDIATE = 1 # The resulting order starts at the scheduled start time. SCHEDULED_START_TIME = 2 end # Defines when an offer should end. module EndPolicy # Default value. This value is unused. END_POLICY_UNSPECIFIED = 0 # Offer ends after the specified duration. # If this is set, then `duration_months` must be positive. AFTER_DURATION = 1 # Offer ends at the schduled time. SCHEDULED_END_TIME = 2 # Offer coterms to the amended offer - the offer ends at the end of the # amended offer's term # # For example, if the amended offer starts on 01/15/24, and has a # duration of 6 months, then it ends on 07/15/24. If the current offer # coterms to the previous offer, and the current offer starts on # 05/06/24, then it will still end on 07/15/24. Assuming the current # offer renews 3 times, then the terms on the current offer will be: # # 1. 05/06/24 - 07/15/24 (First term, ends on 07/15 to coterm with the # amended offer) # 2. 07/15/24 - 01/15/25 (First renewal term) # 3. 01/15/25 - 07/15/25 (Second renewal term) # 4. 07/15/25 - 01/15/26 (Third renewal term) # # As a contrast, if the current offer does not coterm with the amended # offer (such as when `end_policy` is `AFTER_DURATION`), then the # terms will be: # # 1. 05/06/24 - 11/06/24 (First term, ends on 11/06, no coterming) # 2. 11/06/24 - 05/06/25 (First renewal term) # 3. 05/06/25 - 11/06/25 (Second renewal term) # 4. 11/06/25 - 05/06/26 (Third renewal term) # # If this is set, then the following conditions must be met: # # * `single_product_offer.amended_private_offer` must be set, and the # amended private offer must not be ended. # * The proration policy must not change (e.g., you cannot switch # between `MONTHLY_PRORATED` and `MONTHLY_NOT_PRORATED`). # * The current offer must not have custom intervals (where # `custom_interval_price` is set). # * `term.duration_months` must match the amended private offer's # duration. # * The amended private offer must not have a standard interval # of `MONTHLY_POSTPAY`. # # This is currently not supported. MATCH_AMENDED_OFFER = 3 end end # Configurations for the offer that is associated with a single product. # @!attribute [rw] amended_private_offer # @return [::String] # Optional. An existing private offer that will be superseded by this # offer. Unless the private offer is for a product type that supports # [multiple active # orders](https://cloud.google.com/marketplace/docs/partners/offers/multiple-offers), # an amendment private offer must be transacted if and only if the # destination customer billing account already contains an active order # for the same product. The offer to be superseded must be the offer # associated with an active order. # # Amendments generally fall into one of two scenarios: # # 1. **Active Order / Ended Offer**: The term of the amended offer has # ended but it is still associated with an active order. The new # offer must amend the ended private offer. # 2. **Active Order / Active Offer**: The term of the amended offer is # still active and the associated order is active. Similar to above, # the new offer must amend the currently active offer (unless # "multiple active orders" are supported). # # If this is set, then the `base_standard_offer` parent service must # match the parent service of the `base_standard_offer` in the # `amended_private_offer`. # # **Active Term Restrictions**: # If the term of the amended private offer has *NOT* ended, then the # following compatibility rules apply: # # * **Price Model Compatibility**: # * Flat Fee (with or without usage) offers can amend Flat Fee # offers. # * Usage-only or CUD offers can amend usage-only offers. # * Commitment-based offers must amend offers of the same price # model subtype (e.g., "additional usage at list price" vs "all # usage discounted"). # * **Billing Frequency Compatibility**: Determined by # `standard_interval` or `custom_interval_price`. # * If the amended offer has a custom billing frequency, the new # offer must also have a custom frequency. # * If the amended offer has a standard frequency (Monthly, # Quarterly, or Yearly), the new offer must maintain the same # frequency or transition to a custom frequency. # * Switching between different standard frequencies (e.g., Monthly # to Quarterly) is not supported. # * For Monthly frequency, switching between `MONTHLY_PRORATED` # and `MONTHLY_NOT_PRORATED` is supported, unless the offer's # `term.end_policy` is `MATCH_AMENDED_OFFER`. # * For usage-only offers, there are no billing frequency # restrictions. # # Other criteria for offer amendment are detailed elsewhere. # # Note: The following fields are mutually exclusive: `amended_private_offer`, `amended_standard_offer`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] amended_standard_offer # @return [::String] # Optional. An existing standard offer that will be superseded by this # offer. An amendment private offer must be transacted if the destination # customer billing account already contains an active order for the same # product, and otherwise cannot be transacted. The offer to be superseded # must be the offer associated with the active order. # # If this is set, then the `base_standard_offer` must contain the same # parent service as the parent service of the `amended_standard_offer`. # The price model of this offer must be compatible with the price model # of the `amended_standard_offer`: # # * Flat Fee, or Flat Fee with usage offers can amend Flat Fee or Flat # Fee with usage standard offers. # * Usage-only offers, or CUD offers can amend usage-only standard # offers. # # Other criteria for offer amendment are detailed elsewhere. # # Note: The following fields are mutually exclusive: `amended_standard_offer`, `amended_private_offer`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] standard_interval_price # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::StandardIntervalPrice] # Optional. Price configurations for offers with standard intervals. # A price must be set when publishing the offer. # # Note: The following fields are mutually exclusive: `standard_interval_price`, `custom_interval_price`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] custom_interval_price # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::CustomIntervalPrice] # Optional. Price configurations for offers with custom intervals. # Custom interval corresponds to "custom billing frequency", # see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule. # A price must be set when publishing the offer. # # Note: The following fields are mutually exclusive: `custom_interval_price`, `standard_interval_price`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] base_standard_offer # @return [::String] # Optional. The StandardOffer this PrivateOffer is based on. # Must be in the same project as the private offer, and must be effective # at the time of publishing. Must be present to publish the offer. # # Format: # projects/\\{project}/locations/\\{location}/services/\\{service}/standardOffers/\\{standard_offer} # @!attribute [r] service_level # @return [::String] # Output only. The service level (also known as the 'plan') of the base # standard offer. The value is populated at publish time from the base # standard offer. # @!attribute [r] reseller_private_offer_plan_id # @return [::String] # Output only. Present for offers created by a reseller from a reseller # private offer plan (RPOP). When set, contains the ID of the originating # RPOP. Not included for `PRIVATE_OFFER_VIEW_BASIC`. # @!attribute [rw] features # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Feature>] # Optional. The custom product features to display for this offer. # Feature `display_name` values must be unique to publish the offer. # The set of features specified here should generally include all features # included in the base service level, with optionally customized values, # but is not required to match exactly and may include additional features. # @!attribute [r] effective_installment_timeline # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Installment>] # Output only. The effective installment timeline of the offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. # Included for `PRIVATE_OFFER_VIEW_FULL` if all necessary information is # available to generate the timeline, and if the offer has # 'standard_interval_price' of 'MONTHLY_PRORATED', 'MONTHLY_NOT_PRORATED', # 'QUARTERLY_NOT_PRORATED', or 'YEARLY_NOT_PRORATED'. # @!attribute [r] contract_value # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::ContractValue] # Output only. Contract value of the offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. # @!attribute [r] revenue_share # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::RevenueShare] # Output only. Revenue share information for this Private Offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. class SingleProductOffer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Additional details used to describe customization of the service level. # # Features are used to distinguish service levels of the same product. # When a product has a single service level, all details can be contained # in the product documentation. When a product has multiple service levels, # each service level can be assigned a distinct set of features to # distinguish the key differences between the service levels. # # In addition to customizing pricing and other transaction details, a # private offer may include customization of partner-managed product # behavior. When this is the case, the details of the custom behavior are # described using features. # @!attribute [rw] display_name # @return [::String] # Optional. Human readable display text characterizing the feature. # Should be sufficiently detailed to identify the feature, allowing # features to be correlated across separate offers and service levels. # Must be non-empty to publish the offer. # The maximum allowed length is 128 characters. # Allows characters from the following Unicode Property Classes: # Letters, Numbers, Punctuation, Symbols, and Separators # @!attribute [rw] value # @return [::String] # Optional. Human readable display text reflecting the value of the # feature. Used for variable features not captured by the display_name # alone. The maximum allowed length is 3000 characters. Allows characters # from the following Unicode Property Classes: Letters, Numbers, # Punctuation, Symbols, and Separators class Feature include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price model of the private offer. # # Private offers are referred to as having different kinds of price models # based on the combination of fields set in the price model. The following # terminology is used in documentation and other reference material. # # * Usage-based: the price model does not set `flat_fee` # * Usage-only: the price model sets only `usage` # * CUD (committed use discount): the price model sets `commitment` # * Commitment discount with additional usage at list price: # The price model sets `commitment` and not `usage`. # * Commitment with all usage discounted: The price model sets # `commitment` and `usage`. # * Flat fee: the price model sets only `flat_fee` # * Flat fee with usage: the price model sets `flat_fee` and `usage` # # See # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-pricing-model#CUD # for the price models. # @!attribute [rw] flat_fee # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::FlatFee] # Optional. The price configurations for the flat fee subscription. # Must be unset when the base standard offer's price model does not # include subscription SKUs. # # Note: The following fields are mutually exclusive: `flat_fee`, `commitment`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] commitment # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Commitment] # Optional. The price configurations for the commitment based # subscription. Must be unset when the base standard offer's price # model includes subscription SKUs. # # Note: The following fields are mutually exclusive: `commitment`, `flat_fee`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] usage # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Usage] # Optional. The price configurations for the usage part. # If this field is set, the `Commitment.discount_percent` must be unset. # A private offer can apply a discount to all usage or to a usage # commitment, but not both. # Must be unset when the base standard offer's price model includes no # usage SKUs. class PriceModel include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # The discount for a specific SKU. # @!attribute [rw] sku # @return [::String] # Optional. The name of a partner SKU from this API. # # Must refer to a SKU in the price model of the base standard offer. # Inclusion in the base price model can occur either directly or # indirectly via inclusion in an included SkuGroup. # # Currently, standard offer price models include only partner SKUs # in the same project as the standard offer. This may change. # # Format: # projects/\\{project}/locations/\\{location}/services/\\{service}/skus/\\{sku} # # Note: The following fields are mutually exclusive: `sku`, `cloud_billing_sku`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] cloud_billing_sku # @return [::String] # Optional. The name of a Google SKU from the Cloud Billing API. # # Used for partner products sold by Google, such as Premium Operating # System Images sold for use in Compute Engine. This is not common. # SKUs of this type are not present on this API and can instead be # found on the Cloud Billing API or at https://cloud.google.com/skus. # # Must refer to a SKU in the price model of the base standard offer. # Google SKUs are always referenced in standard offers via SkuGroups. # # Format: services/\\{service}/skus/\\{sku} # # Note: The following fields are mutually exclusive: `cloud_billing_sku`, `sku`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] discount_percent # @return [::Google::Type::Decimal] # Optional. The discount percent for the SKU. # For example, `10` means a discount of 10%. If the original SKU # price is $100/hour then the discounted price will be $90/hour. # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", # and "". # Must be present to publish the offer. class SkuDiscount include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price for the usage SKUs. # @!attribute [rw] default_discount_percent # @return [::Google::Type::Decimal] # Optional. The default discount percent for usage SKUs. # An unset default discount percent is equivalent to 0 (no discount). # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "". # @!attribute [rw] sku_discounts # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::SkuDiscount>] # Optional. The discounts for the specific SKUs that override the # `default_discount_percent`. class Usage include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price configurations for the flat fee subscriptions. # @!attribute [rw] flat_fee_override # @return [::Google::Type::Money] # Optional. Flat fee overriding the default flat fee in the base # standard offer. Value cannot be negative. The currency must be "USD" # and precision is limited to cents. Must be present to publish the # offer, if the parent message is set. The maximum allowed value is # 1,000,000,000 USD. class FlatFee include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price configurations for the commitment based subscriptions. # @!attribute [rw] commitment_amount # @return [::Google::Type::Money] # Optional. The commitment balance that the customer will receive. # Value cannot be negative. # The currency must be "USD" and precision is limited to cents. # Must be present to publish the offer, if the parent message is set. # The maximum allowed value is 1,000,000,000 USD. # # If the current offer amends a private offer where the term has not # ended, and if the field # `single_product_offer.standard_interval_price.price_model.commitment.commitment_amount` # is set on both the current offer and the amended private offer, then # the commitment amount must be equal or higher on the current offer, # compared to the amended private offer. # @!attribute [rw] discount_percent # @return [::Google::Type::Decimal] # Optional. The discount percent on `commitment_amount`. # # For example, `10` means a discount of 10%. If the original # `commitment_amount` is $100 then the discounted amount will be $90. # The customer is charged $90 and receives $100 in credits. # # All reported usage will be charged at the standard price. # If this field is set, the `price_model.usage` must be unset. A # private offer can apply a discount to all usage or to a usage # commitment, but not both. # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "". # # Must be present to publish the offer. # @!attribute [rw] additional_credit # @return [::Google::Type::Money] # Optional. Additional credit granted to the customer. # Additional credits are only supported for custom interval offers. # Equivalent behavior can be achieved for standard interval offers by # varying the `commitment_amount` and `discount_percent`. # # Value cannot be negative. # The currency must be "USD" and precision is limited to cents. # The maximum allowed value is 1,000,000 USD. # @!attribute [rw] discard_previous_credit_balance # @return [::Boolean] # Optional. Whether to discard the previous credit balance when the # associated installment starts. If not set, the previous credit # balance will be rolled over to the current installment. # # If there are no previous installments, then the value of this field # will not matter - since it has no effect when no credits exist. class Commitment include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end end # Price configurations for offers with standard intervals. # @!attribute [rw] standard_interval # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::StandardIntervalPrice::StandardInterval] # Optional. The standard interval of the offer. # Must be present to publish unless the price model is usage-only. # @!attribute [rw] price_model # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel] # Optional. The price model of the offer. # Must be present to publish the offer. class StandardIntervalPrice include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # The options for offers with standard intervals. module StandardInterval # The private offer does not have an interval. # If this is set, then the offer is "usage-only". # Field `term.duration_months` must be positive. STANDARD_INTERVAL_UNSPECIFIED = 0 # The schedule of the monthly postpay offers. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # No longer supported as of May 2024. Cannot be used to publish # new offers. MONTHLY_POSTPAY = 1 # Monthly installments with proration. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 04/15, and the offer duration is # 3 months, the following installments will be created: # # 1: from 04/15 to 05/01, at the prorated price for April. # # # 2: from 05/01 to 06/01, at the full monthly price for May. # # # 3: from 06/01 to 07/01, at the full monthly price for June. # # # 4: from 07/01 to 07/15, at the prorated price for July. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. MONTHLY_PRORATED = 2 # Monthly installments without proration. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 04/15, and the offer duration is # 3 months, the following installments will be created: # # 1: from 04/15 to 05/15, at the full monthly price. # # # 2: from 05/15 to 06/15, at the full monthly price. # # # 3: from 06/15 to 07/15, at the full monthly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. MONTHLY_NOT_PRORATED = 3 # Quarterly installments which are not prorated. # This type of offer has "Quarterly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 01/15, and the offer duration is # 3 quarters, the following installments will be created: # # 1: from 01/15 to 04/15, at the full quarterly price. # # # 2: from 04/15 to 07/15, at the full quarterly price. # # # 3: from 07/15 to 10/15, at the full quarterly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. QUARTERLY_NOT_PRORATED = 4 # Yearly installments which are not prorated. # This type of offer has "Yearly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 01/15/2025, and the offer # duration is 3 years, the following installments will be created: # # 1: from 01/15/2025 to 01/15/2026, at the full yearly price. # # # 2: from 01/15/2026 to 01/15/2027, at the full yearly price. # # # 3: from 01/15/2027 to 01/15/2028, at the full yearly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. YEARLY_NOT_PRORATED = 5 end end # An installment of the offer. # @!attribute [rw] start_time # @return [::Google::Type::DateTime] # Optional. The start time of the installment. # Each installment must have a unique start time with one exception: # When the `term.start_policy` of the offer's term is `IMMEDIATE`, # the `start_time` of the first installment must be unset. # The actual start time is not recorded in the offer and instead is # determined by the time the resulting order became active. # # When the `term.start_policy` of the offer's term is # `SCHEDULED_START_TIME`, then the first installment's `start_time` must # match `term.scheduled_start_time`. # # If the `term.end_policy` of the offer's term is `SCHEDULED_END_TIME`, # then installment `start_time` must be before `term.scheduled_end_time`. # If it's `AFTER_DURATION`, then installment `start_time` must be before # the time calculated by adding the `term.duration_months` to # the start time of the offer. # # The `start_time` of the installments cannot be before the # `accept_deadline_time` of the offer. # # Installment start times must be in strictly increasing chronological # order. # @!attribute [rw] price_model # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel] # Optional. The price model of the installment. # All installments must have the same form of price model. class Installment include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Price configurations for offers with custom intervals. # @!attribute [rw] installments # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Installment>] # Optional. The installments that make up the installment timeline. # All installments must have the same form of price model (e.g. # all commitment, or all flat fee). A subscription must be present # under the price model for every installment. # # Must contain at least one installment to publish the offer. class CustomIntervalPrice include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The contract value of the offer. # @!attribute [r] total_contract_value # @return [::Google::Type::Money] # Output only. The total contract value of the offer. # This will be set for all non-draft private offers, as long as # 'PRIVATE_OFFER_VIEW_FULL' is requested. For DRAFT private offers, # this will be populated only when the end user's billing account is # set and when the pricing and term configuration is sufficiently # complete to allow for a calculation. class ContractValue include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Revenue Share information for a Private Offer. # For more details about the revenue share, including how the value is # determined, see # https://docs.cloud.google.com/marketplace/docs/partners/revenue-share-scenarios. # # Not included for `PRIVATE_OFFER_VIEW_BASIC`, or for DRAFT private offers. # # For non-draft private offers, these fields are populated based on the # following: # # * Offers published after April 20, 2025 will always have revenue # share fields populated. # * Offers published on or before April 20, 2025 will only have revenue # share fields populated if they were associated with an active, # unexpired order on that date. # @!attribute [r] current_term_vendor_net_revenue_percent # @return [::Google::Type::Decimal] # Output only. The revenue share currently in effect. # # The range of the value is between 0 and 100. For example, 80 # means the Vendor's current term revenue share is 80%. The vendor # will keep 80% of the revenue. # . # @!attribute [r] renewal_term_vendor_net_revenue_percent # @return [::Google::Type::Decimal] # Output only. The expected revenue share for the renewal term. # Not included if the offer does not have renewal terms. # # The range of the value is between 0 and 100. For example, 80 # means the Vendor's current term revenue share is 80%. The vendor # will keep 80% of the revenue after renewal. # . class RevenueShare include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end end # State of an offer. module State # Default value. This value is unused. STATE_UNSPECIFIED = 0 # The default state after creation when the offer can be edited. # In all other states, the contents of the offer cannot be edited. DRAFT = 1 # The offer is publishing. # Publishing will complete when all publishing requirements are satisfied. PUBLISHING = 2 # The offer has been published and is available to the customer to accept. PUBLISHED = 3 # The offer has been accepted by the customer. ACCEPTED = 4 # The offer was cancelled by the provider before it was transacted. # Cancelled offers can no longer be accepted by the customer. CANCELLED = 5 # The offer expired without being accepted by the customer. # Expired offers can no longer be accepted by the customer. EXPIRED = 6 # The offer has ended. # # Ended offers were accepted and active in the past, but have now reached # the end of their term or have been terminated. ENDED = 7 end # The type of the deal transacted with the offer. The deal type of an offer # is a factor in determining the offer's revenue share. module OfferDealType # Default value. This value is unused. OFFER_DEAL_TYPE_UNSPECIFIED = 0 # The offer corresponds to a preexisting commercial arrangement for a # workload on Google Cloud that is being transferred to the Cloud # Marketplace. CHANNEL_SHIFT = 1 # The offer corresponds to a preexisting commercial arrangement for a # workload previously not on Google Cloud that is being transferred to # Google Cloud. MIGRATION = 2 # The offer corresponds to a renewal of a deal initially transacted on # the Google Cloud Marketplace. NATIVE_RENEWAL = 3 # The offer corresponds to a new deal transacted on the Google Cloud # Marketplace. # # This value is not allowed if the offer amends another private offer # where the term has not ended, and the amended private offer has a deal # type of `MIGRATION`, `CHANNEL_SHIFT` or `NATIVE_RENEWAL`. NEW = 4 end end |
#title ⇒ ::String
Returns Optional. A title that describes the offer and helps your customers identify it. This title will be visible to the customer. Maximum length: 256 characters. Must be present to publish the offer.
148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 |
# File 'proto_docs/google/cloud/commerceproducer/v1beta/private_offer.rb', line 148 class PrivateOffer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Information about the Google review process. # @!attribute [r] review_approve_time # @return [::Google::Protobuf::Timestamp] # Output only. The approval time of the Google review process. class PublishRequirementGoogleReview include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Contact information for a reseller. # @!attribute [r] contact # @return [::String] # Output only. The name of the reseller contact for this offer. # @!attribute [r] email # @return [::String] # Output only. The email of the reseller contact for this offer. class ResellerContact include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Contact information for the partner representative. # @!attribute [rw] contact # @return [::String] # Optional. Display text identifying the partner sales contact. # Displayed to the customer. # Must be provided when publishing the offer. # Maximum length: 256 characters. # @!attribute [rw] email # @return [::String] # Optional. The email address of the partner sales contact. # Displayed to the customer. # The format of the provided email address is validated when publishing the # offer, but no verification is performed that the email address actually # exists, accepts email, or is otherwise functional. class PartnerContact include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Information about the customer. # @!attribute [rw] entity_title # @return [::String] # Optional. A string identifying the customer's entity (for example, the # customer's organization or company name). Must be provided when # publishing the offer. Maximum length: 256 characters. # @!attribute [rw] contact # @return [::String] # Optional. A string identifying the customer contact. # Must be provided when publishing the offer. # Maximum length: 256 characters. # @!attribute [rw] email # @return [::String] # Optional. Email of customer contact. # If provided, it must be a well-formed email address. # @!attribute [r] address # @deprecated This field is deprecated and may be removed in the next major version update. # @return [::String] # Output only. Legal address of the customer organization. # This field can no longer be set, but it is preserved to return the # data from existing offers where address is set. # @!attribute [rw] target_billing_account # @return [::String] # Optional. The customer's billing account targeted by the offer. # The private offer once published can be accepted by a billing # administrator of the target billing account. If the customer accepts the # offer and later moves the resulting order to a new billing account, this # field will continue to reflect the original billing account to which the # private offer was extended. Must be provided when publishing the offer. # # To publish this private offer: # # * The billing account must exist. # * The billing account must not be in a free trial. # * The billing account must comply with Marketplace Reselling Policies. # * Reseller parent billing accounts are prohibited. Reseller subaccounts # are prohibited unless the service is enabled for reselling. # # Format: billingAccounts/012345-567890-ABCDEF class Customer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Configurations for the offer term and renewal options. # Extending a private offer to a customer that covers a given term # constitutes a guarantee to the customer that the product will remain # available to them for the duration of the term. # @!attribute [rw] duration_months # @return [::Integer] # Optional. Duration in months of the offer term. # The offer will end on the same day of the month after this duration. If # that date is not available, the offer will end on the last day of the # month. For example, if the offer starts on 01/31/2024 and the duration # is 13 months, the offer will end on 02/28/2025. # Must be set to publish the offer if the end policy is `AFTER_DURATION` # or `MATCH_AMENDED_OFFER`, and must be a positive value. # # The maximum possible offer duration, including all renewal terms, # cannot exceed 7 years. For example, if `duration_months` is 9 and # `term.max_renewal_count` is 9, then the maximum possible offer duration # is 90 months and exceeds the 7 year limit. # # Note: The following fields are mutually exclusive: `duration_months`, `scheduled_end_time`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] scheduled_end_time # @return [::Google::Type::DateTime] # Optional. Specified end time of the offer. # Must be set to publish the offer if the end policy is # `SCHEDULED_END_TIME`. # When set, the time must be in the future and at a day boundary in the # America/Los_Angeles time zone, and must be after # `term.scheduled_start_time` if applicable. # # Note: The following fields are mutually exclusive: `scheduled_end_time`, `duration_months`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] max_renewal_count # @return [::Integer] # Optional. The max number of renewals allowed, after the initial term # ends. This field is only relevant to standard interval offers with # interval of 'MONTHLY_PRORATED', 'MONTHLY_NOT_PRORATED', # 'QUARTERLY_NOT_PRORATED' or 'YEARLY_NOT_PRORATED'. Other types of # offers cannot be renewed. # # For example, if the initial term is 1 year and the max renewals is 3, # the customer can renew the offer for up to 3 additional years after the # initial term ends. Customers control whether they renew the offer. # # Allowing a customer to renew an offer does not constitute a guarantee # to the customer that the offered product will still be available to be # renewed at the renewal date. # # An offer with a max renewal count of 0 cannot be renewed. # Must be non-negative. # # Note: The following fields are mutually exclusive: `max_renewal_count`, `unlimited_renewal`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [r] unlimited_renewal # @deprecated This field is deprecated and may be removed in the next major version update. # @return [::Boolean] # Output only. Deprecated: This field can only be true on existing offers # with standard interval of 'MONTHLY_POSTPAY'. As of May 2024, we no # longer allow unlimited renewals. # # Note: The following fields are mutually exclusive: `unlimited_renewal`, `max_renewal_count`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] start_policy # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::Term::StartPolicy] # Optional. Defines when the resulting order should start. # Must be set when publishing the offer. # @!attribute [rw] scheduled_start_time # @return [::Google::Type::DateTime] # Optional. The scheduled start time of the offer. Cannot exceed one year # from the time of publish. # # If the start policy is `SCHEDULED_START_TIME`, a future time at a day # boundary in the America/Los_Angeles time zone must be provided when # publishing the offer. # # If the offer amends another private or standard offer, then the # scheduled start time must be: # # * Before or equal to the amended offer's end time if the offer's # end policy is not MATCH_AMENDED_OFFER. Otherwise, it has to be # strictly before the amended offer's end time. # * Before or equal to the start time of the next pending installment of # the amended offer, if amending a private offer with custom # installments. For example, if the amended offer has installments on # 01/01, 02/01, 03/01, 04/01, and today is 02/15, then the new offer's # `scheduled_start_time` must be at or before 03/01. # @!attribute [rw] end_policy # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::Term::EndPolicy] # Optional. Defines when an offer should end. # Must be set when publishing the offer. # @!attribute [r] effective_term_end_time # @return [::Google::Type::DateTime] # Output only. The expected end time of the current offer term. # # At the end of each offer term, an offer associated with an active # order will either renew or end. When an offer renews, a new term begins # and this value changes to reflect the end time of the new term. # When an offer ends this value is no longer set and instead `end_time` is # set. # # When the term of an offer ends and the offer does not renew, the # associated order also ends if the base standard offer has a # subscription price model. Otherwise, the associated order does not end # and remains active. # # Not included for PRIVATE_OFFER_VIEW_BASIC. # Included for PRIVATE_OFFER_VIEW_FULL when the offer has not ended and # either the offer has started or the value can be derived from other # fields. # # For offers that have not started, this field is set when one of the # following conditions is true. # # * The offer sets `term.scheduled_end_time`. # * The offer sets `term.scheduled_start_time` and `term.duration_months`, # the offer's `term.end_policy` is not `MATCH_AMENDED_OFFER`, and the # offer does not have standard_interval set to `MONTHLY_POSTPAY`. class Term include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Defines when an offer should start. module StartPolicy # Default value. This value is unused. START_POLICY_UNSPECIFIED = 0 # The resulting order starts immediately upon the customer's acceptance # of the offer, if no partner approval is required, or else immediately # after the partner approves the purchase if order approval is required. # This enum value cannot be combined with `term.scheduled_start_time`. IMMEDIATE = 1 # The resulting order starts at the scheduled start time. SCHEDULED_START_TIME = 2 end # Defines when an offer should end. module EndPolicy # Default value. This value is unused. END_POLICY_UNSPECIFIED = 0 # Offer ends after the specified duration. # If this is set, then `duration_months` must be positive. AFTER_DURATION = 1 # Offer ends at the schduled time. SCHEDULED_END_TIME = 2 # Offer coterms to the amended offer - the offer ends at the end of the # amended offer's term # # For example, if the amended offer starts on 01/15/24, and has a # duration of 6 months, then it ends on 07/15/24. If the current offer # coterms to the previous offer, and the current offer starts on # 05/06/24, then it will still end on 07/15/24. Assuming the current # offer renews 3 times, then the terms on the current offer will be: # # 1. 05/06/24 - 07/15/24 (First term, ends on 07/15 to coterm with the # amended offer) # 2. 07/15/24 - 01/15/25 (First renewal term) # 3. 01/15/25 - 07/15/25 (Second renewal term) # 4. 07/15/25 - 01/15/26 (Third renewal term) # # As a contrast, if the current offer does not coterm with the amended # offer (such as when `end_policy` is `AFTER_DURATION`), then the # terms will be: # # 1. 05/06/24 - 11/06/24 (First term, ends on 11/06, no coterming) # 2. 11/06/24 - 05/06/25 (First renewal term) # 3. 05/06/25 - 11/06/25 (Second renewal term) # 4. 11/06/25 - 05/06/26 (Third renewal term) # # If this is set, then the following conditions must be met: # # * `single_product_offer.amended_private_offer` must be set, and the # amended private offer must not be ended. # * The proration policy must not change (e.g., you cannot switch # between `MONTHLY_PRORATED` and `MONTHLY_NOT_PRORATED`). # * The current offer must not have custom intervals (where # `custom_interval_price` is set). # * `term.duration_months` must match the amended private offer's # duration. # * The amended private offer must not have a standard interval # of `MONTHLY_POSTPAY`. # # This is currently not supported. MATCH_AMENDED_OFFER = 3 end end # Configurations for the offer that is associated with a single product. # @!attribute [rw] amended_private_offer # @return [::String] # Optional. An existing private offer that will be superseded by this # offer. Unless the private offer is for a product type that supports # [multiple active # orders](https://cloud.google.com/marketplace/docs/partners/offers/multiple-offers), # an amendment private offer must be transacted if and only if the # destination customer billing account already contains an active order # for the same product. The offer to be superseded must be the offer # associated with an active order. # # Amendments generally fall into one of two scenarios: # # 1. **Active Order / Ended Offer**: The term of the amended offer has # ended but it is still associated with an active order. The new # offer must amend the ended private offer. # 2. **Active Order / Active Offer**: The term of the amended offer is # still active and the associated order is active. Similar to above, # the new offer must amend the currently active offer (unless # "multiple active orders" are supported). # # If this is set, then the `base_standard_offer` parent service must # match the parent service of the `base_standard_offer` in the # `amended_private_offer`. # # **Active Term Restrictions**: # If the term of the amended private offer has *NOT* ended, then the # following compatibility rules apply: # # * **Price Model Compatibility**: # * Flat Fee (with or without usage) offers can amend Flat Fee # offers. # * Usage-only or CUD offers can amend usage-only offers. # * Commitment-based offers must amend offers of the same price # model subtype (e.g., "additional usage at list price" vs "all # usage discounted"). # * **Billing Frequency Compatibility**: Determined by # `standard_interval` or `custom_interval_price`. # * If the amended offer has a custom billing frequency, the new # offer must also have a custom frequency. # * If the amended offer has a standard frequency (Monthly, # Quarterly, or Yearly), the new offer must maintain the same # frequency or transition to a custom frequency. # * Switching between different standard frequencies (e.g., Monthly # to Quarterly) is not supported. # * For Monthly frequency, switching between `MONTHLY_PRORATED` # and `MONTHLY_NOT_PRORATED` is supported, unless the offer's # `term.end_policy` is `MATCH_AMENDED_OFFER`. # * For usage-only offers, there are no billing frequency # restrictions. # # Other criteria for offer amendment are detailed elsewhere. # # Note: The following fields are mutually exclusive: `amended_private_offer`, `amended_standard_offer`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] amended_standard_offer # @return [::String] # Optional. An existing standard offer that will be superseded by this # offer. An amendment private offer must be transacted if the destination # customer billing account already contains an active order for the same # product, and otherwise cannot be transacted. The offer to be superseded # must be the offer associated with the active order. # # If this is set, then the `base_standard_offer` must contain the same # parent service as the parent service of the `amended_standard_offer`. # The price model of this offer must be compatible with the price model # of the `amended_standard_offer`: # # * Flat Fee, or Flat Fee with usage offers can amend Flat Fee or Flat # Fee with usage standard offers. # * Usage-only offers, or CUD offers can amend usage-only standard # offers. # # Other criteria for offer amendment are detailed elsewhere. # # Note: The following fields are mutually exclusive: `amended_standard_offer`, `amended_private_offer`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] standard_interval_price # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::StandardIntervalPrice] # Optional. Price configurations for offers with standard intervals. # A price must be set when publishing the offer. # # Note: The following fields are mutually exclusive: `standard_interval_price`, `custom_interval_price`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] custom_interval_price # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::CustomIntervalPrice] # Optional. Price configurations for offers with custom intervals. # Custom interval corresponds to "custom billing frequency", # see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule. # A price must be set when publishing the offer. # # Note: The following fields are mutually exclusive: `custom_interval_price`, `standard_interval_price`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] base_standard_offer # @return [::String] # Optional. The StandardOffer this PrivateOffer is based on. # Must be in the same project as the private offer, and must be effective # at the time of publishing. Must be present to publish the offer. # # Format: # projects/\\{project}/locations/\\{location}/services/\\{service}/standardOffers/\\{standard_offer} # @!attribute [r] service_level # @return [::String] # Output only. The service level (also known as the 'plan') of the base # standard offer. The value is populated at publish time from the base # standard offer. # @!attribute [r] reseller_private_offer_plan_id # @return [::String] # Output only. Present for offers created by a reseller from a reseller # private offer plan (RPOP). When set, contains the ID of the originating # RPOP. Not included for `PRIVATE_OFFER_VIEW_BASIC`. # @!attribute [rw] features # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Feature>] # Optional. The custom product features to display for this offer. # Feature `display_name` values must be unique to publish the offer. # The set of features specified here should generally include all features # included in the base service level, with optionally customized values, # but is not required to match exactly and may include additional features. # @!attribute [r] effective_installment_timeline # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Installment>] # Output only. The effective installment timeline of the offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. # Included for `PRIVATE_OFFER_VIEW_FULL` if all necessary information is # available to generate the timeline, and if the offer has # 'standard_interval_price' of 'MONTHLY_PRORATED', 'MONTHLY_NOT_PRORATED', # 'QUARTERLY_NOT_PRORATED', or 'YEARLY_NOT_PRORATED'. # @!attribute [r] contract_value # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::ContractValue] # Output only. Contract value of the offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. # @!attribute [r] revenue_share # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::RevenueShare] # Output only. Revenue share information for this Private Offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. class SingleProductOffer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Additional details used to describe customization of the service level. # # Features are used to distinguish service levels of the same product. # When a product has a single service level, all details can be contained # in the product documentation. When a product has multiple service levels, # each service level can be assigned a distinct set of features to # distinguish the key differences between the service levels. # # In addition to customizing pricing and other transaction details, a # private offer may include customization of partner-managed product # behavior. When this is the case, the details of the custom behavior are # described using features. # @!attribute [rw] display_name # @return [::String] # Optional. Human readable display text characterizing the feature. # Should be sufficiently detailed to identify the feature, allowing # features to be correlated across separate offers and service levels. # Must be non-empty to publish the offer. # The maximum allowed length is 128 characters. # Allows characters from the following Unicode Property Classes: # Letters, Numbers, Punctuation, Symbols, and Separators # @!attribute [rw] value # @return [::String] # Optional. Human readable display text reflecting the value of the # feature. Used for variable features not captured by the display_name # alone. The maximum allowed length is 3000 characters. Allows characters # from the following Unicode Property Classes: Letters, Numbers, # Punctuation, Symbols, and Separators class Feature include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price model of the private offer. # # Private offers are referred to as having different kinds of price models # based on the combination of fields set in the price model. The following # terminology is used in documentation and other reference material. # # * Usage-based: the price model does not set `flat_fee` # * Usage-only: the price model sets only `usage` # * CUD (committed use discount): the price model sets `commitment` # * Commitment discount with additional usage at list price: # The price model sets `commitment` and not `usage`. # * Commitment with all usage discounted: The price model sets # `commitment` and `usage`. # * Flat fee: the price model sets only `flat_fee` # * Flat fee with usage: the price model sets `flat_fee` and `usage` # # See # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-pricing-model#CUD # for the price models. # @!attribute [rw] flat_fee # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::FlatFee] # Optional. The price configurations for the flat fee subscription. # Must be unset when the base standard offer's price model does not # include subscription SKUs. # # Note: The following fields are mutually exclusive: `flat_fee`, `commitment`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] commitment # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Commitment] # Optional. The price configurations for the commitment based # subscription. Must be unset when the base standard offer's price # model includes subscription SKUs. # # Note: The following fields are mutually exclusive: `commitment`, `flat_fee`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] usage # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Usage] # Optional. The price configurations for the usage part. # If this field is set, the `Commitment.discount_percent` must be unset. # A private offer can apply a discount to all usage or to a usage # commitment, but not both. # Must be unset when the base standard offer's price model includes no # usage SKUs. class PriceModel include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # The discount for a specific SKU. # @!attribute [rw] sku # @return [::String] # Optional. The name of a partner SKU from this API. # # Must refer to a SKU in the price model of the base standard offer. # Inclusion in the base price model can occur either directly or # indirectly via inclusion in an included SkuGroup. # # Currently, standard offer price models include only partner SKUs # in the same project as the standard offer. This may change. # # Format: # projects/\\{project}/locations/\\{location}/services/\\{service}/skus/\\{sku} # # Note: The following fields are mutually exclusive: `sku`, `cloud_billing_sku`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] cloud_billing_sku # @return [::String] # Optional. The name of a Google SKU from the Cloud Billing API. # # Used for partner products sold by Google, such as Premium Operating # System Images sold for use in Compute Engine. This is not common. # SKUs of this type are not present on this API and can instead be # found on the Cloud Billing API or at https://cloud.google.com/skus. # # Must refer to a SKU in the price model of the base standard offer. # Google SKUs are always referenced in standard offers via SkuGroups. # # Format: services/\\{service}/skus/\\{sku} # # Note: The following fields are mutually exclusive: `cloud_billing_sku`, `sku`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] discount_percent # @return [::Google::Type::Decimal] # Optional. The discount percent for the SKU. # For example, `10` means a discount of 10%. If the original SKU # price is $100/hour then the discounted price will be $90/hour. # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", # and "". # Must be present to publish the offer. class SkuDiscount include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price for the usage SKUs. # @!attribute [rw] default_discount_percent # @return [::Google::Type::Decimal] # Optional. The default discount percent for usage SKUs. # An unset default discount percent is equivalent to 0 (no discount). # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "". # @!attribute [rw] sku_discounts # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::SkuDiscount>] # Optional. The discounts for the specific SKUs that override the # `default_discount_percent`. class Usage include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price configurations for the flat fee subscriptions. # @!attribute [rw] flat_fee_override # @return [::Google::Type::Money] # Optional. Flat fee overriding the default flat fee in the base # standard offer. Value cannot be negative. The currency must be "USD" # and precision is limited to cents. Must be present to publish the # offer, if the parent message is set. The maximum allowed value is # 1,000,000,000 USD. class FlatFee include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price configurations for the commitment based subscriptions. # @!attribute [rw] commitment_amount # @return [::Google::Type::Money] # Optional. The commitment balance that the customer will receive. # Value cannot be negative. # The currency must be "USD" and precision is limited to cents. # Must be present to publish the offer, if the parent message is set. # The maximum allowed value is 1,000,000,000 USD. # # If the current offer amends a private offer where the term has not # ended, and if the field # `single_product_offer.standard_interval_price.price_model.commitment.commitment_amount` # is set on both the current offer and the amended private offer, then # the commitment amount must be equal or higher on the current offer, # compared to the amended private offer. # @!attribute [rw] discount_percent # @return [::Google::Type::Decimal] # Optional. The discount percent on `commitment_amount`. # # For example, `10` means a discount of 10%. If the original # `commitment_amount` is $100 then the discounted amount will be $90. # The customer is charged $90 and receives $100 in credits. # # All reported usage will be charged at the standard price. # If this field is set, the `price_model.usage` must be unset. A # private offer can apply a discount to all usage or to a usage # commitment, but not both. # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "". # # Must be present to publish the offer. # @!attribute [rw] additional_credit # @return [::Google::Type::Money] # Optional. Additional credit granted to the customer. # Additional credits are only supported for custom interval offers. # Equivalent behavior can be achieved for standard interval offers by # varying the `commitment_amount` and `discount_percent`. # # Value cannot be negative. # The currency must be "USD" and precision is limited to cents. # The maximum allowed value is 1,000,000 USD. # @!attribute [rw] discard_previous_credit_balance # @return [::Boolean] # Optional. Whether to discard the previous credit balance when the # associated installment starts. If not set, the previous credit # balance will be rolled over to the current installment. # # If there are no previous installments, then the value of this field # will not matter - since it has no effect when no credits exist. class Commitment include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end end # Price configurations for offers with standard intervals. # @!attribute [rw] standard_interval # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::StandardIntervalPrice::StandardInterval] # Optional. The standard interval of the offer. # Must be present to publish unless the price model is usage-only. # @!attribute [rw] price_model # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel] # Optional. The price model of the offer. # Must be present to publish the offer. class StandardIntervalPrice include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # The options for offers with standard intervals. module StandardInterval # The private offer does not have an interval. # If this is set, then the offer is "usage-only". # Field `term.duration_months` must be positive. STANDARD_INTERVAL_UNSPECIFIED = 0 # The schedule of the monthly postpay offers. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # No longer supported as of May 2024. Cannot be used to publish # new offers. MONTHLY_POSTPAY = 1 # Monthly installments with proration. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 04/15, and the offer duration is # 3 months, the following installments will be created: # # 1: from 04/15 to 05/01, at the prorated price for April. # # # 2: from 05/01 to 06/01, at the full monthly price for May. # # # 3: from 06/01 to 07/01, at the full monthly price for June. # # # 4: from 07/01 to 07/15, at the prorated price for July. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. MONTHLY_PRORATED = 2 # Monthly installments without proration. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 04/15, and the offer duration is # 3 months, the following installments will be created: # # 1: from 04/15 to 05/15, at the full monthly price. # # # 2: from 05/15 to 06/15, at the full monthly price. # # # 3: from 06/15 to 07/15, at the full monthly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. MONTHLY_NOT_PRORATED = 3 # Quarterly installments which are not prorated. # This type of offer has "Quarterly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 01/15, and the offer duration is # 3 quarters, the following installments will be created: # # 1: from 01/15 to 04/15, at the full quarterly price. # # # 2: from 04/15 to 07/15, at the full quarterly price. # # # 3: from 07/15 to 10/15, at the full quarterly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. QUARTERLY_NOT_PRORATED = 4 # Yearly installments which are not prorated. # This type of offer has "Yearly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 01/15/2025, and the offer # duration is 3 years, the following installments will be created: # # 1: from 01/15/2025 to 01/15/2026, at the full yearly price. # # # 2: from 01/15/2026 to 01/15/2027, at the full yearly price. # # # 3: from 01/15/2027 to 01/15/2028, at the full yearly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. YEARLY_NOT_PRORATED = 5 end end # An installment of the offer. # @!attribute [rw] start_time # @return [::Google::Type::DateTime] # Optional. The start time of the installment. # Each installment must have a unique start time with one exception: # When the `term.start_policy` of the offer's term is `IMMEDIATE`, # the `start_time` of the first installment must be unset. # The actual start time is not recorded in the offer and instead is # determined by the time the resulting order became active. # # When the `term.start_policy` of the offer's term is # `SCHEDULED_START_TIME`, then the first installment's `start_time` must # match `term.scheduled_start_time`. # # If the `term.end_policy` of the offer's term is `SCHEDULED_END_TIME`, # then installment `start_time` must be before `term.scheduled_end_time`. # If it's `AFTER_DURATION`, then installment `start_time` must be before # the time calculated by adding the `term.duration_months` to # the start time of the offer. # # The `start_time` of the installments cannot be before the # `accept_deadline_time` of the offer. # # Installment start times must be in strictly increasing chronological # order. # @!attribute [rw] price_model # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel] # Optional. The price model of the installment. # All installments must have the same form of price model. class Installment include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Price configurations for offers with custom intervals. # @!attribute [rw] installments # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Installment>] # Optional. The installments that make up the installment timeline. # All installments must have the same form of price model (e.g. # all commitment, or all flat fee). A subscription must be present # under the price model for every installment. # # Must contain at least one installment to publish the offer. class CustomIntervalPrice include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The contract value of the offer. # @!attribute [r] total_contract_value # @return [::Google::Type::Money] # Output only. The total contract value of the offer. # This will be set for all non-draft private offers, as long as # 'PRIVATE_OFFER_VIEW_FULL' is requested. For DRAFT private offers, # this will be populated only when the end user's billing account is # set and when the pricing and term configuration is sufficiently # complete to allow for a calculation. class ContractValue include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Revenue Share information for a Private Offer. # For more details about the revenue share, including how the value is # determined, see # https://docs.cloud.google.com/marketplace/docs/partners/revenue-share-scenarios. # # Not included for `PRIVATE_OFFER_VIEW_BASIC`, or for DRAFT private offers. # # For non-draft private offers, these fields are populated based on the # following: # # * Offers published after April 20, 2025 will always have revenue # share fields populated. # * Offers published on or before April 20, 2025 will only have revenue # share fields populated if they were associated with an active, # unexpired order on that date. # @!attribute [r] current_term_vendor_net_revenue_percent # @return [::Google::Type::Decimal] # Output only. The revenue share currently in effect. # # The range of the value is between 0 and 100. For example, 80 # means the Vendor's current term revenue share is 80%. The vendor # will keep 80% of the revenue. # . # @!attribute [r] renewal_term_vendor_net_revenue_percent # @return [::Google::Type::Decimal] # Output only. The expected revenue share for the renewal term. # Not included if the offer does not have renewal terms. # # The range of the value is between 0 and 100. For example, 80 # means the Vendor's current term revenue share is 80%. The vendor # will keep 80% of the revenue after renewal. # . class RevenueShare include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end end # State of an offer. module State # Default value. This value is unused. STATE_UNSPECIFIED = 0 # The default state after creation when the offer can be edited. # In all other states, the contents of the offer cannot be edited. DRAFT = 1 # The offer is publishing. # Publishing will complete when all publishing requirements are satisfied. PUBLISHING = 2 # The offer has been published and is available to the customer to accept. PUBLISHED = 3 # The offer has been accepted by the customer. ACCEPTED = 4 # The offer was cancelled by the provider before it was transacted. # Cancelled offers can no longer be accepted by the customer. CANCELLED = 5 # The offer expired without being accepted by the customer. # Expired offers can no longer be accepted by the customer. EXPIRED = 6 # The offer has ended. # # Ended offers were accepted and active in the past, but have now reached # the end of their term or have been terminated. ENDED = 7 end # The type of the deal transacted with the offer. The deal type of an offer # is a factor in determining the offer's revenue share. module OfferDealType # Default value. This value is unused. OFFER_DEAL_TYPE_UNSPECIFIED = 0 # The offer corresponds to a preexisting commercial arrangement for a # workload on Google Cloud that is being transferred to the Cloud # Marketplace. CHANNEL_SHIFT = 1 # The offer corresponds to a preexisting commercial arrangement for a # workload previously not on Google Cloud that is being transferred to # Google Cloud. MIGRATION = 2 # The offer corresponds to a renewal of a deal initially transacted on # the Google Cloud Marketplace. NATIVE_RENEWAL = 3 # The offer corresponds to a new deal transacted on the Google Cloud # Marketplace. # # This value is not allowed if the offer amends another private offer # where the term has not ended, and the amended private offer has a deal # type of `MIGRATION`, `CHANNEL_SHIFT` or `NATIVE_RENEWAL`. NEW = 4 end end |
#update_time ⇒ ::Google::Protobuf::Timestamp (readonly)
Returns Output only. The last update time.
148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 |
# File 'proto_docs/google/cloud/commerceproducer/v1beta/private_offer.rb', line 148 class PrivateOffer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Information about the Google review process. # @!attribute [r] review_approve_time # @return [::Google::Protobuf::Timestamp] # Output only. The approval time of the Google review process. class PublishRequirementGoogleReview include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Contact information for a reseller. # @!attribute [r] contact # @return [::String] # Output only. The name of the reseller contact for this offer. # @!attribute [r] email # @return [::String] # Output only. The email of the reseller contact for this offer. class ResellerContact include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Contact information for the partner representative. # @!attribute [rw] contact # @return [::String] # Optional. Display text identifying the partner sales contact. # Displayed to the customer. # Must be provided when publishing the offer. # Maximum length: 256 characters. # @!attribute [rw] email # @return [::String] # Optional. The email address of the partner sales contact. # Displayed to the customer. # The format of the provided email address is validated when publishing the # offer, but no verification is performed that the email address actually # exists, accepts email, or is otherwise functional. class PartnerContact include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Information about the customer. # @!attribute [rw] entity_title # @return [::String] # Optional. A string identifying the customer's entity (for example, the # customer's organization or company name). Must be provided when # publishing the offer. Maximum length: 256 characters. # @!attribute [rw] contact # @return [::String] # Optional. A string identifying the customer contact. # Must be provided when publishing the offer. # Maximum length: 256 characters. # @!attribute [rw] email # @return [::String] # Optional. Email of customer contact. # If provided, it must be a well-formed email address. # @!attribute [r] address # @deprecated This field is deprecated and may be removed in the next major version update. # @return [::String] # Output only. Legal address of the customer organization. # This field can no longer be set, but it is preserved to return the # data from existing offers where address is set. # @!attribute [rw] target_billing_account # @return [::String] # Optional. The customer's billing account targeted by the offer. # The private offer once published can be accepted by a billing # administrator of the target billing account. If the customer accepts the # offer and later moves the resulting order to a new billing account, this # field will continue to reflect the original billing account to which the # private offer was extended. Must be provided when publishing the offer. # # To publish this private offer: # # * The billing account must exist. # * The billing account must not be in a free trial. # * The billing account must comply with Marketplace Reselling Policies. # * Reseller parent billing accounts are prohibited. Reseller subaccounts # are prohibited unless the service is enabled for reselling. # # Format: billingAccounts/012345-567890-ABCDEF class Customer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Configurations for the offer term and renewal options. # Extending a private offer to a customer that covers a given term # constitutes a guarantee to the customer that the product will remain # available to them for the duration of the term. # @!attribute [rw] duration_months # @return [::Integer] # Optional. Duration in months of the offer term. # The offer will end on the same day of the month after this duration. If # that date is not available, the offer will end on the last day of the # month. For example, if the offer starts on 01/31/2024 and the duration # is 13 months, the offer will end on 02/28/2025. # Must be set to publish the offer if the end policy is `AFTER_DURATION` # or `MATCH_AMENDED_OFFER`, and must be a positive value. # # The maximum possible offer duration, including all renewal terms, # cannot exceed 7 years. For example, if `duration_months` is 9 and # `term.max_renewal_count` is 9, then the maximum possible offer duration # is 90 months and exceeds the 7 year limit. # # Note: The following fields are mutually exclusive: `duration_months`, `scheduled_end_time`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] scheduled_end_time # @return [::Google::Type::DateTime] # Optional. Specified end time of the offer. # Must be set to publish the offer if the end policy is # `SCHEDULED_END_TIME`. # When set, the time must be in the future and at a day boundary in the # America/Los_Angeles time zone, and must be after # `term.scheduled_start_time` if applicable. # # Note: The following fields are mutually exclusive: `scheduled_end_time`, `duration_months`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] max_renewal_count # @return [::Integer] # Optional. The max number of renewals allowed, after the initial term # ends. This field is only relevant to standard interval offers with # interval of 'MONTHLY_PRORATED', 'MONTHLY_NOT_PRORATED', # 'QUARTERLY_NOT_PRORATED' or 'YEARLY_NOT_PRORATED'. Other types of # offers cannot be renewed. # # For example, if the initial term is 1 year and the max renewals is 3, # the customer can renew the offer for up to 3 additional years after the # initial term ends. Customers control whether they renew the offer. # # Allowing a customer to renew an offer does not constitute a guarantee # to the customer that the offered product will still be available to be # renewed at the renewal date. # # An offer with a max renewal count of 0 cannot be renewed. # Must be non-negative. # # Note: The following fields are mutually exclusive: `max_renewal_count`, `unlimited_renewal`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [r] unlimited_renewal # @deprecated This field is deprecated and may be removed in the next major version update. # @return [::Boolean] # Output only. Deprecated: This field can only be true on existing offers # with standard interval of 'MONTHLY_POSTPAY'. As of May 2024, we no # longer allow unlimited renewals. # # Note: The following fields are mutually exclusive: `unlimited_renewal`, `max_renewal_count`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] start_policy # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::Term::StartPolicy] # Optional. Defines when the resulting order should start. # Must be set when publishing the offer. # @!attribute [rw] scheduled_start_time # @return [::Google::Type::DateTime] # Optional. The scheduled start time of the offer. Cannot exceed one year # from the time of publish. # # If the start policy is `SCHEDULED_START_TIME`, a future time at a day # boundary in the America/Los_Angeles time zone must be provided when # publishing the offer. # # If the offer amends another private or standard offer, then the # scheduled start time must be: # # * Before or equal to the amended offer's end time if the offer's # end policy is not MATCH_AMENDED_OFFER. Otherwise, it has to be # strictly before the amended offer's end time. # * Before or equal to the start time of the next pending installment of # the amended offer, if amending a private offer with custom # installments. For example, if the amended offer has installments on # 01/01, 02/01, 03/01, 04/01, and today is 02/15, then the new offer's # `scheduled_start_time` must be at or before 03/01. # @!attribute [rw] end_policy # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::Term::EndPolicy] # Optional. Defines when an offer should end. # Must be set when publishing the offer. # @!attribute [r] effective_term_end_time # @return [::Google::Type::DateTime] # Output only. The expected end time of the current offer term. # # At the end of each offer term, an offer associated with an active # order will either renew or end. When an offer renews, a new term begins # and this value changes to reflect the end time of the new term. # When an offer ends this value is no longer set and instead `end_time` is # set. # # When the term of an offer ends and the offer does not renew, the # associated order also ends if the base standard offer has a # subscription price model. Otherwise, the associated order does not end # and remains active. # # Not included for PRIVATE_OFFER_VIEW_BASIC. # Included for PRIVATE_OFFER_VIEW_FULL when the offer has not ended and # either the offer has started or the value can be derived from other # fields. # # For offers that have not started, this field is set when one of the # following conditions is true. # # * The offer sets `term.scheduled_end_time`. # * The offer sets `term.scheduled_start_time` and `term.duration_months`, # the offer's `term.end_policy` is not `MATCH_AMENDED_OFFER`, and the # offer does not have standard_interval set to `MONTHLY_POSTPAY`. class Term include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Defines when an offer should start. module StartPolicy # Default value. This value is unused. START_POLICY_UNSPECIFIED = 0 # The resulting order starts immediately upon the customer's acceptance # of the offer, if no partner approval is required, or else immediately # after the partner approves the purchase if order approval is required. # This enum value cannot be combined with `term.scheduled_start_time`. IMMEDIATE = 1 # The resulting order starts at the scheduled start time. SCHEDULED_START_TIME = 2 end # Defines when an offer should end. module EndPolicy # Default value. This value is unused. END_POLICY_UNSPECIFIED = 0 # Offer ends after the specified duration. # If this is set, then `duration_months` must be positive. AFTER_DURATION = 1 # Offer ends at the schduled time. SCHEDULED_END_TIME = 2 # Offer coterms to the amended offer - the offer ends at the end of the # amended offer's term # # For example, if the amended offer starts on 01/15/24, and has a # duration of 6 months, then it ends on 07/15/24. If the current offer # coterms to the previous offer, and the current offer starts on # 05/06/24, then it will still end on 07/15/24. Assuming the current # offer renews 3 times, then the terms on the current offer will be: # # 1. 05/06/24 - 07/15/24 (First term, ends on 07/15 to coterm with the # amended offer) # 2. 07/15/24 - 01/15/25 (First renewal term) # 3. 01/15/25 - 07/15/25 (Second renewal term) # 4. 07/15/25 - 01/15/26 (Third renewal term) # # As a contrast, if the current offer does not coterm with the amended # offer (such as when `end_policy` is `AFTER_DURATION`), then the # terms will be: # # 1. 05/06/24 - 11/06/24 (First term, ends on 11/06, no coterming) # 2. 11/06/24 - 05/06/25 (First renewal term) # 3. 05/06/25 - 11/06/25 (Second renewal term) # 4. 11/06/25 - 05/06/26 (Third renewal term) # # If this is set, then the following conditions must be met: # # * `single_product_offer.amended_private_offer` must be set, and the # amended private offer must not be ended. # * The proration policy must not change (e.g., you cannot switch # between `MONTHLY_PRORATED` and `MONTHLY_NOT_PRORATED`). # * The current offer must not have custom intervals (where # `custom_interval_price` is set). # * `term.duration_months` must match the amended private offer's # duration. # * The amended private offer must not have a standard interval # of `MONTHLY_POSTPAY`. # # This is currently not supported. MATCH_AMENDED_OFFER = 3 end end # Configurations for the offer that is associated with a single product. # @!attribute [rw] amended_private_offer # @return [::String] # Optional. An existing private offer that will be superseded by this # offer. Unless the private offer is for a product type that supports # [multiple active # orders](https://cloud.google.com/marketplace/docs/partners/offers/multiple-offers), # an amendment private offer must be transacted if and only if the # destination customer billing account already contains an active order # for the same product. The offer to be superseded must be the offer # associated with an active order. # # Amendments generally fall into one of two scenarios: # # 1. **Active Order / Ended Offer**: The term of the amended offer has # ended but it is still associated with an active order. The new # offer must amend the ended private offer. # 2. **Active Order / Active Offer**: The term of the amended offer is # still active and the associated order is active. Similar to above, # the new offer must amend the currently active offer (unless # "multiple active orders" are supported). # # If this is set, then the `base_standard_offer` parent service must # match the parent service of the `base_standard_offer` in the # `amended_private_offer`. # # **Active Term Restrictions**: # If the term of the amended private offer has *NOT* ended, then the # following compatibility rules apply: # # * **Price Model Compatibility**: # * Flat Fee (with or without usage) offers can amend Flat Fee # offers. # * Usage-only or CUD offers can amend usage-only offers. # * Commitment-based offers must amend offers of the same price # model subtype (e.g., "additional usage at list price" vs "all # usage discounted"). # * **Billing Frequency Compatibility**: Determined by # `standard_interval` or `custom_interval_price`. # * If the amended offer has a custom billing frequency, the new # offer must also have a custom frequency. # * If the amended offer has a standard frequency (Monthly, # Quarterly, or Yearly), the new offer must maintain the same # frequency or transition to a custom frequency. # * Switching between different standard frequencies (e.g., Monthly # to Quarterly) is not supported. # * For Monthly frequency, switching between `MONTHLY_PRORATED` # and `MONTHLY_NOT_PRORATED` is supported, unless the offer's # `term.end_policy` is `MATCH_AMENDED_OFFER`. # * For usage-only offers, there are no billing frequency # restrictions. # # Other criteria for offer amendment are detailed elsewhere. # # Note: The following fields are mutually exclusive: `amended_private_offer`, `amended_standard_offer`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] amended_standard_offer # @return [::String] # Optional. An existing standard offer that will be superseded by this # offer. An amendment private offer must be transacted if the destination # customer billing account already contains an active order for the same # product, and otherwise cannot be transacted. The offer to be superseded # must be the offer associated with the active order. # # If this is set, then the `base_standard_offer` must contain the same # parent service as the parent service of the `amended_standard_offer`. # The price model of this offer must be compatible with the price model # of the `amended_standard_offer`: # # * Flat Fee, or Flat Fee with usage offers can amend Flat Fee or Flat # Fee with usage standard offers. # * Usage-only offers, or CUD offers can amend usage-only standard # offers. # # Other criteria for offer amendment are detailed elsewhere. # # Note: The following fields are mutually exclusive: `amended_standard_offer`, `amended_private_offer`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] standard_interval_price # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::StandardIntervalPrice] # Optional. Price configurations for offers with standard intervals. # A price must be set when publishing the offer. # # Note: The following fields are mutually exclusive: `standard_interval_price`, `custom_interval_price`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] custom_interval_price # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::CustomIntervalPrice] # Optional. Price configurations for offers with custom intervals. # Custom interval corresponds to "custom billing frequency", # see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule. # A price must be set when publishing the offer. # # Note: The following fields are mutually exclusive: `custom_interval_price`, `standard_interval_price`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] base_standard_offer # @return [::String] # Optional. The StandardOffer this PrivateOffer is based on. # Must be in the same project as the private offer, and must be effective # at the time of publishing. Must be present to publish the offer. # # Format: # projects/\\{project}/locations/\\{location}/services/\\{service}/standardOffers/\\{standard_offer} # @!attribute [r] service_level # @return [::String] # Output only. The service level (also known as the 'plan') of the base # standard offer. The value is populated at publish time from the base # standard offer. # @!attribute [r] reseller_private_offer_plan_id # @return [::String] # Output only. Present for offers created by a reseller from a reseller # private offer plan (RPOP). When set, contains the ID of the originating # RPOP. Not included for `PRIVATE_OFFER_VIEW_BASIC`. # @!attribute [rw] features # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Feature>] # Optional. The custom product features to display for this offer. # Feature `display_name` values must be unique to publish the offer. # The set of features specified here should generally include all features # included in the base service level, with optionally customized values, # but is not required to match exactly and may include additional features. # @!attribute [r] effective_installment_timeline # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Installment>] # Output only. The effective installment timeline of the offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. # Included for `PRIVATE_OFFER_VIEW_FULL` if all necessary information is # available to generate the timeline, and if the offer has # 'standard_interval_price' of 'MONTHLY_PRORATED', 'MONTHLY_NOT_PRORATED', # 'QUARTERLY_NOT_PRORATED', or 'YEARLY_NOT_PRORATED'. # @!attribute [r] contract_value # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::ContractValue] # Output only. Contract value of the offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. # @!attribute [r] revenue_share # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::RevenueShare] # Output only. Revenue share information for this Private Offer. # Not included for `PRIVATE_OFFER_VIEW_BASIC`. class SingleProductOffer include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # Additional details used to describe customization of the service level. # # Features are used to distinguish service levels of the same product. # When a product has a single service level, all details can be contained # in the product documentation. When a product has multiple service levels, # each service level can be assigned a distinct set of features to # distinguish the key differences between the service levels. # # In addition to customizing pricing and other transaction details, a # private offer may include customization of partner-managed product # behavior. When this is the case, the details of the custom behavior are # described using features. # @!attribute [rw] display_name # @return [::String] # Optional. Human readable display text characterizing the feature. # Should be sufficiently detailed to identify the feature, allowing # features to be correlated across separate offers and service levels. # Must be non-empty to publish the offer. # The maximum allowed length is 128 characters. # Allows characters from the following Unicode Property Classes: # Letters, Numbers, Punctuation, Symbols, and Separators # @!attribute [rw] value # @return [::String] # Optional. Human readable display text reflecting the value of the # feature. Used for variable features not captured by the display_name # alone. The maximum allowed length is 3000 characters. Allows characters # from the following Unicode Property Classes: Letters, Numbers, # Punctuation, Symbols, and Separators class Feature include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price model of the private offer. # # Private offers are referred to as having different kinds of price models # based on the combination of fields set in the price model. The following # terminology is used in documentation and other reference material. # # * Usage-based: the price model does not set `flat_fee` # * Usage-only: the price model sets only `usage` # * CUD (committed use discount): the price model sets `commitment` # * Commitment discount with additional usage at list price: # The price model sets `commitment` and not `usage`. # * Commitment with all usage discounted: The price model sets # `commitment` and `usage`. # * Flat fee: the price model sets only `flat_fee` # * Flat fee with usage: the price model sets `flat_fee` and `usage` # # See # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-pricing-model#CUD # for the price models. # @!attribute [rw] flat_fee # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::FlatFee] # Optional. The price configurations for the flat fee subscription. # Must be unset when the base standard offer's price model does not # include subscription SKUs. # # Note: The following fields are mutually exclusive: `flat_fee`, `commitment`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] commitment # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Commitment] # Optional. The price configurations for the commitment based # subscription. Must be unset when the base standard offer's price # model includes subscription SKUs. # # Note: The following fields are mutually exclusive: `commitment`, `flat_fee`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] usage # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Usage] # Optional. The price configurations for the usage part. # If this field is set, the `Commitment.discount_percent` must be unset. # A private offer can apply a discount to all usage or to a usage # commitment, but not both. # Must be unset when the base standard offer's price model includes no # usage SKUs. class PriceModel include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # The discount for a specific SKU. # @!attribute [rw] sku # @return [::String] # Optional. The name of a partner SKU from this API. # # Must refer to a SKU in the price model of the base standard offer. # Inclusion in the base price model can occur either directly or # indirectly via inclusion in an included SkuGroup. # # Currently, standard offer price models include only partner SKUs # in the same project as the standard offer. This may change. # # Format: # projects/\\{project}/locations/\\{location}/services/\\{service}/skus/\\{sku} # # Note: The following fields are mutually exclusive: `sku`, `cloud_billing_sku`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] cloud_billing_sku # @return [::String] # Optional. The name of a Google SKU from the Cloud Billing API. # # Used for partner products sold by Google, such as Premium Operating # System Images sold for use in Compute Engine. This is not common. # SKUs of this type are not present on this API and can instead be # found on the Cloud Billing API or at https://cloud.google.com/skus. # # Must refer to a SKU in the price model of the base standard offer. # Google SKUs are always referenced in standard offers via SkuGroups. # # Format: services/\\{service}/skus/\\{sku} # # Note: The following fields are mutually exclusive: `cloud_billing_sku`, `sku`. If a field in that set is populated, all other fields in the set will automatically be cleared. # @!attribute [rw] discount_percent # @return [::Google::Type::Decimal] # Optional. The discount percent for the SKU. # For example, `10` means a discount of 10%. If the original SKU # price is $100/hour then the discounted price will be $90/hour. # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", # and "". # Must be present to publish the offer. class SkuDiscount include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price for the usage SKUs. # @!attribute [rw] default_discount_percent # @return [::Google::Type::Decimal] # Optional. The default discount percent for usage SKUs. # An unset default discount percent is equivalent to 0 (no discount). # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "". # @!attribute [rw] sku_discounts # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::SkuDiscount>] # Optional. The discounts for the specific SKUs that override the # `default_discount_percent`. class Usage include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price configurations for the flat fee subscriptions. # @!attribute [rw] flat_fee_override # @return [::Google::Type::Money] # Optional. Flat fee overriding the default flat fee in the base # standard offer. Value cannot be negative. The currency must be "USD" # and precision is limited to cents. Must be present to publish the # offer, if the parent message is set. The maximum allowed value is # 1,000,000,000 USD. class FlatFee include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The price configurations for the commitment based subscriptions. # @!attribute [rw] commitment_amount # @return [::Google::Type::Money] # Optional. The commitment balance that the customer will receive. # Value cannot be negative. # The currency must be "USD" and precision is limited to cents. # Must be present to publish the offer, if the parent message is set. # The maximum allowed value is 1,000,000,000 USD. # # If the current offer amends a private offer where the term has not # ended, and if the field # `single_product_offer.standard_interval_price.price_model.commitment.commitment_amount` # is set on both the current offer and the amended private offer, then # the commitment amount must be equal or higher on the current offer, # compared to the amended private offer. # @!attribute [rw] discount_percent # @return [::Google::Type::Decimal] # Optional. The discount percent on `commitment_amount`. # # For example, `10` means a discount of 10%. If the original # `commitment_amount` is $100 then the discounted amount will be $90. # The customer is charged $90 and receives $100 in credits. # # All reported usage will be charged at the standard price. # If this field is set, the `price_model.usage` must be unset. A # private offer can apply a discount to all usage or to a usage # commitment, but not both. # # Must be between 0 and 100 inclusive, with precision up to 2 decimal # places. If this field is set, then the allowed pattern for 'value' # is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`. # Examples of valid values: "0", "100.0", "12.34", "40.0". # Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "". # # Must be present to publish the offer. # @!attribute [rw] additional_credit # @return [::Google::Type::Money] # Optional. Additional credit granted to the customer. # Additional credits are only supported for custom interval offers. # Equivalent behavior can be achieved for standard interval offers by # varying the `commitment_amount` and `discount_percent`. # # Value cannot be negative. # The currency must be "USD" and precision is limited to cents. # The maximum allowed value is 1,000,000 USD. # @!attribute [rw] discard_previous_credit_balance # @return [::Boolean] # Optional. Whether to discard the previous credit balance when the # associated installment starts. If not set, the previous credit # balance will be rolled over to the current installment. # # If there are no previous installments, then the value of this field # will not matter - since it has no effect when no credits exist. class Commitment include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end end # Price configurations for offers with standard intervals. # @!attribute [rw] standard_interval # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::StandardIntervalPrice::StandardInterval] # Optional. The standard interval of the offer. # Must be present to publish unless the price model is usage-only. # @!attribute [rw] price_model # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel] # Optional. The price model of the offer. # Must be present to publish the offer. class StandardIntervalPrice include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods # The options for offers with standard intervals. module StandardInterval # The private offer does not have an interval. # If this is set, then the offer is "usage-only". # Field `term.duration_months` must be positive. STANDARD_INTERVAL_UNSPECIFIED = 0 # The schedule of the monthly postpay offers. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # No longer supported as of May 2024. Cannot be used to publish # new offers. MONTHLY_POSTPAY = 1 # Monthly installments with proration. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 04/15, and the offer duration is # 3 months, the following installments will be created: # # 1: from 04/15 to 05/01, at the prorated price for April. # # # 2: from 05/01 to 06/01, at the full monthly price for May. # # # 3: from 06/01 to 07/01, at the full monthly price for June. # # # 4: from 07/01 to 07/15, at the prorated price for July. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. MONTHLY_PRORATED = 2 # Monthly installments without proration. # This type of offer has "Monthly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 04/15, and the offer duration is # 3 months, the following installments will be created: # # 1: from 04/15 to 05/15, at the full monthly price. # # # 2: from 05/15 to 06/15, at the full monthly price. # # # 3: from 06/15 to 07/15, at the full monthly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. MONTHLY_NOT_PRORATED = 3 # Quarterly installments which are not prorated. # This type of offer has "Quarterly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 01/15, and the offer duration is # 3 quarters, the following installments will be created: # # 1: from 01/15 to 04/15, at the full quarterly price. # # # 2: from 04/15 to 07/15, at the full quarterly price. # # # 3: from 07/15 to 10/15, at the full quarterly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. QUARTERLY_NOT_PRORATED = 4 # Yearly installments which are not prorated. # This type of offer has "Yearly" billing frequency (see # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule). # For example, if the offer starts on 01/15/2025, and the offer # duration is 3 years, the following installments will be created: # # 1: from 01/15/2025 to 01/15/2026, at the full yearly price. # # # 2: from 01/15/2026 to 01/15/2027, at the full yearly price. # # # 3: from 01/15/2027 to 01/15/2028, at the full yearly price. # # All dates represent the start of that day in the America/Los_Angeles # time zone. # # If this is set: # # * The `PriceModel.subscription` oneof must be set. # * Field `term.duration_months` must be positive. YEARLY_NOT_PRORATED = 5 end end # An installment of the offer. # @!attribute [rw] start_time # @return [::Google::Type::DateTime] # Optional. The start time of the installment. # Each installment must have a unique start time with one exception: # When the `term.start_policy` of the offer's term is `IMMEDIATE`, # the `start_time` of the first installment must be unset. # The actual start time is not recorded in the offer and instead is # determined by the time the resulting order became active. # # When the `term.start_policy` of the offer's term is # `SCHEDULED_START_TIME`, then the first installment's `start_time` must # match `term.scheduled_start_time`. # # If the `term.end_policy` of the offer's term is `SCHEDULED_END_TIME`, # then installment `start_time` must be before `term.scheduled_end_time`. # If it's `AFTER_DURATION`, then installment `start_time` must be before # the time calculated by adding the `term.duration_months` to # the start time of the offer. # # The `start_time` of the installments cannot be before the # `accept_deadline_time` of the offer. # # Installment start times must be in strictly increasing chronological # order. # @!attribute [rw] price_model # @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel] # Optional. The price model of the installment. # All installments must have the same form of price model. class Installment include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Price configurations for offers with custom intervals. # @!attribute [rw] installments # @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Installment>] # Optional. The installments that make up the installment timeline. # All installments must have the same form of price model (e.g. # all commitment, or all flat fee). A subscription must be present # under the price model for every installment. # # Must contain at least one installment to publish the offer. class CustomIntervalPrice include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # The contract value of the offer. # @!attribute [r] total_contract_value # @return [::Google::Type::Money] # Output only. The total contract value of the offer. # This will be set for all non-draft private offers, as long as # 'PRIVATE_OFFER_VIEW_FULL' is requested. For DRAFT private offers, # this will be populated only when the end user's billing account is # set and when the pricing and term configuration is sufficiently # complete to allow for a calculation. class ContractValue include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end # Revenue Share information for a Private Offer. # For more details about the revenue share, including how the value is # determined, see # https://docs.cloud.google.com/marketplace/docs/partners/revenue-share-scenarios. # # Not included for `PRIVATE_OFFER_VIEW_BASIC`, or for DRAFT private offers. # # For non-draft private offers, these fields are populated based on the # following: # # * Offers published after April 20, 2025 will always have revenue # share fields populated. # * Offers published on or before April 20, 2025 will only have revenue # share fields populated if they were associated with an active, # unexpired order on that date. # @!attribute [r] current_term_vendor_net_revenue_percent # @return [::Google::Type::Decimal] # Output only. The revenue share currently in effect. # # The range of the value is between 0 and 100. For example, 80 # means the Vendor's current term revenue share is 80%. The vendor # will keep 80% of the revenue. # . # @!attribute [r] renewal_term_vendor_net_revenue_percent # @return [::Google::Type::Decimal] # Output only. The expected revenue share for the renewal term. # Not included if the offer does not have renewal terms. # # The range of the value is between 0 and 100. For example, 80 # means the Vendor's current term revenue share is 80%. The vendor # will keep 80% of the revenue after renewal. # . class RevenueShare include ::Google::Protobuf::MessageExts extend ::Google::Protobuf::MessageExts::ClassMethods end end # State of an offer. module State # Default value. This value is unused. STATE_UNSPECIFIED = 0 # The default state after creation when the offer can be edited. # In all other states, the contents of the offer cannot be edited. DRAFT = 1 # The offer is publishing. # Publishing will complete when all publishing requirements are satisfied. PUBLISHING = 2 # The offer has been published and is available to the customer to accept. PUBLISHED = 3 # The offer has been accepted by the customer. ACCEPTED = 4 # The offer was cancelled by the provider before it was transacted. # Cancelled offers can no longer be accepted by the customer. CANCELLED = 5 # The offer expired without being accepted by the customer. # Expired offers can no longer be accepted by the customer. EXPIRED = 6 # The offer has ended. # # Ended offers were accepted and active in the past, but have now reached # the end of their term or have been terminated. ENDED = 7 end # The type of the deal transacted with the offer. The deal type of an offer # is a factor in determining the offer's revenue share. module OfferDealType # Default value. This value is unused. OFFER_DEAL_TYPE_UNSPECIFIED = 0 # The offer corresponds to a preexisting commercial arrangement for a # workload on Google Cloud that is being transferred to the Cloud # Marketplace. CHANNEL_SHIFT = 1 # The offer corresponds to a preexisting commercial arrangement for a # workload previously not on Google Cloud that is being transferred to # Google Cloud. MIGRATION = 2 # The offer corresponds to a renewal of a deal initially transacted on # the Google Cloud Marketplace. NATIVE_RENEWAL = 3 # The offer corresponds to a new deal transacted on the Google Cloud # Marketplace. # # This value is not allowed if the offer amends another private offer # where the term has not ended, and the amended private offer has a deal # type of `MIGRATION`, `CHANNEL_SHIFT` or `NATIVE_RENEWAL`. NEW = 4 end end |