| Requires any of the roles: | bookingsupplier-administrator-write, superadmin |
| POST | /voss/discountAgreements | Create discount agreement | Create discount agreement in VOSS System. |
|---|
import datetime
import decimal
from marshmallow.fields import *
from servicestack import *
from typing import *
from dataclasses import dataclass, field
from dataclasses_json import dataclass_json, LetterCase, Undefined, config
from enum import Enum, IntEnum
class DiscountAgreementStatusEnum(str, Enum):
DRAFT = 'Draft'
STAGED = 'Staged'
PUBLISHED = 'Published'
ARCHIVED = 'Archived'
DISCARDED = 'Discarded'
class ApplicationScopeEnum(str, Enum):
ANY = 'Any'
SUBSCRIPTION_CUSTOMER = 'SubscriptionCustomer'
NON_SUBSCRIPTION_CUSTOMER_INVOICE_RECIPIENT = 'NonSubscriptionCustomerInvoiceRecipient'
class PeriodKindEnum(str, Enum):
FIXED_TIME = 'FixedTime'
ALIGNED_TO_BINDING_PERIOD = 'AlignedToBindingPeriod'
ALIGNED_TO_SUBSCRIPTION_BILLING_PERIOD = 'AlignedToSubscriptionBillingPeriod'
class UnitEnum(str, Enum):
DAY = 'Day'
MONTH = 'Month'
YEAR = 'Year'
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class TimeLengthDto:
unit: Optional[UnitEnum] = None
value: int = 0
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class DiscountPeriodDto:
period_kind: Optional[PeriodKindEnum] = None
length: Optional[TimeLengthDto] = None
period_iteration_count: Optional[int] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class DiscountPackageDto:
id: Optional[str] = None
name: Optional[str] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class DiscountAgreementCustomerResultDto:
customer_id: Optional[str] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class DiscountAgreementCustomerGroupResultDto:
interval_start: int = 0
interval_end: int = 0
class DiscountTypeEnum(str, Enum):
FLAT_PRICE = 'FlatPrice'
PERCENTAGE = 'Percentage'
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PricingTierDiscountResultDto:
discount_type: Optional[DiscountTypeEnum] = None
id: Optional[str] = None
index: int = 0
unit_price_discount: float = 0.0
flat_price_discount: float = 0.0
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ProductPricingDiscountResultDto:
discount_type: Optional[DiscountTypeEnum] = None
id: Optional[str] = None
product_id: Optional[str] = None
unit_price_discount: float = 0.0
tier_pricing_discounts: List[PricingTierDiscountResultDto] = field(default_factory=list)
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ProductGroupDiscountResultDto:
id: Optional[str] = None
product_group_id: Optional[str] = None
product_pricing_discounts: List[ProductPricingDiscountResultDto] = field(default_factory=list)
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ChargePlanDiscountResultDto:
id: Optional[str] = None
charge_plan_id: Optional[str] = None
product_group_discounts: List[ProductGroupDiscountResultDto] = field(default_factory=list)
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class DiscountAgreementResult:
discount_agreement_status: Optional[DiscountAgreementStatusEnum] = None
application_scope: Optional[ApplicationScopeEnum] = None
id: Optional[str] = None
version_id: Optional[str] = None
source_version_id: Optional[str] = None
external_id: Optional[str] = None
name: Optional[str] = None
description: Optional[str] = None
valid_from: datetime.datetime = datetime.datetime(1, 1, 1)
valid_to: Optional[datetime.datetime] = None
discount_period: Optional[DiscountPeriodDto] = None
package: Optional[DiscountPackageDto] = None
customers: List[DiscountAgreementCustomerResultDto] = field(default_factory=list)
customer_groups: List[DiscountAgreementCustomerGroupResultDto] = field(default_factory=list)
charge_plan_discounts: List[ChargePlanDiscountResultDto] = field(default_factory=list)
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CreatePricingTierDiscountRequestDto:
discount_type: Optional[DiscountTypeEnum] = None
index: int = 0
unit_price_discount: float = 0.0
flat_price_discount: float = 0.0
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ProductPricingDiscountRequestDto:
discount_type: Optional[DiscountTypeEnum] = None
product_id: Optional[str] = None
unit_price_discount: float = 0.0
tier_pricing_discounts: List[CreatePricingTierDiscountRequestDto] = field(default_factory=list)
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CreateProductGroupDiscountRequestDto:
product_group_id: Optional[str] = None
product_pricing_discounts: List[ProductPricingDiscountRequestDto] = field(default_factory=list)
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CreateChargePlanDiscountRequestDto:
charge_plan_id: Optional[str] = None
product_group_discounts: List[CreateProductGroupDiscountRequestDto] = field(default_factory=list)
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class DiscountAgreementTimeLengthRequestDto:
unit: Optional[UnitEnum] = None
value: int = 0
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CreateDiscountPeriodRequestDto:
period_kind: Optional[PeriodKindEnum] = None
length: Optional[DiscountAgreementTimeLengthRequestDto] = None
period_iteration_count: Optional[int] = None
# @ApiResponse(Description="You were unauthorized to call this service", StatusCode=401)
# @ValidateRequest(Validator="IsAuthenticated")
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CreateVossDiscountAgreement:
# @ApiMember(Description="Discount agreement name", IsRequired=true)
name: Optional[str] = None
"""
Discount agreement name
"""
# @ApiMember(Description="Discount agreement name", IsRequired=true)
charge_plan_discounts: List[CreateChargePlanDiscountRequestDto] = field(default_factory=list)
"""
Discount agreement name
"""
description: Optional[str] = None
# @ApiMember(Description="Discount agreement name", IsRequired=true)
valid_from: datetime.datetime = datetime.datetime(1, 1, 1)
"""
Discount agreement name
"""
# @ApiMember(Description="Discount agreement name")
valid_to: Optional[datetime.datetime] = None
"""
Discount agreement name
"""
# @ApiMember(Description="Discount agreement name")
discount_period: Optional[CreateDiscountPeriodRequestDto] = None
"""
Discount agreement name
"""
Python CreateVossDiscountAgreement DTOs
To override the Content-type in your clients, use the HTTP Accept Header, append the .other suffix or ?format=other
The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.
POST /voss/discountAgreements HTTP/1.1
Host: api.bokamera.se
Accept: text/jsonl
Content-Type: text/jsonl
Content-Length: length
{"Name":"String","ChargePlanDiscounts":[{}],"Description":"String","ValidTo":"0001-01-01T00:00:00"}
HTTP/1.1 200 OK
Content-Type: text/jsonl
Content-Length: length
{"status":"Draft","applicationScope":"Any","sourceVersionId":"00000000-0000-0000-0000-000000000000","externalId":"String","name":"String","description":"String","validTo":"0001-01-01T00:00:00","customers":[{}],"customerGroups":[{}],"chargePlanDiscounts":[{}]}