| POST | /dealers/order | Places a new order with the specified items. |
|---|
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
Object = TypeVar('Object')
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class AuthenticatedRequest:
# @ApiMember(Description="Session token received from successful authentication.", IsRequired=true, ParameterType="query")
session_token: Optional[str] = None
"""
Session token received from successful authentication.
"""
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class NewOrderResult:
# @ApiMember(Description="Number for the order that has been placed.", ParameterType="model")
order_number: Optional[str] = None
"""
Number for the order that has been placed.
"""
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class OperationResult:
# @ApiMember(Description="Specifies if the operation was successful.", ParameterType="model")
is_successful: bool = False
"""
Specifies if the operation was successful.
"""
# @ApiMember(Description="States error message in case of unsuccessful operation.", ParameterType="model")
error_message: Optional[str] = None
"""
States error message in case of unsuccessful operation.
"""
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PartInfoResultImage:
# @ApiMember(Description="Image number")
image_number: int = 0
"""
Image number
"""
# @ApiMember(Description="Image URL")
image_url: Optional[str] = None
"""
Image URL
"""
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PartStockQuantity:
# @ApiMember(Description="Location ID")
location_id: int = 0
"""
Location ID
"""
# @ApiMember(Description="Location code")
location_code: Optional[str] = None
"""
Location code
"""
# @ApiMember(Description="Stock quantity in location")
stock_quantity: int = 0
"""
Stock quantity in location
"""
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PartInfoResult:
# @ApiMember(Description="Unique ID for the part.")
id: int = 0
"""
Unique ID for the part.
"""
# @ApiMember(Description="Part number.")
part_number: Optional[str] = None
"""
Part number.
"""
# @ApiMember(Description="Description of the part.")
description: Optional[str] = None
"""
Description of the part.
"""
# @ApiMember(Description="Part manufacturer.")
manufacturer: Optional[str] = None
"""
Part manufacturer.
"""
# @ApiMember(Description="Determines if the part can be ordered.")
can_be_ordered: bool = False
"""
Determines if the part can be ordered.
"""
# @ApiMember(Description="Textual representation of the status of the part.")
status_text: Optional[str] = None
"""
Textual representation of the status of the part.
"""
# @ApiMember(Description="Available stock to order.")
available_stock_quantity: int = 0
"""
Available stock to order.
"""
# @ApiMember(Description="Average days needed for delivery.")
average_delivery_in_days: Optional[int] = None
"""
Average days needed for delivery.
"""
# @ApiMember(Description="Price of a single unit, excluding VAT.")
unit_price: Optional[Decimal] = None
"""
Price of a single unit, excluding VAT.
"""
# @ApiMember(Description="EAN number.")
ean_number: Optional[str] = None
"""
EAN number.
"""
# @ApiMember(Description="Images")
images: Optional[List[PartInfoResultImage]] = None
"""
Images
"""
# @ApiMember(Description="Secondary article numbers")
secondary_article_numbers: Optional[List[str]] = None
"""
Secondary article numbers
"""
# @ApiMember(Description="Replacement article numbers")
replacement_article_numbers: Optional[List[str]] = None
"""
Replacement article numbers
"""
# @ApiMember(Description="Stock quantities")
stock_quantities: Optional[List[PartStockQuantity]] = None
"""
Stock quantities
"""
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PartResults:
# @ApiMember(Description="Total number of parts available.")
total_number_of_parts: int = 0
"""
Total number of parts available.
"""
# @ApiMember(Description="Indication if there are more parts to retrieve.")
has_more_records: bool = False
"""
Indication if there are more parts to retrieve.
"""
# @ApiMember(Description="Part records.")
parts: Optional[List[PartInfoResult]] = None
"""
Part records.
"""
T = TypeVar('T')
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class OperationResult1(Generic[T], OperationResult):
# @ApiMember(Description="Result value", ParameterType="model")
result: Optional[PartResults] = None
"""
Result value
"""
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class NewOrderResponse(OperationResult1[NewOrderResult]):
pass
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class NewOrderItem:
# @ApiMember(Description="Unique ID for the part.", IsRequired=true, ParameterType="body")
part_id: int = 0
"""
Unique ID for the part.
"""
# @ApiMember(Description="Quantity to order.", IsRequired=true, ParameterType="body")
quantity: int = 0
"""
Quantity to order.
"""
# @ApiMember(Description="Custom reference.", ParameterType="body")
reference: Optional[str] = None
"""
Custom reference.
"""
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class NewOrderItemList(List[NewOrderItem]):
pass
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class NewOrderAddress(IAddress):
# @ApiMember(Description="Company name.", ParameterType="body")
company_name: Optional[str] = None
"""
Company name.
"""
# @ApiMember(Description="First name.", ParameterType="body")
first_name: Optional[str] = None
"""
First name.
"""
# @ApiMember(Description="Last name.", ParameterType="body")
last_name: Optional[str] = None
"""
Last name.
"""
# @ApiMember(Description="Street name.", IsRequired=true, ParameterType="body")
street_name: Optional[str] = None
"""
Street name.
"""
# @ApiMember(Description="House number.", IsRequired=true, ParameterType="body")
house_number: Optional[str] = None
"""
House number.
"""
# @ApiMember(Description="House number addition.", ParameterType="body")
house_number_addition: Optional[str] = None
"""
House number addition.
"""
# @ApiMember(Description="Postal code.", IsRequired=true, ParameterType="body")
postal_code: Optional[str] = None
"""
Postal code.
"""
# @ApiMember(Description="City.", IsRequired=true, ParameterType="body")
city: Optional[str] = None
"""
City.
"""
# @ApiMember(Description="Country code.", IsRequired=true, ParameterType="body")
country_code: Optional[str] = None
"""
Country code.
"""
# @ApiMember(Description="Telephone number.", ParameterType="body")
telephone_number: Optional[str] = None
"""
Telephone number.
"""
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PostNewOrder(AuthenticatedRequest):
# @ApiMember(Description="Items to order.", IsRequired=true, ParameterType="body")
items: Optional[NewOrderItemList] = None
"""
Items to order.
"""
# @ApiMember(Description="Dropshipment indication.", ParameterType="body")
use_dropshipment: Optional[bool] = None
"""
Dropshipment indication.
"""
# @ApiMember(Description="Delivery address.", ParameterType="body")
delivery_address: Optional[NewOrderAddress] = None
"""
Delivery address.
"""
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 /dealers/order HTTP/1.1
Host: services.acct.2service.nl
Accept: text/jsonl
Content-Type: text/jsonl
Content-Length: length
{"Items":[{"PartId":0,"Quantity":0,"Reference":"String"}],"UseDropshipment":false,"DeliveryAddress":{"CompanyName":"String","FirstName":"String","LastName":"String","StreetName":"String","HouseNumber":"String","HouseNumberAddition":"String","PostalCode":"String","City":"String","CountryCode":"String","TelephoneNumber":"String"},"SessionToken":"String"}
HTTP/1.1 200 OK
Content-Type: text/jsonl
Content-Length: length
{"Result":{"OrderNumber":"String"},"IsSuccessful":false,"ErrorMessage":"String"}