<?php

namespace StructType;

use \WsdlToPhp\PackageBase\AbstractStructBase;

/**
 * This class stands for TimeBillSearchRowBasic StructType
 * @subpackage Structs
 */
class TimeBillSearchRowBasic extends SearchRowBasic
{
    /**
     * The approvalStatus
     * Meta information extracted from the WSDL
     * - maxOccurs: unbounded
     * - minOccurs: 0
     * @var \StructType\SearchColumnSelectField[]
     */
    public $approvalStatus;
    /**
     * The break
     * Meta information extracted from the WSDL
     * - maxOccurs: unbounded
     * - minOccurs: 0
     * @var \StructType\SearchColumnStringField[]
     */
    public $break;
    /**
     * The class
     * Meta information extracted from the WSDL
     * - maxOccurs: unbounded
     * - minOccurs: 0
     * @var \StructType\SearchColumnSelectField[]
     */
    public $class;
    /**
     * The customer
     * Meta information extracted from the WSDL
     * - maxOccurs: unbounded
     * - minOccurs: 0
     * @var \StructType\SearchColumnSelectField[]
     */
    public $customer;
    /**
     * The date
     * Meta information extracted from the WSDL
     * - maxOccurs: unbounded
     * - minOccurs: 0
     * @var \StructType\SearchColumnDateField[]
     */
    public $date;
    /**
     * The dateCreated
     * Meta information extracted from the WSDL
     * - maxOccurs: unbounded
     * - minOccurs: 0
     * @var \StructType\SearchColumnDateField[]
     */
    public $dateCreated;
    /**
     * The department
     * Meta information extracted from the WSDL
     * - maxOccurs: unbounded
     * - minOccurs: 0
     * @var \StructType\SearchColumnSelectField[]
     */
    public $department;
    /**
     * The durationDecimal
     * Meta information extracted from the WSDL
     * - maxOccurs: unbounded
     * - minOccurs: 0
     * @var \StructType\SearchColumnDoubleField[]
     */
    public $durationDecimal;
    /**
     * The employee
     * Meta information extracted from the WSDL
     * - maxOccurs: unbounded
     * - minOccurs: 0
     * @var \StructType\SearchColumnSelectField[]
     */
    public $employee;
    /**
     * The endTime
     * Meta information extracted from the WSDL
     * - maxOccurs: unbounded
     * - minOccurs: 0
     * @var \StructType\SearchColumnDateField[]
     */
    public $endTime;
    /**
     * The externalId
     * Meta information extracted from the WSDL
     * - maxOccurs: unbounded
     * - minOccurs: 0
     * @var \StructType\SearchColumnSelectField[]
     */
    public $externalId;
    /**
     * The hours
     * Meta information extracted from the WSDL
     * - maxOccurs: unbounded
     * - minOccurs: 0
     * @var \StructType\SearchColumnStringField[]
     */
    public $hours;
    /**
     * The internalId
     * Meta information extracted from the WSDL
     * - maxOccurs: unbounded
     * - minOccurs: 0
     * @var \StructType\SearchColumnSelectField[]
     */
    public $internalId;
    /**
     * The isBillable
     * Meta information extracted from the WSDL
     * - maxOccurs: unbounded
     * - minOccurs: 0
     * @var \StructType\SearchColumnBooleanField[]
     */
    public $isBillable;
    /**
     * The isExempt
     * Meta information extracted from the WSDL
     * - maxOccurs: unbounded
     * - minOccurs: 0
     * @var \StructType\SearchColumnBooleanField[]
     */
    public $isExempt;
    /**
     * The isProductive
     * Meta information extracted from the WSDL
     * - maxOccurs: unbounded
     * - minOccurs: 0
     * @var \StructType\SearchColumnBooleanField[]
     */
    public $isProductive;
    /**
     * The isUtilized
     * Meta information extracted from the WSDL
     * - maxOccurs: unbounded
     * - minOccurs: 0
     * @var \StructType\SearchColumnBooleanField[]
     */
    public $isUtilized;
    /**
     * The item
     * Meta information extracted from the WSDL
     * - maxOccurs: unbounded
     * - minOccurs: 0
     * @var \StructType\SearchColumnStringField[]
     */
    public $item;
    /**
     * The lastModified
     * Meta information extracted from the WSDL
     * - maxOccurs: unbounded
     * - minOccurs: 0
     * @var \StructType\SearchColumnDateField[]
     */
    public $lastModified;
    /**
     * The location
     * Meta information extracted from the WSDL
     * - maxOccurs: unbounded
     * - minOccurs: 0
     * @var \StructType\SearchColumnSelectField[]
     */
    public $location;
    /**
     * The memo
     * Meta information extracted from the WSDL
     * - maxOccurs: unbounded
     * - minOccurs: 0
     * @var \StructType\SearchColumnStringField[]
     */
    public $memo;
    /**
     * The paidExternally
     * Meta information extracted from the WSDL
     * - maxOccurs: unbounded
     * - minOccurs: 0
     * @var \StructType\SearchColumnBooleanField[]
     */
    public $paidExternally;
    /**
     * The payItem
     * Meta information extracted from the WSDL
     * - maxOccurs: unbounded
     * - minOccurs: 0
     * @var \StructType\SearchColumnSelectField[]
     */
    public $payItem;
    /**
     * The payrollDate
     * Meta information extracted from the WSDL
     * - maxOccurs: unbounded
     * - minOccurs: 0
     * @var \StructType\SearchColumnDateField[]
     */
    public $payrollDate;
    /**
     * The rate
     * Meta information extracted from the WSDL
     * - maxOccurs: unbounded
     * - minOccurs: 0
     * @var \StructType\SearchColumnDoubleField[]
     */
    public $rate;
    /**
     * The rejectionNote
     * Meta information extracted from the WSDL
     * - maxOccurs: unbounded
     * - minOccurs: 0
     * @var \StructType\SearchColumnStringField[]
     */
    public $rejectionNote;
    /**
     * The startTime
     * Meta information extracted from the WSDL
     * - maxOccurs: unbounded
     * - minOccurs: 0
     * @var \StructType\SearchColumnDateField[]
     */
    public $startTime;
    /**
     * The status
     * Meta information extracted from the WSDL
     * - maxOccurs: unbounded
     * - minOccurs: 0
     * @var \StructType\SearchColumnStringField[]
     */
    public $status;
    /**
     * The subsidiary
     * Meta information extracted from the WSDL
     * - maxOccurs: unbounded
     * - minOccurs: 0
     * @var \StructType\SearchColumnStringField[]
     */
    public $subsidiary;
    /**
     * The supervisorApproval
     * Meta information extracted from the WSDL
     * - maxOccurs: unbounded
     * - minOccurs: 0
     * @var \StructType\SearchColumnBooleanField[]
     */
    public $supervisorApproval;
    /**
     * The temporaryLocalJurisdiction
     * Meta information extracted from the WSDL
     * - maxOccurs: unbounded
     * - minOccurs: 0
     * @var \StructType\SearchColumnStringField[]
     */
    public $temporaryLocalJurisdiction;
    /**
     * The temporaryStateJurisdiction
     * Meta information extracted from the WSDL
     * - maxOccurs: unbounded
     * - minOccurs: 0
     * @var \StructType\SearchColumnStringField[]
     */
    public $temporaryStateJurisdiction;
    /**
     * The timeModified
     * Meta information extracted from the WSDL
     * - maxOccurs: unbounded
     * - minOccurs: 0
     * @var \StructType\SearchColumnBooleanField[]
     */
    public $timeModified;
    /**
     * The timeSheet
     * Meta information extracted from the WSDL
     * - maxOccurs: unbounded
     * - minOccurs: 0
     * @var \StructType\SearchColumnSelectField[]
     */
    public $timeSheet;
    /**
     * The type
     * Meta information extracted from the WSDL
     * - maxOccurs: unbounded
     * - minOccurs: 0
     * @var \StructType\SearchColumnEnumSelectField[]
     */
    public $type;
    /**
     * The customFieldList
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * @var \StructType\SearchColumnCustomFieldList
     */
    public $customFieldList;
    /**
     * Constructor method for TimeBillSearchRowBasic
     * @uses TimeBillSearchRowBasic::setApprovalStatus()
     * @uses TimeBillSearchRowBasic::setBreak()
     * @uses TimeBillSearchRowBasic::setClass()
     * @uses TimeBillSearchRowBasic::setCustomer()
     * @uses TimeBillSearchRowBasic::setDate()
     * @uses TimeBillSearchRowBasic::setDateCreated()
     * @uses TimeBillSearchRowBasic::setDepartment()
     * @uses TimeBillSearchRowBasic::setDurationDecimal()
     * @uses TimeBillSearchRowBasic::setEmployee()
     * @uses TimeBillSearchRowBasic::setEndTime()
     * @uses TimeBillSearchRowBasic::setExternalId()
     * @uses TimeBillSearchRowBasic::setHours()
     * @uses TimeBillSearchRowBasic::setInternalId()
     * @uses TimeBillSearchRowBasic::setIsBillable()
     * @uses TimeBillSearchRowBasic::setIsExempt()
     * @uses TimeBillSearchRowBasic::setIsProductive()
     * @uses TimeBillSearchRowBasic::setIsUtilized()
     * @uses TimeBillSearchRowBasic::setItem()
     * @uses TimeBillSearchRowBasic::setLastModified()
     * @uses TimeBillSearchRowBasic::setLocation()
     * @uses TimeBillSearchRowBasic::setMemo()
     * @uses TimeBillSearchRowBasic::setPaidExternally()
     * @uses TimeBillSearchRowBasic::setPayItem()
     * @uses TimeBillSearchRowBasic::setPayrollDate()
     * @uses TimeBillSearchRowBasic::setRate()
     * @uses TimeBillSearchRowBasic::setRejectionNote()
     * @uses TimeBillSearchRowBasic::setStartTime()
     * @uses TimeBillSearchRowBasic::setStatus()
     * @uses TimeBillSearchRowBasic::setSubsidiary()
     * @uses TimeBillSearchRowBasic::setSupervisorApproval()
     * @uses TimeBillSearchRowBasic::setTemporaryLocalJurisdiction()
     * @uses TimeBillSearchRowBasic::setTemporaryStateJurisdiction()
     * @uses TimeBillSearchRowBasic::setTimeModified()
     * @uses TimeBillSearchRowBasic::setTimeSheet()
     * @uses TimeBillSearchRowBasic::setType()
     * @uses TimeBillSearchRowBasic::setCustomFieldList()
     * @param \StructType\SearchColumnSelectField[] $approvalStatus
     * @param \StructType\SearchColumnStringField[] $break
     * @param \StructType\SearchColumnSelectField[] $class
     * @param \StructType\SearchColumnSelectField[] $customer
     * @param \StructType\SearchColumnDateField[] $date
     * @param \StructType\SearchColumnDateField[] $dateCreated
     * @param \StructType\SearchColumnSelectField[] $department
     * @param \StructType\SearchColumnDoubleField[] $durationDecimal
     * @param \StructType\SearchColumnSelectField[] $employee
     * @param \StructType\SearchColumnDateField[] $endTime
     * @param \StructType\SearchColumnSelectField[] $externalId
     * @param \StructType\SearchColumnStringField[] $hours
     * @param \StructType\SearchColumnSelectField[] $internalId
     * @param \StructType\SearchColumnBooleanField[] $isBillable
     * @param \StructType\SearchColumnBooleanField[] $isExempt
     * @param \StructType\SearchColumnBooleanField[] $isProductive
     * @param \StructType\SearchColumnBooleanField[] $isUtilized
     * @param \StructType\SearchColumnStringField[] $item
     * @param \StructType\SearchColumnDateField[] $lastModified
     * @param \StructType\SearchColumnSelectField[] $location
     * @param \StructType\SearchColumnStringField[] $memo
     * @param \StructType\SearchColumnBooleanField[] $paidExternally
     * @param \StructType\SearchColumnSelectField[] $payItem
     * @param \StructType\SearchColumnDateField[] $payrollDate
     * @param \StructType\SearchColumnDoubleField[] $rate
     * @param \StructType\SearchColumnStringField[] $rejectionNote
     * @param \StructType\SearchColumnDateField[] $startTime
     * @param \StructType\SearchColumnStringField[] $status
     * @param \StructType\SearchColumnStringField[] $subsidiary
     * @param \StructType\SearchColumnBooleanField[] $supervisorApproval
     * @param \StructType\SearchColumnStringField[] $temporaryLocalJurisdiction
     * @param \StructType\SearchColumnStringField[] $temporaryStateJurisdiction
     * @param \StructType\SearchColumnBooleanField[] $timeModified
     * @param \StructType\SearchColumnSelectField[] $timeSheet
     * @param \StructType\SearchColumnEnumSelectField[] $type
     * @param \StructType\SearchColumnCustomFieldList $customFieldList
     */
    public function __construct(array $approvalStatus = array(), array $break = array(), array $class = array(), array $customer = array(), array $date = array(), array $dateCreated = array(), array $department = array(), array $durationDecimal = array(), array $employee = array(), array $endTime = array(), array $externalId = array(), array $hours = array(), array $internalId = array(), array $isBillable = array(), array $isExempt = array(), array $isProductive = array(), array $isUtilized = array(), array $item = array(), array $lastModified = array(), array $location = array(), array $memo = array(), array $paidExternally = array(), array $payItem = array(), array $payrollDate = array(), array $rate = array(), array $rejectionNote = array(), array $startTime = array(), array $status = array(), array $subsidiary = array(), array $supervisorApproval = array(), array $temporaryLocalJurisdiction = array(), array $temporaryStateJurisdiction = array(), array $timeModified = array(), array $timeSheet = array(), array $type = array(), \StructType\SearchColumnCustomFieldList $customFieldList = null)
    {
        $this
            ->setApprovalStatus($approvalStatus)
            ->setBreak($break)
            ->setClass($class)
            ->setCustomer($customer)
            ->setDate($date)
            ->setDateCreated($dateCreated)
            ->setDepartment($department)
            ->setDurationDecimal($durationDecimal)
            ->setEmployee($employee)
            ->setEndTime($endTime)
            ->setExternalId($externalId)
            ->setHours($hours)
            ->setInternalId($internalId)
            ->setIsBillable($isBillable)
            ->setIsExempt($isExempt)
            ->setIsProductive($isProductive)
            ->setIsUtilized($isUtilized)
            ->setItem($item)
            ->setLastModified($lastModified)
            ->setLocation($location)
            ->setMemo($memo)
            ->setPaidExternally($paidExternally)
            ->setPayItem($payItem)
            ->setPayrollDate($payrollDate)
            ->setRate($rate)
            ->setRejectionNote($rejectionNote)
            ->setStartTime($startTime)
            ->setStatus($status)
            ->setSubsidiary($subsidiary)
            ->setSupervisorApproval($supervisorApproval)
            ->setTemporaryLocalJurisdiction($temporaryLocalJurisdiction)
            ->setTemporaryStateJurisdiction($temporaryStateJurisdiction)
            ->setTimeModified($timeModified)
            ->setTimeSheet($timeSheet)
            ->setType($type)
            ->setCustomFieldList($customFieldList);
    }
    /**
     * Get approvalStatus value
     * @return \StructType\SearchColumnSelectField[]|null
     */
    public function getApprovalStatus()
    {
        return $this->approvalStatus;
    }
    /**
     * This method is responsible for validating the values passed to the setApprovalStatus method
     * This method is willingly generated in order to preserve the one-line inline validation within the setApprovalStatus method
     * @param array $values
     * @return string A non-empty message if the values does not match the validation rules
     */
    public static function validateApprovalStatusForArrayConstraintsFromSetApprovalStatus(array $values = array())
    {
        $message = '';
        $invalidValues = [];
        foreach ($values as $timeBillSearchRowBasicApprovalStatusItem) {
            // validation for constraint: itemType
            if (!$timeBillSearchRowBasicApprovalStatusItem instanceof \StructType\SearchColumnSelectField) {
                $invalidValues[] = is_object($timeBillSearchRowBasicApprovalStatusItem) ? get_class($timeBillSearchRowBasicApprovalStatusItem) : sprintf('%s(%s)', gettype($timeBillSearchRowBasicApprovalStatusItem), var_export($timeBillSearchRowBasicApprovalStatusItem, true));
            }
        }
        if (!empty($invalidValues)) {
            $message = sprintf('The approvalStatus property can only contain items of type \StructType\SearchColumnSelectField, %s given', is_object($invalidValues) ? get_class($invalidValues) : (is_array($invalidValues) ? implode(', ', $invalidValues) : gettype($invalidValues)));
        }
        unset($invalidValues);
        return $message;
    }
    /**
     * Set approvalStatus value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnSelectField[] $approvalStatus
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function setApprovalStatus(array $approvalStatus = array())
    {
        // validation for constraint: array
        if ('' !== ($approvalStatusArrayErrorMessage = self::validateApprovalStatusForArrayConstraintsFromSetApprovalStatus($approvalStatus))) {
            throw new \InvalidArgumentException($approvalStatusArrayErrorMessage, __LINE__);
        }
        $this->approvalStatus = $approvalStatus;
        return $this;
    }
    /**
     * Add item to approvalStatus value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnSelectField $item
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function addToApprovalStatus(\StructType\SearchColumnSelectField $item)
    {
        // validation for constraint: itemType
        if (!$item instanceof \StructType\SearchColumnSelectField) {
            throw new \InvalidArgumentException(sprintf('The approvalStatus property can only contain items of type \StructType\SearchColumnSelectField, %s given', is_object($item) ? get_class($item) : (is_array($item) ? implode(', ', $item) : gettype($item))), __LINE__);
        }
        $this->approvalStatus[] = $item;
        return $this;
    }
    /**
     * Get break value
     * @return \StructType\SearchColumnStringField[]|null
     */
    public function getBreak()
    {
        return $this->break;
    }
    /**
     * This method is responsible for validating the values passed to the setBreak method
     * This method is willingly generated in order to preserve the one-line inline validation within the setBreak method
     * @param array $values
     * @return string A non-empty message if the values does not match the validation rules
     */
    public static function validateBreakForArrayConstraintsFromSetBreak(array $values = array())
    {
        $message = '';
        $invalidValues = [];
        foreach ($values as $timeBillSearchRowBasicBreakItem) {
            // validation for constraint: itemType
            if (!$timeBillSearchRowBasicBreakItem instanceof \StructType\SearchColumnStringField) {
                $invalidValues[] = is_object($timeBillSearchRowBasicBreakItem) ? get_class($timeBillSearchRowBasicBreakItem) : sprintf('%s(%s)', gettype($timeBillSearchRowBasicBreakItem), var_export($timeBillSearchRowBasicBreakItem, true));
            }
        }
        if (!empty($invalidValues)) {
            $message = sprintf('The break property can only contain items of type \StructType\SearchColumnStringField, %s given', is_object($invalidValues) ? get_class($invalidValues) : (is_array($invalidValues) ? implode(', ', $invalidValues) : gettype($invalidValues)));
        }
        unset($invalidValues);
        return $message;
    }
    /**
     * Set break value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnStringField[] $break
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function setBreak(array $break = array())
    {
        // validation for constraint: array
        if ('' !== ($breakArrayErrorMessage = self::validateBreakForArrayConstraintsFromSetBreak($break))) {
            throw new \InvalidArgumentException($breakArrayErrorMessage, __LINE__);
        }
        $this->break = $break;
        return $this;
    }
    /**
     * Add item to break value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnStringField $item
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function addToBreak(\StructType\SearchColumnStringField $item)
    {
        // validation for constraint: itemType
        if (!$item instanceof \StructType\SearchColumnStringField) {
            throw new \InvalidArgumentException(sprintf('The break property can only contain items of type \StructType\SearchColumnStringField, %s given', is_object($item) ? get_class($item) : (is_array($item) ? implode(', ', $item) : gettype($item))), __LINE__);
        }
        $this->break[] = $item;
        return $this;
    }
    /**
     * Get class value
     * @return \StructType\SearchColumnSelectField[]|null
     */
    public function getClass()
    {
        return $this->class;
    }
    /**
     * This method is responsible for validating the values passed to the setClass method
     * This method is willingly generated in order to preserve the one-line inline validation within the setClass method
     * @param array $values
     * @return string A non-empty message if the values does not match the validation rules
     */
    public static function validateClassForArrayConstraintsFromSetClass(array $values = array())
    {
        $message = '';
        $invalidValues = [];
        foreach ($values as $timeBillSearchRowBasicClassItem) {
            // validation for constraint: itemType
            if (!$timeBillSearchRowBasicClassItem instanceof \StructType\SearchColumnSelectField) {
                $invalidValues[] = is_object($timeBillSearchRowBasicClassItem) ? get_class($timeBillSearchRowBasicClassItem) : sprintf('%s(%s)', gettype($timeBillSearchRowBasicClassItem), var_export($timeBillSearchRowBasicClassItem, true));
            }
        }
        if (!empty($invalidValues)) {
            $message = sprintf('The class property can only contain items of type \StructType\SearchColumnSelectField, %s given', is_object($invalidValues) ? get_class($invalidValues) : (is_array($invalidValues) ? implode(', ', $invalidValues) : gettype($invalidValues)));
        }
        unset($invalidValues);
        return $message;
    }
    /**
     * Set class value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnSelectField[] $class
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function setClass(array $class = array())
    {
        // validation for constraint: array
        if ('' !== ($classArrayErrorMessage = self::validateClassForArrayConstraintsFromSetClass($class))) {
            throw new \InvalidArgumentException($classArrayErrorMessage, __LINE__);
        }
        $this->class = $class;
        return $this;
    }
    /**
     * Add item to class value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnSelectField $item
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function addToClass(\StructType\SearchColumnSelectField $item)
    {
        // validation for constraint: itemType
        if (!$item instanceof \StructType\SearchColumnSelectField) {
            throw new \InvalidArgumentException(sprintf('The class property can only contain items of type \StructType\SearchColumnSelectField, %s given', is_object($item) ? get_class($item) : (is_array($item) ? implode(', ', $item) : gettype($item))), __LINE__);
        }
        $this->class[] = $item;
        return $this;
    }
    /**
     * Get customer value
     * @return \StructType\SearchColumnSelectField[]|null
     */
    public function getCustomer()
    {
        return $this->customer;
    }
    /**
     * This method is responsible for validating the values passed to the setCustomer method
     * This method is willingly generated in order to preserve the one-line inline validation within the setCustomer method
     * @param array $values
     * @return string A non-empty message if the values does not match the validation rules
     */
    public static function validateCustomerForArrayConstraintsFromSetCustomer(array $values = array())
    {
        $message = '';
        $invalidValues = [];
        foreach ($values as $timeBillSearchRowBasicCustomerItem) {
            // validation for constraint: itemType
            if (!$timeBillSearchRowBasicCustomerItem instanceof \StructType\SearchColumnSelectField) {
                $invalidValues[] = is_object($timeBillSearchRowBasicCustomerItem) ? get_class($timeBillSearchRowBasicCustomerItem) : sprintf('%s(%s)', gettype($timeBillSearchRowBasicCustomerItem), var_export($timeBillSearchRowBasicCustomerItem, true));
            }
        }
        if (!empty($invalidValues)) {
            $message = sprintf('The customer property can only contain items of type \StructType\SearchColumnSelectField, %s given', is_object($invalidValues) ? get_class($invalidValues) : (is_array($invalidValues) ? implode(', ', $invalidValues) : gettype($invalidValues)));
        }
        unset($invalidValues);
        return $message;
    }
    /**
     * Set customer value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnSelectField[] $customer
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function setCustomer(array $customer = array())
    {
        // validation for constraint: array
        if ('' !== ($customerArrayErrorMessage = self::validateCustomerForArrayConstraintsFromSetCustomer($customer))) {
            throw new \InvalidArgumentException($customerArrayErrorMessage, __LINE__);
        }
        $this->customer = $customer;
        return $this;
    }
    /**
     * Add item to customer value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnSelectField $item
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function addToCustomer(\StructType\SearchColumnSelectField $item)
    {
        // validation for constraint: itemType
        if (!$item instanceof \StructType\SearchColumnSelectField) {
            throw new \InvalidArgumentException(sprintf('The customer property can only contain items of type \StructType\SearchColumnSelectField, %s given', is_object($item) ? get_class($item) : (is_array($item) ? implode(', ', $item) : gettype($item))), __LINE__);
        }
        $this->customer[] = $item;
        return $this;
    }
    /**
     * Get date value
     * @return \StructType\SearchColumnDateField[]|null
     */
    public function getDate()
    {
        return $this->date;
    }
    /**
     * This method is responsible for validating the values passed to the setDate method
     * This method is willingly generated in order to preserve the one-line inline validation within the setDate method
     * @param array $values
     * @return string A non-empty message if the values does not match the validation rules
     */
    public static function validateDateForArrayConstraintsFromSetDate(array $values = array())
    {
        $message = '';
        $invalidValues = [];
        foreach ($values as $timeBillSearchRowBasicDateItem) {
            // validation for constraint: itemType
            if (!$timeBillSearchRowBasicDateItem instanceof \StructType\SearchColumnDateField) {
                $invalidValues[] = is_object($timeBillSearchRowBasicDateItem) ? get_class($timeBillSearchRowBasicDateItem) : sprintf('%s(%s)', gettype($timeBillSearchRowBasicDateItem), var_export($timeBillSearchRowBasicDateItem, true));
            }
        }
        if (!empty($invalidValues)) {
            $message = sprintf('The date property can only contain items of type \StructType\SearchColumnDateField, %s given', is_object($invalidValues) ? get_class($invalidValues) : (is_array($invalidValues) ? implode(', ', $invalidValues) : gettype($invalidValues)));
        }
        unset($invalidValues);
        return $message;
    }
    /**
     * Set date value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnDateField[] $date
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function setDate(array $date = array())
    {
        // validation for constraint: array
        if ('' !== ($dateArrayErrorMessage = self::validateDateForArrayConstraintsFromSetDate($date))) {
            throw new \InvalidArgumentException($dateArrayErrorMessage, __LINE__);
        }
        $this->date = $date;
        return $this;
    }
    /**
     * Add item to date value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnDateField $item
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function addToDate(\StructType\SearchColumnDateField $item)
    {
        // validation for constraint: itemType
        if (!$item instanceof \StructType\SearchColumnDateField) {
            throw new \InvalidArgumentException(sprintf('The date property can only contain items of type \StructType\SearchColumnDateField, %s given', is_object($item) ? get_class($item) : (is_array($item) ? implode(', ', $item) : gettype($item))), __LINE__);
        }
        $this->date[] = $item;
        return $this;
    }
    /**
     * Get dateCreated value
     * @return \StructType\SearchColumnDateField[]|null
     */
    public function getDateCreated()
    {
        return $this->dateCreated;
    }
    /**
     * This method is responsible for validating the values passed to the setDateCreated method
     * This method is willingly generated in order to preserve the one-line inline validation within the setDateCreated method
     * @param array $values
     * @return string A non-empty message if the values does not match the validation rules
     */
    public static function validateDateCreatedForArrayConstraintsFromSetDateCreated(array $values = array())
    {
        $message = '';
        $invalidValues = [];
        foreach ($values as $timeBillSearchRowBasicDateCreatedItem) {
            // validation for constraint: itemType
            if (!$timeBillSearchRowBasicDateCreatedItem instanceof \StructType\SearchColumnDateField) {
                $invalidValues[] = is_object($timeBillSearchRowBasicDateCreatedItem) ? get_class($timeBillSearchRowBasicDateCreatedItem) : sprintf('%s(%s)', gettype($timeBillSearchRowBasicDateCreatedItem), var_export($timeBillSearchRowBasicDateCreatedItem, true));
            }
        }
        if (!empty($invalidValues)) {
            $message = sprintf('The dateCreated property can only contain items of type \StructType\SearchColumnDateField, %s given', is_object($invalidValues) ? get_class($invalidValues) : (is_array($invalidValues) ? implode(', ', $invalidValues) : gettype($invalidValues)));
        }
        unset($invalidValues);
        return $message;
    }
    /**
     * Set dateCreated value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnDateField[] $dateCreated
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function setDateCreated(array $dateCreated = array())
    {
        // validation for constraint: array
        if ('' !== ($dateCreatedArrayErrorMessage = self::validateDateCreatedForArrayConstraintsFromSetDateCreated($dateCreated))) {
            throw new \InvalidArgumentException($dateCreatedArrayErrorMessage, __LINE__);
        }
        $this->dateCreated = $dateCreated;
        return $this;
    }
    /**
     * Add item to dateCreated value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnDateField $item
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function addToDateCreated(\StructType\SearchColumnDateField $item)
    {
        // validation for constraint: itemType
        if (!$item instanceof \StructType\SearchColumnDateField) {
            throw new \InvalidArgumentException(sprintf('The dateCreated property can only contain items of type \StructType\SearchColumnDateField, %s given', is_object($item) ? get_class($item) : (is_array($item) ? implode(', ', $item) : gettype($item))), __LINE__);
        }
        $this->dateCreated[] = $item;
        return $this;
    }
    /**
     * Get department value
     * @return \StructType\SearchColumnSelectField[]|null
     */
    public function getDepartment()
    {
        return $this->department;
    }
    /**
     * This method is responsible for validating the values passed to the setDepartment method
     * This method is willingly generated in order to preserve the one-line inline validation within the setDepartment method
     * @param array $values
     * @return string A non-empty message if the values does not match the validation rules
     */
    public static function validateDepartmentForArrayConstraintsFromSetDepartment(array $values = array())
    {
        $message = '';
        $invalidValues = [];
        foreach ($values as $timeBillSearchRowBasicDepartmentItem) {
            // validation for constraint: itemType
            if (!$timeBillSearchRowBasicDepartmentItem instanceof \StructType\SearchColumnSelectField) {
                $invalidValues[] = is_object($timeBillSearchRowBasicDepartmentItem) ? get_class($timeBillSearchRowBasicDepartmentItem) : sprintf('%s(%s)', gettype($timeBillSearchRowBasicDepartmentItem), var_export($timeBillSearchRowBasicDepartmentItem, true));
            }
        }
        if (!empty($invalidValues)) {
            $message = sprintf('The department property can only contain items of type \StructType\SearchColumnSelectField, %s given', is_object($invalidValues) ? get_class($invalidValues) : (is_array($invalidValues) ? implode(', ', $invalidValues) : gettype($invalidValues)));
        }
        unset($invalidValues);
        return $message;
    }
    /**
     * Set department value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnSelectField[] $department
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function setDepartment(array $department = array())
    {
        // validation for constraint: array
        if ('' !== ($departmentArrayErrorMessage = self::validateDepartmentForArrayConstraintsFromSetDepartment($department))) {
            throw new \InvalidArgumentException($departmentArrayErrorMessage, __LINE__);
        }
        $this->department = $department;
        return $this;
    }
    /**
     * Add item to department value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnSelectField $item
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function addToDepartment(\StructType\SearchColumnSelectField $item)
    {
        // validation for constraint: itemType
        if (!$item instanceof \StructType\SearchColumnSelectField) {
            throw new \InvalidArgumentException(sprintf('The department property can only contain items of type \StructType\SearchColumnSelectField, %s given', is_object($item) ? get_class($item) : (is_array($item) ? implode(', ', $item) : gettype($item))), __LINE__);
        }
        $this->department[] = $item;
        return $this;
    }
    /**
     * Get durationDecimal value
     * @return \StructType\SearchColumnDoubleField[]|null
     */
    public function getDurationDecimal()
    {
        return $this->durationDecimal;
    }
    /**
     * This method is responsible for validating the values passed to the setDurationDecimal method
     * This method is willingly generated in order to preserve the one-line inline validation within the setDurationDecimal method
     * @param array $values
     * @return string A non-empty message if the values does not match the validation rules
     */
    public static function validateDurationDecimalForArrayConstraintsFromSetDurationDecimal(array $values = array())
    {
        $message = '';
        $invalidValues = [];
        foreach ($values as $timeBillSearchRowBasicDurationDecimalItem) {
            // validation for constraint: itemType
            if (!$timeBillSearchRowBasicDurationDecimalItem instanceof \StructType\SearchColumnDoubleField) {
                $invalidValues[] = is_object($timeBillSearchRowBasicDurationDecimalItem) ? get_class($timeBillSearchRowBasicDurationDecimalItem) : sprintf('%s(%s)', gettype($timeBillSearchRowBasicDurationDecimalItem), var_export($timeBillSearchRowBasicDurationDecimalItem, true));
            }
        }
        if (!empty($invalidValues)) {
            $message = sprintf('The durationDecimal property can only contain items of type \StructType\SearchColumnDoubleField, %s given', is_object($invalidValues) ? get_class($invalidValues) : (is_array($invalidValues) ? implode(', ', $invalidValues) : gettype($invalidValues)));
        }
        unset($invalidValues);
        return $message;
    }
    /**
     * Set durationDecimal value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnDoubleField[] $durationDecimal
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function setDurationDecimal(array $durationDecimal = array())
    {
        // validation for constraint: array
        if ('' !== ($durationDecimalArrayErrorMessage = self::validateDurationDecimalForArrayConstraintsFromSetDurationDecimal($durationDecimal))) {
            throw new \InvalidArgumentException($durationDecimalArrayErrorMessage, __LINE__);
        }
        $this->durationDecimal = $durationDecimal;
        return $this;
    }
    /**
     * Add item to durationDecimal value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnDoubleField $item
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function addToDurationDecimal(\StructType\SearchColumnDoubleField $item)
    {
        // validation for constraint: itemType
        if (!$item instanceof \StructType\SearchColumnDoubleField) {
            throw new \InvalidArgumentException(sprintf('The durationDecimal property can only contain items of type \StructType\SearchColumnDoubleField, %s given', is_object($item) ? get_class($item) : (is_array($item) ? implode(', ', $item) : gettype($item))), __LINE__);
        }
        $this->durationDecimal[] = $item;
        return $this;
    }
    /**
     * Get employee value
     * @return \StructType\SearchColumnSelectField[]|null
     */
    public function getEmployee()
    {
        return $this->employee;
    }
    /**
     * This method is responsible for validating the values passed to the setEmployee method
     * This method is willingly generated in order to preserve the one-line inline validation within the setEmployee method
     * @param array $values
     * @return string A non-empty message if the values does not match the validation rules
     */
    public static function validateEmployeeForArrayConstraintsFromSetEmployee(array $values = array())
    {
        $message = '';
        $invalidValues = [];
        foreach ($values as $timeBillSearchRowBasicEmployeeItem) {
            // validation for constraint: itemType
            if (!$timeBillSearchRowBasicEmployeeItem instanceof \StructType\SearchColumnSelectField) {
                $invalidValues[] = is_object($timeBillSearchRowBasicEmployeeItem) ? get_class($timeBillSearchRowBasicEmployeeItem) : sprintf('%s(%s)', gettype($timeBillSearchRowBasicEmployeeItem), var_export($timeBillSearchRowBasicEmployeeItem, true));
            }
        }
        if (!empty($invalidValues)) {
            $message = sprintf('The employee property can only contain items of type \StructType\SearchColumnSelectField, %s given', is_object($invalidValues) ? get_class($invalidValues) : (is_array($invalidValues) ? implode(', ', $invalidValues) : gettype($invalidValues)));
        }
        unset($invalidValues);
        return $message;
    }
    /**
     * Set employee value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnSelectField[] $employee
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function setEmployee(array $employee = array())
    {
        // validation for constraint: array
        if ('' !== ($employeeArrayErrorMessage = self::validateEmployeeForArrayConstraintsFromSetEmployee($employee))) {
            throw new \InvalidArgumentException($employeeArrayErrorMessage, __LINE__);
        }
        $this->employee = $employee;
        return $this;
    }
    /**
     * Add item to employee value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnSelectField $item
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function addToEmployee(\StructType\SearchColumnSelectField $item)
    {
        // validation for constraint: itemType
        if (!$item instanceof \StructType\SearchColumnSelectField) {
            throw new \InvalidArgumentException(sprintf('The employee property can only contain items of type \StructType\SearchColumnSelectField, %s given', is_object($item) ? get_class($item) : (is_array($item) ? implode(', ', $item) : gettype($item))), __LINE__);
        }
        $this->employee[] = $item;
        return $this;
    }
    /**
     * Get endTime value
     * @return \StructType\SearchColumnDateField[]|null
     */
    public function getEndTime()
    {
        return $this->endTime;
    }
    /**
     * This method is responsible for validating the values passed to the setEndTime method
     * This method is willingly generated in order to preserve the one-line inline validation within the setEndTime method
     * @param array $values
     * @return string A non-empty message if the values does not match the validation rules
     */
    public static function validateEndTimeForArrayConstraintsFromSetEndTime(array $values = array())
    {
        $message = '';
        $invalidValues = [];
        foreach ($values as $timeBillSearchRowBasicEndTimeItem) {
            // validation for constraint: itemType
            if (!$timeBillSearchRowBasicEndTimeItem instanceof \StructType\SearchColumnDateField) {
                $invalidValues[] = is_object($timeBillSearchRowBasicEndTimeItem) ? get_class($timeBillSearchRowBasicEndTimeItem) : sprintf('%s(%s)', gettype($timeBillSearchRowBasicEndTimeItem), var_export($timeBillSearchRowBasicEndTimeItem, true));
            }
        }
        if (!empty($invalidValues)) {
            $message = sprintf('The endTime property can only contain items of type \StructType\SearchColumnDateField, %s given', is_object($invalidValues) ? get_class($invalidValues) : (is_array($invalidValues) ? implode(', ', $invalidValues) : gettype($invalidValues)));
        }
        unset($invalidValues);
        return $message;
    }
    /**
     * Set endTime value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnDateField[] $endTime
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function setEndTime(array $endTime = array())
    {
        // validation for constraint: array
        if ('' !== ($endTimeArrayErrorMessage = self::validateEndTimeForArrayConstraintsFromSetEndTime($endTime))) {
            throw new \InvalidArgumentException($endTimeArrayErrorMessage, __LINE__);
        }
        $this->endTime = $endTime;
        return $this;
    }
    /**
     * Add item to endTime value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnDateField $item
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function addToEndTime(\StructType\SearchColumnDateField $item)
    {
        // validation for constraint: itemType
        if (!$item instanceof \StructType\SearchColumnDateField) {
            throw new \InvalidArgumentException(sprintf('The endTime property can only contain items of type \StructType\SearchColumnDateField, %s given', is_object($item) ? get_class($item) : (is_array($item) ? implode(', ', $item) : gettype($item))), __LINE__);
        }
        $this->endTime[] = $item;
        return $this;
    }
    /**
     * Get externalId value
     * @return \StructType\SearchColumnSelectField[]|null
     */
    public function getExternalId()
    {
        return $this->externalId;
    }
    /**
     * This method is responsible for validating the values passed to the setExternalId method
     * This method is willingly generated in order to preserve the one-line inline validation within the setExternalId method
     * @param array $values
     * @return string A non-empty message if the values does not match the validation rules
     */
    public static function validateExternalIdForArrayConstraintsFromSetExternalId(array $values = array())
    {
        $message = '';
        $invalidValues = [];
        foreach ($values as $timeBillSearchRowBasicExternalIdItem) {
            // validation for constraint: itemType
            if (!$timeBillSearchRowBasicExternalIdItem instanceof \StructType\SearchColumnSelectField) {
                $invalidValues[] = is_object($timeBillSearchRowBasicExternalIdItem) ? get_class($timeBillSearchRowBasicExternalIdItem) : sprintf('%s(%s)', gettype($timeBillSearchRowBasicExternalIdItem), var_export($timeBillSearchRowBasicExternalIdItem, true));
            }
        }
        if (!empty($invalidValues)) {
            $message = sprintf('The externalId property can only contain items of type \StructType\SearchColumnSelectField, %s given', is_object($invalidValues) ? get_class($invalidValues) : (is_array($invalidValues) ? implode(', ', $invalidValues) : gettype($invalidValues)));
        }
        unset($invalidValues);
        return $message;
    }
    /**
     * Set externalId value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnSelectField[] $externalId
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function setExternalId(array $externalId = array())
    {
        // validation for constraint: array
        if ('' !== ($externalIdArrayErrorMessage = self::validateExternalIdForArrayConstraintsFromSetExternalId($externalId))) {
            throw new \InvalidArgumentException($externalIdArrayErrorMessage, __LINE__);
        }
        $this->externalId = $externalId;
        return $this;
    }
    /**
     * Add item to externalId value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnSelectField $item
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function addToExternalId(\StructType\SearchColumnSelectField $item)
    {
        // validation for constraint: itemType
        if (!$item instanceof \StructType\SearchColumnSelectField) {
            throw new \InvalidArgumentException(sprintf('The externalId property can only contain items of type \StructType\SearchColumnSelectField, %s given', is_object($item) ? get_class($item) : (is_array($item) ? implode(', ', $item) : gettype($item))), __LINE__);
        }
        $this->externalId[] = $item;
        return $this;
    }
    /**
     * Get hours value
     * @return \StructType\SearchColumnStringField[]|null
     */
    public function getHours()
    {
        return $this->hours;
    }
    /**
     * This method is responsible for validating the values passed to the setHours method
     * This method is willingly generated in order to preserve the one-line inline validation within the setHours method
     * @param array $values
     * @return string A non-empty message if the values does not match the validation rules
     */
    public static function validateHoursForArrayConstraintsFromSetHours(array $values = array())
    {
        $message = '';
        $invalidValues = [];
        foreach ($values as $timeBillSearchRowBasicHoursItem) {
            // validation for constraint: itemType
            if (!$timeBillSearchRowBasicHoursItem instanceof \StructType\SearchColumnStringField) {
                $invalidValues[] = is_object($timeBillSearchRowBasicHoursItem) ? get_class($timeBillSearchRowBasicHoursItem) : sprintf('%s(%s)', gettype($timeBillSearchRowBasicHoursItem), var_export($timeBillSearchRowBasicHoursItem, true));
            }
        }
        if (!empty($invalidValues)) {
            $message = sprintf('The hours property can only contain items of type \StructType\SearchColumnStringField, %s given', is_object($invalidValues) ? get_class($invalidValues) : (is_array($invalidValues) ? implode(', ', $invalidValues) : gettype($invalidValues)));
        }
        unset($invalidValues);
        return $message;
    }
    /**
     * Set hours value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnStringField[] $hours
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function setHours(array $hours = array())
    {
        // validation for constraint: array
        if ('' !== ($hoursArrayErrorMessage = self::validateHoursForArrayConstraintsFromSetHours($hours))) {
            throw new \InvalidArgumentException($hoursArrayErrorMessage, __LINE__);
        }
        $this->hours = $hours;
        return $this;
    }
    /**
     * Add item to hours value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnStringField $item
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function addToHours(\StructType\SearchColumnStringField $item)
    {
        // validation for constraint: itemType
        if (!$item instanceof \StructType\SearchColumnStringField) {
            throw new \InvalidArgumentException(sprintf('The hours property can only contain items of type \StructType\SearchColumnStringField, %s given', is_object($item) ? get_class($item) : (is_array($item) ? implode(', ', $item) : gettype($item))), __LINE__);
        }
        $this->hours[] = $item;
        return $this;
    }
    /**
     * Get internalId value
     * @return \StructType\SearchColumnSelectField[]|null
     */
    public function getInternalId()
    {
        return $this->internalId;
    }
    /**
     * This method is responsible for validating the values passed to the setInternalId method
     * This method is willingly generated in order to preserve the one-line inline validation within the setInternalId method
     * @param array $values
     * @return string A non-empty message if the values does not match the validation rules
     */
    public static function validateInternalIdForArrayConstraintsFromSetInternalId(array $values = array())
    {
        $message = '';
        $invalidValues = [];
        foreach ($values as $timeBillSearchRowBasicInternalIdItem) {
            // validation for constraint: itemType
            if (!$timeBillSearchRowBasicInternalIdItem instanceof \StructType\SearchColumnSelectField) {
                $invalidValues[] = is_object($timeBillSearchRowBasicInternalIdItem) ? get_class($timeBillSearchRowBasicInternalIdItem) : sprintf('%s(%s)', gettype($timeBillSearchRowBasicInternalIdItem), var_export($timeBillSearchRowBasicInternalIdItem, true));
            }
        }
        if (!empty($invalidValues)) {
            $message = sprintf('The internalId property can only contain items of type \StructType\SearchColumnSelectField, %s given', is_object($invalidValues) ? get_class($invalidValues) : (is_array($invalidValues) ? implode(', ', $invalidValues) : gettype($invalidValues)));
        }
        unset($invalidValues);
        return $message;
    }
    /**
     * Set internalId value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnSelectField[] $internalId
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function setInternalId(array $internalId = array())
    {
        // validation for constraint: array
        if ('' !== ($internalIdArrayErrorMessage = self::validateInternalIdForArrayConstraintsFromSetInternalId($internalId))) {
            throw new \InvalidArgumentException($internalIdArrayErrorMessage, __LINE__);
        }
        $this->internalId = $internalId;
        return $this;
    }
    /**
     * Add item to internalId value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnSelectField $item
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function addToInternalId(\StructType\SearchColumnSelectField $item)
    {
        // validation for constraint: itemType
        if (!$item instanceof \StructType\SearchColumnSelectField) {
            throw new \InvalidArgumentException(sprintf('The internalId property can only contain items of type \StructType\SearchColumnSelectField, %s given', is_object($item) ? get_class($item) : (is_array($item) ? implode(', ', $item) : gettype($item))), __LINE__);
        }
        $this->internalId[] = $item;
        return $this;
    }
    /**
     * Get isBillable value
     * @return \StructType\SearchColumnBooleanField[]|null
     */
    public function getIsBillable()
    {
        return $this->isBillable;
    }
    /**
     * This method is responsible for validating the values passed to the setIsBillable method
     * This method is willingly generated in order to preserve the one-line inline validation within the setIsBillable method
     * @param array $values
     * @return string A non-empty message if the values does not match the validation rules
     */
    public static function validateIsBillableForArrayConstraintsFromSetIsBillable(array $values = array())
    {
        $message = '';
        $invalidValues = [];
        foreach ($values as $timeBillSearchRowBasicIsBillableItem) {
            // validation for constraint: itemType
            if (!$timeBillSearchRowBasicIsBillableItem instanceof \StructType\SearchColumnBooleanField) {
                $invalidValues[] = is_object($timeBillSearchRowBasicIsBillableItem) ? get_class($timeBillSearchRowBasicIsBillableItem) : sprintf('%s(%s)', gettype($timeBillSearchRowBasicIsBillableItem), var_export($timeBillSearchRowBasicIsBillableItem, true));
            }
        }
        if (!empty($invalidValues)) {
            $message = sprintf('The isBillable property can only contain items of type \StructType\SearchColumnBooleanField, %s given', is_object($invalidValues) ? get_class($invalidValues) : (is_array($invalidValues) ? implode(', ', $invalidValues) : gettype($invalidValues)));
        }
        unset($invalidValues);
        return $message;
    }
    /**
     * Set isBillable value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnBooleanField[] $isBillable
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function setIsBillable(array $isBillable = array())
    {
        // validation for constraint: array
        if ('' !== ($isBillableArrayErrorMessage = self::validateIsBillableForArrayConstraintsFromSetIsBillable($isBillable))) {
            throw new \InvalidArgumentException($isBillableArrayErrorMessage, __LINE__);
        }
        $this->isBillable = $isBillable;
        return $this;
    }
    /**
     * Add item to isBillable value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnBooleanField $item
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function addToIsBillable(\StructType\SearchColumnBooleanField $item)
    {
        // validation for constraint: itemType
        if (!$item instanceof \StructType\SearchColumnBooleanField) {
            throw new \InvalidArgumentException(sprintf('The isBillable property can only contain items of type \StructType\SearchColumnBooleanField, %s given', is_object($item) ? get_class($item) : (is_array($item) ? implode(', ', $item) : gettype($item))), __LINE__);
        }
        $this->isBillable[] = $item;
        return $this;
    }
    /**
     * Get isExempt value
     * @return \StructType\SearchColumnBooleanField[]|null
     */
    public function getIsExempt()
    {
        return $this->isExempt;
    }
    /**
     * This method is responsible for validating the values passed to the setIsExempt method
     * This method is willingly generated in order to preserve the one-line inline validation within the setIsExempt method
     * @param array $values
     * @return string A non-empty message if the values does not match the validation rules
     */
    public static function validateIsExemptForArrayConstraintsFromSetIsExempt(array $values = array())
    {
        $message = '';
        $invalidValues = [];
        foreach ($values as $timeBillSearchRowBasicIsExemptItem) {
            // validation for constraint: itemType
            if (!$timeBillSearchRowBasicIsExemptItem instanceof \StructType\SearchColumnBooleanField) {
                $invalidValues[] = is_object($timeBillSearchRowBasicIsExemptItem) ? get_class($timeBillSearchRowBasicIsExemptItem) : sprintf('%s(%s)', gettype($timeBillSearchRowBasicIsExemptItem), var_export($timeBillSearchRowBasicIsExemptItem, true));
            }
        }
        if (!empty($invalidValues)) {
            $message = sprintf('The isExempt property can only contain items of type \StructType\SearchColumnBooleanField, %s given', is_object($invalidValues) ? get_class($invalidValues) : (is_array($invalidValues) ? implode(', ', $invalidValues) : gettype($invalidValues)));
        }
        unset($invalidValues);
        return $message;
    }
    /**
     * Set isExempt value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnBooleanField[] $isExempt
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function setIsExempt(array $isExempt = array())
    {
        // validation for constraint: array
        if ('' !== ($isExemptArrayErrorMessage = self::validateIsExemptForArrayConstraintsFromSetIsExempt($isExempt))) {
            throw new \InvalidArgumentException($isExemptArrayErrorMessage, __LINE__);
        }
        $this->isExempt = $isExempt;
        return $this;
    }
    /**
     * Add item to isExempt value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnBooleanField $item
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function addToIsExempt(\StructType\SearchColumnBooleanField $item)
    {
        // validation for constraint: itemType
        if (!$item instanceof \StructType\SearchColumnBooleanField) {
            throw new \InvalidArgumentException(sprintf('The isExempt property can only contain items of type \StructType\SearchColumnBooleanField, %s given', is_object($item) ? get_class($item) : (is_array($item) ? implode(', ', $item) : gettype($item))), __LINE__);
        }
        $this->isExempt[] = $item;
        return $this;
    }
    /**
     * Get isProductive value
     * @return \StructType\SearchColumnBooleanField[]|null
     */
    public function getIsProductive()
    {
        return $this->isProductive;
    }
    /**
     * This method is responsible for validating the values passed to the setIsProductive method
     * This method is willingly generated in order to preserve the one-line inline validation within the setIsProductive method
     * @param array $values
     * @return string A non-empty message if the values does not match the validation rules
     */
    public static function validateIsProductiveForArrayConstraintsFromSetIsProductive(array $values = array())
    {
        $message = '';
        $invalidValues = [];
        foreach ($values as $timeBillSearchRowBasicIsProductiveItem) {
            // validation for constraint: itemType
            if (!$timeBillSearchRowBasicIsProductiveItem instanceof \StructType\SearchColumnBooleanField) {
                $invalidValues[] = is_object($timeBillSearchRowBasicIsProductiveItem) ? get_class($timeBillSearchRowBasicIsProductiveItem) : sprintf('%s(%s)', gettype($timeBillSearchRowBasicIsProductiveItem), var_export($timeBillSearchRowBasicIsProductiveItem, true));
            }
        }
        if (!empty($invalidValues)) {
            $message = sprintf('The isProductive property can only contain items of type \StructType\SearchColumnBooleanField, %s given', is_object($invalidValues) ? get_class($invalidValues) : (is_array($invalidValues) ? implode(', ', $invalidValues) : gettype($invalidValues)));
        }
        unset($invalidValues);
        return $message;
    }
    /**
     * Set isProductive value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnBooleanField[] $isProductive
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function setIsProductive(array $isProductive = array())
    {
        // validation for constraint: array
        if ('' !== ($isProductiveArrayErrorMessage = self::validateIsProductiveForArrayConstraintsFromSetIsProductive($isProductive))) {
            throw new \InvalidArgumentException($isProductiveArrayErrorMessage, __LINE__);
        }
        $this->isProductive = $isProductive;
        return $this;
    }
    /**
     * Add item to isProductive value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnBooleanField $item
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function addToIsProductive(\StructType\SearchColumnBooleanField $item)
    {
        // validation for constraint: itemType
        if (!$item instanceof \StructType\SearchColumnBooleanField) {
            throw new \InvalidArgumentException(sprintf('The isProductive property can only contain items of type \StructType\SearchColumnBooleanField, %s given', is_object($item) ? get_class($item) : (is_array($item) ? implode(', ', $item) : gettype($item))), __LINE__);
        }
        $this->isProductive[] = $item;
        return $this;
    }
    /**
     * Get isUtilized value
     * @return \StructType\SearchColumnBooleanField[]|null
     */
    public function getIsUtilized()
    {
        return $this->isUtilized;
    }
    /**
     * This method is responsible for validating the values passed to the setIsUtilized method
     * This method is willingly generated in order to preserve the one-line inline validation within the setIsUtilized method
     * @param array $values
     * @return string A non-empty message if the values does not match the validation rules
     */
    public static function validateIsUtilizedForArrayConstraintsFromSetIsUtilized(array $values = array())
    {
        $message = '';
        $invalidValues = [];
        foreach ($values as $timeBillSearchRowBasicIsUtilizedItem) {
            // validation for constraint: itemType
            if (!$timeBillSearchRowBasicIsUtilizedItem instanceof \StructType\SearchColumnBooleanField) {
                $invalidValues[] = is_object($timeBillSearchRowBasicIsUtilizedItem) ? get_class($timeBillSearchRowBasicIsUtilizedItem) : sprintf('%s(%s)', gettype($timeBillSearchRowBasicIsUtilizedItem), var_export($timeBillSearchRowBasicIsUtilizedItem, true));
            }
        }
        if (!empty($invalidValues)) {
            $message = sprintf('The isUtilized property can only contain items of type \StructType\SearchColumnBooleanField, %s given', is_object($invalidValues) ? get_class($invalidValues) : (is_array($invalidValues) ? implode(', ', $invalidValues) : gettype($invalidValues)));
        }
        unset($invalidValues);
        return $message;
    }
    /**
     * Set isUtilized value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnBooleanField[] $isUtilized
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function setIsUtilized(array $isUtilized = array())
    {
        // validation for constraint: array
        if ('' !== ($isUtilizedArrayErrorMessage = self::validateIsUtilizedForArrayConstraintsFromSetIsUtilized($isUtilized))) {
            throw new \InvalidArgumentException($isUtilizedArrayErrorMessage, __LINE__);
        }
        $this->isUtilized = $isUtilized;
        return $this;
    }
    /**
     * Add item to isUtilized value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnBooleanField $item
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function addToIsUtilized(\StructType\SearchColumnBooleanField $item)
    {
        // validation for constraint: itemType
        if (!$item instanceof \StructType\SearchColumnBooleanField) {
            throw new \InvalidArgumentException(sprintf('The isUtilized property can only contain items of type \StructType\SearchColumnBooleanField, %s given', is_object($item) ? get_class($item) : (is_array($item) ? implode(', ', $item) : gettype($item))), __LINE__);
        }
        $this->isUtilized[] = $item;
        return $this;
    }
    /**
     * Get item value
     * @return \StructType\SearchColumnStringField[]|null
     */
    public function getItem()
    {
        return $this->item;
    }
    /**
     * This method is responsible for validating the values passed to the setItem method
     * This method is willingly generated in order to preserve the one-line inline validation within the setItem method
     * @param array $values
     * @return string A non-empty message if the values does not match the validation rules
     */
    public static function validateItemForArrayConstraintsFromSetItem(array $values = array())
    {
        $message = '';
        $invalidValues = [];
        foreach ($values as $timeBillSearchRowBasicItemItem) {
            // validation for constraint: itemType
            if (!$timeBillSearchRowBasicItemItem instanceof \StructType\SearchColumnStringField) {
                $invalidValues[] = is_object($timeBillSearchRowBasicItemItem) ? get_class($timeBillSearchRowBasicItemItem) : sprintf('%s(%s)', gettype($timeBillSearchRowBasicItemItem), var_export($timeBillSearchRowBasicItemItem, true));
            }
        }
        if (!empty($invalidValues)) {
            $message = sprintf('The item property can only contain items of type \StructType\SearchColumnStringField, %s given', is_object($invalidValues) ? get_class($invalidValues) : (is_array($invalidValues) ? implode(', ', $invalidValues) : gettype($invalidValues)));
        }
        unset($invalidValues);
        return $message;
    }
    /**
     * Set item value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnStringField[] $item
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function setItem(array $item = array())
    {
        // validation for constraint: array
        if ('' !== ($itemArrayErrorMessage = self::validateItemForArrayConstraintsFromSetItem($item))) {
            throw new \InvalidArgumentException($itemArrayErrorMessage, __LINE__);
        }
        $this->item = $item;
        return $this;
    }
    /**
     * Add item to item value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnStringField $item
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function addToItem(\StructType\SearchColumnStringField $item)
    {
        // validation for constraint: itemType
        if (!$item instanceof \StructType\SearchColumnStringField) {
            throw new \InvalidArgumentException(sprintf('The item property can only contain items of type \StructType\SearchColumnStringField, %s given', is_object($item) ? get_class($item) : (is_array($item) ? implode(', ', $item) : gettype($item))), __LINE__);
        }
        $this->item[] = $item;
        return $this;
    }
    /**
     * Get lastModified value
     * @return \StructType\SearchColumnDateField[]|null
     */
    public function getLastModified()
    {
        return $this->lastModified;
    }
    /**
     * This method is responsible for validating the values passed to the setLastModified method
     * This method is willingly generated in order to preserve the one-line inline validation within the setLastModified method
     * @param array $values
     * @return string A non-empty message if the values does not match the validation rules
     */
    public static function validateLastModifiedForArrayConstraintsFromSetLastModified(array $values = array())
    {
        $message = '';
        $invalidValues = [];
        foreach ($values as $timeBillSearchRowBasicLastModifiedItem) {
            // validation for constraint: itemType
            if (!$timeBillSearchRowBasicLastModifiedItem instanceof \StructType\SearchColumnDateField) {
                $invalidValues[] = is_object($timeBillSearchRowBasicLastModifiedItem) ? get_class($timeBillSearchRowBasicLastModifiedItem) : sprintf('%s(%s)', gettype($timeBillSearchRowBasicLastModifiedItem), var_export($timeBillSearchRowBasicLastModifiedItem, true));
            }
        }
        if (!empty($invalidValues)) {
            $message = sprintf('The lastModified property can only contain items of type \StructType\SearchColumnDateField, %s given', is_object($invalidValues) ? get_class($invalidValues) : (is_array($invalidValues) ? implode(', ', $invalidValues) : gettype($invalidValues)));
        }
        unset($invalidValues);
        return $message;
    }
    /**
     * Set lastModified value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnDateField[] $lastModified
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function setLastModified(array $lastModified = array())
    {
        // validation for constraint: array
        if ('' !== ($lastModifiedArrayErrorMessage = self::validateLastModifiedForArrayConstraintsFromSetLastModified($lastModified))) {
            throw new \InvalidArgumentException($lastModifiedArrayErrorMessage, __LINE__);
        }
        $this->lastModified = $lastModified;
        return $this;
    }
    /**
     * Add item to lastModified value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnDateField $item
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function addToLastModified(\StructType\SearchColumnDateField $item)
    {
        // validation for constraint: itemType
        if (!$item instanceof \StructType\SearchColumnDateField) {
            throw new \InvalidArgumentException(sprintf('The lastModified property can only contain items of type \StructType\SearchColumnDateField, %s given', is_object($item) ? get_class($item) : (is_array($item) ? implode(', ', $item) : gettype($item))), __LINE__);
        }
        $this->lastModified[] = $item;
        return $this;
    }
    /**
     * Get location value
     * @return \StructType\SearchColumnSelectField[]|null
     */
    public function getLocation()
    {
        return $this->location;
    }
    /**
     * This method is responsible for validating the values passed to the setLocation method
     * This method is willingly generated in order to preserve the one-line inline validation within the setLocation method
     * @param array $values
     * @return string A non-empty message if the values does not match the validation rules
     */
    public static function validateLocationForArrayConstraintsFromSetLocation(array $values = array())
    {
        $message = '';
        $invalidValues = [];
        foreach ($values as $timeBillSearchRowBasicLocationItem) {
            // validation for constraint: itemType
            if (!$timeBillSearchRowBasicLocationItem instanceof \StructType\SearchColumnSelectField) {
                $invalidValues[] = is_object($timeBillSearchRowBasicLocationItem) ? get_class($timeBillSearchRowBasicLocationItem) : sprintf('%s(%s)', gettype($timeBillSearchRowBasicLocationItem), var_export($timeBillSearchRowBasicLocationItem, true));
            }
        }
        if (!empty($invalidValues)) {
            $message = sprintf('The location property can only contain items of type \StructType\SearchColumnSelectField, %s given', is_object($invalidValues) ? get_class($invalidValues) : (is_array($invalidValues) ? implode(', ', $invalidValues) : gettype($invalidValues)));
        }
        unset($invalidValues);
        return $message;
    }
    /**
     * Set location value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnSelectField[] $location
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function setLocation(array $location = array())
    {
        // validation for constraint: array
        if ('' !== ($locationArrayErrorMessage = self::validateLocationForArrayConstraintsFromSetLocation($location))) {
            throw new \InvalidArgumentException($locationArrayErrorMessage, __LINE__);
        }
        $this->location = $location;
        return $this;
    }
    /**
     * Add item to location value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnSelectField $item
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function addToLocation(\StructType\SearchColumnSelectField $item)
    {
        // validation for constraint: itemType
        if (!$item instanceof \StructType\SearchColumnSelectField) {
            throw new \InvalidArgumentException(sprintf('The location property can only contain items of type \StructType\SearchColumnSelectField, %s given', is_object($item) ? get_class($item) : (is_array($item) ? implode(', ', $item) : gettype($item))), __LINE__);
        }
        $this->location[] = $item;
        return $this;
    }
    /**
     * Get memo value
     * @return \StructType\SearchColumnStringField[]|null
     */
    public function getMemo()
    {
        return $this->memo;
    }
    /**
     * This method is responsible for validating the values passed to the setMemo method
     * This method is willingly generated in order to preserve the one-line inline validation within the setMemo method
     * @param array $values
     * @return string A non-empty message if the values does not match the validation rules
     */
    public static function validateMemoForArrayConstraintsFromSetMemo(array $values = array())
    {
        $message = '';
        $invalidValues = [];
        foreach ($values as $timeBillSearchRowBasicMemoItem) {
            // validation for constraint: itemType
            if (!$timeBillSearchRowBasicMemoItem instanceof \StructType\SearchColumnStringField) {
                $invalidValues[] = is_object($timeBillSearchRowBasicMemoItem) ? get_class($timeBillSearchRowBasicMemoItem) : sprintf('%s(%s)', gettype($timeBillSearchRowBasicMemoItem), var_export($timeBillSearchRowBasicMemoItem, true));
            }
        }
        if (!empty($invalidValues)) {
            $message = sprintf('The memo property can only contain items of type \StructType\SearchColumnStringField, %s given', is_object($invalidValues) ? get_class($invalidValues) : (is_array($invalidValues) ? implode(', ', $invalidValues) : gettype($invalidValues)));
        }
        unset($invalidValues);
        return $message;
    }
    /**
     * Set memo value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnStringField[] $memo
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function setMemo(array $memo = array())
    {
        // validation for constraint: array
        if ('' !== ($memoArrayErrorMessage = self::validateMemoForArrayConstraintsFromSetMemo($memo))) {
            throw new \InvalidArgumentException($memoArrayErrorMessage, __LINE__);
        }
        $this->memo = $memo;
        return $this;
    }
    /**
     * Add item to memo value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnStringField $item
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function addToMemo(\StructType\SearchColumnStringField $item)
    {
        // validation for constraint: itemType
        if (!$item instanceof \StructType\SearchColumnStringField) {
            throw new \InvalidArgumentException(sprintf('The memo property can only contain items of type \StructType\SearchColumnStringField, %s given', is_object($item) ? get_class($item) : (is_array($item) ? implode(', ', $item) : gettype($item))), __LINE__);
        }
        $this->memo[] = $item;
        return $this;
    }
    /**
     * Get paidExternally value
     * @return \StructType\SearchColumnBooleanField[]|null
     */
    public function getPaidExternally()
    {
        return $this->paidExternally;
    }
    /**
     * This method is responsible for validating the values passed to the setPaidExternally method
     * This method is willingly generated in order to preserve the one-line inline validation within the setPaidExternally method
     * @param array $values
     * @return string A non-empty message if the values does not match the validation rules
     */
    public static function validatePaidExternallyForArrayConstraintsFromSetPaidExternally(array $values = array())
    {
        $message = '';
        $invalidValues = [];
        foreach ($values as $timeBillSearchRowBasicPaidExternallyItem) {
            // validation for constraint: itemType
            if (!$timeBillSearchRowBasicPaidExternallyItem instanceof \StructType\SearchColumnBooleanField) {
                $invalidValues[] = is_object($timeBillSearchRowBasicPaidExternallyItem) ? get_class($timeBillSearchRowBasicPaidExternallyItem) : sprintf('%s(%s)', gettype($timeBillSearchRowBasicPaidExternallyItem), var_export($timeBillSearchRowBasicPaidExternallyItem, true));
            }
        }
        if (!empty($invalidValues)) {
            $message = sprintf('The paidExternally property can only contain items of type \StructType\SearchColumnBooleanField, %s given', is_object($invalidValues) ? get_class($invalidValues) : (is_array($invalidValues) ? implode(', ', $invalidValues) : gettype($invalidValues)));
        }
        unset($invalidValues);
        return $message;
    }
    /**
     * Set paidExternally value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnBooleanField[] $paidExternally
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function setPaidExternally(array $paidExternally = array())
    {
        // validation for constraint: array
        if ('' !== ($paidExternallyArrayErrorMessage = self::validatePaidExternallyForArrayConstraintsFromSetPaidExternally($paidExternally))) {
            throw new \InvalidArgumentException($paidExternallyArrayErrorMessage, __LINE__);
        }
        $this->paidExternally = $paidExternally;
        return $this;
    }
    /**
     * Add item to paidExternally value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnBooleanField $item
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function addToPaidExternally(\StructType\SearchColumnBooleanField $item)
    {
        // validation for constraint: itemType
        if (!$item instanceof \StructType\SearchColumnBooleanField) {
            throw new \InvalidArgumentException(sprintf('The paidExternally property can only contain items of type \StructType\SearchColumnBooleanField, %s given', is_object($item) ? get_class($item) : (is_array($item) ? implode(', ', $item) : gettype($item))), __LINE__);
        }
        $this->paidExternally[] = $item;
        return $this;
    }
    /**
     * Get payItem value
     * @return \StructType\SearchColumnSelectField[]|null
     */
    public function getPayItem()
    {
        return $this->payItem;
    }
    /**
     * This method is responsible for validating the values passed to the setPayItem method
     * This method is willingly generated in order to preserve the one-line inline validation within the setPayItem method
     * @param array $values
     * @return string A non-empty message if the values does not match the validation rules
     */
    public static function validatePayItemForArrayConstraintsFromSetPayItem(array $values = array())
    {
        $message = '';
        $invalidValues = [];
        foreach ($values as $timeBillSearchRowBasicPayItemItem) {
            // validation for constraint: itemType
            if (!$timeBillSearchRowBasicPayItemItem instanceof \StructType\SearchColumnSelectField) {
                $invalidValues[] = is_object($timeBillSearchRowBasicPayItemItem) ? get_class($timeBillSearchRowBasicPayItemItem) : sprintf('%s(%s)', gettype($timeBillSearchRowBasicPayItemItem), var_export($timeBillSearchRowBasicPayItemItem, true));
            }
        }
        if (!empty($invalidValues)) {
            $message = sprintf('The payItem property can only contain items of type \StructType\SearchColumnSelectField, %s given', is_object($invalidValues) ? get_class($invalidValues) : (is_array($invalidValues) ? implode(', ', $invalidValues) : gettype($invalidValues)));
        }
        unset($invalidValues);
        return $message;
    }
    /**
     * Set payItem value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnSelectField[] $payItem
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function setPayItem(array $payItem = array())
    {
        // validation for constraint: array
        if ('' !== ($payItemArrayErrorMessage = self::validatePayItemForArrayConstraintsFromSetPayItem($payItem))) {
            throw new \InvalidArgumentException($payItemArrayErrorMessage, __LINE__);
        }
        $this->payItem = $payItem;
        return $this;
    }
    /**
     * Add item to payItem value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnSelectField $item
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function addToPayItem(\StructType\SearchColumnSelectField $item)
    {
        // validation for constraint: itemType
        if (!$item instanceof \StructType\SearchColumnSelectField) {
            throw new \InvalidArgumentException(sprintf('The payItem property can only contain items of type \StructType\SearchColumnSelectField, %s given', is_object($item) ? get_class($item) : (is_array($item) ? implode(', ', $item) : gettype($item))), __LINE__);
        }
        $this->payItem[] = $item;
        return $this;
    }
    /**
     * Get payrollDate value
     * @return \StructType\SearchColumnDateField[]|null
     */
    public function getPayrollDate()
    {
        return $this->payrollDate;
    }
    /**
     * This method is responsible for validating the values passed to the setPayrollDate method
     * This method is willingly generated in order to preserve the one-line inline validation within the setPayrollDate method
     * @param array $values
     * @return string A non-empty message if the values does not match the validation rules
     */
    public static function validatePayrollDateForArrayConstraintsFromSetPayrollDate(array $values = array())
    {
        $message = '';
        $invalidValues = [];
        foreach ($values as $timeBillSearchRowBasicPayrollDateItem) {
            // validation for constraint: itemType
            if (!$timeBillSearchRowBasicPayrollDateItem instanceof \StructType\SearchColumnDateField) {
                $invalidValues[] = is_object($timeBillSearchRowBasicPayrollDateItem) ? get_class($timeBillSearchRowBasicPayrollDateItem) : sprintf('%s(%s)', gettype($timeBillSearchRowBasicPayrollDateItem), var_export($timeBillSearchRowBasicPayrollDateItem, true));
            }
        }
        if (!empty($invalidValues)) {
            $message = sprintf('The payrollDate property can only contain items of type \StructType\SearchColumnDateField, %s given', is_object($invalidValues) ? get_class($invalidValues) : (is_array($invalidValues) ? implode(', ', $invalidValues) : gettype($invalidValues)));
        }
        unset($invalidValues);
        return $message;
    }
    /**
     * Set payrollDate value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnDateField[] $payrollDate
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function setPayrollDate(array $payrollDate = array())
    {
        // validation for constraint: array
        if ('' !== ($payrollDateArrayErrorMessage = self::validatePayrollDateForArrayConstraintsFromSetPayrollDate($payrollDate))) {
            throw new \InvalidArgumentException($payrollDateArrayErrorMessage, __LINE__);
        }
        $this->payrollDate = $payrollDate;
        return $this;
    }
    /**
     * Add item to payrollDate value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnDateField $item
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function addToPayrollDate(\StructType\SearchColumnDateField $item)
    {
        // validation for constraint: itemType
        if (!$item instanceof \StructType\SearchColumnDateField) {
            throw new \InvalidArgumentException(sprintf('The payrollDate property can only contain items of type \StructType\SearchColumnDateField, %s given', is_object($item) ? get_class($item) : (is_array($item) ? implode(', ', $item) : gettype($item))), __LINE__);
        }
        $this->payrollDate[] = $item;
        return $this;
    }
    /**
     * Get rate value
     * @return \StructType\SearchColumnDoubleField[]|null
     */
    public function getRate()
    {
        return $this->rate;
    }
    /**
     * This method is responsible for validating the values passed to the setRate method
     * This method is willingly generated in order to preserve the one-line inline validation within the setRate method
     * @param array $values
     * @return string A non-empty message if the values does not match the validation rules
     */
    public static function validateRateForArrayConstraintsFromSetRate(array $values = array())
    {
        $message = '';
        $invalidValues = [];
        foreach ($values as $timeBillSearchRowBasicRateItem) {
            // validation for constraint: itemType
            if (!$timeBillSearchRowBasicRateItem instanceof \StructType\SearchColumnDoubleField) {
                $invalidValues[] = is_object($timeBillSearchRowBasicRateItem) ? get_class($timeBillSearchRowBasicRateItem) : sprintf('%s(%s)', gettype($timeBillSearchRowBasicRateItem), var_export($timeBillSearchRowBasicRateItem, true));
            }
        }
        if (!empty($invalidValues)) {
            $message = sprintf('The rate property can only contain items of type \StructType\SearchColumnDoubleField, %s given', is_object($invalidValues) ? get_class($invalidValues) : (is_array($invalidValues) ? implode(', ', $invalidValues) : gettype($invalidValues)));
        }
        unset($invalidValues);
        return $message;
    }
    /**
     * Set rate value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnDoubleField[] $rate
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function setRate(array $rate = array())
    {
        // validation for constraint: array
        if ('' !== ($rateArrayErrorMessage = self::validateRateForArrayConstraintsFromSetRate($rate))) {
            throw new \InvalidArgumentException($rateArrayErrorMessage, __LINE__);
        }
        $this->rate = $rate;
        return $this;
    }
    /**
     * Add item to rate value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnDoubleField $item
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function addToRate(\StructType\SearchColumnDoubleField $item)
    {
        // validation for constraint: itemType
        if (!$item instanceof \StructType\SearchColumnDoubleField) {
            throw new \InvalidArgumentException(sprintf('The rate property can only contain items of type \StructType\SearchColumnDoubleField, %s given', is_object($item) ? get_class($item) : (is_array($item) ? implode(', ', $item) : gettype($item))), __LINE__);
        }
        $this->rate[] = $item;
        return $this;
    }
    /**
     * Get rejectionNote value
     * @return \StructType\SearchColumnStringField[]|null
     */
    public function getRejectionNote()
    {
        return $this->rejectionNote;
    }
    /**
     * This method is responsible for validating the values passed to the setRejectionNote method
     * This method is willingly generated in order to preserve the one-line inline validation within the setRejectionNote method
     * @param array $values
     * @return string A non-empty message if the values does not match the validation rules
     */
    public static function validateRejectionNoteForArrayConstraintsFromSetRejectionNote(array $values = array())
    {
        $message = '';
        $invalidValues = [];
        foreach ($values as $timeBillSearchRowBasicRejectionNoteItem) {
            // validation for constraint: itemType
            if (!$timeBillSearchRowBasicRejectionNoteItem instanceof \StructType\SearchColumnStringField) {
                $invalidValues[] = is_object($timeBillSearchRowBasicRejectionNoteItem) ? get_class($timeBillSearchRowBasicRejectionNoteItem) : sprintf('%s(%s)', gettype($timeBillSearchRowBasicRejectionNoteItem), var_export($timeBillSearchRowBasicRejectionNoteItem, true));
            }
        }
        if (!empty($invalidValues)) {
            $message = sprintf('The rejectionNote property can only contain items of type \StructType\SearchColumnStringField, %s given', is_object($invalidValues) ? get_class($invalidValues) : (is_array($invalidValues) ? implode(', ', $invalidValues) : gettype($invalidValues)));
        }
        unset($invalidValues);
        return $message;
    }
    /**
     * Set rejectionNote value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnStringField[] $rejectionNote
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function setRejectionNote(array $rejectionNote = array())
    {
        // validation for constraint: array
        if ('' !== ($rejectionNoteArrayErrorMessage = self::validateRejectionNoteForArrayConstraintsFromSetRejectionNote($rejectionNote))) {
            throw new \InvalidArgumentException($rejectionNoteArrayErrorMessage, __LINE__);
        }
        $this->rejectionNote = $rejectionNote;
        return $this;
    }
    /**
     * Add item to rejectionNote value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnStringField $item
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function addToRejectionNote(\StructType\SearchColumnStringField $item)
    {
        // validation for constraint: itemType
        if (!$item instanceof \StructType\SearchColumnStringField) {
            throw new \InvalidArgumentException(sprintf('The rejectionNote property can only contain items of type \StructType\SearchColumnStringField, %s given', is_object($item) ? get_class($item) : (is_array($item) ? implode(', ', $item) : gettype($item))), __LINE__);
        }
        $this->rejectionNote[] = $item;
        return $this;
    }
    /**
     * Get startTime value
     * @return \StructType\SearchColumnDateField[]|null
     */
    public function getStartTime()
    {
        return $this->startTime;
    }
    /**
     * This method is responsible for validating the values passed to the setStartTime method
     * This method is willingly generated in order to preserve the one-line inline validation within the setStartTime method
     * @param array $values
     * @return string A non-empty message if the values does not match the validation rules
     */
    public static function validateStartTimeForArrayConstraintsFromSetStartTime(array $values = array())
    {
        $message = '';
        $invalidValues = [];
        foreach ($values as $timeBillSearchRowBasicStartTimeItem) {
            // validation for constraint: itemType
            if (!$timeBillSearchRowBasicStartTimeItem instanceof \StructType\SearchColumnDateField) {
                $invalidValues[] = is_object($timeBillSearchRowBasicStartTimeItem) ? get_class($timeBillSearchRowBasicStartTimeItem) : sprintf('%s(%s)', gettype($timeBillSearchRowBasicStartTimeItem), var_export($timeBillSearchRowBasicStartTimeItem, true));
            }
        }
        if (!empty($invalidValues)) {
            $message = sprintf('The startTime property can only contain items of type \StructType\SearchColumnDateField, %s given', is_object($invalidValues) ? get_class($invalidValues) : (is_array($invalidValues) ? implode(', ', $invalidValues) : gettype($invalidValues)));
        }
        unset($invalidValues);
        return $message;
    }
    /**
     * Set startTime value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnDateField[] $startTime
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function setStartTime(array $startTime = array())
    {
        // validation for constraint: array
        if ('' !== ($startTimeArrayErrorMessage = self::validateStartTimeForArrayConstraintsFromSetStartTime($startTime))) {
            throw new \InvalidArgumentException($startTimeArrayErrorMessage, __LINE__);
        }
        $this->startTime = $startTime;
        return $this;
    }
    /**
     * Add item to startTime value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnDateField $item
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function addToStartTime(\StructType\SearchColumnDateField $item)
    {
        // validation for constraint: itemType
        if (!$item instanceof \StructType\SearchColumnDateField) {
            throw new \InvalidArgumentException(sprintf('The startTime property can only contain items of type \StructType\SearchColumnDateField, %s given', is_object($item) ? get_class($item) : (is_array($item) ? implode(', ', $item) : gettype($item))), __LINE__);
        }
        $this->startTime[] = $item;
        return $this;
    }
    /**
     * Get status value
     * @return \StructType\SearchColumnStringField[]|null
     */
    public function getStatus()
    {
        return $this->status;
    }
    /**
     * This method is responsible for validating the values passed to the setStatus method
     * This method is willingly generated in order to preserve the one-line inline validation within the setStatus method
     * @param array $values
     * @return string A non-empty message if the values does not match the validation rules
     */
    public static function validateStatusForArrayConstraintsFromSetStatus(array $values = array())
    {
        $message = '';
        $invalidValues = [];
        foreach ($values as $timeBillSearchRowBasicStatusItem) {
            // validation for constraint: itemType
            if (!$timeBillSearchRowBasicStatusItem instanceof \StructType\SearchColumnStringField) {
                $invalidValues[] = is_object($timeBillSearchRowBasicStatusItem) ? get_class($timeBillSearchRowBasicStatusItem) : sprintf('%s(%s)', gettype($timeBillSearchRowBasicStatusItem), var_export($timeBillSearchRowBasicStatusItem, true));
            }
        }
        if (!empty($invalidValues)) {
            $message = sprintf('The status property can only contain items of type \StructType\SearchColumnStringField, %s given', is_object($invalidValues) ? get_class($invalidValues) : (is_array($invalidValues) ? implode(', ', $invalidValues) : gettype($invalidValues)));
        }
        unset($invalidValues);
        return $message;
    }
    /**
     * Set status value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnStringField[] $status
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function setStatus(array $status = array())
    {
        // validation for constraint: array
        if ('' !== ($statusArrayErrorMessage = self::validateStatusForArrayConstraintsFromSetStatus($status))) {
            throw new \InvalidArgumentException($statusArrayErrorMessage, __LINE__);
        }
        $this->status = $status;
        return $this;
    }
    /**
     * Add item to status value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnStringField $item
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function addToStatus(\StructType\SearchColumnStringField $item)
    {
        // validation for constraint: itemType
        if (!$item instanceof \StructType\SearchColumnStringField) {
            throw new \InvalidArgumentException(sprintf('The status property can only contain items of type \StructType\SearchColumnStringField, %s given', is_object($item) ? get_class($item) : (is_array($item) ? implode(', ', $item) : gettype($item))), __LINE__);
        }
        $this->status[] = $item;
        return $this;
    }
    /**
     * Get subsidiary value
     * @return \StructType\SearchColumnStringField[]|null
     */
    public function getSubsidiary()
    {
        return $this->subsidiary;
    }
    /**
     * This method is responsible for validating the values passed to the setSubsidiary method
     * This method is willingly generated in order to preserve the one-line inline validation within the setSubsidiary method
     * @param array $values
     * @return string A non-empty message if the values does not match the validation rules
     */
    public static function validateSubsidiaryForArrayConstraintsFromSetSubsidiary(array $values = array())
    {
        $message = '';
        $invalidValues = [];
        foreach ($values as $timeBillSearchRowBasicSubsidiaryItem) {
            // validation for constraint: itemType
            if (!$timeBillSearchRowBasicSubsidiaryItem instanceof \StructType\SearchColumnStringField) {
                $invalidValues[] = is_object($timeBillSearchRowBasicSubsidiaryItem) ? get_class($timeBillSearchRowBasicSubsidiaryItem) : sprintf('%s(%s)', gettype($timeBillSearchRowBasicSubsidiaryItem), var_export($timeBillSearchRowBasicSubsidiaryItem, true));
            }
        }
        if (!empty($invalidValues)) {
            $message = sprintf('The subsidiary property can only contain items of type \StructType\SearchColumnStringField, %s given', is_object($invalidValues) ? get_class($invalidValues) : (is_array($invalidValues) ? implode(', ', $invalidValues) : gettype($invalidValues)));
        }
        unset($invalidValues);
        return $message;
    }
    /**
     * Set subsidiary value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnStringField[] $subsidiary
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function setSubsidiary(array $subsidiary = array())
    {
        // validation for constraint: array
        if ('' !== ($subsidiaryArrayErrorMessage = self::validateSubsidiaryForArrayConstraintsFromSetSubsidiary($subsidiary))) {
            throw new \InvalidArgumentException($subsidiaryArrayErrorMessage, __LINE__);
        }
        $this->subsidiary = $subsidiary;
        return $this;
    }
    /**
     * Add item to subsidiary value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnStringField $item
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function addToSubsidiary(\StructType\SearchColumnStringField $item)
    {
        // validation for constraint: itemType
        if (!$item instanceof \StructType\SearchColumnStringField) {
            throw new \InvalidArgumentException(sprintf('The subsidiary property can only contain items of type \StructType\SearchColumnStringField, %s given', is_object($item) ? get_class($item) : (is_array($item) ? implode(', ', $item) : gettype($item))), __LINE__);
        }
        $this->subsidiary[] = $item;
        return $this;
    }
    /**
     * Get supervisorApproval value
     * @return \StructType\SearchColumnBooleanField[]|null
     */
    public function getSupervisorApproval()
    {
        return $this->supervisorApproval;
    }
    /**
     * This method is responsible for validating the values passed to the setSupervisorApproval method
     * This method is willingly generated in order to preserve the one-line inline validation within the setSupervisorApproval method
     * @param array $values
     * @return string A non-empty message if the values does not match the validation rules
     */
    public static function validateSupervisorApprovalForArrayConstraintsFromSetSupervisorApproval(array $values = array())
    {
        $message = '';
        $invalidValues = [];
        foreach ($values as $timeBillSearchRowBasicSupervisorApprovalItem) {
            // validation for constraint: itemType
            if (!$timeBillSearchRowBasicSupervisorApprovalItem instanceof \StructType\SearchColumnBooleanField) {
                $invalidValues[] = is_object($timeBillSearchRowBasicSupervisorApprovalItem) ? get_class($timeBillSearchRowBasicSupervisorApprovalItem) : sprintf('%s(%s)', gettype($timeBillSearchRowBasicSupervisorApprovalItem), var_export($timeBillSearchRowBasicSupervisorApprovalItem, true));
            }
        }
        if (!empty($invalidValues)) {
            $message = sprintf('The supervisorApproval property can only contain items of type \StructType\SearchColumnBooleanField, %s given', is_object($invalidValues) ? get_class($invalidValues) : (is_array($invalidValues) ? implode(', ', $invalidValues) : gettype($invalidValues)));
        }
        unset($invalidValues);
        return $message;
    }
    /**
     * Set supervisorApproval value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnBooleanField[] $supervisorApproval
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function setSupervisorApproval(array $supervisorApproval = array())
    {
        // validation for constraint: array
        if ('' !== ($supervisorApprovalArrayErrorMessage = self::validateSupervisorApprovalForArrayConstraintsFromSetSupervisorApproval($supervisorApproval))) {
            throw new \InvalidArgumentException($supervisorApprovalArrayErrorMessage, __LINE__);
        }
        $this->supervisorApproval = $supervisorApproval;
        return $this;
    }
    /**
     * Add item to supervisorApproval value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnBooleanField $item
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function addToSupervisorApproval(\StructType\SearchColumnBooleanField $item)
    {
        // validation for constraint: itemType
        if (!$item instanceof \StructType\SearchColumnBooleanField) {
            throw new \InvalidArgumentException(sprintf('The supervisorApproval property can only contain items of type \StructType\SearchColumnBooleanField, %s given', is_object($item) ? get_class($item) : (is_array($item) ? implode(', ', $item) : gettype($item))), __LINE__);
        }
        $this->supervisorApproval[] = $item;
        return $this;
    }
    /**
     * Get temporaryLocalJurisdiction value
     * @return \StructType\SearchColumnStringField[]|null
     */
    public function getTemporaryLocalJurisdiction()
    {
        return $this->temporaryLocalJurisdiction;
    }
    /**
     * This method is responsible for validating the values passed to the setTemporaryLocalJurisdiction method
     * This method is willingly generated in order to preserve the one-line inline validation within the setTemporaryLocalJurisdiction method
     * @param array $values
     * @return string A non-empty message if the values does not match the validation rules
     */
    public static function validateTemporaryLocalJurisdictionForArrayConstraintsFromSetTemporaryLocalJurisdiction(array $values = array())
    {
        $message = '';
        $invalidValues = [];
        foreach ($values as $timeBillSearchRowBasicTemporaryLocalJurisdictionItem) {
            // validation for constraint: itemType
            if (!$timeBillSearchRowBasicTemporaryLocalJurisdictionItem instanceof \StructType\SearchColumnStringField) {
                $invalidValues[] = is_object($timeBillSearchRowBasicTemporaryLocalJurisdictionItem) ? get_class($timeBillSearchRowBasicTemporaryLocalJurisdictionItem) : sprintf('%s(%s)', gettype($timeBillSearchRowBasicTemporaryLocalJurisdictionItem), var_export($timeBillSearchRowBasicTemporaryLocalJurisdictionItem, true));
            }
        }
        if (!empty($invalidValues)) {
            $message = sprintf('The temporaryLocalJurisdiction property can only contain items of type \StructType\SearchColumnStringField, %s given', is_object($invalidValues) ? get_class($invalidValues) : (is_array($invalidValues) ? implode(', ', $invalidValues) : gettype($invalidValues)));
        }
        unset($invalidValues);
        return $message;
    }
    /**
     * Set temporaryLocalJurisdiction value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnStringField[] $temporaryLocalJurisdiction
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function setTemporaryLocalJurisdiction(array $temporaryLocalJurisdiction = array())
    {
        // validation for constraint: array
        if ('' !== ($temporaryLocalJurisdictionArrayErrorMessage = self::validateTemporaryLocalJurisdictionForArrayConstraintsFromSetTemporaryLocalJurisdiction($temporaryLocalJurisdiction))) {
            throw new \InvalidArgumentException($temporaryLocalJurisdictionArrayErrorMessage, __LINE__);
        }
        $this->temporaryLocalJurisdiction = $temporaryLocalJurisdiction;
        return $this;
    }
    /**
     * Add item to temporaryLocalJurisdiction value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnStringField $item
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function addToTemporaryLocalJurisdiction(\StructType\SearchColumnStringField $item)
    {
        // validation for constraint: itemType
        if (!$item instanceof \StructType\SearchColumnStringField) {
            throw new \InvalidArgumentException(sprintf('The temporaryLocalJurisdiction property can only contain items of type \StructType\SearchColumnStringField, %s given', is_object($item) ? get_class($item) : (is_array($item) ? implode(', ', $item) : gettype($item))), __LINE__);
        }
        $this->temporaryLocalJurisdiction[] = $item;
        return $this;
    }
    /**
     * Get temporaryStateJurisdiction value
     * @return \StructType\SearchColumnStringField[]|null
     */
    public function getTemporaryStateJurisdiction()
    {
        return $this->temporaryStateJurisdiction;
    }
    /**
     * This method is responsible for validating the values passed to the setTemporaryStateJurisdiction method
     * This method is willingly generated in order to preserve the one-line inline validation within the setTemporaryStateJurisdiction method
     * @param array $values
     * @return string A non-empty message if the values does not match the validation rules
     */
    public static function validateTemporaryStateJurisdictionForArrayConstraintsFromSetTemporaryStateJurisdiction(array $values = array())
    {
        $message = '';
        $invalidValues = [];
        foreach ($values as $timeBillSearchRowBasicTemporaryStateJurisdictionItem) {
            // validation for constraint: itemType
            if (!$timeBillSearchRowBasicTemporaryStateJurisdictionItem instanceof \StructType\SearchColumnStringField) {
                $invalidValues[] = is_object($timeBillSearchRowBasicTemporaryStateJurisdictionItem) ? get_class($timeBillSearchRowBasicTemporaryStateJurisdictionItem) : sprintf('%s(%s)', gettype($timeBillSearchRowBasicTemporaryStateJurisdictionItem), var_export($timeBillSearchRowBasicTemporaryStateJurisdictionItem, true));
            }
        }
        if (!empty($invalidValues)) {
            $message = sprintf('The temporaryStateJurisdiction property can only contain items of type \StructType\SearchColumnStringField, %s given', is_object($invalidValues) ? get_class($invalidValues) : (is_array($invalidValues) ? implode(', ', $invalidValues) : gettype($invalidValues)));
        }
        unset($invalidValues);
        return $message;
    }
    /**
     * Set temporaryStateJurisdiction value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnStringField[] $temporaryStateJurisdiction
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function setTemporaryStateJurisdiction(array $temporaryStateJurisdiction = array())
    {
        // validation for constraint: array
        if ('' !== ($temporaryStateJurisdictionArrayErrorMessage = self::validateTemporaryStateJurisdictionForArrayConstraintsFromSetTemporaryStateJurisdiction($temporaryStateJurisdiction))) {
            throw new \InvalidArgumentException($temporaryStateJurisdictionArrayErrorMessage, __LINE__);
        }
        $this->temporaryStateJurisdiction = $temporaryStateJurisdiction;
        return $this;
    }
    /**
     * Add item to temporaryStateJurisdiction value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnStringField $item
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function addToTemporaryStateJurisdiction(\StructType\SearchColumnStringField $item)
    {
        // validation for constraint: itemType
        if (!$item instanceof \StructType\SearchColumnStringField) {
            throw new \InvalidArgumentException(sprintf('The temporaryStateJurisdiction property can only contain items of type \StructType\SearchColumnStringField, %s given', is_object($item) ? get_class($item) : (is_array($item) ? implode(', ', $item) : gettype($item))), __LINE__);
        }
        $this->temporaryStateJurisdiction[] = $item;
        return $this;
    }
    /**
     * Get timeModified value
     * @return \StructType\SearchColumnBooleanField[]|null
     */
    public function getTimeModified()
    {
        return $this->timeModified;
    }
    /**
     * This method is responsible for validating the values passed to the setTimeModified method
     * This method is willingly generated in order to preserve the one-line inline validation within the setTimeModified method
     * @param array $values
     * @return string A non-empty message if the values does not match the validation rules
     */
    public static function validateTimeModifiedForArrayConstraintsFromSetTimeModified(array $values = array())
    {
        $message = '';
        $invalidValues = [];
        foreach ($values as $timeBillSearchRowBasicTimeModifiedItem) {
            // validation for constraint: itemType
            if (!$timeBillSearchRowBasicTimeModifiedItem instanceof \StructType\SearchColumnBooleanField) {
                $invalidValues[] = is_object($timeBillSearchRowBasicTimeModifiedItem) ? get_class($timeBillSearchRowBasicTimeModifiedItem) : sprintf('%s(%s)', gettype($timeBillSearchRowBasicTimeModifiedItem), var_export($timeBillSearchRowBasicTimeModifiedItem, true));
            }
        }
        if (!empty($invalidValues)) {
            $message = sprintf('The timeModified property can only contain items of type \StructType\SearchColumnBooleanField, %s given', is_object($invalidValues) ? get_class($invalidValues) : (is_array($invalidValues) ? implode(', ', $invalidValues) : gettype($invalidValues)));
        }
        unset($invalidValues);
        return $message;
    }
    /**
     * Set timeModified value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnBooleanField[] $timeModified
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function setTimeModified(array $timeModified = array())
    {
        // validation for constraint: array
        if ('' !== ($timeModifiedArrayErrorMessage = self::validateTimeModifiedForArrayConstraintsFromSetTimeModified($timeModified))) {
            throw new \InvalidArgumentException($timeModifiedArrayErrorMessage, __LINE__);
        }
        $this->timeModified = $timeModified;
        return $this;
    }
    /**
     * Add item to timeModified value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnBooleanField $item
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function addToTimeModified(\StructType\SearchColumnBooleanField $item)
    {
        // validation for constraint: itemType
        if (!$item instanceof \StructType\SearchColumnBooleanField) {
            throw new \InvalidArgumentException(sprintf('The timeModified property can only contain items of type \StructType\SearchColumnBooleanField, %s given', is_object($item) ? get_class($item) : (is_array($item) ? implode(', ', $item) : gettype($item))), __LINE__);
        }
        $this->timeModified[] = $item;
        return $this;
    }
    /**
     * Get timeSheet value
     * @return \StructType\SearchColumnSelectField[]|null
     */
    public function getTimeSheet()
    {
        return $this->timeSheet;
    }
    /**
     * This method is responsible for validating the values passed to the setTimeSheet method
     * This method is willingly generated in order to preserve the one-line inline validation within the setTimeSheet method
     * @param array $values
     * @return string A non-empty message if the values does not match the validation rules
     */
    public static function validateTimeSheetForArrayConstraintsFromSetTimeSheet(array $values = array())
    {
        $message = '';
        $invalidValues = [];
        foreach ($values as $timeBillSearchRowBasicTimeSheetItem) {
            // validation for constraint: itemType
            if (!$timeBillSearchRowBasicTimeSheetItem instanceof \StructType\SearchColumnSelectField) {
                $invalidValues[] = is_object($timeBillSearchRowBasicTimeSheetItem) ? get_class($timeBillSearchRowBasicTimeSheetItem) : sprintf('%s(%s)', gettype($timeBillSearchRowBasicTimeSheetItem), var_export($timeBillSearchRowBasicTimeSheetItem, true));
            }
        }
        if (!empty($invalidValues)) {
            $message = sprintf('The timeSheet property can only contain items of type \StructType\SearchColumnSelectField, %s given', is_object($invalidValues) ? get_class($invalidValues) : (is_array($invalidValues) ? implode(', ', $invalidValues) : gettype($invalidValues)));
        }
        unset($invalidValues);
        return $message;
    }
    /**
     * Set timeSheet value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnSelectField[] $timeSheet
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function setTimeSheet(array $timeSheet = array())
    {
        // validation for constraint: array
        if ('' !== ($timeSheetArrayErrorMessage = self::validateTimeSheetForArrayConstraintsFromSetTimeSheet($timeSheet))) {
            throw new \InvalidArgumentException($timeSheetArrayErrorMessage, __LINE__);
        }
        $this->timeSheet = $timeSheet;
        return $this;
    }
    /**
     * Add item to timeSheet value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnSelectField $item
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function addToTimeSheet(\StructType\SearchColumnSelectField $item)
    {
        // validation for constraint: itemType
        if (!$item instanceof \StructType\SearchColumnSelectField) {
            throw new \InvalidArgumentException(sprintf('The timeSheet property can only contain items of type \StructType\SearchColumnSelectField, %s given', is_object($item) ? get_class($item) : (is_array($item) ? implode(', ', $item) : gettype($item))), __LINE__);
        }
        $this->timeSheet[] = $item;
        return $this;
    }
    /**
     * Get type value
     * @return \StructType\SearchColumnEnumSelectField[]|null
     */
    public function getType()
    {
        return $this->type;
    }
    /**
     * This method is responsible for validating the values passed to the setType method
     * This method is willingly generated in order to preserve the one-line inline validation within the setType method
     * @param array $values
     * @return string A non-empty message if the values does not match the validation rules
     */
    public static function validateTypeForArrayConstraintsFromSetType(array $values = array())
    {
        $message = '';
        $invalidValues = [];
        foreach ($values as $timeBillSearchRowBasicTypeItem) {
            // validation for constraint: itemType
            if (!$timeBillSearchRowBasicTypeItem instanceof \StructType\SearchColumnEnumSelectField) {
                $invalidValues[] = is_object($timeBillSearchRowBasicTypeItem) ? get_class($timeBillSearchRowBasicTypeItem) : sprintf('%s(%s)', gettype($timeBillSearchRowBasicTypeItem), var_export($timeBillSearchRowBasicTypeItem, true));
            }
        }
        if (!empty($invalidValues)) {
            $message = sprintf('The type property can only contain items of type \StructType\SearchColumnEnumSelectField, %s given', is_object($invalidValues) ? get_class($invalidValues) : (is_array($invalidValues) ? implode(', ', $invalidValues) : gettype($invalidValues)));
        }
        unset($invalidValues);
        return $message;
    }
    /**
     * Set type value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnEnumSelectField[] $type
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function setType(array $type = array())
    {
        // validation for constraint: array
        if ('' !== ($typeArrayErrorMessage = self::validateTypeForArrayConstraintsFromSetType($type))) {
            throw new \InvalidArgumentException($typeArrayErrorMessage, __LINE__);
        }
        $this->type = $type;
        return $this;
    }
    /**
     * Add item to type value
     * @throws \InvalidArgumentException
     * @param \StructType\SearchColumnEnumSelectField $item
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function addToType(\StructType\SearchColumnEnumSelectField $item)
    {
        // validation for constraint: itemType
        if (!$item instanceof \StructType\SearchColumnEnumSelectField) {
            throw new \InvalidArgumentException(sprintf('The type property can only contain items of type \StructType\SearchColumnEnumSelectField, %s given', is_object($item) ? get_class($item) : (is_array($item) ? implode(', ', $item) : gettype($item))), __LINE__);
        }
        $this->type[] = $item;
        return $this;
    }
    /**
     * Get customFieldList value
     * @return \StructType\SearchColumnCustomFieldList|null
     */
    public function getCustomFieldList()
    {
        return $this->customFieldList;
    }
    /**
     * Set customFieldList value
     * @param \StructType\SearchColumnCustomFieldList $customFieldList
     * @return \StructType\TimeBillSearchRowBasic
     */
    public function setCustomFieldList(\StructType\SearchColumnCustomFieldList $customFieldList = null)
    {
        $this->customFieldList = $customFieldList;
        return $this;
    }
}
