<?php
/**
 * Ptsv2paymentsTravelInformationAutoRental
 *
 * 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;

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

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

    /**
      * Array of property to type mappings. Used for (de)serialization
      * @var string[]
      */
    protected static $swaggerTypes = [
        'noShowIndicator' => 'bool',
        'customerName' => 'string',
        'vehicleClass' => 'string',
        'distanceTravelled' => 'string',
        'distanceUnit' => 'string',
        'returnDateTime' => 'string',
        'rentalDateTime' => 'string',
        'maxFreeDistance' => 'string',
        'insuranceIndicator' => 'bool',
        'programCode' => 'string',
        'returnAddress' => '\CyberSource\Model\Ptsv2paymentsTravelInformationAutoRentalReturnAddress',
        'rentalAddress' => '\CyberSource\Model\Ptsv2paymentsTravelInformationAutoRentalRentalAddress',
        'agreementNumber' => 'string',
        'odometerReading' => 'string',
        'vehicleIdentificationNumber' => 'string',
        'companyId' => 'string',
        'numberOfAdditionalDrivers' => 'string',
        'driverAge' => 'string',
        'specialProgramCode' => 'string',
        'vehicleMake' => 'string',
        'vehicleModel' => 'string',
        'timePeriod' => 'string',
        'commodityCode' => 'string',
        'customerServicePhoneNumber' => 'string',
        'taxDetails' => '\CyberSource\Model\Ptsv2paymentsTravelInformationAutoRentalTaxDetails',
        'insuranceAmount' => 'string',
        'oneWayDropOffAmount' => 'string',
        'adjustedAmountIndicator' => 'string',
        'adjustedAmount' => 'string',
        'fuelCharges' => 'string',
        'weeklyRentalRate' => 'string',
        'dailyRentalRate' => 'string',
        'ratePerMile' => 'string',
        'mileageCharge' => 'string',
        'extraMileageCharge' => 'string',
        'lateFeeAmount' => 'string',
        'towingCharge' => 'string',
        'extraCharge' => 'string',
        'gpsCharge' => 'string',
        'phoneCharge' => 'string',
        'parkingViolationCharge' => 'string',
        'otherCharges' => 'string',
        'companyName' => 'string',
        'affiliateName' => 'string'
    ];

    /**
      * Array of property to format mappings. Used for (de)serialization
      * @var string[]
      */
    protected static $swaggerFormats = [
        'noShowIndicator' => null,
        'customerName' => null,
        'vehicleClass' => null,
        'distanceTravelled' => null,
        'distanceUnit' => null,
        'returnDateTime' => null,
        'rentalDateTime' => null,
        'maxFreeDistance' => null,
        'insuranceIndicator' => null,
        'programCode' => null,
        'returnAddress' => null,
        'rentalAddress' => null,
        'agreementNumber' => null,
        'odometerReading' => null,
        'vehicleIdentificationNumber' => null,
        'companyId' => null,
        'numberOfAdditionalDrivers' => null,
        'driverAge' => null,
        'specialProgramCode' => null,
        'vehicleMake' => null,
        'vehicleModel' => null,
        'timePeriod' => null,
        'commodityCode' => null,
        'customerServicePhoneNumber' => null,
        'taxDetails' => null,
        'insuranceAmount' => null,
        'oneWayDropOffAmount' => null,
        'adjustedAmountIndicator' => null,
        'adjustedAmount' => null,
        'fuelCharges' => null,
        'weeklyRentalRate' => null,
        'dailyRentalRate' => null,
        'ratePerMile' => null,
        'mileageCharge' => null,
        'extraMileageCharge' => null,
        'lateFeeAmount' => null,
        'towingCharge' => null,
        'extraCharge' => null,
        'gpsCharge' => null,
        'phoneCharge' => null,
        'parkingViolationCharge' => null,
        'otherCharges' => null,
        'companyName' => null,
        'affiliateName' => 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 = [
        'noShowIndicator' => 'noShowIndicator',
        'customerName' => 'customerName',
        'vehicleClass' => 'vehicleClass',
        'distanceTravelled' => 'distanceTravelled',
        'distanceUnit' => 'distanceUnit',
        'returnDateTime' => 'returnDateTime',
        'rentalDateTime' => 'rentalDateTime',
        'maxFreeDistance' => 'maxFreeDistance',
        'insuranceIndicator' => 'insuranceIndicator',
        'programCode' => 'programCode',
        'returnAddress' => 'returnAddress',
        'rentalAddress' => 'rentalAddress',
        'agreementNumber' => 'agreementNumber',
        'odometerReading' => 'odometerReading',
        'vehicleIdentificationNumber' => 'vehicleIdentificationNumber',
        'companyId' => 'companyId',
        'numberOfAdditionalDrivers' => 'numberOfAdditionalDrivers',
        'driverAge' => 'driverAge',
        'specialProgramCode' => 'specialProgramCode',
        'vehicleMake' => 'vehicleMake',
        'vehicleModel' => 'vehicleModel',
        'timePeriod' => 'timePeriod',
        'commodityCode' => 'commodityCode',
        'customerServicePhoneNumber' => 'customerServicePhoneNumber',
        'taxDetails' => 'taxDetails',
        'insuranceAmount' => 'insuranceAmount',
        'oneWayDropOffAmount' => 'oneWayDropOffAmount',
        'adjustedAmountIndicator' => 'adjustedAmountIndicator',
        'adjustedAmount' => 'adjustedAmount',
        'fuelCharges' => 'fuelCharges',
        'weeklyRentalRate' => 'weeklyRentalRate',
        'dailyRentalRate' => 'dailyRentalRate',
        'ratePerMile' => 'ratePerMile',
        'mileageCharge' => 'mileageCharge',
        'extraMileageCharge' => 'extraMileageCharge',
        'lateFeeAmount' => 'lateFeeAmount',
        'towingCharge' => 'towingCharge',
        'extraCharge' => 'extraCharge',
        'gpsCharge' => 'gpsCharge',
        'phoneCharge' => 'phoneCharge',
        'parkingViolationCharge' => 'parkingViolationCharge',
        'otherCharges' => 'otherCharges',
        'companyName' => 'companyName',
        'affiliateName' => 'affiliateName'
    ];


    /**
     * Array of attributes to setter functions (for deserialization of responses)
     * @var string[]
     */
    protected static $setters = [
        'noShowIndicator' => 'setNoShowIndicator',
        'customerName' => 'setCustomerName',
        'vehicleClass' => 'setVehicleClass',
        'distanceTravelled' => 'setDistanceTravelled',
        'distanceUnit' => 'setDistanceUnit',
        'returnDateTime' => 'setReturnDateTime',
        'rentalDateTime' => 'setRentalDateTime',
        'maxFreeDistance' => 'setMaxFreeDistance',
        'insuranceIndicator' => 'setInsuranceIndicator',
        'programCode' => 'setProgramCode',
        'returnAddress' => 'setReturnAddress',
        'rentalAddress' => 'setRentalAddress',
        'agreementNumber' => 'setAgreementNumber',
        'odometerReading' => 'setOdometerReading',
        'vehicleIdentificationNumber' => 'setVehicleIdentificationNumber',
        'companyId' => 'setCompanyId',
        'numberOfAdditionalDrivers' => 'setNumberOfAdditionalDrivers',
        'driverAge' => 'setDriverAge',
        'specialProgramCode' => 'setSpecialProgramCode',
        'vehicleMake' => 'setVehicleMake',
        'vehicleModel' => 'setVehicleModel',
        'timePeriod' => 'setTimePeriod',
        'commodityCode' => 'setCommodityCode',
        'customerServicePhoneNumber' => 'setCustomerServicePhoneNumber',
        'taxDetails' => 'setTaxDetails',
        'insuranceAmount' => 'setInsuranceAmount',
        'oneWayDropOffAmount' => 'setOneWayDropOffAmount',
        'adjustedAmountIndicator' => 'setAdjustedAmountIndicator',
        'adjustedAmount' => 'setAdjustedAmount',
        'fuelCharges' => 'setFuelCharges',
        'weeklyRentalRate' => 'setWeeklyRentalRate',
        'dailyRentalRate' => 'setDailyRentalRate',
        'ratePerMile' => 'setRatePerMile',
        'mileageCharge' => 'setMileageCharge',
        'extraMileageCharge' => 'setExtraMileageCharge',
        'lateFeeAmount' => 'setLateFeeAmount',
        'towingCharge' => 'setTowingCharge',
        'extraCharge' => 'setExtraCharge',
        'gpsCharge' => 'setGpsCharge',
        'phoneCharge' => 'setPhoneCharge',
        'parkingViolationCharge' => 'setParkingViolationCharge',
        'otherCharges' => 'setOtherCharges',
        'companyName' => 'setCompanyName',
        'affiliateName' => 'setAffiliateName'
    ];


    /**
     * Array of attributes to getter functions (for serialization of requests)
     * @var string[]
     */
    protected static $getters = [
        'noShowIndicator' => 'getNoShowIndicator',
        'customerName' => 'getCustomerName',
        'vehicleClass' => 'getVehicleClass',
        'distanceTravelled' => 'getDistanceTravelled',
        'distanceUnit' => 'getDistanceUnit',
        'returnDateTime' => 'getReturnDateTime',
        'rentalDateTime' => 'getRentalDateTime',
        'maxFreeDistance' => 'getMaxFreeDistance',
        'insuranceIndicator' => 'getInsuranceIndicator',
        'programCode' => 'getProgramCode',
        'returnAddress' => 'getReturnAddress',
        'rentalAddress' => 'getRentalAddress',
        'agreementNumber' => 'getAgreementNumber',
        'odometerReading' => 'getOdometerReading',
        'vehicleIdentificationNumber' => 'getVehicleIdentificationNumber',
        'companyId' => 'getCompanyId',
        'numberOfAdditionalDrivers' => 'getNumberOfAdditionalDrivers',
        'driverAge' => 'getDriverAge',
        'specialProgramCode' => 'getSpecialProgramCode',
        'vehicleMake' => 'getVehicleMake',
        'vehicleModel' => 'getVehicleModel',
        'timePeriod' => 'getTimePeriod',
        'commodityCode' => 'getCommodityCode',
        'customerServicePhoneNumber' => 'getCustomerServicePhoneNumber',
        'taxDetails' => 'getTaxDetails',
        'insuranceAmount' => 'getInsuranceAmount',
        'oneWayDropOffAmount' => 'getOneWayDropOffAmount',
        'adjustedAmountIndicator' => 'getAdjustedAmountIndicator',
        'adjustedAmount' => 'getAdjustedAmount',
        'fuelCharges' => 'getFuelCharges',
        'weeklyRentalRate' => 'getWeeklyRentalRate',
        'dailyRentalRate' => 'getDailyRentalRate',
        'ratePerMile' => 'getRatePerMile',
        'mileageCharge' => 'getMileageCharge',
        'extraMileageCharge' => 'getExtraMileageCharge',
        'lateFeeAmount' => 'getLateFeeAmount',
        'towingCharge' => 'getTowingCharge',
        'extraCharge' => 'getExtraCharge',
        'gpsCharge' => 'getGpsCharge',
        'phoneCharge' => 'getPhoneCharge',
        'parkingViolationCharge' => 'getParkingViolationCharge',
        'otherCharges' => 'getOtherCharges',
        'companyName' => 'getCompanyName',
        'affiliateName' => 'getAffiliateName'
    ];

    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['noShowIndicator'] = isset($data['noShowIndicator']) ? $data['noShowIndicator'] : null;
        $this->container['customerName'] = isset($data['customerName']) ? $data['customerName'] : null;
        $this->container['vehicleClass'] = isset($data['vehicleClass']) ? $data['vehicleClass'] : null;
        $this->container['distanceTravelled'] = isset($data['distanceTravelled']) ? $data['distanceTravelled'] : null;
        $this->container['distanceUnit'] = isset($data['distanceUnit']) ? $data['distanceUnit'] : null;
        $this->container['returnDateTime'] = isset($data['returnDateTime']) ? $data['returnDateTime'] : null;
        $this->container['rentalDateTime'] = isset($data['rentalDateTime']) ? $data['rentalDateTime'] : null;
        $this->container['maxFreeDistance'] = isset($data['maxFreeDistance']) ? $data['maxFreeDistance'] : null;
        $this->container['insuranceIndicator'] = isset($data['insuranceIndicator']) ? $data['insuranceIndicator'] : null;
        $this->container['programCode'] = isset($data['programCode']) ? $data['programCode'] : null;
        $this->container['returnAddress'] = isset($data['returnAddress']) ? $data['returnAddress'] : null;
        $this->container['rentalAddress'] = isset($data['rentalAddress']) ? $data['rentalAddress'] : null;
        $this->container['agreementNumber'] = isset($data['agreementNumber']) ? $data['agreementNumber'] : null;
        $this->container['odometerReading'] = isset($data['odometerReading']) ? $data['odometerReading'] : null;
        $this->container['vehicleIdentificationNumber'] = isset($data['vehicleIdentificationNumber']) ? $data['vehicleIdentificationNumber'] : null;
        $this->container['companyId'] = isset($data['companyId']) ? $data['companyId'] : null;
        $this->container['numberOfAdditionalDrivers'] = isset($data['numberOfAdditionalDrivers']) ? $data['numberOfAdditionalDrivers'] : null;
        $this->container['driverAge'] = isset($data['driverAge']) ? $data['driverAge'] : null;
        $this->container['specialProgramCode'] = isset($data['specialProgramCode']) ? $data['specialProgramCode'] : null;
        $this->container['vehicleMake'] = isset($data['vehicleMake']) ? $data['vehicleMake'] : null;
        $this->container['vehicleModel'] = isset($data['vehicleModel']) ? $data['vehicleModel'] : null;
        $this->container['timePeriod'] = isset($data['timePeriod']) ? $data['timePeriod'] : null;
        $this->container['commodityCode'] = isset($data['commodityCode']) ? $data['commodityCode'] : null;
        $this->container['customerServicePhoneNumber'] = isset($data['customerServicePhoneNumber']) ? $data['customerServicePhoneNumber'] : null;
        $this->container['taxDetails'] = isset($data['taxDetails']) ? $data['taxDetails'] : null;
        $this->container['insuranceAmount'] = isset($data['insuranceAmount']) ? $data['insuranceAmount'] : null;
        $this->container['oneWayDropOffAmount'] = isset($data['oneWayDropOffAmount']) ? $data['oneWayDropOffAmount'] : null;
        $this->container['adjustedAmountIndicator'] = isset($data['adjustedAmountIndicator']) ? $data['adjustedAmountIndicator'] : null;
        $this->container['adjustedAmount'] = isset($data['adjustedAmount']) ? $data['adjustedAmount'] : null;
        $this->container['fuelCharges'] = isset($data['fuelCharges']) ? $data['fuelCharges'] : null;
        $this->container['weeklyRentalRate'] = isset($data['weeklyRentalRate']) ? $data['weeklyRentalRate'] : null;
        $this->container['dailyRentalRate'] = isset($data['dailyRentalRate']) ? $data['dailyRentalRate'] : null;
        $this->container['ratePerMile'] = isset($data['ratePerMile']) ? $data['ratePerMile'] : null;
        $this->container['mileageCharge'] = isset($data['mileageCharge']) ? $data['mileageCharge'] : null;
        $this->container['extraMileageCharge'] = isset($data['extraMileageCharge']) ? $data['extraMileageCharge'] : null;
        $this->container['lateFeeAmount'] = isset($data['lateFeeAmount']) ? $data['lateFeeAmount'] : null;
        $this->container['towingCharge'] = isset($data['towingCharge']) ? $data['towingCharge'] : null;
        $this->container['extraCharge'] = isset($data['extraCharge']) ? $data['extraCharge'] : null;
        $this->container['gpsCharge'] = isset($data['gpsCharge']) ? $data['gpsCharge'] : null;
        $this->container['phoneCharge'] = isset($data['phoneCharge']) ? $data['phoneCharge'] : null;
        $this->container['parkingViolationCharge'] = isset($data['parkingViolationCharge']) ? $data['parkingViolationCharge'] : null;
        $this->container['otherCharges'] = isset($data['otherCharges']) ? $data['otherCharges'] : null;
        $this->container['companyName'] = isset($data['companyName']) ? $data['companyName'] : null;
        $this->container['affiliateName'] = isset($data['affiliateName']) ? $data['affiliateName'] : 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 noShowIndicator
     * @return bool
     */
    public function getNoShowIndicator()
    {
        return $this->container['noShowIndicator'];
    }

    /**
     * Sets noShowIndicator
     * @param bool $noShowIndicator No Show Indicator provides an indicator noting that the individual did not show up after making a reservation for a vehicle. Possible values: - true - false
     * @return $this
     */
    public function setNoShowIndicator($noShowIndicator)
    {
        $this->container['noShowIndicator'] = $noShowIndicator;

        return $this;
    }

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

    /**
     * Sets customerName
     * @param string $customerName Name of the individual making the rental agreement.  Valid data lengths by card:  |Card Specific Validation|VISA|MasterCard|Discover|AMEX| |--- |--- |--- |--- | | Filed Length| 40| 40| 29| 26| | Field Type| AN| ANS| AN| AN| | M/O/C| O| M| M| M|
     * @return $this
     */
    public function setCustomerName($customerName)
    {
        $this->container['customerName'] = $customerName;

        return $this;
    }

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

    /**
     * Sets vehicleClass
     * @param string $vehicleClass Classification of the rented auto.  **NOTE** For VISA, this is a 2-byte optional code.  Valid values for American Express & MasterCard:  |American Express |MasterCard |Description| |--- |--- |--- | | 0001| 0001| Mini| | 0002| 0002| Subcompact| | 0003| 0003| Economy| | 0004| 0004| Compact| | 0005| 0005| Midsize| | 0006| 0006| Intermediate| | 0007| 0007| Standard| | 0008| 0008| Fulll size| | 0009| 0009| Luxury| | 0010| 0010| Premium| | 0011| 0011| Minivan| | 0012| 0012| 12-passenger van| | 0013| 0013| Moving van| | 0014| 0014| 15-passenger van| | 0015| 0015| Cargo van| | 0016| 0016| 12-foot truck| | 0017| 0017| 20-foot truck| | 0018| 0018| 24-foot truck| | 0019| 0019| 26-foot truck| | 0020| 0020| Moped| | 0021| 0021| Stretch| | 0022| 0022| Regular| | 0023| 0023| Unique| | 0024| 0024| Exotic| | 0025| 0025| Small/medium truck| | 0026| 0026| Large truck| | 0027| 0027| Small SUV| | 0028| 0028| Medium SUV| | 0029| 0029| Large SUV| | 0030| 0030| Exotic SUV| | 9999| 9999| Miscellaneous|  Additional Values allowed **only** for `American Express`:  |American Express|MasterCard|Description| |--- |--- |--- | | 0031| NA| Four Wheel Drive| | 0032| NA| Special| | 0099| NA| Taxi|
     * @return $this
     */
    public function setVehicleClass($vehicleClass)
    {
        $this->container['vehicleClass'] = $vehicleClass;

        return $this;
    }

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

    /**
     * Sets distanceTravelled
     * @param string $distanceTravelled Total number of miles driven by the customer. This field is supported only for MasterCard and American Express.
     * @return $this
     */
    public function setDistanceTravelled($distanceTravelled)
    {
        $this->container['distanceTravelled'] = $distanceTravelled;

        return $this;
    }

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

    /**
     * Sets distanceUnit
     * @param string $distanceUnit Miles/Kilometers Indicator shows whether the \"miles\" fields are expressed in miles or kilometers.  Allowed values: - `K` - Kilometers - `M` - Miles
     * @return $this
     */
    public function setDistanceUnit($distanceUnit)
    {
        $this->container['distanceUnit'] = $distanceUnit;

        return $this;
    }

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

    /**
     * Sets returnDateTime
     * @param string $returnDateTime Date/time the auto was returned to the rental agency. Format: ``yyyy-MM-dd HH-mm-ss z`` This field is supported for Visa, MasterCard, and American Express.
     * @return $this
     */
    public function setReturnDateTime($returnDateTime)
    {
        $this->container['returnDateTime'] = $returnDateTime;

        return $this;
    }

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

    /**
     * Sets rentalDateTime
     * @param string $rentalDateTime Date/time the auto was picked up from the rental agency. Format: `yyyy-MM-dd HH-mm-ss z` This field is supported for Visa, MasterCard, and American Express.
     * @return $this
     */
    public function setRentalDateTime($rentalDateTime)
    {
        $this->container['rentalDateTime'] = $rentalDateTime;

        return $this;
    }

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

    /**
     * Sets maxFreeDistance
     * @param string $maxFreeDistance Maximum number of free miles or kilometers allowed to a customer for the duration of the auto rental agreement. This field is supported only for MasterCard and American Express.
     * @return $this
     */
    public function setMaxFreeDistance($maxFreeDistance)
    {
        $this->container['maxFreeDistance'] = $maxFreeDistance;

        return $this;
    }

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

    /**
     * Sets insuranceIndicator
     * @param bool $insuranceIndicator Used for MC and Discover  Valid values: - `true` - Yes (insurance was purchased) - `false` - No (insurance was not purchased)
     * @return $this
     */
    public function setInsuranceIndicator($insuranceIndicator)
    {
        $this->container['insuranceIndicator'] = $insuranceIndicator;

        return $this;
    }

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

    /**
     * Sets programCode
     * @param string $programCode Used to identify special circumstances applicable to the Card Transaction or Cardholder, such as \"renter\" or \"show\".  This code is `2 digit` value agreed by Merchant and processor.
     * @return $this
     */
    public function setProgramCode($programCode)
    {
        $this->container['programCode'] = $programCode;

        return $this;
    }

    /**
     * Gets returnAddress
     * @return \CyberSource\Model\Ptsv2paymentsTravelInformationAutoRentalReturnAddress
     */
    public function getReturnAddress()
    {
        return $this->container['returnAddress'];
    }

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

        return $this;
    }

    /**
     * Gets rentalAddress
     * @return \CyberSource\Model\Ptsv2paymentsTravelInformationAutoRentalRentalAddress
     */
    public function getRentalAddress()
    {
        return $this->container['rentalAddress'];
    }

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

        return $this;
    }

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

    /**
     * Sets agreementNumber
     * @param string $agreementNumber Auto rental agency's agreement (invoice) number provided to the customer. It is used to trace any inquiries about transactions. This field is supported for Visa, MasterCard, and American Express. This Merchant-defined value, which may be composed of any combination of characters and/or numerals, may become part of the descriptive bill on the Cardmember's statement.
     * @return $this
     */
    public function setAgreementNumber($agreementNumber)
    {
        $this->container['agreementNumber'] = $agreementNumber;

        return $this;
    }

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

    /**
     * Sets odometerReading
     * @param string $odometerReading Odometer reading at time of vehicle rental.
     * @return $this
     */
    public function setOdometerReading($odometerReading)
    {
        $this->container['odometerReading'] = $odometerReading;

        return $this;
    }

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

    /**
     * Sets vehicleIdentificationNumber
     * @param string $vehicleIdentificationNumber This field contains a unique identifier assigned by the company to the vehicle.
     * @return $this
     */
    public function setVehicleIdentificationNumber($vehicleIdentificationNumber)
    {
        $this->container['vehicleIdentificationNumber'] = $vehicleIdentificationNumber;

        return $this;
    }

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

    /**
     * Sets companyId
     * @param string $companyId Corporate Identifier provides the unique identifier of the corporation or entity renting the vehicle:  |Card Specific Validation|VISA|MasterCard|Discover|AMEX| |--- |--- |--- |--- | | Filed Length| NA| 12| NA| NA| | Field Type| NA| AN| NA| NA| | M/O/C| NA| O| NA| NA|
     * @return $this
     */
    public function setCompanyId($companyId)
    {
        $this->container['companyId'] = $companyId;

        return $this;
    }

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

    /**
     * Sets numberOfAdditionalDrivers
     * @param string $numberOfAdditionalDrivers The number of additional drivers included on the rental agreement not including the individual who signed the rental agreement.
     * @return $this
     */
    public function setNumberOfAdditionalDrivers($numberOfAdditionalDrivers)
    {
        $this->container['numberOfAdditionalDrivers'] = $numberOfAdditionalDrivers;

        return $this;
    }

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

    /**
     * Sets driverAge
     * @param string $driverAge Age of the driver renting the vehicle.
     * @return $this
     */
    public function setDriverAge($driverAge)
    {
        $this->container['driverAge'] = $driverAge;

        return $this;
    }

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

    /**
     * Sets specialProgramCode
     * @param string $specialProgramCode Program code used to identify special circumstances, such as \"frequent renter\" or \"no show\" status for the renter. Possible values: - `0`: not applicable (default) - `1`: frequent renter - `2`: no show  For authorizations, this field is supported only for Visa.  For captures, this field is supported for Visa, MasterCard, and American Express.  Code for special programs applicable to the Card Transaction or the Cardholder.
     * @return $this
     */
    public function setSpecialProgramCode($specialProgramCode)
    {
        $this->container['specialProgramCode'] = $specialProgramCode;

        return $this;
    }

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

    /**
     * Sets vehicleMake
     * @param string $vehicleMake Make of the vehicle being rented (e.g., Chevrolet or Ford).
     * @return $this
     */
    public function setVehicleMake($vehicleMake)
    {
        $this->container['vehicleMake'] = $vehicleMake;

        return $this;
    }

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

    /**
     * Sets vehicleModel
     * @param string $vehicleModel Model of the vehicle being rented (e.g., Cavalier or Focus).
     * @return $this
     */
    public function setVehicleModel($vehicleModel)
    {
        $this->container['vehicleModel'] = $vehicleModel;

        return $this;
    }

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

    /**
     * Sets timePeriod
     * @param string $timePeriod Indicates the time period for which the vehicle rental rate applies (e.g., daily, weekly or monthly). Daily, Weekly and Monthly are valid values.
     * @return $this
     */
    public function setTimePeriod($timePeriod)
    {
        $this->container['timePeriod'] = $timePeriod;

        return $this;
    }

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

    /**
     * Sets commodityCode
     * @param string $commodityCode Commodity code or International description code used to classify the item. Contact your acquirer for a list of codes.
     * @return $this
     */
    public function setCommodityCode($commodityCode)
    {
        $this->container['commodityCode'] = $commodityCode;

        return $this;
    }

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

    /**
     * Sets customerServicePhoneNumber
     * @param string $customerServicePhoneNumber Customer service telephone number that is used to resolve questions or disputes. Include the area code, exchange, and number. This field is supported only for MasterCard and American Express.
     * @return $this
     */
    public function setCustomerServicePhoneNumber($customerServicePhoneNumber)
    {
        $this->container['customerServicePhoneNumber'] = $customerServicePhoneNumber;

        return $this;
    }

    /**
     * Gets taxDetails
     * @return \CyberSource\Model\Ptsv2paymentsTravelInformationAutoRentalTaxDetails
     */
    public function getTaxDetails()
    {
        return $this->container['taxDetails'];
    }

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

        return $this;
    }

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

    /**
     * Sets insuranceAmount
     * @param string $insuranceAmount Insurance charges. Field is conditional and can include decimal point.
     * @return $this
     */
    public function setInsuranceAmount($insuranceAmount)
    {
        $this->container['insuranceAmount'] = $insuranceAmount;

        return $this;
    }

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

    /**
     * Sets oneWayDropOffAmount
     * @param string $oneWayDropOffAmount Extra charges incurred for a one-way rental agreement for the auto. This field is supported only for Visa.
     * @return $this
     */
    public function setOneWayDropOffAmount($oneWayDropOffAmount)
    {
        $this->container['oneWayDropOffAmount'] = $oneWayDropOffAmount;

        return $this;
    }

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

    /**
     * Sets adjustedAmountIndicator
     * @param string $adjustedAmountIndicator For **MasterCard** and **Discover**: Adjusted amount indicator code that indicates any miscellaneous charges incurred after the auto was returned. Possible values: - `A` - Drop-off charges - `B` - Delivery charges - `C` - Parking expenses - `D` - Extra hours - `E` - Violations - `X` - More than one of the above charges  For **American Express**: Audit indicator code that indicates any adjustment for mileage, fuel, auto damage, etc. made to a rental agreement and whether the cardholder was notified.  Possible value for the authorization service: - `A` (default): adjustment amount greater than 0 (zero)  Possible values for the capture service: - `X` - Multiple adjustments - `Y` - One adjustment only; Cardmember notified - `Z` - One adjustment only; Cardmember not notified. This value is used as the default if the request does not include this field and includes an adjustment amount greater than 0 (zero). This is an optional field.
     * @return $this
     */
    public function setAdjustedAmountIndicator($adjustedAmountIndicator)
    {
        $this->container['adjustedAmountIndicator'] = $adjustedAmountIndicator;

        return $this;
    }

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

    /**
     * Sets adjustedAmount
     * @param string $adjustedAmount Adjusted Amount indicates whether any miscellaneous charges were incurred after the vehicle was returned.  For authorizations, this field is supported only for American Express.  For captures, this field is supported only for MasterCard and American Express. **NOTE** For American Express, this field is required if the `travelInformation.autoRental.adjustedAmountIndicator` field is included in the request and has a value; otherwise, this field is optional.  For all other card types, this field is ignored.
     * @return $this
     */
    public function setAdjustedAmount($adjustedAmount)
    {
        $this->container['adjustedAmount'] = $adjustedAmount;

        return $this;
    }

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

    /**
     * Sets fuelCharges
     * @param string $fuelCharges Extra gasoline charges that extend beyond the basic rental agreement. This field is supported only for Visa.
     * @return $this
     */
    public function setFuelCharges($fuelCharges)
    {
        $this->container['fuelCharges'] = $fuelCharges;

        return $this;
    }

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

    /**
     * Sets weeklyRentalRate
     * @param string $weeklyRentalRate Weekly Rental Amount provides the amount charged for a seven-day rental period. Field - Time Period needs to be populated with Weekly if this field is present
     * @return $this
     */
    public function setWeeklyRentalRate($weeklyRentalRate)
    {
        $this->container['weeklyRentalRate'] = $weeklyRentalRate;

        return $this;
    }

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

    /**
     * Sets dailyRentalRate
     * @param string $dailyRentalRate Daily auto rental rate charged. This field is supported only for MasterCard and American Express.  Field - Time Period needs to be populated with Daily if this field is present
     * @return $this
     */
    public function setDailyRentalRate($dailyRentalRate)
    {
        $this->container['dailyRentalRate'] = $dailyRentalRate;

        return $this;
    }

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

    /**
     * Sets ratePerMile
     * @param string $ratePerMile Rate charged for each mile. This field is supported only for MasterCard and American Express.
     * @return $this
     */
    public function setRatePerMile($ratePerMile)
    {
        $this->container['ratePerMile'] = $ratePerMile;

        return $this;
    }

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

    /**
     * Sets mileageCharge
     * @param string $mileageCharge Regular Mileage Charge provides the amount charged for regular miles traveled during vehicle rental. Two decimal places
     * @return $this
     */
    public function setMileageCharge($mileageCharge)
    {
        $this->container['mileageCharge'] = $mileageCharge;

        return $this;
    }

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

    /**
     * Sets extraMileageCharge
     * @param string $extraMileageCharge Extra mileage charges that extend beyond the basic rental agreement. This field is supported only for Visa.
     * @return $this
     */
    public function setExtraMileageCharge($extraMileageCharge)
    {
        $this->container['extraMileageCharge'] = $extraMileageCharge;

        return $this;
    }

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

    /**
     * Sets lateFeeAmount
     * @param string $lateFeeAmount Extra charges related to a late return of the rented auto. This field is supported only for Visa.
     * @return $this
     */
    public function setLateFeeAmount($lateFeeAmount)
    {
        $this->container['lateFeeAmount'] = $lateFeeAmount;

        return $this;
    }

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

    /**
     * Sets towingCharge
     * @param string $towingCharge (Towing Charges) provides the amount charged to tow the rental vehicle.
     * @return $this
     */
    public function setTowingCharge($towingCharge)
    {
        $this->container['towingCharge'] = $towingCharge;

        return $this;
    }

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

    /**
     * Sets extraCharge
     * @param string $extraCharge (Extra Charges) provides the extra charges associated with the vehicle rental.
     * @return $this
     */
    public function setExtraCharge($extraCharge)
    {
        $this->container['extraCharge'] = $extraCharge;

        return $this;
    }

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

    /**
     * Sets gpsCharge
     * @param string $gpsCharge Amount charged for renting a Global Positioning Service (GPS).
     * @return $this
     */
    public function setGpsCharge($gpsCharge)
    {
        $this->container['gpsCharge'] = $gpsCharge;

        return $this;
    }

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

    /**
     * Sets phoneCharge
     * @param string $phoneCharge Additional charges incurred for phone usage included on the total bill.
     * @return $this
     */
    public function setPhoneCharge($phoneCharge)
    {
        $this->container['phoneCharge'] = $phoneCharge;

        return $this;
    }

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

    /**
     * Sets parkingViolationCharge
     * @param string $parkingViolationCharge Extra charges incurred due to a parking violation for the auto. This field is supported only for Visa.
     * @return $this
     */
    public function setParkingViolationCharge($parkingViolationCharge)
    {
        $this->container['parkingViolationCharge'] = $parkingViolationCharge;

        return $this;
    }

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

    /**
     * Sets otherCharges
     * @param string $otherCharges Total amount charged for all other miscellaneous charges not previously defined.
     * @return $this
     */
    public function setOtherCharges($otherCharges)
    {
        $this->container['otherCharges'] = $otherCharges;

        return $this;
    }

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

    /**
     * Sets companyName
     * @param string $companyName Merchant to send their auto rental company name
     * @return $this
     */
    public function setCompanyName($companyName)
    {
        $this->container['companyName'] = $companyName;

        return $this;
    }

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

    /**
     * Sets affiliateName
     * @param string $affiliateName When merchant wants to send the affiliate name.
     * @return $this
     */
    public function setAffiliateName($affiliateName)
    {
        $this->container['affiliateName'] = $affiliateName;

        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));
    }
}


