GET | /BookingDetails |
---|
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 PagingMetadata:
# @ApiMember(DataType="string", Description="Starting Record", Name="Offset", ParameterType="query")
offset: Optional[str] = None
"""
Starting Record
"""
# @ApiMember(DataType="string", Description="Number of records to return (PageSize)", Name="Limit", ParameterType="query")
limit: Optional[str] = None
"""
Number of records to return (PageSize)
"""
# @ApiMember(DataType="string", Description="Total Number of Records in a Full Reponse (if no paging)", Name="TotalRecords", ParameterType="query")
total_records: int = 0
"""
Total Number of Records in a Full Reponse (if no paging)
"""
# @ApiMember(DataType="string", Description="Total Number of Records in this Reponse (on this page)", Name="ResponseRecords", ParameterType="query")
response_records: int = 0
"""
Total Number of Records in this Reponse (on this page)
"""
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CompanyLevelRequestBase(PagingMetadata, IMemberUsername, IMemberOwningCompanyCode):
owning_company_code: Optional[List[str]] = None
"""
Comma Delimited List of Owning Company Codes
"""
user_name: Optional[str] = None
"""
UserName in form of an email address
"""
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class FrequentFlyerDetails:
vendor: Optional[str] = None
number: Optional[str] = None
full_number: Optional[str] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PassengerDetails:
id: int = 0
first_name: Optional[str] = None
last_name: Optional[str] = None
frequent_flyers: Optional[List[FrequentFlyerDetails]] = None
sequence_nbr: int = 0
last_name_element: int = 0
is_vip: bool = False
traveller_g_u_i_d: Optional[str] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BookingPhone:
phone_type: Optional[str] = None
city: Optional[str] = None
number: Optional[str] = None
sequence_nbr: int = 0
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BookingNotepad:
remark: Optional[str] = None
created_date: Optional[datetime.datetime] = None
created_time: Optional[str] = None
qualifier: Optional[str] = None
sequence_nbr: int = 0
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class VendorRemarkBase:
travel_order_identifier: Optional[int] = None
rmk_num: Optional[int] = None
date_stamp: Optional[datetime.datetime] = None
time_stamp: Optional[str] = None
remark_type: Optional[str] = None
vendor_type: Optional[str] = None
vendor: Optional[str] = None
remark: Optional[str] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class VendorRemark(VendorRemarkBase):
vendor_remark_i_d: int = 0
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class DiEntry:
sequence_nbr: int = 0
keyword: Optional[str] = None
remark: Optional[str] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BookingTicket:
segment_nbr: int = 0
ticket_number: Optional[str] = None
ticket_type: Optional[str] = None
ticket_details_available: bool = False
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BookingVersion:
agentivity_ref: Optional[int] = None
data_base_time_stamp: Optional[datetime.datetime] = None
event_type: Optional[str] = None
pnr_ticketed: Optional[str] = None
last_action_agent_id: Optional[str] = None
air_segs: int = 0
air_p_segs: int = 0
htl_segs: int = 0
htl_p_segs: int = 0
car_segs: int = 0
car_p_segs: int = 0
trn_p_segs: int = 0
owning_agency_location_i_d: Optional[str] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BookingVendorLocator:
air_segment_nbr: Optional[int] = None
carrier_code: Optional[str] = None
vendor_locator: Optional[str] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CustomFieldValue:
pnr_properties_custom_field_i_d: Optional[str] = None
record_locator: Optional[str] = None
pnr_creation_date: datetime.datetime = datetime.datetime(1, 1, 1)
field_name: Optional[str] = None
field_value: Optional[str] = None
custom_field_i_d: Optional[int] = None
creation_date_time: Optional[datetime.datetime] = None
element_number: Optional[int] = None
gds: Optional[str] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BookingEmail:
sequence_nbr: int = 0
email_type: Optional[str] = None
email: Optional[str] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BookingEventDetail:
itinerary_event_type_detail_i_d: int = 0
agentivity_ref: int = 0
event_type_detail: Optional[str] = None
old_data: Optional[str] = None
new_data: Optional[str] = None
date_time_stamp: Optional[datetime.datetime] = None
event_type_detail_i_d: Optional[int] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BookingAccountLocation:
primary_account_location: Optional[str] = None
secondary_account_location: Optional[str] = None
valid: bool = False
exact_match: bool = False
gds: Optional[str] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BookingEmailTrail:
recipient_email: Optional[str] = None
delivery_details: Optional[str] = None
mail_sent_date_time: Optional[datetime.datetime] = None
recipient_last_activity_event: Optional[str] = None
email_id: Optional[int] = None
user_id: Optional[int] = None
sent_response_message: Optional[str] = None
sent_response_error_code: Optional[int] = None
delivered_booking_i_d: int = 0
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BookingWarningProperty:
name: Optional[str] = None
value: Optional[str] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BookingDetailsWarning:
message: Optional[str] = None
vendor: Optional[str] = None
warning_date_time: Optional[datetime.datetime] = None
original_remark: Optional[str] = None
cleared_date_time: Optional[datetime.datetime] = None
cleared_by_consultant_i_d: Optional[str] = None
properties_list: Optional[List[BookingWarningProperty]] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BookingDetailsAirTicketingDue:
airline: Optional[str] = None
due_date: Optional[datetime.datetime] = None
due_time: Optional[str] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class MeasurementUnit:
id: int = 0
symbol: Optional[str] = None
name: Optional[str] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class AssessmentProvider:
id: int = 0
name: Optional[str] = None
description: Optional[str] = None
logo_path: Optional[str] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CarbonCalculationDetails:
id: int = 0
name: Optional[str] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CarbonEmission:
value: Optional[float] = None
unit: Optional[MeasurementUnit] = None
provider: Optional[AssessmentProvider] = None
calculation_date_time: Optional[datetime.datetime] = None
calculation_details: Optional[CarbonCalculationDetails] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ItinerarySegment:
segment_type: Optional[str] = None
segment_nbr: int = 0
board_point: Optional[str] = None
off_point: Optional[str] = None
operator_code: Optional[str] = None
operator_service: Optional[str] = None
segment_status: Optional[str] = None
departure_time_formatted: Optional[str] = None
arrival_time_formatted: Optional[str] = None
change_of_day_formatted: Optional[str] = None
service_code: Optional[str] = None
start_date: Optional[str] = None
end_date: Optional[str] = None
ticket_number: Optional[str] = None
vendor_locators: Optional[str] = None
"""
Comma separated list of vendor locators
"""
equipment_code: Optional[str] = None
equipment: Optional[str] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ItinerarySegmentsCollection(List[ItinerarySegment]):
pass
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BookingDetails(IBookingItinerary):
record_locator: Optional[str] = None
pnr_creation_date: Optional[str] = None
creation_date: Optional[datetime.datetime] = None
pnr_ticketed: Optional[str] = None
account: Optional[str] = None
owning_consultant_i_d: Optional[str] = None
owning_consultant: Optional[str] = None
crs_description: Optional[str] = None
last_action_consultant_i_d: Optional[str] = None
last_action_agency_location_i_d: Optional[str] = None
owning_agency_location_i_d: Optional[str] = None
creating_agency_iata: Optional[str] = None
company_i_d: Optional[int] = None
passengers: Optional[List[PassengerDetails]] = None
phones: Optional[List[BookingPhone]] = None
notepads: Optional[List[BookingNotepad]] = None
vendor_remarks: Optional[List[VendorRemark]] = None
di_entries: Optional[List[DiEntry]] = None
tickets: Optional[List[BookingTicket]] = None
versions: Optional[List[BookingVersion]] = None
vendor_locators: Optional[List[BookingVendorLocator]] = None
custom_fields: Optional[List[CustomFieldValue]] = None
emails: Optional[List[BookingEmail]] = None
event_details: Optional[List[BookingEventDetail]] = None
account_locations: Optional[List[BookingAccountLocation]] = None
email_trails: Optional[List[BookingEmailTrail]] = None
agentivity_warnings: Optional[List[BookingDetailsWarning]] = None
airline_ticketing_dues: Optional[List[BookingDetailsAirTicketingDue]] = None
ctce: Optional[str] = None
ctcm: Optional[str] = None
carbon_tonnage: Optional[float] = None
carbon_emissions: Optional[List[CarbonEmission]] = None
owning_company_code: Optional[str] = None
agentivity_ref: int = 0
itinerary: Optional[ItinerarySegmentsCollection] = None
itinerary_formatted: Optional[str] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CacheMetadata:
cached_at: datetime.datetime = datetime.datetime(1, 1, 1)
cache_expires_at: datetime.datetime = datetime.datetime(1, 1, 1)
is_from_cache: bool = False
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ResponseMetadata:
success: bool = False
has_cache: bool = False
has_paging: bool = False
cache_metadata: Optional[CacheMetadata] = None
paging_metadata: Optional[PagingMetadata] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ApiRequestPerHour:
request_date: datetime.datetime = datetime.datetime(1, 1, 1)
hour0: int = 0
hour1: int = 0
hour2: int = 0
hour3: int = 0
hour4: int = 0
hour5: int = 0
hour6: int = 0
hour7: int = 0
hour8: int = 0
hour9: int = 0
hour10: int = 0
hour11: int = 0
hour12: int = 0
hour13: int = 0
hour14: int = 0
hour15: int = 0
hour16: int = 0
hour17: int = 0
hour18: int = 0
hour19: int = 0
hour20: int = 0
hour21: int = 0
hour22: int = 0
hour23: int = 0
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class AgentivityError:
error_code: Optional[str] = None
message: Optional[str] = None
status_code: Optional[str] = None
verbose_message: Optional[str] = None
TItem = TypeVar('TItem')
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CollectionResponse(Generic[TItem]):
response_metadata: Optional[ResponseMetadata] = None
response_report: Optional[List[ApiRequestPerHour]] = None
response_error: Optional[AgentivityError] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BookingDetailsByRefResponse(CollectionResponse[BookingDetails]):
pass
# @Flags()
class BookingDetailsOptions(IntEnum):
NONE = 0
PASSENGERS = 1
ITINERARY = 2
PASSENGERS_ITINERARY = 3
DI_ENTRIES = 4
PHONES = 8
NOTEPADS = 16
VENDOR_REMARKS = 32
TICKETS = 64
VERSIONS = 128
VENDOR_LOCATORS = 256
CUSTOM_FIELDS = 512
EMAILS = 1024
CONTACT_FIELDS = 1032
ACCOUNT_VALUE = 2048
EVENT_DETAILS = 4096
HISTORY = 4224
EMAIL_TRAILS = 8192
AGENTIVITY_WARNINGS = 16384
AIR_TICKETING_DUE_DATES = 32768
ALL = 65535
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BookingDetailsByRef(CompanyLevelRequestBase, IRequestConsultantID):
agentivity_ref: int = 0
"""
Agentivity Booking Reference
"""
load_options: Optional[BookingDetailsOptions] = None
"""
Options to retrieve booking details (valid values are: Passengers, Itinerary, DiEntries, Phones, Notepads, VendorRemarks, Tickets, Versions, VendorLocators, CustomFields, Emails, AccountValue, EventDetails or EmailTrails). The option All can be used to get entire booking data.
"""
record_locator: Optional[str] = None
"""
Record locator
"""
pnr_creation_date: Optional[str] = None
"""
Date in format YYYYMMDD
"""
request_consultant_i_d: Optional[str] = None
"""
Request Consultant ID (sign on)
"""
Python BookingDetailsByRef DTOs
To override the Content-type in your clients, use the HTTP Accept Header, append the .xml suffix or ?format=xml
The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.
GET /BookingDetails HTTP/1.1 Host: api.agentivity.com Accept: application/xml
HTTP/1.1 200 OK Content-Type: application/xml Content-Length: length <AgentivityResponse xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="schemas.agentivity.com/types"> <ResponseMetadata> <Success>false</Success> <HasCache>false</HasCache> <HasPaging>false</HasPaging> <CacheMetadata> <IsFromCache>false</IsFromCache> <CachedAt>0001-01-01T00:00:00</CachedAt> <CacheExpiresAt>0001-01-01T00:00:00</CacheExpiresAt> </CacheMetadata> <PagingMetadata> <Limit>String</Limit> <Offset>String</Offset> <ResponseRecords>0</ResponseRecords> <TotalRecords>0</TotalRecords> </PagingMetadata> </ResponseMetadata> <ResponseReport> <BookingDetails> <AgentivityRef>0</AgentivityRef> <RecordLocator>String</RecordLocator> <PNRCreationDate>String</PNRCreationDate> <CreationDate>0001-01-01T00:00:00</CreationDate> <PNRTicketed>String</PNRTicketed> <Account>String</Account> <OwningConsultantID>String</OwningConsultantID> <OwningConsultant>String</OwningConsultant> <CrsDescription>String</CrsDescription> <LastActionConsultantID>String</LastActionConsultantID> <LastActionAgencyLocationID>String</LastActionAgencyLocationID> <OwningAgencyLocationID>String</OwningAgencyLocationID> <CreatingAgencyIata>String</CreatingAgencyIata> <CompanyID>0</CompanyID> <Passengers> <Passenger> <Id>0</Id> <FirstName>String</FirstName> <LastName>String</LastName> <FrequentFlyers> <FrequentFlyer> <Vendor>String</Vendor> <Number>String</Number> <FullNumber>String</FullNumber> </FrequentFlyer> </FrequentFlyers> <SequenceNbr>0</SequenceNbr> <LastNameElement>0</LastNameElement> <IsVip>false</IsVip> <TravellerGUID>String</TravellerGUID> </Passenger> </Passengers> <Phones> <Phone> <PhoneType>String</PhoneType> <City>String</City> <Number>String</Number> <SequenceNbr>0</SequenceNbr> </Phone> </Phones> <Notepads> <Notepad> <Remark>String</Remark> <CreatedDate>0001-01-01T00:00:00</CreatedDate> <CreatedTime>String</CreatedTime> <Qualifier>String</Qualifier> <SequenceNbr>0</SequenceNbr> </Notepad> </Notepads> <VendorRemarks> <VendorRemark> <DateStamp>0001-01-01T00:00:00</DateStamp> <Remark>String</Remark> <RemarkType>String</RemarkType> <RmkNum>0</RmkNum> <TimeStamp>String</TimeStamp> <TravelOrderIdentifier>0</TravelOrderIdentifier> <Vendor>String</Vendor> <VendorType>String</VendorType> <VendorRemarkID>0</VendorRemarkID> </VendorRemark> </VendorRemarks> <DiEntries> <DIEntry> <SequenceNbr>0</SequenceNbr> <Keyword>String</Keyword> <Remark>String</Remark> </DIEntry> </DiEntries> <Tickets> <Ticket> <SegmentNbr>0</SegmentNbr> <TicketNumber>String</TicketNumber> <TicketType>String</TicketType> <TicketDetailsAvailable>false</TicketDetailsAvailable> </Ticket> </Tickets> <Versions> <Version> <AgentivityRef>0</AgentivityRef> <DataBaseTimeStamp>0001-01-01T00:00:00</DataBaseTimeStamp> <EventType>String</EventType> <PnrTicketed>String</PnrTicketed> <LastActionAgentId>String</LastActionAgentId> <AirSegs>0</AirSegs> <AirPSegs>0</AirPSegs> <HtlSegs>0</HtlSegs> <HtlPSegs>0</HtlPSegs> <CarSegs>0</CarSegs> <CarPSegs>0</CarPSegs> <TrnPSegs>0</TrnPSegs> <OwningAgencyLocationID>String</OwningAgencyLocationID> </Version> </Versions> <VendorLocators> <VendorLocator> <AirSegmentNbr>0</AirSegmentNbr> <CarrierCode>String</CarrierCode> <VendorLocator>String</VendorLocator> </VendorLocator> </VendorLocators> <CustomFields> <CustomFieldValue> <PNRPropertiesCustomFieldID>String</PNRPropertiesCustomFieldID> <RecordLocator>String</RecordLocator> <PNRCreationDate>0001-01-01T00:00:00</PNRCreationDate> <FieldName>String</FieldName> <FieldValue>String</FieldValue> <CustomFieldID>0</CustomFieldID> <CreationDateTime>0001-01-01T00:00:00</CreationDateTime> <ElementNumber>0</ElementNumber> <GDS>String</GDS> </CustomFieldValue> </CustomFields> <Emails> <Email> <SequenceNbr>0</SequenceNbr> <EmailType>String</EmailType> <Email>String</Email> </Email> </Emails> <EventDetails> <EventDetail> <ItineraryEventTypeDetailID>0</ItineraryEventTypeDetailID> <AgentivityRef>0</AgentivityRef> <EventTypeDetail>String</EventTypeDetail> <OldData>String</OldData> <NewData>String</NewData> <DateTimeStamp>0001-01-01T00:00:00</DateTimeStamp> <EventTypeDetailID>0</EventTypeDetailID> </EventDetail> </EventDetails> <AccountLocations> <AccountLocation> <PrimaryAccountLocation>String</PrimaryAccountLocation> <SecondaryAccountLocation>String</SecondaryAccountLocation> <Valid>false</Valid> <ExactMatch>false</ExactMatch> <GDS>String</GDS> </AccountLocation> </AccountLocations> <EmailTrails> <BookingEmailTrail> <RecipientEmail>String</RecipientEmail> <DeliveryDetails>String</DeliveryDetails> <MailSentDateTime>0001-01-01T00:00:00</MailSentDateTime> <RecipientLastActivityEvent>String</RecipientLastActivityEvent> <EmailId>0</EmailId> <UserId>0</UserId> <SentResponseMessage>String</SentResponseMessage> <SentResponseErrorCode>0</SentResponseErrorCode> <DeliveredBookingID>0</DeliveredBookingID> </BookingEmailTrail> </EmailTrails> <AgentivityWarnings> <Warning> <Message>String</Message> <Vendor>String</Vendor> <WarningDateTime>0001-01-01T00:00:00</WarningDateTime> <OriginalRemark>String</OriginalRemark> <ClearedDateTime>0001-01-01T00:00:00</ClearedDateTime> <ClearedByConsultantID>String</ClearedByConsultantID> <PropertiesList> <Property> <Name>String</Name> <Value>String</Value> </Property> </PropertiesList> </Warning> </AgentivityWarnings> <AirlineTicketingDues> <TicketingDue> <Airline>String</Airline> <DueDate>0001-01-01T00:00:00</DueDate> <DueTime>String</DueTime> </TicketingDue> </AirlineTicketingDues> <CTCE>String</CTCE> <CTCM>String</CTCM> <CarbonTonnage>0</CarbonTonnage> <CarbonEmissions> <CarbonEmission> <Value>0</Value> <Unit> <Id>0</Id> <Symbol>String</Symbol> <Name>String</Name> </Unit> <Provider> <Id>0</Id> <Name>String</Name> <Description>String</Description> <LogoPath>String</LogoPath> </Provider> <CalculationDateTime>0001-01-01T00:00:00</CalculationDateTime> <CalculationDetails> <Id>0</Id> <Name>String</Name> </CalculationDetails> </CarbonEmission> </CarbonEmissions> <OwningCompanyCode>String</OwningCompanyCode> <Itinerary> <ItinerarySegment> <ArrivalTimeFormatted>String</ArrivalTimeFormatted> <BoardPoint>String</BoardPoint> <ChangeOfDayFormatted>String</ChangeOfDayFormatted> <DepartureTimeFormatted>String</DepartureTimeFormatted> <EndDate>String</EndDate> <Equipment>String</Equipment> <EquipmentCode>String</EquipmentCode> <OffPoint>String</OffPoint> <OperatorCode>String</OperatorCode> <OperatorService>String</OperatorService> <SegmentNbr>0</SegmentNbr> <SegmentStatus>String</SegmentStatus> <SegmentType>String</SegmentType> <ServiceCode>String</ServiceCode> <StartDate>String</StartDate> <TicketNumber>String</TicketNumber> <VendorLocators>String</VendorLocators> </ItinerarySegment> </Itinerary> <ItineraryFormatted>String</ItineraryFormatted> </BookingDetails> </ResponseReport> <ResponseError> <ErrorCode>String</ErrorCode> <Message>String</Message> <StatusCode>String</StatusCode> <VerboseMessage>String</VerboseMessage> </ResponseError> </AgentivityResponse>