| POST,OPTIONS | /v1/worker/dispatch/od/runs/{RunId}/complete |
|---|
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 CourierVanView:
state: Optional[str] = None
leave_by_utc: Optional[datetime.datetime] = None
leave_by_text: Optional[str] = None
slack_min: Optional[int] = None
in_van: int = 0
committed: int = 0
cap: Optional[Decimal] = None
cap_unit: Optional[str] = None
vehicle_unit: Optional[str] = None
critical_code: Optional[str] = None
drive_min: int = 0
facility_name: Optional[str] = None
send_note: Optional[str] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CourierItemView:
courier_item_i_d: int = 0
dispatch_od_request_i_d: int = 0
seq: int = 0
tag_code: Optional[str] = None
custody: Optional[str] = None
is_open: bool = False
is_missing: bool = False
missing_reason: Optional[str] = None
is_manual: bool = False
re_tag_flag: bool = False
scanned: bool = False
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CourierDriverOrder:
code: Optional[str] = None
courier_step: Optional[str] = None
route_shape: Optional[str] = None
profile_name: Optional[str] = None
unit_one: Optional[str] = None
unit_many: Optional[str] = None
facility_noun: Optional[str] = None
facility_name: Optional[str] = None
level_name: Optional[str] = None
due_utc: Optional[datetime.datetime] = None
due_text: Optional[str] = None
units: int = 0
units_found: Optional[int] = None
area: Optional[str] = None
minutes: Optional[int] = None
address: Optional[str] = None
unit: Optional[str] = None
city: Optional[str] = None
lat: Optional[Decimal] = None
lng: Optional[Decimal] = None
customer_name: Optional[str] = None
customer_phone: Optional[str] = None
handoff: Optional[str] = None
gate_code: Optional[str] = None
instructions: Optional[str] = None
dropoff_address: Optional[str] = None
dropoff_contact_name: Optional[str] = None
drop_lat: Optional[Decimal] = None
drop_lng: Optional[Decimal] = None
arrived_utc: Optional[datetime.datetime] = None
tags: List[CourierItemView] = field(default_factory=list)
proof: Dict[str, str] = field(default_factory=dict)
photos: Dict[str, int] = field(default_factory=dict)
needs: List[str] = field(default_factory=list)
missed_wait_min: int = 0
missed_require_contact: bool = False
missed_require_photo: bool = False
missed_fee: Decimal = decimal.Decimal(0)
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CourierStopView:
sequence: int = 0
status: Optional[str] = None
dispatch_od_request_i_d: int = 0
code: Optional[str] = None
courier_step: Optional[str] = None
address: Optional[str] = None
unit: Optional[str] = None
city: Optional[str] = None
zip: Optional[str] = None
lat: Optional[Decimal] = None
lng: Optional[Decimal] = None
customer_name: Optional[str] = None
customer_phone: Optional[str] = None
handoff: Optional[str] = None
gate_code: Optional[str] = None
instructions: Optional[str] = None
units: int = 0
due_text: Optional[str] = None
note: Optional[str] = None
needs: List[str] = field(default_factory=list)
items: List[CourierItemView] = field(default_factory=list)
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CourierRunView:
courier_run_i_d: int = 0
code: Optional[str] = None
status: Optional[str] = None
courier_profile_id: int = 0
profile_name: Optional[str] = None
courier_facility_id: int = 0
facility_name: Optional[str] = None
facility_address: Optional[str] = None
driver_contact_id: Optional[int] = None
driver_name: Optional[str] = None
equipment_i_d: Optional[int] = None
vehicle_unit: Optional[str] = None
unit_one: Optional[str] = None
unit_many: Optional[str] = None
units: int = 0
stop_count: int = 0
stops_done: int = 0
pay: Optional[Decimal] = None
built_utc: Optional[datetime.datetime] = None
started_utc: Optional[datetime.datetime] = None
completed_utc: Optional[datetime.datetime] = None
to_load: int = 0
to_return: int = 0
stops: List[CourierStopView] = field(default_factory=list)
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CourierDriverView:
driver_code: Optional[str] = None
name: Optional[str] = None
online: bool = False
on_roster: bool = False
van: Optional[CourierVanView] = None
current: Optional[CourierDriverOrder] = None
queue: List[CourierDriverOrder] = field(default_factory=list)
aboard: List[CourierDriverOrder] = field(default_factory=list)
runs: List[CourierRunView] = field(default_factory=list)
up_next: Optional[CourierDriverOrder] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CourierDriverResponse:
courier: Optional[CourierDriverView] = None
result: Optional[str] = None
detail: Optional[str] = None
message: Optional[str] = None
response_status: Optional[ResponseStatus] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CourierRunCompleteRequest:
run_id: int = 0
Python CourierRunCompleteRequest DTOs
To override the Content-type in your clients, use the HTTP Accept Header, append the .jsv suffix or ?format=jsv
The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.
POST /v1/worker/dispatch/od/runs/{RunId}/complete HTTP/1.1
Host: api.dev.dynamics.trendsic.com
Accept: text/jsv
Content-Type: text/jsv
Content-Length: length
{
RunId: 0
}
HTTP/1.1 200 OK
Content-Type: text/jsv
Content-Length: length
{
Courier:
{
DriverCode: String,
Name: String,
Online: False,
OnRoster: False,
Van:
{
State: String,
LeaveByUtc: 0001-01-01,
LeaveByText: String,
SlackMin: 0,
InVan: 0,
Committed: 0,
Cap: 0,
CapUnit: String,
VehicleUnit: String,
CriticalCode: String,
DriveMin: 0,
FacilityName: String,
SendNote: String
},
Current:
{
Code: String,
CourierStep: String,
RouteShape: String,
ProfileName: String,
UnitOne: String,
UnitMany: String,
FacilityNoun: String,
FacilityName: String,
LevelName: String,
DueUtc: 0001-01-01,
DueText: String,
Units: 0,
UnitsFound: 0,
Area: String,
Minutes: 0,
Address: String,
Unit: String,
City: String,
Lat: 0,
Lng: 0,
CustomerName: String,
CustomerPhone: String,
Handoff: String,
GateCode: String,
Instructions: String,
DropoffAddress: String,
DropoffContactName: String,
DropLat: 0,
DropLng: 0,
ArrivedUtc: 0001-01-01,
Tags:
[
{
CourierItemID: 0,
DispatchOdRequestID: 0,
Seq: 0,
TagCode: String,
Custody: String,
IsOpen: False,
IsMissing: False,
MissingReason: String,
IsManual: False,
ReTagFlag: False,
Scanned: False
}
],
Proof:
{
String: String
},
Photos:
{
String: 0
},
Needs:
[
String
],
MissedWaitMin: 0,
MissedRequireContact: False,
MissedRequirePhoto: False,
MissedFee: 0
},
Queue:
[
{
Code: String,
CourierStep: String,
RouteShape: String,
ProfileName: String,
UnitOne: String,
UnitMany: String,
FacilityNoun: String,
FacilityName: String,
LevelName: String,
DueUtc: 0001-01-01,
DueText: String,
Units: 0,
UnitsFound: 0,
Area: String,
Minutes: 0,
Address: String,
Unit: String,
City: String,
Lat: 0,
Lng: 0,
CustomerName: String,
CustomerPhone: String,
Handoff: String,
GateCode: String,
Instructions: String,
DropoffAddress: String,
DropoffContactName: String,
DropLat: 0,
DropLng: 0,
ArrivedUtc: 0001-01-01,
Tags:
[
{
CourierItemID: 0,
DispatchOdRequestID: 0,
Seq: 0,
TagCode: String,
Custody: String,
IsOpen: False,
IsMissing: False,
MissingReason: String,
IsManual: False,
ReTagFlag: False,
Scanned: False
}
],
Proof:
{
String: String
},
Photos:
{
String: 0
},
Needs:
[
String
],
MissedWaitMin: 0,
MissedRequireContact: False,
MissedRequirePhoto: False,
MissedFee: 0
}
],
Aboard:
[
{
Code: String,
CourierStep: String,
RouteShape: String,
ProfileName: String,
UnitOne: String,
UnitMany: String,
FacilityNoun: String,
FacilityName: String,
LevelName: String,
DueUtc: 0001-01-01,
DueText: String,
Units: 0,
UnitsFound: 0,
Area: String,
Minutes: 0,
Address: String,
Unit: String,
City: String,
Lat: 0,
Lng: 0,
CustomerName: String,
CustomerPhone: String,
Handoff: String,
GateCode: String,
Instructions: String,
DropoffAddress: String,
DropoffContactName: String,
DropLat: 0,
DropLng: 0,
ArrivedUtc: 0001-01-01,
Tags:
[
{
CourierItemID: 0,
DispatchOdRequestID: 0,
Seq: 0,
TagCode: String,
Custody: String,
IsOpen: False,
IsMissing: False,
MissingReason: String,
IsManual: False,
ReTagFlag: False,
Scanned: False
}
],
Proof:
{
String: String
},
Photos:
{
String: 0
},
Needs:
[
String
],
MissedWaitMin: 0,
MissedRequireContact: False,
MissedRequirePhoto: False,
MissedFee: 0
}
],
Runs:
[
{
CourierRunID: 0,
Code: String,
Status: String,
CourierProfileId: 0,
ProfileName: String,
CourierFacilityId: 0,
FacilityName: String,
FacilityAddress: String,
DriverContactId: 0,
DriverName: String,
EquipmentID: 0,
VehicleUnit: String,
UnitOne: String,
UnitMany: String,
Units: 0,
StopCount: 0,
StopsDone: 0,
Pay: 0,
BuiltUtc: 0001-01-01,
StartedUtc: 0001-01-01,
CompletedUtc: 0001-01-01,
ToLoad: 0,
ToReturn: 0,
Stops:
[
{
Sequence: 0,
Status: String,
DispatchOdRequestID: 0,
Code: String,
CourierStep: String,
Address: String,
Unit: String,
City: String,
Zip: String,
Lat: 0,
Lng: 0,
CustomerName: String,
CustomerPhone: String,
Handoff: String,
GateCode: String,
Instructions: String,
Units: 0,
DueText: String,
Note: String,
Needs:
[
String
],
Items:
[
{
CourierItemID: 0,
DispatchOdRequestID: 0,
Seq: 0,
TagCode: String,
Custody: String,
IsOpen: False,
IsMissing: False,
MissingReason: String,
IsManual: False,
ReTagFlag: False,
Scanned: False
}
]
}
]
}
],
UpNext:
{
Code: String,
CourierStep: String,
RouteShape: String,
ProfileName: String,
UnitOne: String,
UnitMany: String,
FacilityNoun: String,
FacilityName: String,
LevelName: String,
DueUtc: 0001-01-01,
DueText: String,
Units: 0,
UnitsFound: 0,
Area: String,
Minutes: 0,
Address: String,
Unit: String,
City: String,
Lat: 0,
Lng: 0,
CustomerName: String,
CustomerPhone: String,
Handoff: String,
GateCode: String,
Instructions: String,
DropoffAddress: String,
DropoffContactName: String,
DropLat: 0,
DropLng: 0,
ArrivedUtc: 0001-01-01,
Tags:
[
{
CourierItemID: 0,
DispatchOdRequestID: 0,
Seq: 0,
TagCode: String,
Custody: String,
IsOpen: False,
IsMissing: False,
MissingReason: String,
IsManual: False,
ReTagFlag: False,
Scanned: False
}
],
Proof:
{
String: String
},
Photos:
{
String: 0
},
Needs:
[
String
],
MissedWaitMin: 0,
MissedRequireContact: False,
MissedRequirePhoto: False,
MissedFee: 0
}
},
Result: String,
Detail: String,
Message: String,
ResponseStatus:
{
ErrorCode: String,
Message: String,
StackTrace: String,
Errors:
[
{
ErrorCode: String,
FieldName: String,
Message: String,
Meta:
{
String: String
}
}
],
Meta:
{
String: String
}
}
}