<?php

namespace StructType;

use \WsdlToPhp\PackageBase\AbstractStructBase;

/**
 * This class stands for JobMilestones StructType
 * @subpackage Structs
 */
class JobMilestones extends AbstractStructBase
{
    /**
     * The milestoneName
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * @var string
     */
    public $milestoneName;
    /**
     * The milestoneOrder
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * @var string
     */
    public $milestoneOrder;
    /**
     * The milestoneEstComplete
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * @var string
     */
    public $milestoneEstComplete;
    /**
     * The milestoneCompleted
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * @var bool
     */
    public $milestoneCompleted;
    /**
     * The milestoneComments
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * @var string
     */
    public $milestoneComments;
    /**
     * Constructor method for JobMilestones
     * @uses JobMilestones::setMilestoneName()
     * @uses JobMilestones::setMilestoneOrder()
     * @uses JobMilestones::setMilestoneEstComplete()
     * @uses JobMilestones::setMilestoneCompleted()
     * @uses JobMilestones::setMilestoneComments()
     * @param string $milestoneName
     * @param string $milestoneOrder
     * @param string $milestoneEstComplete
     * @param bool $milestoneCompleted
     * @param string $milestoneComments
     */
    public function __construct($milestoneName = null, $milestoneOrder = null, $milestoneEstComplete = null, $milestoneCompleted = null, $milestoneComments = null)
    {
        $this
            ->setMilestoneName($milestoneName)
            ->setMilestoneOrder($milestoneOrder)
            ->setMilestoneEstComplete($milestoneEstComplete)
            ->setMilestoneCompleted($milestoneCompleted)
            ->setMilestoneComments($milestoneComments);
    }
    /**
     * Get milestoneName value
     * @return string|null
     */
    public function getMilestoneName()
    {
        return $this->milestoneName;
    }
    /**
     * Set milestoneName value
     * @param string $milestoneName
     * @return \StructType\JobMilestones
     */
    public function setMilestoneName($milestoneName = null)
    {
        // validation for constraint: string
        if (!is_null($milestoneName) && !is_string($milestoneName)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($milestoneName, true), gettype($milestoneName)), __LINE__);
        }
        $this->milestoneName = $milestoneName;
        return $this;
    }
    /**
     * Get milestoneOrder value
     * @return string|null
     */
    public function getMilestoneOrder()
    {
        return $this->milestoneOrder;
    }
    /**
     * Set milestoneOrder value
     * @param string $milestoneOrder
     * @return \StructType\JobMilestones
     */
    public function setMilestoneOrder($milestoneOrder = null)
    {
        // validation for constraint: string
        if (!is_null($milestoneOrder) && !is_string($milestoneOrder)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($milestoneOrder, true), gettype($milestoneOrder)), __LINE__);
        }
        $this->milestoneOrder = $milestoneOrder;
        return $this;
    }
    /**
     * Get milestoneEstComplete value
     * @return string|null
     */
    public function getMilestoneEstComplete()
    {
        return $this->milestoneEstComplete;
    }
    /**
     * Set milestoneEstComplete value
     * @param string $milestoneEstComplete
     * @return \StructType\JobMilestones
     */
    public function setMilestoneEstComplete($milestoneEstComplete = null)
    {
        // validation for constraint: string
        if (!is_null($milestoneEstComplete) && !is_string($milestoneEstComplete)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($milestoneEstComplete, true), gettype($milestoneEstComplete)), __LINE__);
        }
        $this->milestoneEstComplete = $milestoneEstComplete;
        return $this;
    }
    /**
     * Get milestoneCompleted value
     * @return bool|null
     */
    public function getMilestoneCompleted()
    {
        return $this->milestoneCompleted;
    }
    /**
     * Set milestoneCompleted value
     * @param bool $milestoneCompleted
     * @return \StructType\JobMilestones
     */
    public function setMilestoneCompleted($milestoneCompleted = null)
    {
        // validation for constraint: boolean
        if (!is_null($milestoneCompleted) && !is_bool($milestoneCompleted)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a bool, %s given', var_export($milestoneCompleted, true), gettype($milestoneCompleted)), __LINE__);
        }
        $this->milestoneCompleted = $milestoneCompleted;
        return $this;
    }
    /**
     * Get milestoneComments value
     * @return string|null
     */
    public function getMilestoneComments()
    {
        return $this->milestoneComments;
    }
    /**
     * Set milestoneComments value
     * @param string $milestoneComments
     * @return \StructType\JobMilestones
     */
    public function setMilestoneComments($milestoneComments = null)
    {
        // validation for constraint: string
        if (!is_null($milestoneComments) && !is_string($milestoneComments)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($milestoneComments, true), gettype($milestoneComments)), __LINE__);
        }
        $this->milestoneComments = $milestoneComments;
        return $this;
    }
}
