<?php

namespace patest\StructType;

use \WsdlToPhp\PackageBase\AbstractStructBase;

/**
 * This class stands for GetAvailableSeries-Request StructType
 * Meta information extracted from the WSDL
 * - nillable: true
 * - type: tns:GetAvailableSeries-Request
 * @subpackage Structs
 */
class GetAvailableSeries_Request extends ExtensibleDataContract
{
    /**
     * The ApplicationChannelForHospitalitySeriesOnRegularSale
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * - nillable: true
     * @var string
     */
    public $ApplicationChannelForHospitalitySeriesOnRegularSale;
    /**
     * The CouponIdentity
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * - nillable: true
     * @var \patest\StructType\CouponIdentity
     */
    public $CouponIdentity;
    /**
     * The IsHospitality
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * - nillable: true
     * @var bool
     */
    public $IsHospitality;
    /**
     * The SearchByFreeText
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * - nillable: true
     * @var string
     */
    public $SearchByFreeText;
    /**
     * The ShouldFilterByIsAvailableForSale
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * - nillable: true
     * @var bool
     */
    public $ShouldFilterByIsAvailableForSale;
    /**
     * The EndsAfterOrAtDate
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * - nillable: true
     * @var string
     */
    public $EndsAfterOrAtDate;
    /**
     * The SkipMinPriceCalculation
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * @var bool
     */
    public $SkipMinPriceCalculation;
    /**
     * Constructor method for GetAvailableSeries-Request
     * @uses GetAvailableSeries_Request::setApplicationChannelForHospitalitySeriesOnRegularSale()
     * @uses GetAvailableSeries_Request::setCouponIdentity()
     * @uses GetAvailableSeries_Request::setIsHospitality()
     * @uses GetAvailableSeries_Request::setSearchByFreeText()
     * @uses GetAvailableSeries_Request::setShouldFilterByIsAvailableForSale()
     * @uses GetAvailableSeries_Request::setEndsAfterOrAtDate()
     * @uses GetAvailableSeries_Request::setSkipMinPriceCalculation()
     * @param string $applicationChannelForHospitalitySeriesOnRegularSale
     * @param \patest\StructType\CouponIdentity $couponIdentity
     * @param bool $isHospitality
     * @param string $searchByFreeText
     * @param bool $shouldFilterByIsAvailableForSale
     * @param string $endsAfterOrAtDate
     * @param bool $skipMinPriceCalculation
     */
    public function __construct($applicationChannelForHospitalitySeriesOnRegularSale = null, \patest\StructType\CouponIdentity $couponIdentity = null, $isHospitality = null, $searchByFreeText = null, $shouldFilterByIsAvailableForSale = null, $endsAfterOrAtDate = null, $skipMinPriceCalculation = null)
    {
        $this
            ->setApplicationChannelForHospitalitySeriesOnRegularSale($applicationChannelForHospitalitySeriesOnRegularSale)
            ->setCouponIdentity($couponIdentity)
            ->setIsHospitality($isHospitality)
            ->setSearchByFreeText($searchByFreeText)
            ->setShouldFilterByIsAvailableForSale($shouldFilterByIsAvailableForSale)
            ->setEndsAfterOrAtDate($endsAfterOrAtDate)
            ->setSkipMinPriceCalculation($skipMinPriceCalculation);
    }
    /**
     * Get ApplicationChannelForHospitalitySeriesOnRegularSale 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 string|null
     */
    public function getApplicationChannelForHospitalitySeriesOnRegularSale()
    {
        return isset($this->ApplicationChannelForHospitalitySeriesOnRegularSale) ? $this->ApplicationChannelForHospitalitySeriesOnRegularSale : null;
    }
    /**
     * Set ApplicationChannelForHospitalitySeriesOnRegularSale 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 string $applicationChannelForHospitalitySeriesOnRegularSale
     * @return \patest\StructType\GetAvailableSeries_Request
     */
    public function setApplicationChannelForHospitalitySeriesOnRegularSale($applicationChannelForHospitalitySeriesOnRegularSale = null)
    {
        // validation for constraint: string
        if (!is_null($applicationChannelForHospitalitySeriesOnRegularSale) && !is_string($applicationChannelForHospitalitySeriesOnRegularSale)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($applicationChannelForHospitalitySeriesOnRegularSale, true), gettype($applicationChannelForHospitalitySeriesOnRegularSale)), __LINE__);
        }
        if (is_null($applicationChannelForHospitalitySeriesOnRegularSale) || (is_array($applicationChannelForHospitalitySeriesOnRegularSale) && empty($applicationChannelForHospitalitySeriesOnRegularSale))) {
            unset($this->ApplicationChannelForHospitalitySeriesOnRegularSale);
        } else {
            $this->ApplicationChannelForHospitalitySeriesOnRegularSale = $applicationChannelForHospitalitySeriesOnRegularSale;
        }
        return $this;
    }
    /**
     * Get CouponIdentity 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\CouponIdentity|null
     */
    public function getCouponIdentity()
    {
        return isset($this->CouponIdentity) ? $this->CouponIdentity : null;
    }
    /**
     * Set CouponIdentity 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\CouponIdentity $couponIdentity
     * @return \patest\StructType\GetAvailableSeries_Request
     */
    public function setCouponIdentity(\patest\StructType\CouponIdentity $couponIdentity = null)
    {
        if (is_null($couponIdentity) || (is_array($couponIdentity) && empty($couponIdentity))) {
            unset($this->CouponIdentity);
        } else {
            $this->CouponIdentity = $couponIdentity;
        }
        return $this;
    }
    /**
     * Get IsHospitality 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 bool|null
     */
    public function getIsHospitality()
    {
        return isset($this->IsHospitality) ? $this->IsHospitality : null;
    }
    /**
     * Set IsHospitality 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 bool $isHospitality
     * @return \patest\StructType\GetAvailableSeries_Request
     */
    public function setIsHospitality($isHospitality = null)
    {
        // validation for constraint: boolean
        if (!is_null($isHospitality) && !is_bool($isHospitality)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a bool, %s given', var_export($isHospitality, true), gettype($isHospitality)), __LINE__);
        }
        if (is_null($isHospitality) || (is_array($isHospitality) && empty($isHospitality))) {
            unset($this->IsHospitality);
        } else {
            $this->IsHospitality = $isHospitality;
        }
        return $this;
    }
    /**
     * Get SearchByFreeText 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 string|null
     */
    public function getSearchByFreeText()
    {
        return isset($this->SearchByFreeText) ? $this->SearchByFreeText : null;
    }
    /**
     * Set SearchByFreeText 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 string $searchByFreeText
     * @return \patest\StructType\GetAvailableSeries_Request
     */
    public function setSearchByFreeText($searchByFreeText = null)
    {
        // validation for constraint: string
        if (!is_null($searchByFreeText) && !is_string($searchByFreeText)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($searchByFreeText, true), gettype($searchByFreeText)), __LINE__);
        }
        if (is_null($searchByFreeText) || (is_array($searchByFreeText) && empty($searchByFreeText))) {
            unset($this->SearchByFreeText);
        } else {
            $this->SearchByFreeText = $searchByFreeText;
        }
        return $this;
    }
    /**
     * Get ShouldFilterByIsAvailableForSale 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 bool|null
     */
    public function getShouldFilterByIsAvailableForSale()
    {
        return isset($this->ShouldFilterByIsAvailableForSale) ? $this->ShouldFilterByIsAvailableForSale : null;
    }
    /**
     * Set ShouldFilterByIsAvailableForSale 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 bool $shouldFilterByIsAvailableForSale
     * @return \patest\StructType\GetAvailableSeries_Request
     */
    public function setShouldFilterByIsAvailableForSale($shouldFilterByIsAvailableForSale = null)
    {
        // validation for constraint: boolean
        if (!is_null($shouldFilterByIsAvailableForSale) && !is_bool($shouldFilterByIsAvailableForSale)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a bool, %s given', var_export($shouldFilterByIsAvailableForSale, true), gettype($shouldFilterByIsAvailableForSale)), __LINE__);
        }
        if (is_null($shouldFilterByIsAvailableForSale) || (is_array($shouldFilterByIsAvailableForSale) && empty($shouldFilterByIsAvailableForSale))) {
            unset($this->ShouldFilterByIsAvailableForSale);
        } else {
            $this->ShouldFilterByIsAvailableForSale = $shouldFilterByIsAvailableForSale;
        }
        return $this;
    }
    /**
     * Get EndsAfterOrAtDate 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 string|null
     */
    public function getEndsAfterOrAtDate()
    {
        return isset($this->EndsAfterOrAtDate) ? $this->EndsAfterOrAtDate : null;
    }
    /**
     * Set EndsAfterOrAtDate 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 string $endsAfterOrAtDate
     * @return \patest\StructType\GetAvailableSeries_Request
     */
    public function setEndsAfterOrAtDate($endsAfterOrAtDate = null)
    {
        // validation for constraint: string
        if (!is_null($endsAfterOrAtDate) && !is_string($endsAfterOrAtDate)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($endsAfterOrAtDate, true), gettype($endsAfterOrAtDate)), __LINE__);
        }
        if (is_null($endsAfterOrAtDate) || (is_array($endsAfterOrAtDate) && empty($endsAfterOrAtDate))) {
            unset($this->EndsAfterOrAtDate);
        } else {
            $this->EndsAfterOrAtDate = $endsAfterOrAtDate;
        }
        return $this;
    }
    /**
     * Get SkipMinPriceCalculation value
     * @return bool|null
     */
    public function getSkipMinPriceCalculation()
    {
        return $this->SkipMinPriceCalculation;
    }
    /**
     * Set SkipMinPriceCalculation value
     * @param bool $skipMinPriceCalculation
     * @return \patest\StructType\GetAvailableSeries_Request
     */
    public function setSkipMinPriceCalculation($skipMinPriceCalculation = null)
    {
        // validation for constraint: boolean
        if (!is_null($skipMinPriceCalculation) && !is_bool($skipMinPriceCalculation)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a bool, %s given', var_export($skipMinPriceCalculation, true), gettype($skipMinPriceCalculation)), __LINE__);
        }
        $this->SkipMinPriceCalculation = $skipMinPriceCalculation;
        return $this;
    }
}
