""" Options: Date: 2026-10-11 23:52:44 Version: 8.80 Tip: To override a DTO option, remove "#" prefix before updating BaseUrl: https://api.dev.dynamics.trendsic.com #GlobalNamespace: #AddServiceStackTypes: True #AddResponseStatus: False #AddImplicitVersion: #AddDescriptionAsComments: True IncludeTypes: CourierStopPartialRequest.* #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 @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 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 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 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 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 # @Route("/v1/worker/dispatch/od/runs/{RunId}/stops/{Seq}/partial", "POST,OPTIONS") @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class CourierStopPartialRequest(IReturn[CourierDriverResponse]): run_id: int = 0 seq: int = 0 tag_codes: List[str] = field(default_factory=list) reason: Optional[str] = None