""" Options: Date: 2025-09-13 14:17:08 Version: 8.80 Tip: To override a DTO option, remove "#" prefix before updating BaseUrl: https://prod-api-agency-orch-mb-dhc.rapp-customers.co.uk #GlobalNamespace: #AddServiceStackTypes: True #AddResponseStatus: False #AddImplicitVersion: #AddDescriptionAsComments: True IncludeTypes: GetPricingDetailsRequest.* #ExcludeTypes: #DefaultImports: datetime,decimal,marshmallow.fields:*,servicestack:*,typing:*,dataclasses:dataclass/field,dataclasses_json:dataclass_json/LetterCase/Undefined/config,enum:Enum/IntEnum #DataClass: #DataClassJson: """ 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 Source(IntEnum): ONLINE_SHOWROOM = 1 ONE_ADMIN = 2 @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class Address: property: Optional[str] = None street: Optional[str] = None town: Optional[str] = None county: Optional[str] = None locality: Optional[str] = None postcode: Optional[str] = None class CustomerMode(IntEnum): PRIVATE = 1 BUSINESS = 2 MOTABILITY = 3 @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class SalesforceCustomer(ICustomer): customer_id: Optional[str] = None is_ciam: bool = False company_name: Optional[str] = None title: Optional[str] = None firstname: Optional[str] = None surname: Optional[str] = None email_address: Optional[str] = None telephone: Optional[str] = None address: Optional[Address] = None mode: Optional[CustomerMode] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class Preferences: optin_email: bool = False optin_post: bool = False optin_s_m_s: bool = False optin_telephone: bool = False @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class Customer(SalesforceCustomer): profile_id: Optional[str] = None preferences: Optional[Preferences] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class OutrightPurchase: is_outright_purchase: bool = False reference: Optional[str] = None discount_rate: Decimal = decimal.Decimal(0) bm7_n_s_t: Optional[str] = None is_back_order: bool = False is_c_o_p_converter: bool = False @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class Vehicle: vin: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class Option: is_default: bool = False value: int = 0 @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class Term: options: List[Option] = field(default_factory=list) @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class Deposit: default: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class Mileage: options: List[Option] = field(default_factory=list) @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class AdvanceRentals: options: List[Option] = field(default_factory=list) class VehicleType(str, Enum): UNASSIGNED = 'UNASSIGNED' NEW = 'NEW' USED = 'USED' @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class FinanceCriteria: key: Optional[str] = None name: Optional[str] = None type: Optional[str] = None is_default: bool = False term: Optional[Term] = None deposit: Optional[Deposit] = None mileage: Optional[Mileage] = None advance_rentals: Optional[AdvanceRentals] = None is_personalised: bool = False regular_payment: Optional[str] = None part_exchange: Optional[str] = None settlement: Optional[str] = None customer_type: Optional[str] = None vehicle_type: Optional[VehicleType] = None class MotabilityType(IntEnum): PIP = 1 WPMS = 2 UNASSIGNED = 3 @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class CreateOrderBase: source: Optional[Source] = None gssn_id: Optional[str] = None additional_information: Optional[str] = None cash: bool = False finance: bool = False customer: Optional[Customer] = None vehicle: Optional[Vehicle] = None finance_criteria: Optional[FinanceCriteria] = None back_order_guid: Optional[str] = None tag_url: Optional[str] = None outright_purchase: Optional[OutrightPurchase] = None motability: bool = False motability_pricing_id: Optional[int] = None finance_application_reference: Optional[str] = None specialist: bool = False gas_id: Optional[str] = None personalised_item_offer_ids: Optional[List[int]] = None suggested_vin: Optional[str] = None non_optimum_reason: Optional[str] = None motability_type: Optional[MotabilityType] = None estimated_handover_date: Optional[str] = None class OfferPriceProductType(str, Enum): LIS_T__P_R_I_C_E = 'LIST_PRICE' NUMBE_R__P_L_A_T_E__F_E_E = 'NUMBER_PLATE_FEE' DELIVER_Y__C_H_A_R_G_E = 'DELIVERY_CHARGE' FUE_L__C_H_A_R_G_E = 'FUEL_CHARGE' MANUFACTURE_R__O_F_F_E_R = 'MANUFACTURER_OFFER' PERSONALISE_D__M_O_N_E_Y_O_F_F_E_R = 'PERSONALISED_MONEYOFFER' PERSONALISE_D__N_O_N_M_O_N_E_Y_O_F_F_E_R = 'PERSONALISED_NONMONEYOFFER' PERSONALISE_D__N_O_N_M_O_N_E_Y_O_F_F_E_R__N_E_G = 'PERSONALISED_NONMONEYOFFER_NEG' SERVICE = 'SERVICE' SERVIC_E__N_E_G = 'SERVICE_NEG' GOVERNMEN_T__G_R_A_N_T = 'GOVERNMENT_GRANT' OUTRIGH_T__P_U_R_C_H_A_S_E__D_I_S_C_O_U_N_T = 'OUTRIGHT_PURCHASE_DISCOUNT' VI_P__O_F_F_E_R = 'VIP_OFFER' WALLBO_X__O_F_F_E_R = 'WALLBOX_OFFER' WALLBO_X__O_F_F_E_R__N_E_G = 'WALLBOX_OFFER_NEG' ROA_D__F_U_N_D__L_I_C_E_N_C_E = 'ROAD_FUND_LICENCE' FIRS_T__R_E_G_I_S_T_R_A_T_I_O_N__F_E_E = 'FIRST_REGISTRATION_FEE' NO_T__F_O_U_N_D = 'NOT_FOUND' ACCESSOR_Y__O_F_F_E_R = 'ACCESSORY_OFFER' ACCESSOR_Y__O_F_F_E_R__N_E_G = 'ACCESSORY_OFFER_NEG' MOTABILIT_Y__D_I_S_C_O_U_N_T = 'MOTABILITY_DISCOUNT' @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class Price: id: Optional[str] = None description: Optional[str] = None net: Decimal = decimal.Decimal(0) vat: Decimal = decimal.Decimal(0) gross: Decimal = decimal.Decimal(0) product: Optional[OfferPriceProductType] = None class ICustomer: address: Optional[Address] = None company_name: Optional[str] = None customer_id: Optional[str] = None email_address: Optional[str] = None firstname: Optional[str] = None is_ciam: bool = False mode: Optional[CustomerMode] = None surname: Optional[str] = None telephone: Optional[str] = None title: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class GetPricingDetailsResponse: price: Optional[Price] = None # @Route("/v1/pricingdetails", "POST") @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class GetPricingDetailsRequest(CreateOrderBase, IReturn[GetPricingDetailsResponse], IPost): pass