Trendsic Platform Service

<back to all web services

DispatchPackRequest

Requires Authentication
The following routes are available for this service:
PUT,OPTIONS/v1/dispatch/pack
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 DispatchPackConfigView:
    pack_id: Optional[str] = None
    has_quotas: bool = False
    is_inverted: bool = False
    load_limit_mins: int = 0
    ticket_source: Optional[str] = None
    pay_basis: Optional[str] = None
    day_boundary: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class DispatchHaulConfigView:
    queue_max: int = 0
    dump_bays: int = 0
    slot_cap: int = 0
    paused: bool = False
    feed_rate: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class DispatchOfflineWindowView:
    offline_window_id: int = 0
    from_hour: Optional[str] = None
    to_hour: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class DispatchSiteView:
    site_id: int = 0
    supplier_id: int = 0
    supplier_code: Optional[str] = None
    name: Optional[str] = None
    acres: int = 0
    standing_volume: Decimal = decimal.Decimal(0)
    sort_order: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class DispatchSupplierView:
    supplier_id: int = 0
    code: Optional[str] = None
    name: Optional[str] = None
    region: Optional[str] = None
    own_hauler: bool = False
    season_allotment: Decimal = decimal.Decimal(0)
    delivered: Decimal = decimal.Decimal(0)
    week_cap: Decimal = decimal.Decimal(0)
    week_delivered: Decimal = decimal.Decimal(0)
    sort_order: int = 0
    sites: List[DispatchSiteView] = field(default_factory=list)


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class DispatchTruckView:
    truck_id: int = 0
    code: Optional[str] = None
    driver_name: Optional[str] = None
    phone: Optional[str] = None
    employer_code: Optional[str] = None
    supplier_code: Optional[str] = None
    site_name: Optional[str] = None
    est_load: Decimal = decimal.Decimal(0)
    stage: Optional[str] = None
    stage_since: int = 0
    cycle_start: Optional[int] = None
    stage_mins_ago: int = 0
    cycle_mins_ago: Optional[int] = None
    slot: Optional[str] = None
    loads_today: int = 0
    net_today: Decimal = decimal.Decimal(0)
    last_ping_mins: int = 0
    cycle_mins: Optional[str] = None
    is_interactive: bool = False
    next_supplier_code: Optional[str] = None
    next_site_name: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class DispatchSlotView:
    slot_id: int = 0
    hour: Optional[str] = None
    base_booked: int = 0
    sort_order: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class DispatchTicketView:
    ticket_id: int = 0
    code: Optional[str] = None
    truck_code: Optional[str] = None
    supplier_code: Optional[str] = None
    net_qty: Decimal = decimal.Decimal(0)
    ticketed_at: datetime.datetime = datetime.datetime(1, 1, 1)
    ticketed_min: int = 0
    source: Optional[str] = None
    mins_ago: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class DispatchLogView:
    log_id: int = 0
    logged_at: datetime.datetime = datetime.datetime(1, 1, 1)
    logged_min: int = 0
    log_text: Optional[str] = None
    kind: Optional[str] = None
    mins_ago: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class DispatchAutopilotView:
    is_on: bool = False
    rule_slot: bool = False
    rule_route: bool = False
    rule_release: bool = False
    rule_tract: bool = False
    rule_throttle: bool = False
    rule_offline: bool = False
    th_staged: int = 0
    th_wait: int = 0
    th_band: int = 0
    th_stall: int = 0
    th_feed: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class DispatchExceptionView:
    code: Optional[str] = None
    kind: Optional[str] = None
    severity: Optional[str] = None
    truck_code: Optional[str] = None
    supplier_code: Optional[str] = None
    raised_at: datetime.datetime = datetime.datetime(1, 1, 1)
    raised_label: Optional[str] = None
    mins_ago: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class DispatchFeedView:
    feed_id: int = 0
    entry_at: datetime.datetime = datetime.datetime(1, 1, 1)
    entry_label: Optional[str] = None
    channel: Optional[str] = None
    kind: Optional[str] = None
    truck_code: Optional[str] = None
    supplier_code: Optional[str] = None
    override_text: Optional[str] = None
    mins_ago: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class DispatchRigView:
    rig_id: int = 0
    code: Optional[str] = None
    name: Optional[str] = None
    driver_name: Optional[str] = None
    phone: Optional[str] = None
    rig_type: Optional[str] = None
    is_free: bool = False
    match_rank: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class DispatchJobView:
    job_id: int = 0
    code: Optional[str] = None
    cargo: Optional[str] = None
    customer: Optional[str] = None
    customer_phone: Optional[str] = None
    hold_contact: Optional[str] = None
    hold_phone: Optional[str] = None
    from_loc: Optional[str] = None
    to_loc: Optional[str] = None
    miles: int = 0
    window_text: Optional[str] = None
    stage: Optional[str] = None
    rate: Optional[Decimal] = None
    required_rig: Optional[str] = None
    driver_label: Optional[str] = None
    eta_text: Optional[str] = None
    offer_rig_ids: Optional[str] = None
    offer_expires_min: Optional[int] = None
    offer_expired: bool = False
    declined: bool = False


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class DispatchOdDriverView:
    driver_id: int = 0
    code: Optional[str] = None
    name: Optional[str] = None
    zone: Optional[str] = None
    phone: Optional[str] = None
    status: Optional[str] = None
    tier: Optional[str] = None
    distance_mi: Decimal = decimal.Decimal(0)
    capabilities: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class DispatchOdRequestView:
    request_id: int = 0
    code: Optional[str] = None
    address: Optional[str] = None
    zone: Optional[str] = None
    bags: int = 0
    stage: Optional[str] = None
    driver_code: Optional[str] = None
    needs: Optional[str] = None
    note: Optional[str] = None
    ping_expires_min: Optional[int] = None
    tried_codes: Optional[str] = None
    candidate_codes: Optional[str] = None
    eta_text: Optional[str] = None
    no_driver: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class DispatchPackView:
    pack_id: Optional[str] = None
    has_quotas: bool = False
    is_inverted: bool = False
    load_limit_mins: int = 0
    day_boundary: Optional[str] = None
    ticket_source: Optional[str] = None
    pay_basis: Optional[str] = None
    sort_order: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class DispatchPackTermView:
    pack_id: Optional[str] = None
    lang: Optional[str] = None
    mode_name: Optional[str] = None
    facility: Optional[str] = None
    facility_short: Optional[str] = None
    source_site: Optional[str] = None
    supplier: Optional[str] = None
    supplier_plural: Optional[str] = None
    unload_verb: Optional[str] = None
    ticket_noun: Optional[str] = None
    day_noun: Optional[str] = None
    fleet_label: Optional[str] = None
    page_subtitle: Optional[str] = None
    season_chip: Optional[str] = None
    campaign_noun: Optional[str] = None
    bay_noun: Optional[str] = None
    assign_target: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class DispatchPackUnitView:
    pack_id: Optional[str] = None
    unit: Optional[str] = None
    load_qty: Decimal = decimal.Decimal(0)
    volume_low: int = 0
    volume_high: int = 0
    season_multiple: Decimal = decimal.Decimal(0)
    weekly_fraction: Decimal = decimal.Decimal(0)


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class DispatchBoardView:
    pack: Optional[DispatchPackConfigView] = None
    config: Optional[DispatchHaulConfigView] = None
    offline_windows: List[DispatchOfflineWindowView] = field(default_factory=list)
    suppliers: List[DispatchSupplierView] = field(default_factory=list)
    trucks: List[DispatchTruckView] = field(default_factory=list)
    slots: List[DispatchSlotView] = field(default_factory=list)
    tickets: List[DispatchTicketView] = field(default_factory=list)
    log: List[DispatchLogView] = field(default_factory=list)
    autopilot: Optional[DispatchAutopilotView] = None
    exceptions: List[DispatchExceptionView] = field(default_factory=list)
    feed: List[DispatchFeedView] = field(default_factory=list)
    rigs: List[DispatchRigView] = field(default_factory=list)
    jobs: List[DispatchJobView] = field(default_factory=list)
    od_drivers: List[DispatchOdDriverView] = field(default_factory=list)
    od_requests: List[DispatchOdRequestView] = field(default_factory=list)
    packs: List[DispatchPackView] = field(default_factory=list)
    pack_terms: List[DispatchPackTermView] = field(default_factory=list)
    pack_units: List[DispatchPackUnitView] = field(default_factory=list)


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class DispatchActionResponse:
    board: Optional[DispatchBoardView] = None
    message: Optional[str] = None
    sent: int = 0
    failed: int = 0
    ticket_code: Optional[str] = None
    ticket_net: Decimal = decimal.Decimal(0)
    response_status: Optional[ResponseStatus] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class DispatchPackRequest:
    pack_id: Optional[str] = None
    has_quotas: Optional[bool] = None
    is_inverted: Optional[bool] = None
    load_limit_mins: Optional[int] = None
    ticket_source: Optional[str] = None
    pay_basis: Optional[str] = None
    note: Optional[str] = None
    at_min: int = 0

Python DispatchPackRequest DTOs

To override the Content-type in your clients, use the HTTP Accept Header, append the .jsv suffix or ?format=jsv

HTTP + JSV

The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.

PUT /v1/dispatch/pack HTTP/1.1 
Host: api.dev.dynamics.trendsic.com 
Accept: text/jsv
Content-Type: text/jsv
Content-Length: length

{
	PackId: String,
	HasQuotas: False,
	IsInverted: False,
	LoadLimitMins: 0,
	TicketSource: String,
	PayBasis: String,
	Note: String,
	AtMin: 0
}
HTTP/1.1 200 OK
Content-Type: text/jsv
Content-Length: length

{
	Board: 
	{
		Pack: 
		{
			PackId: String,
			HasQuotas: False,
			IsInverted: False,
			LoadLimitMins: 0,
			TicketSource: String,
			PayBasis: String,
			DayBoundary: String
		},
		Config: 
		{
			QueueMax: 0,
			DumpBays: 0,
			SlotCap: 0,
			Paused: False,
			FeedRate: 0
		},
		OfflineWindows: 
		[
			{
				OfflineWindowId: 0,
				FromHour: String,
				ToHour: String
			}
		],
		Suppliers: 
		[
			{
				SupplierId: 0,
				Code: String,
				Name: String,
				Region: String,
				OwnHauler: False,
				SeasonAllotment: 0,
				Delivered: 0,
				WeekCap: 0,
				WeekDelivered: 0,
				SortOrder: 0,
				Sites: 
				[
					{
						SiteId: 0,
						SupplierId: 0,
						SupplierCode: String,
						Name: String,
						Acres: 0,
						StandingVolume: 0,
						SortOrder: 0
					}
				]
			}
		],
		Trucks: 
		[
			{
				TruckId: 0,
				Code: String,
				DriverName: String,
				Phone: String,
				EmployerCode: String,
				SupplierCode: String,
				SiteName: String,
				EstLoad: 0,
				Stage: String,
				StageSince: 0,
				CycleStart: 0,
				StageMinsAgo: 0,
				CycleMinsAgo: 0,
				Slot: String,
				LoadsToday: 0,
				NetToday: 0,
				LastPingMins: 0,
				CycleMins: String,
				IsInteractive: False,
				NextSupplierCode: String,
				NextSiteName: String
			}
		],
		Slots: 
		[
			{
				SlotId: 0,
				Hour: String,
				BaseBooked: 0,
				SortOrder: 0
			}
		],
		Tickets: 
		[
			{
				TicketId: 0,
				Code: String,
				TruckCode: String,
				SupplierCode: String,
				NetQty: 0,
				TicketedAt: 0001-01-01,
				TicketedMin: 0,
				Source: String,
				MinsAgo: 0
			}
		],
		Log: 
		[
			{
				LogId: 0,
				LoggedAt: 0001-01-01,
				LoggedMin: 0,
				LogText: String,
				Kind: String,
				MinsAgo: 0
			}
		],
		Autopilot: 
		{
			IsOn: False,
			RuleSlot: False,
			RuleRoute: False,
			RuleRelease: False,
			RuleTract: False,
			RuleThrottle: False,
			RuleOffline: False,
			ThStaged: 0,
			ThWait: 0,
			ThBand: 0,
			ThStall: 0,
			ThFeed: 0
		},
		Exceptions: 
		[
			{
				Code: String,
				Kind: String,
				Severity: String,
				TruckCode: String,
				SupplierCode: String,
				RaisedAt: 0001-01-01,
				RaisedLabel: String,
				MinsAgo: 0
			}
		],
		Feed: 
		[
			{
				FeedId: 0,
				EntryAt: 0001-01-01,
				EntryLabel: String,
				Channel: String,
				Kind: String,
				TruckCode: String,
				SupplierCode: String,
				OverrideText: String,
				MinsAgo: 0
			}
		],
		Rigs: 
		[
			{
				RigId: 0,
				Code: String,
				Name: String,
				DriverName: String,
				Phone: String,
				RigType: String,
				IsFree: False,
				MatchRank: 0
			}
		],
		Jobs: 
		[
			{
				JobId: 0,
				Code: String,
				Cargo: String,
				Customer: String,
				CustomerPhone: String,
				HoldContact: String,
				HoldPhone: String,
				FromLoc: String,
				ToLoc: String,
				Miles: 0,
				WindowText: String,
				Stage: String,
				Rate: 0,
				RequiredRig: String,
				DriverLabel: String,
				EtaText: String,
				OfferRigIds: String,
				OfferExpiresMin: 0,
				OfferExpired: False,
				Declined: False
			}
		],
		OdDrivers: 
		[
			{
				DriverId: 0,
				Code: String,
				Name: String,
				Zone: String,
				Phone: String,
				Status: String,
				Tier: String,
				DistanceMi: 0,
				Capabilities: String
			}
		],
		OdRequests: 
		[
			{
				RequestId: 0,
				Code: String,
				Address: String,
				Zone: String,
				Bags: 0,
				Stage: String,
				DriverCode: String,
				Needs: String,
				Note: String,
				PingExpiresMin: 0,
				TriedCodes: String,
				CandidateCodes: String,
				EtaText: String,
				NoDriver: String
			}
		],
		Packs: 
		[
			{
				PackId: String,
				HasQuotas: False,
				IsInverted: False,
				LoadLimitMins: 0,
				DayBoundary: String,
				TicketSource: String,
				PayBasis: String,
				SortOrder: 0
			}
		],
		PackTerms: 
		[
			{
				PackId: String,
				Lang: String,
				ModeName: String,
				Facility: String,
				FacilityShort: String,
				SourceSite: String,
				Supplier: String,
				SupplierPlural: String,
				UnloadVerb: String,
				TicketNoun: String,
				DayNoun: String,
				FleetLabel: String,
				PageSubtitle: String,
				SeasonChip: String,
				CampaignNoun: String,
				BayNoun: String,
				AssignTarget: String
			}
		],
		PackUnits: 
		[
			{
				PackId: String,
				Unit: String,
				LoadQty: 0,
				VolumeLow: 0,
				VolumeHigh: 0,
				SeasonMultiple: 0,
				WeeklyFraction: 0
			}
		]
	},
	Message: String,
	Sent: 0,
	Failed: 0,
	TicketCode: String,
	TicketNet: 0,
	ResponseStatus: 
	{
		ErrorCode: String,
		Message: String,
		StackTrace: String,
		Errors: 
		[
			{
				ErrorCode: String,
				FieldName: String,
				Message: String,
				Meta: 
				{
					String: String
				}
			}
		],
		Meta: 
		{
			String: String
		}
	}
}