<?php

namespace StructType;

use \WsdlToPhp\PackageBase\AbstractStructBase;

/**
 * This class stands for Job_Requisition_Restrictions_DataType StructType
 * Meta information extracted from the WSDL
 * - documentation: Wrapper element for Hiring Requirements
 * @subpackage Structs
 */
class Job_Requisition_Restrictions_DataType extends AbstractStructBase
{
    /**
     * The Recruiting_Start_Date
     * Meta information extracted from the WSDL
     * - documentation: The Recruiting Start Date for the Job Requisition. Recruiting cannot be done for the position prior to this date.
     * - maxOccurs: 1
     * - minOccurs: 0
     * @var string
     */
    public $Recruiting_Start_Date;
    /**
     * The Target_Hire_Date
     * Meta information extracted from the WSDL
     * - documentation: The Target Hire Date for the Job Requisition.
     * - maxOccurs: 1
     * - minOccurs: 0
     * @var string
     */
    public $Target_Hire_Date;
    /**
     * The Target_End_Date
     * Meta information extracted from the WSDL
     * - documentation: The Target End Date for the Job Requisition is required for fixed term employees and contingent worker sub-types that are specified as requiring cost information.
     * - maxOccurs: 1
     * - minOccurs: 0
     * @var string
     */
    public $Target_End_Date;
    /**
     * The Job_Profile_Reference
     * Meta information extracted from the WSDL
     * - documentation: The Job Profile for the Job Requisition.
     * - minOccurs: 0
     * @var \StructType\Job_ProfileObjectType
     */
    public $Job_Profile_Reference;
    /**
     * The Additional_Job_Profiles_Reference
     * Meta information extracted from the WSDL
     * - documentation: Reference to Additional Job Profiles for the job requisition. Cannot contain the Primary Job Profile.
     * - maxOccurs: unbounded
     * - minOccurs: 0
     * @var \StructType\Job_ProfileObjectType[]
     */
    public $Additional_Job_Profiles_Reference;
    /**
     * The Worker_Type_Reference
     * Meta information extracted from the WSDL
     * - documentation: The Worker Type for the Job Requisition.
     * - minOccurs: 0
     * @var \StructType\Worker_TypeObjectType
     */
    public $Worker_Type_Reference;
    /**
     * The Position_Worker_Type_Reference
     * Meta information extracted from the WSDL
     * - documentation: The Worker Sub-Type for the Job Requisition.
     * - minOccurs: 0
     * @var \StructType\Position_Worker_TypeObjectType
     */
    public $Position_Worker_Type_Reference;
    /**
     * The Primary_Location_Reference
     * Meta information extracted from the WSDL
     * - documentation: The Primary Location for the Job Requisition.
     * - minOccurs: 0
     * @var \StructType\LocationObjectType
     */
    public $Primary_Location_Reference;
    /**
     * The Primary_Job_Posting_Location_Reference
     * Meta information extracted from the WSDL
     * - documentation: The primary job posting location for the job requisition. If empty, Workday automatically populates this value from the primary location of the job requisition.
     * - minOccurs: 0
     * @var \StructType\LocationObjectType
     */
    public $Primary_Job_Posting_Location_Reference;
    /**
     * The Additional_Locations_Reference
     * Meta information extracted from the WSDL
     * - documentation: The Additional Location(s) for the Job Requisition.
     * - maxOccurs: unbounded
     * - minOccurs: 0
     * @var \StructType\LocationObjectType[]
     */
    public $Additional_Locations_Reference;
    /**
     * The Additional_Job_Posting_Location_Reference
     * Meta information extracted from the WSDL
     * - documentation: The additional job posting locations for the job requisition.
     * - maxOccurs: unbounded
     * - minOccurs: 0
     * @var \StructType\LocationObjectType[]
     */
    public $Additional_Job_Posting_Location_Reference;
    /**
     * The Time_Type_Reference
     * Meta information extracted from the WSDL
     * - documentation: The Position Time Type for the Job Requisition.
     * - minOccurs: 0
     * @var \StructType\Position_Time_TypeObjectType
     */
    public $Time_Type_Reference;
    /**
     * The Employee_Contract_Type_Reference
     * Meta information extracted from the WSDL
     * - documentation: The Employee Contract Type for the Job Requisition.
     * - minOccurs: 0
     * @var \StructType\Employee_Contract_TypeObjectType
     */
    public $Employee_Contract_Type_Reference;
    /**
     * The Scheduled_Weekly_Hours
     * Meta information extracted from the WSDL
     * - documentation: The Schedule Hours for the Job Requisition. | The scheduled weekly hours for the job requisition. If empty, Workday automatically populates this value from the position restrictions. | The scheduled weekly hours associated with the
     * offer
     * - base: xsd:decimal
     * - fractionDigits: 2
     * - maxOccurs: 1
     * - minOccurs: 0
     * - totalDigits: 14
     * @var float
     */
    public $Scheduled_Weekly_Hours;
    /**
     * The Work_Shift_Reference
     * Meta information extracted from the WSDL
     * - documentation: The Work Shift for the Job Requisition.
     * - minOccurs: 0
     * @var \StructType\Work_ShiftObjectType
     */
    public $Work_Shift_Reference;
    /**
     * The Spotlight_Job
     * Meta information extracted from the WSDL
     * - documentation: If Y, indicates that this is a highlighted job requisition.
     * - maxOccurs: 1
     * - minOccurs: 0
     * @var bool
     */
    public $Spotlight_Job;
    /**
     * The Referral_Payment_Plan_Reference
     * Meta information extracted from the WSDL
     * - documentation: The Active Referral One-Time Payment Plan for the Job Requisition
     * - minOccurs: 0
     * @var \StructType\One_Time_Payment_PlanObjectType
     */
    public $Referral_Payment_Plan_Reference;
    /**
     * Constructor method for Job_Requisition_Restrictions_DataType
     * @uses Job_Requisition_Restrictions_DataType::setRecruiting_Start_Date()
     * @uses Job_Requisition_Restrictions_DataType::setTarget_Hire_Date()
     * @uses Job_Requisition_Restrictions_DataType::setTarget_End_Date()
     * @uses Job_Requisition_Restrictions_DataType::setJob_Profile_Reference()
     * @uses Job_Requisition_Restrictions_DataType::setAdditional_Job_Profiles_Reference()
     * @uses Job_Requisition_Restrictions_DataType::setWorker_Type_Reference()
     * @uses Job_Requisition_Restrictions_DataType::setPosition_Worker_Type_Reference()
     * @uses Job_Requisition_Restrictions_DataType::setPrimary_Location_Reference()
     * @uses Job_Requisition_Restrictions_DataType::setPrimary_Job_Posting_Location_Reference()
     * @uses Job_Requisition_Restrictions_DataType::setAdditional_Locations_Reference()
     * @uses Job_Requisition_Restrictions_DataType::setAdditional_Job_Posting_Location_Reference()
     * @uses Job_Requisition_Restrictions_DataType::setTime_Type_Reference()
     * @uses Job_Requisition_Restrictions_DataType::setEmployee_Contract_Type_Reference()
     * @uses Job_Requisition_Restrictions_DataType::setScheduled_Weekly_Hours()
     * @uses Job_Requisition_Restrictions_DataType::setWork_Shift_Reference()
     * @uses Job_Requisition_Restrictions_DataType::setSpotlight_Job()
     * @uses Job_Requisition_Restrictions_DataType::setReferral_Payment_Plan_Reference()
     * @param string $recruiting_Start_Date
     * @param string $target_Hire_Date
     * @param string $target_End_Date
     * @param \StructType\Job_ProfileObjectType $job_Profile_Reference
     * @param \StructType\Job_ProfileObjectType[] $additional_Job_Profiles_Reference
     * @param \StructType\Worker_TypeObjectType $worker_Type_Reference
     * @param \StructType\Position_Worker_TypeObjectType $position_Worker_Type_Reference
     * @param \StructType\LocationObjectType $primary_Location_Reference
     * @param \StructType\LocationObjectType $primary_Job_Posting_Location_Reference
     * @param \StructType\LocationObjectType[] $additional_Locations_Reference
     * @param \StructType\LocationObjectType[] $additional_Job_Posting_Location_Reference
     * @param \StructType\Position_Time_TypeObjectType $time_Type_Reference
     * @param \StructType\Employee_Contract_TypeObjectType $employee_Contract_Type_Reference
     * @param float $scheduled_Weekly_Hours
     * @param \StructType\Work_ShiftObjectType $work_Shift_Reference
     * @param bool $spotlight_Job
     * @param \StructType\One_Time_Payment_PlanObjectType $referral_Payment_Plan_Reference
     */
    public function __construct($recruiting_Start_Date = null, $target_Hire_Date = null, $target_End_Date = null, \StructType\Job_ProfileObjectType $job_Profile_Reference = null, array $additional_Job_Profiles_Reference = array(), \StructType\Worker_TypeObjectType $worker_Type_Reference = null, \StructType\Position_Worker_TypeObjectType $position_Worker_Type_Reference = null, \StructType\LocationObjectType $primary_Location_Reference = null, \StructType\LocationObjectType $primary_Job_Posting_Location_Reference = null, array $additional_Locations_Reference = array(), array $additional_Job_Posting_Location_Reference = array(), \StructType\Position_Time_TypeObjectType $time_Type_Reference = null, \StructType\Employee_Contract_TypeObjectType $employee_Contract_Type_Reference = null, $scheduled_Weekly_Hours = null, \StructType\Work_ShiftObjectType $work_Shift_Reference = null, $spotlight_Job = null, \StructType\One_Time_Payment_PlanObjectType $referral_Payment_Plan_Reference = null)
    {
        $this
            ->setRecruiting_Start_Date($recruiting_Start_Date)
            ->setTarget_Hire_Date($target_Hire_Date)
            ->setTarget_End_Date($target_End_Date)
            ->setJob_Profile_Reference($job_Profile_Reference)
            ->setAdditional_Job_Profiles_Reference($additional_Job_Profiles_Reference)
            ->setWorker_Type_Reference($worker_Type_Reference)
            ->setPosition_Worker_Type_Reference($position_Worker_Type_Reference)
            ->setPrimary_Location_Reference($primary_Location_Reference)
            ->setPrimary_Job_Posting_Location_Reference($primary_Job_Posting_Location_Reference)
            ->setAdditional_Locations_Reference($additional_Locations_Reference)
            ->setAdditional_Job_Posting_Location_Reference($additional_Job_Posting_Location_Reference)
            ->setTime_Type_Reference($time_Type_Reference)
            ->setEmployee_Contract_Type_Reference($employee_Contract_Type_Reference)
            ->setScheduled_Weekly_Hours($scheduled_Weekly_Hours)
            ->setWork_Shift_Reference($work_Shift_Reference)
            ->setSpotlight_Job($spotlight_Job)
            ->setReferral_Payment_Plan_Reference($referral_Payment_Plan_Reference);
    }
    /**
     * Get Recruiting_Start_Date value
     * @return string|null
     */
    public function getRecruiting_Start_Date()
    {
        return $this->Recruiting_Start_Date;
    }
    /**
     * Set Recruiting_Start_Date value
     * @param string $recruiting_Start_Date
     * @return \StructType\Job_Requisition_Restrictions_DataType
     */
    public function setRecruiting_Start_Date($recruiting_Start_Date = null)
    {
        // validation for constraint: string
        if (!is_null($recruiting_Start_Date) && !is_string($recruiting_Start_Date)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($recruiting_Start_Date, true), gettype($recruiting_Start_Date)), __LINE__);
        }
        $this->Recruiting_Start_Date = $recruiting_Start_Date;
        return $this;
    }
    /**
     * Get Target_Hire_Date value
     * @return string|null
     */
    public function getTarget_Hire_Date()
    {
        return $this->Target_Hire_Date;
    }
    /**
     * Set Target_Hire_Date value
     * @param string $target_Hire_Date
     * @return \StructType\Job_Requisition_Restrictions_DataType
     */
    public function setTarget_Hire_Date($target_Hire_Date = null)
    {
        // validation for constraint: string
        if (!is_null($target_Hire_Date) && !is_string($target_Hire_Date)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($target_Hire_Date, true), gettype($target_Hire_Date)), __LINE__);
        }
        $this->Target_Hire_Date = $target_Hire_Date;
        return $this;
    }
    /**
     * Get Target_End_Date value
     * @return string|null
     */
    public function getTarget_End_Date()
    {
        return $this->Target_End_Date;
    }
    /**
     * Set Target_End_Date value
     * @param string $target_End_Date
     * @return \StructType\Job_Requisition_Restrictions_DataType
     */
    public function setTarget_End_Date($target_End_Date = null)
    {
        // validation for constraint: string
        if (!is_null($target_End_Date) && !is_string($target_End_Date)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($target_End_Date, true), gettype($target_End_Date)), __LINE__);
        }
        $this->Target_End_Date = $target_End_Date;
        return $this;
    }
    /**
     * Get Job_Profile_Reference value
     * @return \StructType\Job_ProfileObjectType|null
     */
    public function getJob_Profile_Reference()
    {
        return $this->Job_Profile_Reference;
    }
    /**
     * Set Job_Profile_Reference value
     * @param \StructType\Job_ProfileObjectType $job_Profile_Reference
     * @return \StructType\Job_Requisition_Restrictions_DataType
     */
    public function setJob_Profile_Reference(\StructType\Job_ProfileObjectType $job_Profile_Reference = null)
    {
        $this->Job_Profile_Reference = $job_Profile_Reference;
        return $this;
    }
    /**
     * Get Additional_Job_Profiles_Reference value
     * @return \StructType\Job_ProfileObjectType[]|null
     */
    public function getAdditional_Job_Profiles_Reference()
    {
        return $this->Additional_Job_Profiles_Reference;
    }
    /**
     * This method is responsible for validating the values passed to the setAdditional_Job_Profiles_Reference method
     * This method is willingly generated in order to preserve the one-line inline validation within the setAdditional_Job_Profiles_Reference method
     * @param array $values
     * @return string A non-empty message if the values does not match the validation rules
     */
    public static function validateAdditional_Job_Profiles_ReferenceForArrayConstraintsFromSetAdditional_Job_Profiles_Reference(array $values = array())
    {
        $message = '';
        $invalidValues = [];
        foreach ($values as $job_Requisition_Restrictions_DataTypeAdditional_Job_Profiles_ReferenceItem) {
            // validation for constraint: itemType
            if (!$job_Requisition_Restrictions_DataTypeAdditional_Job_Profiles_ReferenceItem instanceof \StructType\Job_ProfileObjectType) {
                $invalidValues[] = is_object($job_Requisition_Restrictions_DataTypeAdditional_Job_Profiles_ReferenceItem) ? get_class($job_Requisition_Restrictions_DataTypeAdditional_Job_Profiles_ReferenceItem) : sprintf('%s(%s)', gettype($job_Requisition_Restrictions_DataTypeAdditional_Job_Profiles_ReferenceItem), var_export($job_Requisition_Restrictions_DataTypeAdditional_Job_Profiles_ReferenceItem, true));
            }
        }
        if (!empty($invalidValues)) {
            $message = sprintf('The Additional_Job_Profiles_Reference property can only contain items of type \StructType\Job_ProfileObjectType, %s given', is_object($invalidValues) ? get_class($invalidValues) : (is_array($invalidValues) ? implode(', ', $invalidValues) : gettype($invalidValues)));
        }
        unset($invalidValues);
        return $message;
    }
    /**
     * Set Additional_Job_Profiles_Reference value
     * @throws \InvalidArgumentException
     * @param \StructType\Job_ProfileObjectType[] $additional_Job_Profiles_Reference
     * @return \StructType\Job_Requisition_Restrictions_DataType
     */
    public function setAdditional_Job_Profiles_Reference(array $additional_Job_Profiles_Reference = array())
    {
        // validation for constraint: array
        if ('' !== ($additional_Job_Profiles_ReferenceArrayErrorMessage = self::validateAdditional_Job_Profiles_ReferenceForArrayConstraintsFromSetAdditional_Job_Profiles_Reference($additional_Job_Profiles_Reference))) {
            throw new \InvalidArgumentException($additional_Job_Profiles_ReferenceArrayErrorMessage, __LINE__);
        }
        $this->Additional_Job_Profiles_Reference = $additional_Job_Profiles_Reference;
        return $this;
    }
    /**
     * Add item to Additional_Job_Profiles_Reference value
     * @throws \InvalidArgumentException
     * @param \StructType\Job_ProfileObjectType $item
     * @return \StructType\Job_Requisition_Restrictions_DataType
     */
    public function addToAdditional_Job_Profiles_Reference(\StructType\Job_ProfileObjectType $item)
    {
        // validation for constraint: itemType
        if (!$item instanceof \StructType\Job_ProfileObjectType) {
            throw new \InvalidArgumentException(sprintf('The Additional_Job_Profiles_Reference property can only contain items of type \StructType\Job_ProfileObjectType, %s given', is_object($item) ? get_class($item) : (is_array($item) ? implode(', ', $item) : gettype($item))), __LINE__);
        }
        $this->Additional_Job_Profiles_Reference[] = $item;
        return $this;
    }
    /**
     * Get Worker_Type_Reference value
     * @return \StructType\Worker_TypeObjectType|null
     */
    public function getWorker_Type_Reference()
    {
        return $this->Worker_Type_Reference;
    }
    /**
     * Set Worker_Type_Reference value
     * @param \StructType\Worker_TypeObjectType $worker_Type_Reference
     * @return \StructType\Job_Requisition_Restrictions_DataType
     */
    public function setWorker_Type_Reference(\StructType\Worker_TypeObjectType $worker_Type_Reference = null)
    {
        $this->Worker_Type_Reference = $worker_Type_Reference;
        return $this;
    }
    /**
     * Get Position_Worker_Type_Reference value
     * @return \StructType\Position_Worker_TypeObjectType|null
     */
    public function getPosition_Worker_Type_Reference()
    {
        return $this->Position_Worker_Type_Reference;
    }
    /**
     * Set Position_Worker_Type_Reference value
     * @param \StructType\Position_Worker_TypeObjectType $position_Worker_Type_Reference
     * @return \StructType\Job_Requisition_Restrictions_DataType
     */
    public function setPosition_Worker_Type_Reference(\StructType\Position_Worker_TypeObjectType $position_Worker_Type_Reference = null)
    {
        $this->Position_Worker_Type_Reference = $position_Worker_Type_Reference;
        return $this;
    }
    /**
     * Get Primary_Location_Reference value
     * @return \StructType\LocationObjectType|null
     */
    public function getPrimary_Location_Reference()
    {
        return $this->Primary_Location_Reference;
    }
    /**
     * Set Primary_Location_Reference value
     * @param \StructType\LocationObjectType $primary_Location_Reference
     * @return \StructType\Job_Requisition_Restrictions_DataType
     */
    public function setPrimary_Location_Reference(\StructType\LocationObjectType $primary_Location_Reference = null)
    {
        $this->Primary_Location_Reference = $primary_Location_Reference;
        return $this;
    }
    /**
     * Get Primary_Job_Posting_Location_Reference value
     * @return \StructType\LocationObjectType|null
     */
    public function getPrimary_Job_Posting_Location_Reference()
    {
        return $this->Primary_Job_Posting_Location_Reference;
    }
    /**
     * Set Primary_Job_Posting_Location_Reference value
     * @param \StructType\LocationObjectType $primary_Job_Posting_Location_Reference
     * @return \StructType\Job_Requisition_Restrictions_DataType
     */
    public function setPrimary_Job_Posting_Location_Reference(\StructType\LocationObjectType $primary_Job_Posting_Location_Reference = null)
    {
        $this->Primary_Job_Posting_Location_Reference = $primary_Job_Posting_Location_Reference;
        return $this;
    }
    /**
     * Get Additional_Locations_Reference value
     * @return \StructType\LocationObjectType[]|null
     */
    public function getAdditional_Locations_Reference()
    {
        return $this->Additional_Locations_Reference;
    }
    /**
     * This method is responsible for validating the values passed to the setAdditional_Locations_Reference method
     * This method is willingly generated in order to preserve the one-line inline validation within the setAdditional_Locations_Reference method
     * @param array $values
     * @return string A non-empty message if the values does not match the validation rules
     */
    public static function validateAdditional_Locations_ReferenceForArrayConstraintsFromSetAdditional_Locations_Reference(array $values = array())
    {
        $message = '';
        $invalidValues = [];
        foreach ($values as $job_Requisition_Restrictions_DataTypeAdditional_Locations_ReferenceItem) {
            // validation for constraint: itemType
            if (!$job_Requisition_Restrictions_DataTypeAdditional_Locations_ReferenceItem instanceof \StructType\LocationObjectType) {
                $invalidValues[] = is_object($job_Requisition_Restrictions_DataTypeAdditional_Locations_ReferenceItem) ? get_class($job_Requisition_Restrictions_DataTypeAdditional_Locations_ReferenceItem) : sprintf('%s(%s)', gettype($job_Requisition_Restrictions_DataTypeAdditional_Locations_ReferenceItem), var_export($job_Requisition_Restrictions_DataTypeAdditional_Locations_ReferenceItem, true));
            }
        }
        if (!empty($invalidValues)) {
            $message = sprintf('The Additional_Locations_Reference property can only contain items of type \StructType\LocationObjectType, %s given', is_object($invalidValues) ? get_class($invalidValues) : (is_array($invalidValues) ? implode(', ', $invalidValues) : gettype($invalidValues)));
        }
        unset($invalidValues);
        return $message;
    }
    /**
     * Set Additional_Locations_Reference value
     * @throws \InvalidArgumentException
     * @param \StructType\LocationObjectType[] $additional_Locations_Reference
     * @return \StructType\Job_Requisition_Restrictions_DataType
     */
    public function setAdditional_Locations_Reference(array $additional_Locations_Reference = array())
    {
        // validation for constraint: array
        if ('' !== ($additional_Locations_ReferenceArrayErrorMessage = self::validateAdditional_Locations_ReferenceForArrayConstraintsFromSetAdditional_Locations_Reference($additional_Locations_Reference))) {
            throw new \InvalidArgumentException($additional_Locations_ReferenceArrayErrorMessage, __LINE__);
        }
        $this->Additional_Locations_Reference = $additional_Locations_Reference;
        return $this;
    }
    /**
     * Add item to Additional_Locations_Reference value
     * @throws \InvalidArgumentException
     * @param \StructType\LocationObjectType $item
     * @return \StructType\Job_Requisition_Restrictions_DataType
     */
    public function addToAdditional_Locations_Reference(\StructType\LocationObjectType $item)
    {
        // validation for constraint: itemType
        if (!$item instanceof \StructType\LocationObjectType) {
            throw new \InvalidArgumentException(sprintf('The Additional_Locations_Reference property can only contain items of type \StructType\LocationObjectType, %s given', is_object($item) ? get_class($item) : (is_array($item) ? implode(', ', $item) : gettype($item))), __LINE__);
        }
        $this->Additional_Locations_Reference[] = $item;
        return $this;
    }
    /**
     * Get Additional_Job_Posting_Location_Reference value
     * @return \StructType\LocationObjectType[]|null
     */
    public function getAdditional_Job_Posting_Location_Reference()
    {
        return $this->Additional_Job_Posting_Location_Reference;
    }
    /**
     * This method is responsible for validating the values passed to the setAdditional_Job_Posting_Location_Reference method
     * This method is willingly generated in order to preserve the one-line inline validation within the setAdditional_Job_Posting_Location_Reference method
     * @param array $values
     * @return string A non-empty message if the values does not match the validation rules
     */
    public static function validateAdditional_Job_Posting_Location_ReferenceForArrayConstraintsFromSetAdditional_Job_Posting_Location_Reference(array $values = array())
    {
        $message = '';
        $invalidValues = [];
        foreach ($values as $job_Requisition_Restrictions_DataTypeAdditional_Job_Posting_Location_ReferenceItem) {
            // validation for constraint: itemType
            if (!$job_Requisition_Restrictions_DataTypeAdditional_Job_Posting_Location_ReferenceItem instanceof \StructType\LocationObjectType) {
                $invalidValues[] = is_object($job_Requisition_Restrictions_DataTypeAdditional_Job_Posting_Location_ReferenceItem) ? get_class($job_Requisition_Restrictions_DataTypeAdditional_Job_Posting_Location_ReferenceItem) : sprintf('%s(%s)', gettype($job_Requisition_Restrictions_DataTypeAdditional_Job_Posting_Location_ReferenceItem), var_export($job_Requisition_Restrictions_DataTypeAdditional_Job_Posting_Location_ReferenceItem, true));
            }
        }
        if (!empty($invalidValues)) {
            $message = sprintf('The Additional_Job_Posting_Location_Reference property can only contain items of type \StructType\LocationObjectType, %s given', is_object($invalidValues) ? get_class($invalidValues) : (is_array($invalidValues) ? implode(', ', $invalidValues) : gettype($invalidValues)));
        }
        unset($invalidValues);
        return $message;
    }
    /**
     * Set Additional_Job_Posting_Location_Reference value
     * @throws \InvalidArgumentException
     * @param \StructType\LocationObjectType[] $additional_Job_Posting_Location_Reference
     * @return \StructType\Job_Requisition_Restrictions_DataType
     */
    public function setAdditional_Job_Posting_Location_Reference(array $additional_Job_Posting_Location_Reference = array())
    {
        // validation for constraint: array
        if ('' !== ($additional_Job_Posting_Location_ReferenceArrayErrorMessage = self::validateAdditional_Job_Posting_Location_ReferenceForArrayConstraintsFromSetAdditional_Job_Posting_Location_Reference($additional_Job_Posting_Location_Reference))) {
            throw new \InvalidArgumentException($additional_Job_Posting_Location_ReferenceArrayErrorMessage, __LINE__);
        }
        $this->Additional_Job_Posting_Location_Reference = $additional_Job_Posting_Location_Reference;
        return $this;
    }
    /**
     * Add item to Additional_Job_Posting_Location_Reference value
     * @throws \InvalidArgumentException
     * @param \StructType\LocationObjectType $item
     * @return \StructType\Job_Requisition_Restrictions_DataType
     */
    public function addToAdditional_Job_Posting_Location_Reference(\StructType\LocationObjectType $item)
    {
        // validation for constraint: itemType
        if (!$item instanceof \StructType\LocationObjectType) {
            throw new \InvalidArgumentException(sprintf('The Additional_Job_Posting_Location_Reference property can only contain items of type \StructType\LocationObjectType, %s given', is_object($item) ? get_class($item) : (is_array($item) ? implode(', ', $item) : gettype($item))), __LINE__);
        }
        $this->Additional_Job_Posting_Location_Reference[] = $item;
        return $this;
    }
    /**
     * Get Time_Type_Reference value
     * @return \StructType\Position_Time_TypeObjectType|null
     */
    public function getTime_Type_Reference()
    {
        return $this->Time_Type_Reference;
    }
    /**
     * Set Time_Type_Reference value
     * @param \StructType\Position_Time_TypeObjectType $time_Type_Reference
     * @return \StructType\Job_Requisition_Restrictions_DataType
     */
    public function setTime_Type_Reference(\StructType\Position_Time_TypeObjectType $time_Type_Reference = null)
    {
        $this->Time_Type_Reference = $time_Type_Reference;
        return $this;
    }
    /**
     * Get Employee_Contract_Type_Reference value
     * @return \StructType\Employee_Contract_TypeObjectType|null
     */
    public function getEmployee_Contract_Type_Reference()
    {
        return $this->Employee_Contract_Type_Reference;
    }
    /**
     * Set Employee_Contract_Type_Reference value
     * @param \StructType\Employee_Contract_TypeObjectType $employee_Contract_Type_Reference
     * @return \StructType\Job_Requisition_Restrictions_DataType
     */
    public function setEmployee_Contract_Type_Reference(\StructType\Employee_Contract_TypeObjectType $employee_Contract_Type_Reference = null)
    {
        $this->Employee_Contract_Type_Reference = $employee_Contract_Type_Reference;
        return $this;
    }
    /**
     * Get Scheduled_Weekly_Hours value
     * @return float|null
     */
    public function getScheduled_Weekly_Hours()
    {
        return $this->Scheduled_Weekly_Hours;
    }
    /**
     * Set Scheduled_Weekly_Hours value
     * @param float $scheduled_Weekly_Hours
     * @return \StructType\Job_Requisition_Restrictions_DataType
     */
    public function setScheduled_Weekly_Hours($scheduled_Weekly_Hours = null)
    {
        // validation for constraint: float
        if (!is_null($scheduled_Weekly_Hours) && !(is_float($scheduled_Weekly_Hours) || is_numeric($scheduled_Weekly_Hours))) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a float value, %s given', var_export($scheduled_Weekly_Hours, true), gettype($scheduled_Weekly_Hours)), __LINE__);
        }
        // validation for constraint: fractionDigits(2)
        if (!is_null($scheduled_Weekly_Hours) && mb_strlen(mb_substr($scheduled_Weekly_Hours, false !== mb_strpos($scheduled_Weekly_Hours, '.') ? mb_strpos($scheduled_Weekly_Hours, '.') + 1 : mb_strlen($scheduled_Weekly_Hours))) > 2) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, the value must at most contain 2 fraction digits, %d given', var_export($scheduled_Weekly_Hours, true), mb_strlen(mb_substr($scheduled_Weekly_Hours, mb_strpos($scheduled_Weekly_Hours, '.') + 1))), __LINE__);
        }
        // validation for constraint: totalDigits(14)
        if (!is_null($scheduled_Weekly_Hours) && mb_strlen(preg_replace('/(\D)/', '', $scheduled_Weekly_Hours)) > 14) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, the value must use at most 14 digits, "%d" given', var_export($scheduled_Weekly_Hours, true), mb_strlen(preg_replace('/(\D)/', '', $scheduled_Weekly_Hours))), __LINE__);
        }
        $this->Scheduled_Weekly_Hours = $scheduled_Weekly_Hours;
        return $this;
    }
    /**
     * Get Work_Shift_Reference value
     * @return \StructType\Work_ShiftObjectType|null
     */
    public function getWork_Shift_Reference()
    {
        return $this->Work_Shift_Reference;
    }
    /**
     * Set Work_Shift_Reference value
     * @param \StructType\Work_ShiftObjectType $work_Shift_Reference
     * @return \StructType\Job_Requisition_Restrictions_DataType
     */
    public function setWork_Shift_Reference(\StructType\Work_ShiftObjectType $work_Shift_Reference = null)
    {
        $this->Work_Shift_Reference = $work_Shift_Reference;
        return $this;
    }
    /**
     * Get Spotlight_Job value
     * @return bool|null
     */
    public function getSpotlight_Job()
    {
        return $this->Spotlight_Job;
    }
    /**
     * Set Spotlight_Job value
     * @param bool $spotlight_Job
     * @return \StructType\Job_Requisition_Restrictions_DataType
     */
    public function setSpotlight_Job($spotlight_Job = null)
    {
        // validation for constraint: boolean
        if (!is_null($spotlight_Job) && !is_bool($spotlight_Job)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a bool, %s given', var_export($spotlight_Job, true), gettype($spotlight_Job)), __LINE__);
        }
        $this->Spotlight_Job = $spotlight_Job;
        return $this;
    }
    /**
     * Get Referral_Payment_Plan_Reference value
     * @return \StructType\One_Time_Payment_PlanObjectType|null
     */
    public function getReferral_Payment_Plan_Reference()
    {
        return $this->Referral_Payment_Plan_Reference;
    }
    /**
     * Set Referral_Payment_Plan_Reference value
     * @param \StructType\One_Time_Payment_PlanObjectType $referral_Payment_Plan_Reference
     * @return \StructType\Job_Requisition_Restrictions_DataType
     */
    public function setReferral_Payment_Plan_Reference(\StructType\One_Time_Payment_PlanObjectType $referral_Payment_Plan_Reference = null)
    {
        $this->Referral_Payment_Plan_Reference = $referral_Payment_Plan_Reference;
        return $this;
    }
}
