| POST | /picup/createshipment |
|---|
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
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class LinkedWaypoint:
from_waypoint_number: int = 0
to_waypoint_number: int = 0
from_latitude: float = 0.0
from_longitude: float = 0.0
to_latitude: float = 0.0
to_longitude: float = 0.0
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class WaypointQuoteInformation(LinkedWaypoint):
# @ApiMember(Description="Distance between waypoints as a number")
distance: float = 0.0
"""
Distance between waypoints as a number
"""
# @ApiMember(Description="String formatted distance")
distance_value: Optional[str] = None
"""
String formatted distance
"""
waypoint_valid: bool = False
message: Optional[str] = None
error_details: Optional[List[str]] = None
# @ApiMember(Description="Caculated price between waypoints excluding vat")
price: Decimal = decimal.Decimal(0)
"""
Caculated price between waypoints excluding vat
"""
# @ApiMember(Description="Price excluding vat formatted as a string rand value")
price_value: Optional[str] = None
"""
Price excluding vat formatted as a string rand value
"""
# @ApiMember(Description="The price between waypoints including vat")
price_with_v_a_t: Decimal = decimal.Decimal(0)
"""
The price between waypoints including vat
"""
# @ApiMember(Description="The price including vat formatted as a rand value string")
price_value_with_v_a_t: Optional[str] = None
"""
The price including vat formatted as a rand value string
"""
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class WaypointValidationInformation:
waypoint_number: int = 0
is_valid: bool = False
error_messages: Optional[List[str]] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PicUpCreateShipmentResponse:
is_success: bool = False
courier_reference: Optional[str] = None
error: Optional[str] = None
# @ApiMember(Description="List of order information for pricing etc between each waypoint")
waypoints: Optional[List[WaypointQuoteInformation]] = None
"""
List of order information for pricing etc between each waypoint
"""
# @ApiMember(Description="List with validation information for each waypoint")
waypoint_validations: Optional[List[WaypointValidationInformation]] = None
"""
List with validation information for each waypoint
"""
# @ApiMember(Description="The 1Fetch Waybill reference for the shipment")
waybill: Optional[str] = None
"""
The 1Fetch Waybill reference for the shipment
"""
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BucketDetails:
delivery_date: datetime.datetime = datetime.datetime(1, 1, 1)
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CourierRequest:
bucket_details: Optional[BucketDetails] = None
shipments: Optional[List[Shipment]] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PicUpCreateShipmentRequest(IHasApiKey, ILogRequest):
api_key: Optional[str] = None
courier_request: Optional[CourierRequest] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Address:
address_line1: Optional[str] = None
address_line2: Optional[str] = None
address_line3: Optional[str] = None
address_line4: Optional[str] = None
city: Optional[str] = None
formatted_address: Optional[str] = None
latitude: float = 0.0
longitude: float = 0.0
postal_code: Optional[str] = None
suburb: Optional[str] = None
unit: Optional[str] = None
building: Optional[str] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Contact:
customer_name: Optional[str] = None
customer_phone: Optional[str] = None
email_address: Optional[str] = None
special_instructions: Optional[str] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Sender:
address: Optional[Address] = None
contact: Optional[Contact] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Receiver:
parcels: Optional[List[Parcel]] = None
address: Optional[Address] = None
contact: Optional[Contact] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Shipment:
waybill_number: Optional[str] = None
business_reference: Optional[str] = None
service_type: Optional[str] = None
sender: Optional[Sender] = None
receiver: Optional[Receiver] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Parcel:
parcel_waybill: Optional[str] = None
parcel_reference: Optional[str] = None
tracking_number: Optional[str] = None
length_mm: int = 0
width_mm: int = 0
height_mm: int = 0
weight_kg: int = 0
Python PicUpCreateShipmentRequest DTOs
To override the Content-type in your clients, use the HTTP Accept Header, append the .json suffix or ?format=json
To embed the response in a jsonp callback, append ?callback=myCallback
The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.
POST /picup/createshipment HTTP/1.1
Host: api.1fetch.co.za
Accept: application/json
Content-Type: application/json
Content-Length: length
{"ApiKey":"String","courier_request":{"bucket_details":{"delivery_date":"0001-01-01T00:00:00.0000000+00:00"},"shipments":[{"waybill_number":"String","business_reference":"String","service_type":"String","sender":{"address":{"address_line_1":"String","address_line_2":"String","address_line_3":"String","address_line_4":"String","city":"String","formatted_address":"String","latitude":0,"longitude":0,"postal_code":"String","suburb":"String","unit":"String","building":"String"},"contact":{"customer_name":"String","customer_phone":"String","email_address":"String","special_instructions":"String"}},"receiver":{"parcels":[{"parcel_waybill":"String","parcel_reference":"String","tracking_number":"String","length_mm":0,"width_mm":0,"height_mm":0,"weight_kg":0}],"address":{"address_line_1":"String","address_line_2":"String","address_line_3":"String","address_line_4":"String","city":"String","formatted_address":"String","latitude":0,"longitude":0,"postal_code":"String","suburb":"String","unit":"String","building":"String"},"contact":{"customer_name":"String","customer_phone":"String","email_address":"String","special_instructions":"String"}}}]}}
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: length
{"is_success":false,"courier_reference":"String","error":"String","Waypoints":[{}],"WaypointValidations":[{}],"Waybill":"String"}