BokaMera.API.Host

<back to all web services

CreateVossDiscountAgreement

Requires Authentication
Requires any of the roles:bookingsupplier-administrator-write, superadmin
The following routes are available for this service:
POST/voss/discountAgreementsCreate discount agreementCreate 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

HTTP + 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":[{}]}