<?php

namespace StructType;

use \WsdlToPhp\PackageBase\AbstractStructBase;

/**
 * This class stands for JPSOAP_RatePrice StructType
 * @subpackage Structs
 */
class JPSOAP_RatePrice extends AbstractStructBase
{
    /**
     * The BoardCode
     * Meta informations extracted from the WSDL
     * - use: required
     * @var int
     */
    public $BoardCode;
    /**
     * The RoomTypeCode
     * Meta informations extracted from the WSDL
     * - use: required
     * @var int
     */
    public $RoomTypeCode;
    /**
     * The Adult
     * Meta informations extracted from the WSDL
     * - maxOccurs: 1
     * - minOccurs: 0
     * @var \StructType\JPSOAP_Price
     */
    public $Adult;
    /**
     * The Room
     * Meta informations extracted from the WSDL
     * - maxOccurs: 1
     * - minOccurs: 0
     * @var \StructType\JPSOAP_Price
     */
    public $Room;
    /**
     * The AdultAdditionals
     * Meta informations extracted from the WSDL
     * - maxOccurs: 1
     * - minOccurs: 0
     * @var \ArrayType\ArrayOfJPSOAP_OrderedPrice
     */
    public $AdultAdditionals;
    /**
     * The ChildrenA
     * Meta informations extracted from the WSDL
     * - maxOccurs: 1
     * - minOccurs: 0
     * @var \ArrayType\ArrayOfJPSOAP_OrderedPrice1
     */
    public $ChildrenA;
    /**
     * The ChildrenB
     * Meta informations extracted from the WSDL
     * - maxOccurs: 1
     * - minOccurs: 0
     * @var \ArrayType\ArrayOfJPSOAP_OrderedPrice2
     */
    public $ChildrenB;
    /**
     * Constructor method for JPSOAP_RatePrice
     * @uses JPSOAP_RatePrice::setBoardCode()
     * @uses JPSOAP_RatePrice::setRoomTypeCode()
     * @uses JPSOAP_RatePrice::setAdult()
     * @uses JPSOAP_RatePrice::setRoom()
     * @uses JPSOAP_RatePrice::setAdultAdditionals()
     * @uses JPSOAP_RatePrice::setChildrenA()
     * @uses JPSOAP_RatePrice::setChildrenB()
     * @param int $boardCode
     * @param int $roomTypeCode
     * @param \StructType\JPSOAP_Price $adult
     * @param \StructType\JPSOAP_Price $room
     * @param \ArrayType\ArrayOfJPSOAP_OrderedPrice $adultAdditionals
     * @param \ArrayType\ArrayOfJPSOAP_OrderedPrice1 $childrenA
     * @param \ArrayType\ArrayOfJPSOAP_OrderedPrice2 $childrenB
     */
    public function __construct($boardCode = null, $roomTypeCode = null, \StructType\JPSOAP_Price $adult = null, \StructType\JPSOAP_Price $room = null, \ArrayType\ArrayOfJPSOAP_OrderedPrice $adultAdditionals = null, \ArrayType\ArrayOfJPSOAP_OrderedPrice1 $childrenA = null, \ArrayType\ArrayOfJPSOAP_OrderedPrice2 $childrenB = null)
    {
        $this
            ->setBoardCode($boardCode)
            ->setRoomTypeCode($roomTypeCode)
            ->setAdult($adult)
            ->setRoom($room)
            ->setAdultAdditionals($adultAdditionals)
            ->setChildrenA($childrenA)
            ->setChildrenB($childrenB);
    }
    /**
     * Get BoardCode value
     * @return int
     */
    public function getBoardCode()
    {
        return $this->BoardCode;
    }
    /**
     * Set BoardCode value
     * @param int $boardCode
     * @return \StructType\JPSOAP_RatePrice
     */
    public function setBoardCode($boardCode = null)
    {
        // validation for constraint: int
        if (!is_null($boardCode) && !is_numeric($boardCode)) {
            throw new \InvalidArgumentException(sprintf('Invalid value, please provide a numeric value, "%s" given', gettype($boardCode)), __LINE__);
        }
        $this->BoardCode = $boardCode;
        return $this;
    }
    /**
     * Get RoomTypeCode value
     * @return int
     */
    public function getRoomTypeCode()
    {
        return $this->RoomTypeCode;
    }
    /**
     * Set RoomTypeCode value
     * @param int $roomTypeCode
     * @return \StructType\JPSOAP_RatePrice
     */
    public function setRoomTypeCode($roomTypeCode = null)
    {
        // validation for constraint: int
        if (!is_null($roomTypeCode) && !is_numeric($roomTypeCode)) {
            throw new \InvalidArgumentException(sprintf('Invalid value, please provide a numeric value, "%s" given', gettype($roomTypeCode)), __LINE__);
        }
        $this->RoomTypeCode = $roomTypeCode;
        return $this;
    }
    /**
     * Get Adult value
     * @return \StructType\JPSOAP_Price|null
     */
    public function getAdult()
    {
        return $this->Adult;
    }
    /**
     * Set Adult value
     * @param \StructType\JPSOAP_Price $adult
     * @return \StructType\JPSOAP_RatePrice
     */
    public function setAdult(\StructType\JPSOAP_Price $adult = null)
    {
        $this->Adult = $adult;
        return $this;
    }
    /**
     * Get Room value
     * @return \StructType\JPSOAP_Price|null
     */
    public function getRoom()
    {
        return $this->Room;
    }
    /**
     * Set Room value
     * @param \StructType\JPSOAP_Price $room
     * @return \StructType\JPSOAP_RatePrice
     */
    public function setRoom(\StructType\JPSOAP_Price $room = null)
    {
        $this->Room = $room;
        return $this;
    }
    /**
     * Get AdultAdditionals value
     * @return \ArrayType\ArrayOfJPSOAP_OrderedPrice|null
     */
    public function getAdultAdditionals()
    {
        return $this->AdultAdditionals;
    }
    /**
     * Set AdultAdditionals value
     * @param \ArrayType\ArrayOfJPSOAP_OrderedPrice $adultAdditionals
     * @return \StructType\JPSOAP_RatePrice
     */
    public function setAdultAdditionals(\ArrayType\ArrayOfJPSOAP_OrderedPrice $adultAdditionals = null)
    {
        $this->AdultAdditionals = $adultAdditionals;
        return $this;
    }
    /**
     * Get ChildrenA value
     * @return \ArrayType\ArrayOfJPSOAP_OrderedPrice1|null
     */
    public function getChildrenA()
    {
        return $this->ChildrenA;
    }
    /**
     * Set ChildrenA value
     * @param \ArrayType\ArrayOfJPSOAP_OrderedPrice1 $childrenA
     * @return \StructType\JPSOAP_RatePrice
     */
    public function setChildrenA(\ArrayType\ArrayOfJPSOAP_OrderedPrice1 $childrenA = null)
    {
        $this->ChildrenA = $childrenA;
        return $this;
    }
    /**
     * Get ChildrenB value
     * @return \ArrayType\ArrayOfJPSOAP_OrderedPrice2|null
     */
    public function getChildrenB()
    {
        return $this->ChildrenB;
    }
    /**
     * Set ChildrenB value
     * @param \ArrayType\ArrayOfJPSOAP_OrderedPrice2 $childrenB
     * @return \StructType\JPSOAP_RatePrice
     */
    public function setChildrenB(\ArrayType\ArrayOfJPSOAP_OrderedPrice2 $childrenB = null)
    {
        $this->ChildrenB = $childrenB;
        return $this;
    }
    /**
     * Method called when an object has been exported with var_export() functions
     * It allows to return an object instantiated with the values
     * @see AbstractStructBase::__set_state()
     * @uses AbstractStructBase::__set_state()
     * @param array $array the exported values
     * @return \StructType\JPSOAP_RatePrice
     */
    public static function __set_state(array $array)
    {
        return parent::__set_state($array);
    }
    /**
     * Method returning the class name
     * @return string __CLASS__
     */
    public function __toString()
    {
        return __CLASS__;
    }
}
