Trendsic Platform Service

<back to all web services

EquipmentDvirSignOffRequest

Requires Authentication
The following routes are available for this service:
POST,OPTIONS/v1/Equipment/{EquipmentID}/dvir/signoff
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 DvirUnitRef:
    equipment_i_d: int = 0
    unit: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class DvirPhotoView:
    work_photo_i_d: int = 0
    defect_key: Optional[str] = None
    url: Optional[str] = None
    marked_url: Optional[str] = None
    captured_at_utc: Optional[datetime.datetime] = None
    lat: Optional[Decimal] = None
    lng: Optional[Decimal] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class DvirDefectView:
    dvir_defect_i_d: int = 0
    client_key: Optional[str] = None
    dvir_report_i_d: Optional[int] = None
    report_number: Optional[str] = None
    equipment_i_d: int = 0
    unit: Optional[str] = None
    item_key: Optional[str] = None
    label: Optional[str] = None
    form_line: Optional[str] = None
    is_custom: bool = False
    severity: Optional[str] = None
    severity_text: Optional[str] = None
    note: Optional[str] = None
    source: Optional[str] = None
    reported_by_name: Optional[str] = None
    reported_at_utc: Optional[datetime.datetime] = None
    equipment_maintenance_i_d: Optional[int] = None
    outcome: Optional[str] = None
    outcome_text: Optional[str] = None
    outcome_note: Optional[str] = None
    scheduled_for: Optional[str] = None
    signed_off_by_name: Optional[str] = None
    signed_off_at_utc: Optional[datetime.datetime] = None
    is_open: bool = False
    withdrawn: bool = False
    photo_count: int = 0
    photos: List[DvirPhotoView] = field(default_factory=list)


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class DvirVehicleView:
    equipment_i_d: int = 0
    unit: Optional[str] = None
    name: Optional[str] = None
    vehicle_type: Optional[str] = None
    is_trailer: bool = False
    vehicle_status: Optional[str] = None
    status: Optional[str] = None
    status_text: Optional[str] = None
    line: Optional[str] = None
    first_unsafe_report: Optional[str] = None
    open_count: int = 0
    local_today: Optional[str] = None
    needs_pre_trip: bool = False
    needs_review: bool = False
    review_report_ids: List[int] = field(default_factory=list)
    trailers: List[DvirUnitRef] = field(default_factory=list)
    last_odometer: Optional[int] = None
    in_use_by: Optional[str] = None
    driving_now: bool = False
    today_pre_trip_id: Optional[int] = None
    today_post_trip_id: Optional[int] = None
    open_defects: List[DvirDefectView] = field(default_factory=list)


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class DvirSignatureView:
    signature_record_i_d: int = 0
    role: Optional[str] = None
    signer_name: Optional[str] = None
    signed_at: Optional[datetime.datetime] = None
    image_url: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class DvirReportView:
    dvir_report_i_d: int = 0
    number: Optional[str] = None
    kind: Optional[str] = None
    kind_text: Optional[str] = None
    equipment_i_d: int = 0
    unit: Optional[str] = None
    trailers: List[DvirUnitRef] = field(default_factory=list)
    contact_i_d: int = 0
    driver_name: Optional[str] = None
    board: Optional[str] = None
    for_date: Optional[str] = None
    filed_at_utc: datetime.datetime = datetime.datetime(1, 1, 1)
    saved_at_utc: Optional[datetime.datetime] = None
    is_late: bool = False
    is_away: bool = False
    is_satisfactory: bool = False
    odometer: Optional[int] = None
    location_text: Optional[str] = None
    remarks: Optional[str] = None
    reviewed_by_name: Optional[str] = None
    reviewed_at_utc: Optional[datetime.datetime] = None
    chip: Optional[str] = None
    defects: List[DvirDefectView] = field(default_factory=list)
    signatures: List[DvirSignatureView] = field(default_factory=list)


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class DvirVehicleDetail(DvirVehicleView):
    plate: Optional[str] = None
    vin: Optional[str] = None
    gvwr_lbs: Optional[int] = None
    branch_name: Optional[str] = None
    inspection_due: Optional[datetime.datetime] = None
    insurance_expires: Optional[datetime.datetime] = None
    recently_fixed: List[DvirDefectView] = field(default_factory=list)
    review_reports: List[DvirReportView] = field(default_factory=list)
    history: List[DvirReportView] = field(default_factory=list)


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class EquipmentDvirSignOffResponse:
    vehicle: Optional[DvirVehicleDetail] = None
    returned: bool = False
    response_status: Optional[ResponseStatus] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class DvirSignOffItem:
    dvir_defect_i_d: int = 0
    outcome: Optional[str] = None
    note: Optional[str] = None
    scheduled_for: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class EquipmentDvirSignOffRequest:
    equipment_i_d: int = 0
    defects: List[DvirSignOffItem] = field(default_factory=list)
    mechanic_name: Optional[str] = None
    signature_png: Optional[str] = None

Python EquipmentDvirSignOffRequest 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.

POST /v1/Equipment/{EquipmentID}/dvir/signoff HTTP/1.1 
Host: api.dev.dynamics.trendsic.com 
Accept: text/jsv
Content-Type: text/jsv
Content-Length: length

{
	EquipmentID: 0,
	Defects: 
	[
		{
			DvirDefectID: 0,
			Outcome: String,
			Note: String,
			ScheduledFor: String
		}
	],
	MechanicName: String,
	SignaturePng: String
}
HTTP/1.1 200 OK
Content-Type: text/jsv
Content-Length: length

{
	Vehicle: 
	{
		Plate: String,
		VIN: String,
		GvwrLbs: 0,
		BranchName: String,
		InspectionDue: 0001-01-01,
		InsuranceExpires: 0001-01-01,
		RecentlyFixed: 
		[
			{
				DvirDefectID: 0,
				ClientKey: String,
				DvirReportID: 0,
				ReportNumber: String,
				EquipmentID: 0,
				Unit: String,
				ItemKey: String,
				Label: String,
				FormLine: String,
				IsCustom: False,
				Severity: String,
				SeverityText: String,
				Note: String,
				Source: String,
				ReportedByName: String,
				ReportedAtUtc: 0001-01-01,
				EquipmentMaintenanceID: 0,
				Outcome: String,
				OutcomeText: String,
				OutcomeNote: String,
				ScheduledFor: String,
				SignedOffByName: String,
				SignedOffAtUtc: 0001-01-01,
				IsOpen: False,
				Withdrawn: False,
				PhotoCount: 0,
				Photos: 
				[
					{
						WorkPhotoID: 0,
						DefectKey: String,
						Url: String,
						MarkedUrl: String,
						CapturedAtUtc: 0001-01-01,
						Lat: 0,
						Lng: 0
					}
				]
			}
		],
		ReviewReports: 
		[
			{
				DvirReportID: 0,
				Number: String,
				Kind: String,
				KindText: String,
				EquipmentID: 0,
				Unit: String,
				Trailers: 
				[
					{
						EquipmentID: 0,
						Unit: String
					}
				],
				ContactID: 0,
				DriverName: String,
				Board: String,
				ForDate: String,
				FiledAtUtc: 0001-01-01,
				SavedAtUtc: 0001-01-01,
				IsLate: False,
				IsAway: False,
				IsSatisfactory: False,
				Odometer: 0,
				LocationText: String,
				Remarks: String,
				ReviewedByName: String,
				ReviewedAtUtc: 0001-01-01,
				Chip: String,
				Defects: 
				[
					{
						DvirDefectID: 0,
						ClientKey: String,
						DvirReportID: 0,
						ReportNumber: String,
						EquipmentID: 0,
						Unit: String,
						ItemKey: String,
						Label: String,
						FormLine: String,
						IsCustom: False,
						Severity: String,
						SeverityText: String,
						Note: String,
						Source: String,
						ReportedByName: String,
						ReportedAtUtc: 0001-01-01,
						EquipmentMaintenanceID: 0,
						Outcome: String,
						OutcomeText: String,
						OutcomeNote: String,
						ScheduledFor: String,
						SignedOffByName: String,
						SignedOffAtUtc: 0001-01-01,
						IsOpen: False,
						Withdrawn: False,
						PhotoCount: 0,
						Photos: 
						[
							{
								WorkPhotoID: 0,
								DefectKey: String,
								Url: String,
								MarkedUrl: String,
								CapturedAtUtc: 0001-01-01,
								Lat: 0,
								Lng: 0
							}
						]
					}
				],
				Signatures: 
				[
					{
						SignatureRecordID: 0,
						Role: String,
						SignerName: String,
						SignedAt: 0001-01-01,
						ImageUrl: String
					}
				]
			}
		],
		History: 
		[
			{
				DvirReportID: 0,
				Number: String,
				Kind: String,
				KindText: String,
				EquipmentID: 0,
				Unit: String,
				Trailers: 
				[
					{
						EquipmentID: 0,
						Unit: String
					}
				],
				ContactID: 0,
				DriverName: String,
				Board: String,
				ForDate: String,
				FiledAtUtc: 0001-01-01,
				SavedAtUtc: 0001-01-01,
				IsLate: False,
				IsAway: False,
				IsSatisfactory: False,
				Odometer: 0,
				LocationText: String,
				Remarks: String,
				ReviewedByName: String,
				ReviewedAtUtc: 0001-01-01,
				Chip: String,
				Defects: 
				[
					{
						DvirDefectID: 0,
						ClientKey: String,
						DvirReportID: 0,
						ReportNumber: String,
						EquipmentID: 0,
						Unit: String,
						ItemKey: String,
						Label: String,
						FormLine: String,
						IsCustom: False,
						Severity: String,
						SeverityText: String,
						Note: String,
						Source: String,
						ReportedByName: String,
						ReportedAtUtc: 0001-01-01,
						EquipmentMaintenanceID: 0,
						Outcome: String,
						OutcomeText: String,
						OutcomeNote: String,
						ScheduledFor: String,
						SignedOffByName: String,
						SignedOffAtUtc: 0001-01-01,
						IsOpen: False,
						Withdrawn: False,
						PhotoCount: 0,
						Photos: 
						[
							{
								WorkPhotoID: 0,
								DefectKey: String,
								Url: String,
								MarkedUrl: String,
								CapturedAtUtc: 0001-01-01,
								Lat: 0,
								Lng: 0
							}
						]
					}
				],
				Signatures: 
				[
					{
						SignatureRecordID: 0,
						Role: String,
						SignerName: String,
						SignedAt: 0001-01-01,
						ImageUrl: String
					}
				]
			}
		],
		EquipmentID: 0,
		Unit: String,
		Name: String,
		VehicleType: String,
		IsTrailer: False,
		VehicleStatus: String,
		Status: String,
		StatusText: String,
		Line: String,
		FirstUnsafeReport: String,
		OpenCount: 0,
		LocalToday: String,
		NeedsPreTrip: False,
		NeedsReview: False,
		ReviewReportIds: 
		[
			0
		],
		Trailers: 
		[
			{
				EquipmentID: 0,
				Unit: String
			}
		],
		LastOdometer: 0,
		InUseBy: String,
		DrivingNow: False,
		TodayPreTripId: 0,
		TodayPostTripId: 0,
		OpenDefects: 
		[
			{
				DvirDefectID: 0,
				ClientKey: String,
				DvirReportID: 0,
				ReportNumber: String,
				EquipmentID: 0,
				Unit: String,
				ItemKey: String,
				Label: String,
				FormLine: String,
				IsCustom: False,
				Severity: String,
				SeverityText: String,
				Note: String,
				Source: String,
				ReportedByName: String,
				ReportedAtUtc: 0001-01-01,
				EquipmentMaintenanceID: 0,
				Outcome: String,
				OutcomeText: String,
				OutcomeNote: String,
				ScheduledFor: String,
				SignedOffByName: String,
				SignedOffAtUtc: 0001-01-01,
				IsOpen: False,
				Withdrawn: False,
				PhotoCount: 0,
				Photos: 
				[
					{
						WorkPhotoID: 0,
						DefectKey: String,
						Url: String,
						MarkedUrl: String,
						CapturedAtUtc: 0001-01-01,
						Lat: 0,
						Lng: 0
					}
				]
			}
		]
	},
	Returned: False,
	ResponseStatus: 
	{
		ErrorCode: String,
		Message: String,
		StackTrace: String,
		Errors: 
		[
			{
				ErrorCode: String,
				FieldName: String,
				Message: String,
				Meta: 
				{
					String: String
				}
			}
		],
		Meta: 
		{
			String: String
		}
	}
}