<?php

namespace StructType;

use \WsdlToPhp\PackageBase\AbstractStructBase;

/**
 * This class stands for JP_SpecialNote StructType
 * @subpackage Structs
 */
class JP_SpecialNote extends AbstractStructBase
{
    /**
     * The Dates
     * Meta information extracted from the WSDL
     * - maxOccurs: 1
     * - minOccurs: 0
     * @var \ArrayType\ArrayOfJPSOAP_DateIntervals
     */
    public $Dates;
    /**
     * The Descriptions
     * Meta information extracted from the WSDL
     * - maxOccurs: 1
     * - minOccurs: 0
     * @var \ArrayType\ArrayOfJP_Description
     */
    public $Descriptions;
    /**
     * The ShowInWeb
     * @var bool
     */
    public $ShowInWeb;
    /**
     * The ShowInVoucher
     * @var bool
     */
    public $ShowInVoucher;
    /**
     * Constructor method for JP_SpecialNote
     * @uses JP_SpecialNote::setDates()
     * @uses JP_SpecialNote::setDescriptions()
     * @uses JP_SpecialNote::setShowInWeb()
     * @uses JP_SpecialNote::setShowInVoucher()
     * @param \ArrayType\ArrayOfJPSOAP_DateIntervals $dates
     * @param \ArrayType\ArrayOfJP_Description $descriptions
     * @param bool $showInWeb
     * @param bool $showInVoucher
     */
    public function __construct(\ArrayType\ArrayOfJPSOAP_DateIntervals $dates = null, \ArrayType\ArrayOfJP_Description $descriptions = null, $showInWeb = null, $showInVoucher = null)
    {
        $this
            ->setDates($dates)
            ->setDescriptions($descriptions)
            ->setShowInWeb($showInWeb)
            ->setShowInVoucher($showInVoucher);
    }
    /**
     * Get Dates value
     * @return \ArrayType\ArrayOfJPSOAP_DateIntervals|null
     */
    public function getDates()
    {
        return $this->Dates;
    }
    /**
     * Set Dates value
     * @param \ArrayType\ArrayOfJPSOAP_DateIntervals $dates
     * @return \StructType\JP_SpecialNote
     */
    public function setDates(\ArrayType\ArrayOfJPSOAP_DateIntervals $dates = null)
    {
        $this->Dates = $dates;
        return $this;
    }
    /**
     * Get Descriptions value
     * @return \ArrayType\ArrayOfJP_Description|null
     */
    public function getDescriptions()
    {
        return $this->Descriptions;
    }
    /**
     * Set Descriptions value
     * @param \ArrayType\ArrayOfJP_Description $descriptions
     * @return \StructType\JP_SpecialNote
     */
    public function setDescriptions(\ArrayType\ArrayOfJP_Description $descriptions = null)
    {
        $this->Descriptions = $descriptions;
        return $this;
    }
    /**
     * Get ShowInWeb value
     * @return bool|null
     */
    public function getShowInWeb()
    {
        return $this->ShowInWeb;
    }
    /**
     * Set ShowInWeb value
     * @param bool $showInWeb
     * @return \StructType\JP_SpecialNote
     */
    public function setShowInWeb($showInWeb = null)
    {
        // validation for constraint: boolean
        if (!is_null($showInWeb) && !is_bool($showInWeb)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a bool, %s given', var_export($showInWeb, true), gettype($showInWeb)), __LINE__);
        }
        $this->ShowInWeb = $showInWeb;
        return $this;
    }
    /**
     * Get ShowInVoucher value
     * @return bool|null
     */
    public function getShowInVoucher()
    {
        return $this->ShowInVoucher;
    }
    /**
     * Set ShowInVoucher value
     * @param bool $showInVoucher
     * @return \StructType\JP_SpecialNote
     */
    public function setShowInVoucher($showInVoucher = null)
    {
        // validation for constraint: boolean
        if (!is_null($showInVoucher) && !is_bool($showInVoucher)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a bool, %s given', var_export($showInVoucher, true), gettype($showInVoucher)), __LINE__);
        }
        $this->ShowInVoucher = $showInVoucher;
        return $this;
    }
}
