<?php
/**
 * Ptsv2paymentsTravelInformationTransitAirline
 *
 * PHP version 5
 *
 * @category Class
 * @package  CyberSource
 * @author   Swaagger Codegen team
 * @link     https://github.com/swagger-api/swagger-codegen
 */

/**
 * CyberSource Merged Spec
 *
 * All CyberSource API specs merged together. These are available at https://developer.cybersource.com/api/reference/api-reference.html
 *
 * OpenAPI spec version: 0.0.1
 * 
 * Generated by: https://github.com/swagger-api/swagger-codegen.git
 *
 */
/**
 * NOTE: This class is auto generated by the swagger code generator program.
 * https://github.com/swagger-api/swagger-codegen
 * Do not edit the class manually.
 */

namespace CyberSource\Model;

use \ArrayAccess;

/**
 * Ptsv2paymentsTravelInformationTransitAirline Class Doc Comment
 *
 * @category    Class
 * @package     CyberSource
 * @author      Swagger Codegen team
 * @link        https://github.com/swagger-api/swagger-codegen
 */
class Ptsv2paymentsTravelInformationTransitAirline implements ArrayAccess
{
    const DISCRIMINATOR = null;

    /**
      * The original name of the model.
      * @var string
      */
    protected static $swaggerModelName = 'ptsv2payments_travelInformation_transit_airline';

    /**
      * Array of property to type mappings. Used for (de)serialization
      * @var string[]
      */
    protected static $swaggerTypes = [
        'isDomestic' => 'string',
        'bookingReferenceNumber' => 'string',
        'carrierName' => 'string',
        'ticketIssuer' => '\CyberSource\Model\Ptsv2paymentsTravelInformationTransitAirlineTicketIssuer',
        'ticketNumber' => 'string',
        'checkDigit' => 'string',
        'restrictedTicketIndicator' => 'int',
        'transactionType' => 'int',
        'extendedPaymentCode' => 'string',
        'passengerName' => 'string',
        'customerCode' => 'string',
        'documentType' => 'string',
        'documentNumber' => 'string',
        'documentNumberOfParts' => 'int',
        'invoiceNumber' => 'string',
        'invoiceDate' => 'int',
        'additionalCharges' => 'string',
        'totalFeeAmount' => 'string',
        'clearingSequence' => 'string',
        'clearingCount' => 'string',
        'totalClearingAmount' => 'string',
        'numberOfPassengers' => 'int',
        'reservationSystemCode' => 'string',
        'processIdentifier' => 'string',
        'ticketIssueDate' => 'string',
        'electronicTicketIndicator' => 'bool',
        'originalTicketNumber' => 'string',
        'purchaseType' => 'string',
        'creditReasonIndicator' => 'string',
        'ticketChangeIndicator' => 'string',
        'planNumber' => 'string',
        'arrivalDate' => 'string',
        'restrictedTicketDesciption' => 'string',
        'exchangeTicketAmount' => 'string',
        'exchangeTicketFeeAmount' => 'string',
        'reservationType' => 'string',
        'boardingFeeAmount' => 'string',
        'legs' => '\CyberSource\Model\Ptsv2paymentsTravelInformationTransitAirlineLegs[]',
        'ancillaryInformation' => '\CyberSource\Model\Ptsv2paymentsTravelInformationTransitAirlineAncillaryInformation',
        'flightType' => 'string',
        'insuranceAmount' => 'string',
        'frequentFlyerNumber' => 'string',
        'thirdPartyStatus' => 'string',
        'passengerType' => 'string',
        'totalInsuranceAmount' => 'string'
    ];

    /**
      * Array of property to format mappings. Used for (de)serialization
      * @var string[]
      */
    protected static $swaggerFormats = [
        'isDomestic' => null,
        'bookingReferenceNumber' => null,
        'carrierName' => null,
        'ticketIssuer' => null,
        'ticketNumber' => null,
        'checkDigit' => null,
        'restrictedTicketIndicator' => null,
        'transactionType' => null,
        'extendedPaymentCode' => null,
        'passengerName' => null,
        'customerCode' => null,
        'documentType' => null,
        'documentNumber' => null,
        'documentNumberOfParts' => null,
        'invoiceNumber' => null,
        'invoiceDate' => null,
        'additionalCharges' => null,
        'totalFeeAmount' => null,
        'clearingSequence' => null,
        'clearingCount' => null,
        'totalClearingAmount' => null,
        'numberOfPassengers' => null,
        'reservationSystemCode' => null,
        'processIdentifier' => null,
        'ticketIssueDate' => null,
        'electronicTicketIndicator' => null,
        'originalTicketNumber' => null,
        'purchaseType' => null,
        'creditReasonIndicator' => null,
        'ticketChangeIndicator' => null,
        'planNumber' => null,
        'arrivalDate' => null,
        'restrictedTicketDesciption' => null,
        'exchangeTicketAmount' => null,
        'exchangeTicketFeeAmount' => null,
        'reservationType' => null,
        'boardingFeeAmount' => null,
        'legs' => null,
        'ancillaryInformation' => null,
        'flightType' => null,
        'insuranceAmount' => null,
        'frequentFlyerNumber' => null,
        'thirdPartyStatus' => null,
        'passengerType' => null,
        'totalInsuranceAmount' => null
    ];

    public static function swaggerTypes()
    {
        return self::$swaggerTypes;
    }

    public static function swaggerFormats()
    {
        return self::$swaggerFormats;
    }

    /**
     * Array of attributes where the key is the local name, and the value is the original name
     * @var string[]
     */
    protected static $attributeMap = [
        'isDomestic' => 'isDomestic',
        'bookingReferenceNumber' => 'bookingReferenceNumber',
        'carrierName' => 'carrierName',
        'ticketIssuer' => 'ticketIssuer',
        'ticketNumber' => 'ticketNumber',
        'checkDigit' => 'checkDigit',
        'restrictedTicketIndicator' => 'restrictedTicketIndicator',
        'transactionType' => 'transactionType',
        'extendedPaymentCode' => 'extendedPaymentCode',
        'passengerName' => 'passengerName',
        'customerCode' => 'customerCode',
        'documentType' => 'documentType',
        'documentNumber' => 'documentNumber',
        'documentNumberOfParts' => 'documentNumberOfParts',
        'invoiceNumber' => 'invoiceNumber',
        'invoiceDate' => 'invoiceDate',
        'additionalCharges' => 'additionalCharges',
        'totalFeeAmount' => 'totalFeeAmount',
        'clearingSequence' => 'clearingSequence',
        'clearingCount' => 'clearingCount',
        'totalClearingAmount' => 'totalClearingAmount',
        'numberOfPassengers' => 'numberOfPassengers',
        'reservationSystemCode' => 'reservationSystemCode',
        'processIdentifier' => 'processIdentifier',
        'ticketIssueDate' => 'ticketIssueDate',
        'electronicTicketIndicator' => 'electronicTicketIndicator',
        'originalTicketNumber' => 'originalTicketNumber',
        'purchaseType' => 'purchaseType',
        'creditReasonIndicator' => 'creditReasonIndicator',
        'ticketChangeIndicator' => 'ticketChangeIndicator',
        'planNumber' => 'planNumber',
        'arrivalDate' => 'arrivalDate',
        'restrictedTicketDesciption' => 'restrictedTicketDesciption',
        'exchangeTicketAmount' => 'exchangeTicketAmount',
        'exchangeTicketFeeAmount' => 'exchangeTicketFeeAmount',
        'reservationType' => 'reservationType',
        'boardingFeeAmount' => 'boardingFeeAmount',
        'legs' => 'legs',
        'ancillaryInformation' => 'ancillaryInformation',
        'flightType' => 'flightType',
        'insuranceAmount' => 'insuranceAmount',
        'frequentFlyerNumber' => 'frequentFlyerNumber',
        'thirdPartyStatus' => 'thirdPartyStatus',
        'passengerType' => 'passengerType',
        'totalInsuranceAmount' => 'totalInsuranceAmount'
    ];


    /**
     * Array of attributes to setter functions (for deserialization of responses)
     * @var string[]
     */
    protected static $setters = [
        'isDomestic' => 'setIsDomestic',
        'bookingReferenceNumber' => 'setBookingReferenceNumber',
        'carrierName' => 'setCarrierName',
        'ticketIssuer' => 'setTicketIssuer',
        'ticketNumber' => 'setTicketNumber',
        'checkDigit' => 'setCheckDigit',
        'restrictedTicketIndicator' => 'setRestrictedTicketIndicator',
        'transactionType' => 'setTransactionType',
        'extendedPaymentCode' => 'setExtendedPaymentCode',
        'passengerName' => 'setPassengerName',
        'customerCode' => 'setCustomerCode',
        'documentType' => 'setDocumentType',
        'documentNumber' => 'setDocumentNumber',
        'documentNumberOfParts' => 'setDocumentNumberOfParts',
        'invoiceNumber' => 'setInvoiceNumber',
        'invoiceDate' => 'setInvoiceDate',
        'additionalCharges' => 'setAdditionalCharges',
        'totalFeeAmount' => 'setTotalFeeAmount',
        'clearingSequence' => 'setClearingSequence',
        'clearingCount' => 'setClearingCount',
        'totalClearingAmount' => 'setTotalClearingAmount',
        'numberOfPassengers' => 'setNumberOfPassengers',
        'reservationSystemCode' => 'setReservationSystemCode',
        'processIdentifier' => 'setProcessIdentifier',
        'ticketIssueDate' => 'setTicketIssueDate',
        'electronicTicketIndicator' => 'setElectronicTicketIndicator',
        'originalTicketNumber' => 'setOriginalTicketNumber',
        'purchaseType' => 'setPurchaseType',
        'creditReasonIndicator' => 'setCreditReasonIndicator',
        'ticketChangeIndicator' => 'setTicketChangeIndicator',
        'planNumber' => 'setPlanNumber',
        'arrivalDate' => 'setArrivalDate',
        'restrictedTicketDesciption' => 'setRestrictedTicketDesciption',
        'exchangeTicketAmount' => 'setExchangeTicketAmount',
        'exchangeTicketFeeAmount' => 'setExchangeTicketFeeAmount',
        'reservationType' => 'setReservationType',
        'boardingFeeAmount' => 'setBoardingFeeAmount',
        'legs' => 'setLegs',
        'ancillaryInformation' => 'setAncillaryInformation',
        'flightType' => 'setFlightType',
        'insuranceAmount' => 'setInsuranceAmount',
        'frequentFlyerNumber' => 'setFrequentFlyerNumber',
        'thirdPartyStatus' => 'setThirdPartyStatus',
        'passengerType' => 'setPassengerType',
        'totalInsuranceAmount' => 'setTotalInsuranceAmount'
    ];


    /**
     * Array of attributes to getter functions (for serialization of requests)
     * @var string[]
     */
    protected static $getters = [
        'isDomestic' => 'getIsDomestic',
        'bookingReferenceNumber' => 'getBookingReferenceNumber',
        'carrierName' => 'getCarrierName',
        'ticketIssuer' => 'getTicketIssuer',
        'ticketNumber' => 'getTicketNumber',
        'checkDigit' => 'getCheckDigit',
        'restrictedTicketIndicator' => 'getRestrictedTicketIndicator',
        'transactionType' => 'getTransactionType',
        'extendedPaymentCode' => 'getExtendedPaymentCode',
        'passengerName' => 'getPassengerName',
        'customerCode' => 'getCustomerCode',
        'documentType' => 'getDocumentType',
        'documentNumber' => 'getDocumentNumber',
        'documentNumberOfParts' => 'getDocumentNumberOfParts',
        'invoiceNumber' => 'getInvoiceNumber',
        'invoiceDate' => 'getInvoiceDate',
        'additionalCharges' => 'getAdditionalCharges',
        'totalFeeAmount' => 'getTotalFeeAmount',
        'clearingSequence' => 'getClearingSequence',
        'clearingCount' => 'getClearingCount',
        'totalClearingAmount' => 'getTotalClearingAmount',
        'numberOfPassengers' => 'getNumberOfPassengers',
        'reservationSystemCode' => 'getReservationSystemCode',
        'processIdentifier' => 'getProcessIdentifier',
        'ticketIssueDate' => 'getTicketIssueDate',
        'electronicTicketIndicator' => 'getElectronicTicketIndicator',
        'originalTicketNumber' => 'getOriginalTicketNumber',
        'purchaseType' => 'getPurchaseType',
        'creditReasonIndicator' => 'getCreditReasonIndicator',
        'ticketChangeIndicator' => 'getTicketChangeIndicator',
        'planNumber' => 'getPlanNumber',
        'arrivalDate' => 'getArrivalDate',
        'restrictedTicketDesciption' => 'getRestrictedTicketDesciption',
        'exchangeTicketAmount' => 'getExchangeTicketAmount',
        'exchangeTicketFeeAmount' => 'getExchangeTicketFeeAmount',
        'reservationType' => 'getReservationType',
        'boardingFeeAmount' => 'getBoardingFeeAmount',
        'legs' => 'getLegs',
        'ancillaryInformation' => 'getAncillaryInformation',
        'flightType' => 'getFlightType',
        'insuranceAmount' => 'getInsuranceAmount',
        'frequentFlyerNumber' => 'getFrequentFlyerNumber',
        'thirdPartyStatus' => 'getThirdPartyStatus',
        'passengerType' => 'getPassengerType',
        'totalInsuranceAmount' => 'getTotalInsuranceAmount'
    ];

    public static function attributeMap()
    {
        return self::$attributeMap;
    }

    public static function setters()
    {
        return self::$setters;
    }

    public static function getters()
    {
        return self::$getters;
    }

    

    

    /**
     * Associative array for storing property values
     * @var mixed[]
     */
    protected $container = [];

    /**
     * Constructor
     * @param mixed[] $data Associated array of property values initializing the model
     */
    public function __construct(array $data = null)
    {
        $this->container['isDomestic'] = isset($data['isDomestic']) ? $data['isDomestic'] : null;
        $this->container['bookingReferenceNumber'] = isset($data['bookingReferenceNumber']) ? $data['bookingReferenceNumber'] : null;
        $this->container['carrierName'] = isset($data['carrierName']) ? $data['carrierName'] : null;
        $this->container['ticketIssuer'] = isset($data['ticketIssuer']) ? $data['ticketIssuer'] : null;
        $this->container['ticketNumber'] = isset($data['ticketNumber']) ? $data['ticketNumber'] : null;
        $this->container['checkDigit'] = isset($data['checkDigit']) ? $data['checkDigit'] : null;
        $this->container['restrictedTicketIndicator'] = isset($data['restrictedTicketIndicator']) ? $data['restrictedTicketIndicator'] : null;
        $this->container['transactionType'] = isset($data['transactionType']) ? $data['transactionType'] : null;
        $this->container['extendedPaymentCode'] = isset($data['extendedPaymentCode']) ? $data['extendedPaymentCode'] : null;
        $this->container['passengerName'] = isset($data['passengerName']) ? $data['passengerName'] : null;
        $this->container['customerCode'] = isset($data['customerCode']) ? $data['customerCode'] : null;
        $this->container['documentType'] = isset($data['documentType']) ? $data['documentType'] : null;
        $this->container['documentNumber'] = isset($data['documentNumber']) ? $data['documentNumber'] : null;
        $this->container['documentNumberOfParts'] = isset($data['documentNumberOfParts']) ? $data['documentNumberOfParts'] : null;
        $this->container['invoiceNumber'] = isset($data['invoiceNumber']) ? $data['invoiceNumber'] : null;
        $this->container['invoiceDate'] = isset($data['invoiceDate']) ? $data['invoiceDate'] : null;
        $this->container['additionalCharges'] = isset($data['additionalCharges']) ? $data['additionalCharges'] : null;
        $this->container['totalFeeAmount'] = isset($data['totalFeeAmount']) ? $data['totalFeeAmount'] : null;
        $this->container['clearingSequence'] = isset($data['clearingSequence']) ? $data['clearingSequence'] : null;
        $this->container['clearingCount'] = isset($data['clearingCount']) ? $data['clearingCount'] : null;
        $this->container['totalClearingAmount'] = isset($data['totalClearingAmount']) ? $data['totalClearingAmount'] : null;
        $this->container['numberOfPassengers'] = isset($data['numberOfPassengers']) ? $data['numberOfPassengers'] : null;
        $this->container['reservationSystemCode'] = isset($data['reservationSystemCode']) ? $data['reservationSystemCode'] : null;
        $this->container['processIdentifier'] = isset($data['processIdentifier']) ? $data['processIdentifier'] : null;
        $this->container['ticketIssueDate'] = isset($data['ticketIssueDate']) ? $data['ticketIssueDate'] : null;
        $this->container['electronicTicketIndicator'] = isset($data['electronicTicketIndicator']) ? $data['electronicTicketIndicator'] : null;
        $this->container['originalTicketNumber'] = isset($data['originalTicketNumber']) ? $data['originalTicketNumber'] : null;
        $this->container['purchaseType'] = isset($data['purchaseType']) ? $data['purchaseType'] : null;
        $this->container['creditReasonIndicator'] = isset($data['creditReasonIndicator']) ? $data['creditReasonIndicator'] : null;
        $this->container['ticketChangeIndicator'] = isset($data['ticketChangeIndicator']) ? $data['ticketChangeIndicator'] : null;
        $this->container['planNumber'] = isset($data['planNumber']) ? $data['planNumber'] : null;
        $this->container['arrivalDate'] = isset($data['arrivalDate']) ? $data['arrivalDate'] : null;
        $this->container['restrictedTicketDesciption'] = isset($data['restrictedTicketDesciption']) ? $data['restrictedTicketDesciption'] : null;
        $this->container['exchangeTicketAmount'] = isset($data['exchangeTicketAmount']) ? $data['exchangeTicketAmount'] : null;
        $this->container['exchangeTicketFeeAmount'] = isset($data['exchangeTicketFeeAmount']) ? $data['exchangeTicketFeeAmount'] : null;
        $this->container['reservationType'] = isset($data['reservationType']) ? $data['reservationType'] : null;
        $this->container['boardingFeeAmount'] = isset($data['boardingFeeAmount']) ? $data['boardingFeeAmount'] : null;
        $this->container['legs'] = isset($data['legs']) ? $data['legs'] : null;
        $this->container['ancillaryInformation'] = isset($data['ancillaryInformation']) ? $data['ancillaryInformation'] : null;
        $this->container['flightType'] = isset($data['flightType']) ? $data['flightType'] : null;
        $this->container['insuranceAmount'] = isset($data['insuranceAmount']) ? $data['insuranceAmount'] : null;
        $this->container['frequentFlyerNumber'] = isset($data['frequentFlyerNumber']) ? $data['frequentFlyerNumber'] : null;
        $this->container['thirdPartyStatus'] = isset($data['thirdPartyStatus']) ? $data['thirdPartyStatus'] : null;
        $this->container['passengerType'] = isset($data['passengerType']) ? $data['passengerType'] : null;
        $this->container['totalInsuranceAmount'] = isset($data['totalInsuranceAmount']) ? $data['totalInsuranceAmount'] : null;
    }

    /**
     * show all the invalid properties with reasons.
     *
     * @return array invalid properties with reasons
     */
    public function listInvalidProperties()
    {
        $invalid_properties = [];

        return $invalid_properties;
    }

    /**
     * validate all the properties in the model
     * return true if all passed
     *
     * @return bool True if all properties are valid
     */
    public function valid()
    {

        return true;
    }


    /**
     * Gets isDomestic
     * @return string
     */
    public function getIsDomestic()
    {
        return $this->container['isDomestic'];
    }

    /**
     * Sets isDomestic
     * @param string $isDomestic Specifies if the flight is: Domestic (01) International (02) If Y then 01 else 02
     * @return $this
     */
    public function setIsDomestic($isDomestic)
    {
        $this->container['isDomestic'] = $isDomestic;

        return $this;
    }

    /**
     * Gets bookingReferenceNumber
     * @return string
     */
    public function getBookingReferenceNumber()
    {
        return $this->container['bookingReferenceNumber'];
    }

    /**
     * Sets bookingReferenceNumber
     * @param string $bookingReferenceNumber Reference number for the airline booking. Required if ticket numbers are not issued.
     * @return $this
     */
    public function setBookingReferenceNumber($bookingReferenceNumber)
    {
        $this->container['bookingReferenceNumber'] = $bookingReferenceNumber;

        return $this;
    }

    /**
     * Gets carrierName
     * @return string
     */
    public function getCarrierName()
    {
        return $this->container['carrierName'];
    }

    /**
     * Sets carrierName
     * @param string $carrierName Airline that generated the ticket. Format: English characters only. Optional request field.
     * @return $this
     */
    public function setCarrierName($carrierName)
    {
        $this->container['carrierName'] = $carrierName;

        return $this;
    }

    /**
     * Gets ticketIssuer
     * @return \CyberSource\Model\Ptsv2paymentsTravelInformationTransitAirlineTicketIssuer
     */
    public function getTicketIssuer()
    {
        return $this->container['ticketIssuer'];
    }

    /**
     * Sets ticketIssuer
     * @param \CyberSource\Model\Ptsv2paymentsTravelInformationTransitAirlineTicketIssuer $ticketIssuer
     * @return $this
     */
    public function setTicketIssuer($ticketIssuer)
    {
        $this->container['ticketIssuer'] = $ticketIssuer;

        return $this;
    }

    /**
     * Gets ticketNumber
     * @return string
     */
    public function getTicketNumber()
    {
        return $this->container['ticketNumber'];
    }

    /**
     * Sets ticketNumber
     * @param string $ticketNumber Ticket number. Format: English characters only. Restricted string data type that indicates a sequence of letters, numbers, and spaces; special characters are not included. Optional request field.
     * @return $this
     */
    public function setTicketNumber($ticketNumber)
    {
        $this->container['ticketNumber'] = $ticketNumber;

        return $this;
    }

    /**
     * Gets checkDigit
     * @return string
     */
    public function getCheckDigit()
    {
        return $this->container['checkDigit'];
    }

    /**
     * Sets checkDigit
     * @param string $checkDigit Check digit for the ticket number. CyberSource recommends that you validate the check digit. With Discover and Diners Club, a valid ticket number has these characteristics: - The value is numeric. - The first three digits are a valid IATA2 license plate carrier code. - The last digit is a check digit or zero (0). - All remaining digits are nonzero.
     * @return $this
     */
    public function setCheckDigit($checkDigit)
    {
        $this->container['checkDigit'] = $checkDigit;

        return $this;
    }

    /**
     * Gets restrictedTicketIndicator
     * @return int
     */
    public function getRestrictedTicketIndicator()
    {
        return $this->container['restrictedTicketIndicator'];
    }

    /**
     * Sets restrictedTicketIndicator
     * @param int $restrictedTicketIndicator Flag that indicates whether or not the ticket is restricted (nonrefundable). Possible values: - 0: No restriction (refundable) - 1: Restricted (nonrefundable) Format: English characters only. Restricted string data type that indicates a sequence of letters, numbers, and spaces; special characters are not included. Optional request field.
     * @return $this
     */
    public function setRestrictedTicketIndicator($restrictedTicketIndicator)
    {
        $this->container['restrictedTicketIndicator'] = $restrictedTicketIndicator;

        return $this;
    }

    /**
     * Gets transactionType
     * @return int
     */
    public function getTransactionType()
    {
        return $this->container['transactionType'];
    }

    /**
     * Sets transactionType
     * @param int $transactionType Type of charge. Possible values: - 01: Charge is for an airline ticket - 02: Charge is for an item that is not an airline ticket
     * @return $this
     */
    public function setTransactionType($transactionType)
    {
        $this->container['transactionType'] = $transactionType;

        return $this;
    }

    /**
     * Gets extendedPaymentCode
     * @return string
     */
    public function getExtendedPaymentCode()
    {
        return $this->container['extendedPaymentCode'];
    }

    /**
     * Sets extendedPaymentCode
     * @param string $extendedPaymentCode The field is not currently supported.
     * @return $this
     */
    public function setExtendedPaymentCode($extendedPaymentCode)
    {
        $this->container['extendedPaymentCode'] = $extendedPaymentCode;

        return $this;
    }

    /**
     * Gets passengerName
     * @return string
     */
    public function getPassengerName()
    {
        return $this->container['passengerName'];
    }

    /**
     * Sets passengerName
     * @param string $passengerName Name of the passenger to whom the ticket was issued.  This will always be a single passenger's name. If there are more than one passengers, provide only the primary passenger's name. Do not include special characters such as commas, hyphens, or apostrophes. Only ASCII characters are supported. Format: English characters only. Optional request field.
     * @return $this
     */
    public function setPassengerName($passengerName)
    {
        $this->container['passengerName'] = $passengerName;

        return $this;
    }

    /**
     * Gets customerCode
     * @return string
     */
    public function getCustomerCode()
    {
        return $this->container['customerCode'];
    }

    /**
     * Sets customerCode
     * @param string $customerCode Reference number or code that identifies the cardholder. Format: English characters only. Restricted string data type that indicates a sequence of letters, numbers, and spaces; special characters are not included. Optional request field.
     * @return $this
     */
    public function setCustomerCode($customerCode)
    {
        $this->container['customerCode'] = $customerCode;

        return $this;
    }

    /**
     * Gets documentType
     * @return string
     */
    public function getDocumentType()
    {
        return $this->container['documentType'];
    }

    /**
     * Sets documentType
     * @param string $documentType Airline document type code that specifies the purpose of the transaction. Format: English characters only. Optional request field.  | Code | Description | | --- | --- | | 01 | Passenger ticket | | 02 | Additional collection | | 03 | Excess baggage | | 04 | Miscellaneous charge order (MCO) or prepaid ticket authorization | | 05 | Special service ticket | | 06 | Supported refund | | 07 | Unsupported refund | | 08 | Lost ticket application | | 09 | Tour order voucher | | 10 | Ticket by mail | | 11 | Undercharge adjustment | | 12 | Group ticket | | 13 | Exchange adjustment | | 14 | SPD or air freight | | 15 | In-flight adjustment | | 16 | Agency passenger ticket | | 17 | Agency tour order or voucher | | 18 | Agency miscellaneous charge order (MCO) | | 19 | Agency exchange order | | 20 | Agency group ticket | | 21 | Debit adjustment for duplicate refund or use | | 22 | In-flight merchandise order | | 23 | Catalogue merchandise order | | 24 | In-flight phone charges | | 25 | Frequent flyer fee or purchase | | 26 | Kennel charge | | 27 | Animal transportation charge | | 28 | Firearms case | | 29 | Upgrade charge | | 30 | Credit for unused transportation | | 31 | Credit for class of service adjustment | | 32 | Credit for denied boarding | | 33 | Credit for miscellaneous refund | | 34 | Credit for lost ticket refund | | 35 | Credit for exchange refund | | 36 | Credit for overcharge adjustment | | 37 | Credit for multiple Unused tickets | | 38 | Exchange order | | 39 | Self-service ticket | | 41 | In-flight duty-free purchase | | 42 | Senior citizen discount booklets | | 43 | Club membership fee | | 44 | Coupon book | | 45 | In-flight charges | | 46 | Tour deposit | | 47 | Frequent flyer overnight delivery charge | | 48 | Frequent flyer fulfillment | | 49 | Small package delivery | | 50 | Vendor sale | | 51 | Miscellaneous taxes or fees | | 52 | Travel agency fee | | 60 | Vendor refund or credit | | 64 | Duty free sale | | 65 | Preferred seat upgrade | | 66 | Cabin upgrade | | 67 | Lounge or club access or day pass | | 68 | Agent assisted reservation or ticketing fee | | 69 | Ticket change or cancel fee | | 70 | Trip insurance | | 71 | Unaccompanied minor | | 72 | Standby fee | | 73 | Curbside baggage | | 74 | In-flight medical equipment | | 75 | Ticket or pass print fee | | 76 | Checked sporting or special equipment | | 77 | Dry ice fee | | 78 | Mail or postage fee | | 79 | Club membership fee or temporary trial | | 80 | Frequent flyer activation or reinstatement | | 81 | Gift certificate | | 82 | Onboard or in-flight prepaid voucher | | 83 | Optional services fee | | 84 | Advance purchase for excess baggage | | 85 | Advance purchase for preferred seat upgrade | | 86 | Advance purchase for cabin upgrade | | 87 | Advance purchase for optional services | | 88 | WiFi | | 89 | Packages | | 90 | In-flight entertainment or internet access | | 91 | Overweight bag fee | | 92 | Sleep sets | | 93 | Special purchase fee |
     * @return $this
     */
    public function setDocumentType($documentType)
    {
        $this->container['documentType'] = $documentType;

        return $this;
    }

    /**
     * Gets documentNumber
     * @return string
     */
    public function getDocumentNumber()
    {
        return $this->container['documentNumber'];
    }

    /**
     * Sets documentNumber
     * @param string $documentNumber The field is not currently supported.
     * @return $this
     */
    public function setDocumentNumber($documentNumber)
    {
        $this->container['documentNumber'] = $documentNumber;

        return $this;
    }

    /**
     * Gets documentNumberOfParts
     * @return int
     */
    public function getDocumentNumberOfParts()
    {
        return $this->container['documentNumberOfParts'];
    }

    /**
     * Sets documentNumberOfParts
     * @param int $documentNumberOfParts The field is not currently supported.
     * @return $this
     */
    public function setDocumentNumberOfParts($documentNumberOfParts)
    {
        $this->container['documentNumberOfParts'] = $documentNumberOfParts;

        return $this;
    }

    /**
     * Gets invoiceNumber
     * @return string
     */
    public function getInvoiceNumber()
    {
        return $this->container['invoiceNumber'];
    }

    /**
     * Sets invoiceNumber
     * @param string $invoiceNumber Invoice number for the airline transaction.
     * @return $this
     */
    public function setInvoiceNumber($invoiceNumber)
    {
        $this->container['invoiceNumber'] = $invoiceNumber;

        return $this;
    }

    /**
     * Gets invoiceDate
     * @return int
     */
    public function getInvoiceDate()
    {
        return $this->container['invoiceDate'];
    }

    /**
     * Sets invoiceDate
     * @param int $invoiceDate Invoice date. The format is YYYYMMDD. If this value is included in the request, it is used in the creation of the invoice number. See \"Invoice Number,\"
     * @return $this
     */
    public function setInvoiceDate($invoiceDate)
    {
        $this->container['invoiceDate'] = $invoiceDate;

        return $this;
    }

    /**
     * Gets additionalCharges
     * @return string
     */
    public function getAdditionalCharges()
    {
        return $this->container['additionalCharges'];
    }

    /**
     * Sets additionalCharges
     * @param string $additionalCharges Description of the charge if the charge does not involve an airline ticket. For example: Excess baggage.
     * @return $this
     */
    public function setAdditionalCharges($additionalCharges)
    {
        $this->container['additionalCharges'] = $additionalCharges;

        return $this;
    }

    /**
     * Gets totalFeeAmount
     * @return string
     */
    public function getTotalFeeAmount()
    {
        return $this->container['totalFeeAmount'];
    }

    /**
     * Sets totalFeeAmount
     * @param string $totalFeeAmount Total fee for the ticket. This value cannot exceed `99999999999999999999` (twenty 9s). Format: English characters only. Optional request field.
     * @return $this
     */
    public function setTotalFeeAmount($totalFeeAmount)
    {
        $this->container['totalFeeAmount'] = $totalFeeAmount;

        return $this;
    }

    /**
     * Gets clearingSequence
     * @return string
     */
    public function getClearingSequence()
    {
        return $this->container['clearingSequence'];
    }

    /**
     * Sets clearingSequence
     * @param string $clearingSequence Number that identifies the clearing message when multiple clearing messages are allowed per authorized transaction. Each clearing message linked to one authorization request must include a unique clearing sequence number between 1 and the total number of clearing records. Format: English characters only. Optional request field.
     * @return $this
     */
    public function setClearingSequence($clearingSequence)
    {
        $this->container['clearingSequence'] = $clearingSequence;

        return $this;
    }

    /**
     * Gets clearingCount
     * @return string
     */
    public function getClearingCount()
    {
        return $this->container['clearingCount'];
    }

    /**
     * Sets clearingCount
     * @param string $clearingCount Total number of clearing messages associated with the authorization request. Format: English characters only. Optional request field.
     * @return $this
     */
    public function setClearingCount($clearingCount)
    {
        $this->container['clearingCount'] = $clearingCount;

        return $this;
    }

    /**
     * Gets totalClearingAmount
     * @return string
     */
    public function getTotalClearingAmount()
    {
        return $this->container['totalClearingAmount'];
    }

    /**
     * Sets totalClearingAmount
     * @param string $totalClearingAmount Total clearing amount for all transactions in the clearing count set. This value cannot exceed `99999999999999999999` (twenty 9s). Format: English characters only. If this field is not set and if the total amount from the original authorization is not NULL, the total clearing amount is set to the total amount from the original authorization.
     * @return $this
     */
    public function setTotalClearingAmount($totalClearingAmount)
    {
        $this->container['totalClearingAmount'] = $totalClearingAmount;

        return $this;
    }

    /**
     * Gets numberOfPassengers
     * @return int
     */
    public function getNumberOfPassengers()
    {
        return $this->container['numberOfPassengers'];
    }

    /**
     * Sets numberOfPassengers
     * @param int $numberOfPassengers Number of passengers for whom the ticket was issued. Format: English characters only. Optional request field.
     * @return $this
     */
    public function setNumberOfPassengers($numberOfPassengers)
    {
        $this->container['numberOfPassengers'] = $numberOfPassengers;

        return $this;
    }

    /**
     * Gets reservationSystemCode
     * @return string
     */
    public function getReservationSystemCode()
    {
        return $this->container['reservationSystemCode'];
    }

    /**
     * Sets reservationSystemCode
     * @param string $reservationSystemCode Code that specifies the computerized reservation system used to make the reservation and purchase the ticket. Format: English characters only. Restricted string data type that indicates a sequence of letters, numbers, and spaces; special characters are not included. Optional request field.
     * @return $this
     */
    public function setReservationSystemCode($reservationSystemCode)
    {
        $this->container['reservationSystemCode'] = $reservationSystemCode;

        return $this;
    }

    /**
     * Gets processIdentifier
     * @return string
     */
    public function getProcessIdentifier()
    {
        return $this->container['processIdentifier'];
    }

    /**
     * Sets processIdentifier
     * @param string $processIdentifier Airline process identifier. This value is the airline's three-digit IATA1 code which is used to process extended payment airline tickets.
     * @return $this
     */
    public function setProcessIdentifier($processIdentifier)
    {
        $this->container['processIdentifier'] = $processIdentifier;

        return $this;
    }

    /**
     * Gets ticketIssueDate
     * @return string
     */
    public function getTicketIssueDate()
    {
        return $this->container['ticketIssueDate'];
    }

    /**
     * Sets ticketIssueDate
     * @param string $ticketIssueDate Date on which the transaction occurred. Format: `YYYYMMDD` Format: English characters only. Optional request field.
     * @return $this
     */
    public function setTicketIssueDate($ticketIssueDate)
    {
        $this->container['ticketIssueDate'] = $ticketIssueDate;

        return $this;
    }

    /**
     * Gets electronicTicketIndicator
     * @return bool
     */
    public function getElectronicTicketIndicator()
    {
        return $this->container['electronicTicketIndicator'];
    }

    /**
     * Sets electronicTicketIndicator
     * @param bool $electronicTicketIndicator Flag that indicates whether an electronic ticket was issued. Possible values: - `true` - `false` Optional request field.
     * @return $this
     */
    public function setElectronicTicketIndicator($electronicTicketIndicator)
    {
        $this->container['electronicTicketIndicator'] = $electronicTicketIndicator;

        return $this;
    }

    /**
     * Gets originalTicketNumber
     * @return string
     */
    public function getOriginalTicketNumber()
    {
        return $this->container['originalTicketNumber'];
    }

    /**
     * Sets originalTicketNumber
     * @param string $originalTicketNumber Original ticket number when the transaction is for a replacement ticket.
     * @return $this
     */
    public function setOriginalTicketNumber($originalTicketNumber)
    {
        $this->container['originalTicketNumber'] = $originalTicketNumber;

        return $this;
    }

    /**
     * Gets purchaseType
     * @return string
     */
    public function getPurchaseType()
    {
        return $this->container['purchaseType'];
    }

    /**
     * Sets purchaseType
     * @param string $purchaseType Type of purchase. Possible values: - `EXC`: Exchange ticket - `MSC`: Miscellaneous (not a ticket purchase and not a transaction related to an exchange ticket) - `REF`: Refund - `TKT`: Ticket Format: English characters only. Optional request field.
     * @return $this
     */
    public function setPurchaseType($purchaseType)
    {
        $this->container['purchaseType'] = $purchaseType;

        return $this;
    }

    /**
     * Gets creditReasonIndicator
     * @return string
     */
    public function getCreditReasonIndicator()
    {
        return $this->container['creditReasonIndicator'];
    }

    /**
     * Sets creditReasonIndicator
     * @param string $creditReasonIndicator Reason for the credit. Possible values: - `A`: Cancellation of the ancillary passenger transport purchase. - `B`: Cancellation of the airline ticket and the passenger transport ancillary purchase. - `C`: Cancellation of the airline ticket. - `O`: Other. - `P`: Partial refund of the airline ticket. Format: English characters only.  Optional request field.
     * @return $this
     */
    public function setCreditReasonIndicator($creditReasonIndicator)
    {
        $this->container['creditReasonIndicator'] = $creditReasonIndicator;

        return $this;
    }

    /**
     * Gets ticketChangeIndicator
     * @return string
     */
    public function getTicketChangeIndicator()
    {
        return $this->container['ticketChangeIndicator'];
    }

    /**
     * Sets ticketChangeIndicator
     * @param string $ticketChangeIndicator Type of update. Possible values: - `C`: Change to the existing ticket. - `N`: New ticket. Format: English characters only Optional request field.
     * @return $this
     */
    public function setTicketChangeIndicator($ticketChangeIndicator)
    {
        $this->container['ticketChangeIndicator'] = $ticketChangeIndicator;

        return $this;
    }

    /**
     * Gets planNumber
     * @return string
     */
    public function getPlanNumber()
    {
        return $this->container['planNumber'];
    }

    /**
     * Sets planNumber
     * @param string $planNumber Plan number based on the fare. This value is provided by the airline. Format: English characters only. Optional request field.
     * @return $this
     */
    public function setPlanNumber($planNumber)
    {
        $this->container['planNumber'] = $planNumber;

        return $this;
    }

    /**
     * Gets arrivalDate
     * @return string
     */
    public function getArrivalDate()
    {
        return $this->container['arrivalDate'];
    }

    /**
     * Sets arrivalDate
     * @param string $arrivalDate Date of arrival for the last leg of the trip. Format: `MMDDYYYY` English characters only. Optional request field.
     * @return $this
     */
    public function setArrivalDate($arrivalDate)
    {
        $this->container['arrivalDate'] = $arrivalDate;

        return $this;
    }

    /**
     * Gets restrictedTicketDesciption
     * @return string
     */
    public function getRestrictedTicketDesciption()
    {
        return $this->container['restrictedTicketDesciption'];
    }

    /**
     * Sets restrictedTicketDesciption
     * @param string $restrictedTicketDesciption Text that describes the ticket limitations, such as _nonrefundable_. Format: English characters only. Optional request field.
     * @return $this
     */
    public function setRestrictedTicketDesciption($restrictedTicketDesciption)
    {
        $this->container['restrictedTicketDesciption'] = $restrictedTicketDesciption;

        return $this;
    }

    /**
     * Gets exchangeTicketAmount
     * @return string
     */
    public function getExchangeTicketAmount()
    {
        return $this->container['exchangeTicketAmount'];
    }

    /**
     * Sets exchangeTicketAmount
     * @param string $exchangeTicketAmount Amount of the exchanged ticket. Format: English characters only.
     * @return $this
     */
    public function setExchangeTicketAmount($exchangeTicketAmount)
    {
        $this->container['exchangeTicketAmount'] = $exchangeTicketAmount;

        return $this;
    }

    /**
     * Gets exchangeTicketFeeAmount
     * @return string
     */
    public function getExchangeTicketFeeAmount()
    {
        return $this->container['exchangeTicketFeeAmount'];
    }

    /**
     * Sets exchangeTicketFeeAmount
     * @param string $exchangeTicketFeeAmount Fee for exchanging the ticket. Format: English characters only. Optional request field.
     * @return $this
     */
    public function setExchangeTicketFeeAmount($exchangeTicketFeeAmount)
    {
        $this->container['exchangeTicketFeeAmount'] = $exchangeTicketFeeAmount;

        return $this;
    }

    /**
     * Gets reservationType
     * @return string
     */
    public function getReservationType()
    {
        return $this->container['reservationType'];
    }

    /**
     * Sets reservationType
     * @param string $reservationType The field is not currently supported.
     * @return $this
     */
    public function setReservationType($reservationType)
    {
        $this->container['reservationType'] = $reservationType;

        return $this;
    }

    /**
     * Gets boardingFeeAmount
     * @return string
     */
    public function getBoardingFeeAmount()
    {
        return $this->container['boardingFeeAmount'];
    }

    /**
     * Sets boardingFeeAmount
     * @param string $boardingFeeAmount Boarding fee.
     * @return $this
     */
    public function setBoardingFeeAmount($boardingFeeAmount)
    {
        $this->container['boardingFeeAmount'] = $boardingFeeAmount;

        return $this;
    }

    /**
     * Gets legs
     * @return \CyberSource\Model\Ptsv2paymentsTravelInformationTransitAirlineLegs[]
     */
    public function getLegs()
    {
        return $this->container['legs'];
    }

    /**
     * Sets legs
     * @param \CyberSource\Model\Ptsv2paymentsTravelInformationTransitAirlineLegs[] $legs
     * @return $this
     */
    public function setLegs($legs)
    {
        $this->container['legs'] = $legs;

        return $this;
    }

    /**
     * Gets ancillaryInformation
     * @return \CyberSource\Model\Ptsv2paymentsTravelInformationTransitAirlineAncillaryInformation
     */
    public function getAncillaryInformation()
    {
        return $this->container['ancillaryInformation'];
    }

    /**
     * Sets ancillaryInformation
     * @param \CyberSource\Model\Ptsv2paymentsTravelInformationTransitAirlineAncillaryInformation $ancillaryInformation
     * @return $this
     */
    public function setAncillaryInformation($ancillaryInformation)
    {
        $this->container['ancillaryInformation'] = $ancillaryInformation;

        return $this;
    }

    /**
     * Gets flightType
     * @return string
     */
    public function getFlightType()
    {
        return $this->container['flightType'];
    }

    /**
     * Sets flightType
     * @param string $flightType Specifies the type of flight. One way (0) Return (1) Transit (2) Transit & Return (3) Multi-City (4)
     * @return $this
     */
    public function setFlightType($flightType)
    {
        $this->container['flightType'] = $flightType;

        return $this;
    }

    /**
     * Gets insuranceAmount
     * @return string
     */
    public function getInsuranceAmount()
    {
        return $this->container['insuranceAmount'];
    }

    /**
     * Sets insuranceAmount
     * @param string $insuranceAmount The total cost of the flight insurance. Example: 10000.00
     * @return $this
     */
    public function setInsuranceAmount($insuranceAmount)
    {
        $this->container['insuranceAmount'] = $insuranceAmount;

        return $this;
    }

    /**
     * Gets frequentFlyerNumber
     * @return string
     */
    public function getFrequentFlyerNumber()
    {
        return $this->container['frequentFlyerNumber'];
    }

    /**
     * Sets frequentFlyerNumber
     * @param string $frequentFlyerNumber The consumer's frequent flyer number. Leave 0 if there is no frequent flyer number
     * @return $this
     */
    public function setFrequentFlyerNumber($frequentFlyerNumber)
    {
        $this->container['frequentFlyerNumber'] = $frequentFlyerNumber;

        return $this;
    }

    /**
     * Gets thirdPartyStatus
     * @return string
     */
    public function getThirdPartyStatus()
    {
        return $this->container['thirdPartyStatus'];
    }

    /**
     * Sets thirdPartyStatus
     * @param string $thirdPartyStatus Specifies if the travel agent joins the flight (0) or not (1)
     * @return $this
     */
    public function setThirdPartyStatus($thirdPartyStatus)
    {
        $this->container['thirdPartyStatus'] = $thirdPartyStatus;

        return $this;
    }

    /**
     * Gets passengerType
     * @return string
     */
    public function getPassengerType()
    {
        return $this->container['passengerType'];
    }

    /**
     * Sets passengerType
     * @param string $passengerType List of passenger types in a booking code: A (Adult) C (Child) Comma separated values for total number of passenger
     * @return $this
     */
    public function setPassengerType($passengerType)
    {
        $this->container['passengerType'] = $passengerType;

        return $this;
    }

    /**
     * Gets totalInsuranceAmount
     * @return string
     */
    public function getTotalInsuranceAmount()
    {
        return $this->container['totalInsuranceAmount'];
    }

    /**
     * Sets totalInsuranceAmount
     * @param string $totalInsuranceAmount Total insurance amount. We have per leg and not total
     * @return $this
     */
    public function setTotalInsuranceAmount($totalInsuranceAmount)
    {
        $this->container['totalInsuranceAmount'] = $totalInsuranceAmount;

        return $this;
    }
    /**
     * Returns true if offset exists. False otherwise.
     * @param  integer $offset Offset
     * @return boolean
     */
    #[\ReturnTypeWillChange]
    public function offsetExists($offset)
    {
        return isset($this->container[$offset]);
    }

    /**
     * Gets offset.
     * @param  integer $offset Offset
     * @return mixed
     */
    #[\ReturnTypeWillChange]
    public function offsetGet($offset)
    {
        return isset($this->container[$offset]) ? $this->container[$offset] : null;
    }

    /**
     * Sets value based on offset.
     * @param  integer $offset Offset
     * @param  mixed   $value  Value to be set
     * @return void
     */
    #[\ReturnTypeWillChange]
    public function offsetSet($offset, $value)
    {
        if (is_null($offset)) {
            $this->container[] = $value;
        } else {
            $this->container[$offset] = $value;
        }
    }

    /**
     * Unsets offset.
     * @param  integer $offset Offset
     * @return void
     */
    #[\ReturnTypeWillChange]
    public function offsetUnset($offset)
    {
        unset($this->container[$offset]);
    }

    /**
     * Gets the string presentation of the object
     * @return string
     */
    public function __toString()
    {
        if (defined('JSON_PRETTY_PRINT')) { // use JSON pretty print
            return json_encode(\CyberSource\ObjectSerializer::sanitizeForSerialization($this), JSON_PRETTY_PRINT);
        }

        return json_encode(\CyberSource\ObjectSerializer::sanitizeForSerialization($this));
    }
}


