<?php

namespace patest\StructType;

use \WsdlToPhp\PackageBase\AbstractStructBase;

/**
 * This class stands for GetPresaleExtraData-Response StructType
 * Meta information extracted from the WSDL
 * - nillable: true
 * - type: tns:GetPresaleExtraData-Response
 * @subpackage Structs
 */
class GetPresaleExtraData_Response extends AbstractStructBase
{
    /**
     * The AllocationTypes
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * - nillable: true
     * @var \patest\ArrayType\ArrayOfAllocationTypeDescriptor
     */
    public $AllocationTypes;
    /**
     * The ClientTypes
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * - nillable: true
     * @var \patest\ArrayType\ArrayOfClientTypeDescriptor
     */
    public $ClientTypes;
    /**
     * The CreditCardPartners
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * - nillable: true
     * @var \patest\ArrayType\ArrayOfCreditCardPartnerDescriptor
     */
    public $CreditCardPartners;
    /**
     * The Event
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * - nillable: true
     * @var \patest\StructType\PresaleEventDescriptor
     */
    public $Event;
    /**
     * The PriceTypes
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * - nillable: true
     * @var \patest\ArrayType\ArrayOfPriceTypeDescriptor
     */
    public $PriceTypes;
    /**
     * Constructor method for GetPresaleExtraData-Response
     * @uses GetPresaleExtraData_Response::setAllocationTypes()
     * @uses GetPresaleExtraData_Response::setClientTypes()
     * @uses GetPresaleExtraData_Response::setCreditCardPartners()
     * @uses GetPresaleExtraData_Response::setEvent()
     * @uses GetPresaleExtraData_Response::setPriceTypes()
     * @param \patest\ArrayType\ArrayOfAllocationTypeDescriptor $allocationTypes
     * @param \patest\ArrayType\ArrayOfClientTypeDescriptor $clientTypes
     * @param \patest\ArrayType\ArrayOfCreditCardPartnerDescriptor $creditCardPartners
     * @param \patest\StructType\PresaleEventDescriptor $event
     * @param \patest\ArrayType\ArrayOfPriceTypeDescriptor $priceTypes
     */
    public function __construct(\patest\ArrayType\ArrayOfAllocationTypeDescriptor $allocationTypes = null, \patest\ArrayType\ArrayOfClientTypeDescriptor $clientTypes = null, \patest\ArrayType\ArrayOfCreditCardPartnerDescriptor $creditCardPartners = null, \patest\StructType\PresaleEventDescriptor $event = null, \patest\ArrayType\ArrayOfPriceTypeDescriptor $priceTypes = null)
    {
        $this
            ->setAllocationTypes($allocationTypes)
            ->setClientTypes($clientTypes)
            ->setCreditCardPartners($creditCardPartners)
            ->setEvent($event)
            ->setPriceTypes($priceTypes);
    }
    /**
     * Get AllocationTypes value
     * An additional test has been added (isset) before returning the property value as
     * this property may have been unset before, due to the fact that this property is
     * removable from the request (nillable=true+minOccurs=0)
     * @return \patest\ArrayType\ArrayOfAllocationTypeDescriptor|null
     */
    public function getAllocationTypes()
    {
        return isset($this->AllocationTypes) ? $this->AllocationTypes : null;
    }
    /**
     * Set AllocationTypes value
     * This property is removable from request (nillable=true+minOccurs=0), therefore
     * if the value assigned to this property is null, it is removed from this object
     * @param \patest\ArrayType\ArrayOfAllocationTypeDescriptor $allocationTypes
     * @return \patest\StructType\GetPresaleExtraData_Response
     */
    public function setAllocationTypes(\patest\ArrayType\ArrayOfAllocationTypeDescriptor $allocationTypes = null)
    {
        if (is_null($allocationTypes) || (is_array($allocationTypes) && empty($allocationTypes))) {
            unset($this->AllocationTypes);
        } else {
            $this->AllocationTypes = $allocationTypes;
        }
        return $this;
    }
    /**
     * Get ClientTypes value
     * An additional test has been added (isset) before returning the property value as
     * this property may have been unset before, due to the fact that this property is
     * removable from the request (nillable=true+minOccurs=0)
     * @return \patest\ArrayType\ArrayOfClientTypeDescriptor|null
     */
    public function getClientTypes()
    {
        return isset($this->ClientTypes) ? $this->ClientTypes : null;
    }
    /**
     * Set ClientTypes value
     * This property is removable from request (nillable=true+minOccurs=0), therefore
     * if the value assigned to this property is null, it is removed from this object
     * @param \patest\ArrayType\ArrayOfClientTypeDescriptor $clientTypes
     * @return \patest\StructType\GetPresaleExtraData_Response
     */
    public function setClientTypes(\patest\ArrayType\ArrayOfClientTypeDescriptor $clientTypes = null)
    {
        if (is_null($clientTypes) || (is_array($clientTypes) && empty($clientTypes))) {
            unset($this->ClientTypes);
        } else {
            $this->ClientTypes = $clientTypes;
        }
        return $this;
    }
    /**
     * Get CreditCardPartners value
     * An additional test has been added (isset) before returning the property value as
     * this property may have been unset before, due to the fact that this property is
     * removable from the request (nillable=true+minOccurs=0)
     * @return \patest\ArrayType\ArrayOfCreditCardPartnerDescriptor|null
     */
    public function getCreditCardPartners()
    {
        return isset($this->CreditCardPartners) ? $this->CreditCardPartners : null;
    }
    /**
     * Set CreditCardPartners value
     * This property is removable from request (nillable=true+minOccurs=0), therefore
     * if the value assigned to this property is null, it is removed from this object
     * @param \patest\ArrayType\ArrayOfCreditCardPartnerDescriptor $creditCardPartners
     * @return \patest\StructType\GetPresaleExtraData_Response
     */
    public function setCreditCardPartners(\patest\ArrayType\ArrayOfCreditCardPartnerDescriptor $creditCardPartners = null)
    {
        if (is_null($creditCardPartners) || (is_array($creditCardPartners) && empty($creditCardPartners))) {
            unset($this->CreditCardPartners);
        } else {
            $this->CreditCardPartners = $creditCardPartners;
        }
        return $this;
    }
    /**
     * Get Event value
     * An additional test has been added (isset) before returning the property value as
     * this property may have been unset before, due to the fact that this property is
     * removable from the request (nillable=true+minOccurs=0)
     * @return \patest\StructType\PresaleEventDescriptor|null
     */
    public function getEvent()
    {
        return isset($this->Event) ? $this->Event : null;
    }
    /**
     * Set Event value
     * This property is removable from request (nillable=true+minOccurs=0), therefore
     * if the value assigned to this property is null, it is removed from this object
     * @param \patest\StructType\PresaleEventDescriptor $event
     * @return \patest\StructType\GetPresaleExtraData_Response
     */
    public function setEvent(\patest\StructType\PresaleEventDescriptor $event = null)
    {
        if (is_null($event) || (is_array($event) && empty($event))) {
            unset($this->Event);
        } else {
            $this->Event = $event;
        }
        return $this;
    }
    /**
     * Get PriceTypes value
     * An additional test has been added (isset) before returning the property value as
     * this property may have been unset before, due to the fact that this property is
     * removable from the request (nillable=true+minOccurs=0)
     * @return \patest\ArrayType\ArrayOfPriceTypeDescriptor|null
     */
    public function getPriceTypes()
    {
        return isset($this->PriceTypes) ? $this->PriceTypes : null;
    }
    /**
     * Set PriceTypes value
     * This property is removable from request (nillable=true+minOccurs=0), therefore
     * if the value assigned to this property is null, it is removed from this object
     * @param \patest\ArrayType\ArrayOfPriceTypeDescriptor $priceTypes
     * @return \patest\StructType\GetPresaleExtraData_Response
     */
    public function setPriceTypes(\patest\ArrayType\ArrayOfPriceTypeDescriptor $priceTypes = null)
    {
        if (is_null($priceTypes) || (is_array($priceTypes) && empty($priceTypes))) {
            unset($this->PriceTypes);
        } else {
            $this->PriceTypes = $priceTypes;
        }
        return $this;
    }
}
