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 .json suffix or ?format=json
To embed the response in a jsonp callback, append ?callback=myCallback
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/json
HTTP/1.1 200 OK Content-Type: application/json Content-Length: length {"ResponseMetadata":{"Success":false,"HasCache":false,"HasPaging":false,"CacheMetadata":{"IsFromCache":false,"CachedAt":"\/Date(-62135596800000-0000)\/","CacheExpiresAt":"\/Date(-62135596800000-0000)\/"},"PagingMetadata":{"Offset":"String","Limit":"String","TotalRecords":0,"ResponseRecords":0}},"ResponseReport":[{"AgentivityRef":0,"RecordLocator":"String","PNRCreationDate":"String","CreationDate":"\/Date(-62135596800000-0000)\/","PNRTicketed":"String","Account":"String","OwningConsultantID":"String","OwningConsultant":"String","CrsDescription":"String","LastActionConsultantID":"String","LastActionAgencyLocationID":"String","OwningAgencyLocationID":"String","CreatingAgencyIata":"String","CompanyID":0,"Passengers":[{"Id":0,"FirstName":"String","LastName":"String","FrequentFlyers":[{"Vendor":"String","Number":"String","FullNumber":"String"}],"SequenceNbr":0,"LastNameElement":0,"IsVip":false,"TravellerGUID":"String"}],"Phones":[{"PhoneType":"String","City":"String","Number":"String","SequenceNbr":0}],"Notepads":[{"Remark":"String","CreatedDate":"\/Date(-62135596800000-0000)\/","CreatedTime":"String","Qualifier":"String","SequenceNbr":0}],"VendorRemarks":[{"VendorRemarkID":0,"TravelOrderIdentifier":0,"RmkNum":0,"DateStamp":"\/Date(-62135596800000-0000)\/","TimeStamp":"String","RemarkType":"String","VendorType":"String","Vendor":"String","Remark":"String"}],"DiEntries":[{"SequenceNbr":0,"Keyword":"String","Remark":"String"}],"Tickets":[{"SegmentNbr":0,"TicketNumber":"String","TicketType":"String","TicketDetailsAvailable":false}],"Versions":[{"AgentivityRef":0,"DataBaseTimeStamp":"\/Date(-62135596800000-0000)\/","EventType":"String","PnrTicketed":"String","LastActionAgentId":"String","AirSegs":0,"AirPSegs":0,"HtlSegs":0,"HtlPSegs":0,"CarSegs":0,"CarPSegs":0,"TrnPSegs":0,"OwningAgencyLocationID":"String"}],"VendorLocators":[{"AirSegmentNbr":0,"CarrierCode":"String","VendorLocator":"String"}],"CustomFields":[{"PNRPropertiesCustomFieldID":"String","RecordLocator":"String","PNRCreationDate":"\/Date(-62135596800000-0000)\/","FieldName":"String","FieldValue":"String","CustomFieldID":0,"CreationDateTime":"\/Date(-62135596800000-0000)\/","ElementNumber":0,"GDS":"String"}],"Emails":[{"SequenceNbr":0,"EmailType":"String","Email":"String"}],"EventDetails":[{"ItineraryEventTypeDetailID":0,"AgentivityRef":0,"EventTypeDetail":"String","OldData":"String","NewData":"String","DateTimeStamp":"\/Date(-62135596800000-0000)\/","EventTypeDetailID":0}],"AccountLocations":[{"PrimaryAccountLocation":"String","SecondaryAccountLocation":"String","Valid":false,"ExactMatch":false,"GDS":"String"}],"EmailTrails":[{"RecipientEmail":"String","DeliveryDetails":"String","MailSentDateTime":"\/Date(-62135596800000-0000)\/","RecipientLastActivityEvent":"String","EmailId":0,"UserId":0,"SentResponseMessage":"String","SentResponseErrorCode":0,"DeliveredBookingID":0}],"AgentivityWarnings":[{"Message":"String","Vendor":"String","WarningDateTime":"\/Date(-62135596800000-0000)\/","OriginalRemark":"String","ClearedDateTime":"\/Date(-62135596800000-0000)\/","ClearedByConsultantID":"String","PropertiesList":[{"Name":"String","Value":"String"}]}],"AirlineTicketingDues":[{"Airline":"String","DueDate":"\/Date(-62135596800000-0000)\/","DueTime":"String"}],"CTCE":"String","CTCM":"String","CarbonTonnage":0,"CarbonEmissions":[{"Value":0,"Unit":{"Id":0,"Symbol":"String","Name":"String"},"Provider":{"Id":0,"Name":"String","Description":"String","LogoPath":"String"},"CalculationDateTime":"\/Date(-62135596800000-0000)\/","CalculationDetails":{"Id":0,"Name":"String"}}],"OwningCompanyCode":"String","Itinerary":[{"SegmentType":"String","SegmentNbr":0,"BoardPoint":"String","OffPoint":"String","OperatorCode":"String","OperatorService":"String","SegmentStatus":"String","DepartureTimeFormatted":"String","ArrivalTimeFormatted":"String","ChangeOfDayFormatted":"String","ServiceCode":"String","StartDate":"String","EndDate":"String","TicketNumber":"String","VendorLocators":"String","EquipmentCode":"String","Equipment":"String"}],"ItineraryFormatted":"String"}],"ResponseError":{"ErrorCode":"String","Message":"String","StatusCode":"String","VerboseMessage":"String"}}