<?php

namespace StructType;

use \WsdlToPhp\PackageBase\AbstractStructBase;

/**
 * This class stands for PhoneCall StructType
 * Meta information extracted from the WSDL
 * - type: actSched:PhoneCall
 * @subpackage Structs
 */
class PhoneCall extends Record
{
    /**
     * The message
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * @var string
     */
    public $message;
    /**
     * The company
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * @var \StructType\RecordRef
     */
    public $company;
    /**
     * The contact
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * @var \StructType\RecordRef
     */
    public $contact;
    /**
     * The supportCase
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * @var \StructType\RecordRef
     */
    public $supportCase;
    /**
     * The transaction
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * @var \StructType\RecordRef
     */
    public $transaction;
    /**
     * The milestone
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * @var \StructType\RecordRef
     */
    public $milestone;
    /**
     * The customForm
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * @var \StructType\RecordRef
     */
    public $customForm;
    /**
     * The title
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * @var string
     */
    public $title;
    /**
     * The owner
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * @var \StructType\RecordRef
     */
    public $owner;
    /**
     * The assigned
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * @var \StructType\RecordRef
     */
    public $assigned;
    /**
     * The sendEmail
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * @var bool
     */
    public $sendEmail;
    /**
     * The startDate
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * @var string
     */
    public $startDate;
    /**
     * The endDate
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * @var string
     */
    public $endDate;
    /**
     * The timedEvent
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * @var bool
     */
    public $timedEvent;
    /**
     * The completedDate
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * @var string
     */
    public $completedDate;
    /**
     * The phone
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * @var string
     */
    public $phone;
    /**
     * The status
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * @var string
     */
    public $status;
    /**
     * The priority
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * @var string
     */
    public $priority;
    /**
     * The accessLevel
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * @var bool
     */
    public $accessLevel;
    /**
     * The reminderType
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * @var string
     */
    public $reminderType;
    /**
     * The reminderMinutes
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * @var string
     */
    public $reminderMinutes;
    /**
     * The createdDate
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * @var string
     */
    public $createdDate;
    /**
     * The lastModifiedDate
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * @var string
     */
    public $lastModifiedDate;
    /**
     * The contactList
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * @var \StructType\PhoneCallContactList
     */
    public $contactList;
    /**
     * The timeItemList
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * @var \StructType\PhoneCallTimeItemList
     */
    public $timeItemList;
    /**
     * The customFieldList
     * Meta information extracted from the WSDL
     * - minOccurs: 0
     * @var \StructType\CustomFieldList
     */
    public $customFieldList;
    /**
     * The internalId
     * @var string
     */
    public $internalId;
    /**
     * The externalId
     * @var string
     */
    public $externalId;
    /**
     * Constructor method for PhoneCall
     * @uses PhoneCall::setMessage()
     * @uses PhoneCall::setCompany()
     * @uses PhoneCall::setContact()
     * @uses PhoneCall::setSupportCase()
     * @uses PhoneCall::setTransaction()
     * @uses PhoneCall::setMilestone()
     * @uses PhoneCall::setCustomForm()
     * @uses PhoneCall::setTitle()
     * @uses PhoneCall::setOwner()
     * @uses PhoneCall::setAssigned()
     * @uses PhoneCall::setSendEmail()
     * @uses PhoneCall::setStartDate()
     * @uses PhoneCall::setEndDate()
     * @uses PhoneCall::setTimedEvent()
     * @uses PhoneCall::setCompletedDate()
     * @uses PhoneCall::setPhone()
     * @uses PhoneCall::setStatus()
     * @uses PhoneCall::setPriority()
     * @uses PhoneCall::setAccessLevel()
     * @uses PhoneCall::setReminderType()
     * @uses PhoneCall::setReminderMinutes()
     * @uses PhoneCall::setCreatedDate()
     * @uses PhoneCall::setLastModifiedDate()
     * @uses PhoneCall::setContactList()
     * @uses PhoneCall::setTimeItemList()
     * @uses PhoneCall::setCustomFieldList()
     * @uses PhoneCall::setInternalId()
     * @uses PhoneCall::setExternalId()
     * @param string $message
     * @param \StructType\RecordRef $company
     * @param \StructType\RecordRef $contact
     * @param \StructType\RecordRef $supportCase
     * @param \StructType\RecordRef $transaction
     * @param \StructType\RecordRef $milestone
     * @param \StructType\RecordRef $customForm
     * @param string $title
     * @param \StructType\RecordRef $owner
     * @param \StructType\RecordRef $assigned
     * @param bool $sendEmail
     * @param string $startDate
     * @param string $endDate
     * @param bool $timedEvent
     * @param string $completedDate
     * @param string $phone
     * @param string $status
     * @param string $priority
     * @param bool $accessLevel
     * @param string $reminderType
     * @param string $reminderMinutes
     * @param string $createdDate
     * @param string $lastModifiedDate
     * @param \StructType\PhoneCallContactList $contactList
     * @param \StructType\PhoneCallTimeItemList $timeItemList
     * @param \StructType\CustomFieldList $customFieldList
     * @param string $internalId
     * @param string $externalId
     */
    public function __construct($message = null, \StructType\RecordRef $company = null, \StructType\RecordRef $contact = null, \StructType\RecordRef $supportCase = null, \StructType\RecordRef $transaction = null, \StructType\RecordRef $milestone = null, \StructType\RecordRef $customForm = null, $title = null, \StructType\RecordRef $owner = null, \StructType\RecordRef $assigned = null, $sendEmail = null, $startDate = null, $endDate = null, $timedEvent = null, $completedDate = null, $phone = null, $status = null, $priority = null, $accessLevel = null, $reminderType = null, $reminderMinutes = null, $createdDate = null, $lastModifiedDate = null, \StructType\PhoneCallContactList $contactList = null, \StructType\PhoneCallTimeItemList $timeItemList = null, \StructType\CustomFieldList $customFieldList = null, $internalId = null, $externalId = null)
    {
        $this
            ->setMessage($message)
            ->setCompany($company)
            ->setContact($contact)
            ->setSupportCase($supportCase)
            ->setTransaction($transaction)
            ->setMilestone($milestone)
            ->setCustomForm($customForm)
            ->setTitle($title)
            ->setOwner($owner)
            ->setAssigned($assigned)
            ->setSendEmail($sendEmail)
            ->setStartDate($startDate)
            ->setEndDate($endDate)
            ->setTimedEvent($timedEvent)
            ->setCompletedDate($completedDate)
            ->setPhone($phone)
            ->setStatus($status)
            ->setPriority($priority)
            ->setAccessLevel($accessLevel)
            ->setReminderType($reminderType)
            ->setReminderMinutes($reminderMinutes)
            ->setCreatedDate($createdDate)
            ->setLastModifiedDate($lastModifiedDate)
            ->setContactList($contactList)
            ->setTimeItemList($timeItemList)
            ->setCustomFieldList($customFieldList)
            ->setInternalId($internalId)
            ->setExternalId($externalId);
    }
    /**
     * Get message value
     * @return string|null
     */
    public function getMessage()
    {
        return $this->message;
    }
    /**
     * Set message value
     * @param string $message
     * @return \StructType\PhoneCall
     */
    public function setMessage($message = null)
    {
        // validation for constraint: string
        if (!is_null($message) && !is_string($message)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($message, true), gettype($message)), __LINE__);
        }
        $this->message = $message;
        return $this;
    }
    /**
     * Get company value
     * @return \StructType\RecordRef|null
     */
    public function getCompany()
    {
        return $this->company;
    }
    /**
     * Set company value
     * @param \StructType\RecordRef $company
     * @return \StructType\PhoneCall
     */
    public function setCompany(\StructType\RecordRef $company = null)
    {
        $this->company = $company;
        return $this;
    }
    /**
     * Get contact value
     * @return \StructType\RecordRef|null
     */
    public function getContact()
    {
        return $this->contact;
    }
    /**
     * Set contact value
     * @param \StructType\RecordRef $contact
     * @return \StructType\PhoneCall
     */
    public function setContact(\StructType\RecordRef $contact = null)
    {
        $this->contact = $contact;
        return $this;
    }
    /**
     * Get supportCase value
     * @return \StructType\RecordRef|null
     */
    public function getSupportCase()
    {
        return $this->supportCase;
    }
    /**
     * Set supportCase value
     * @param \StructType\RecordRef $supportCase
     * @return \StructType\PhoneCall
     */
    public function setSupportCase(\StructType\RecordRef $supportCase = null)
    {
        $this->supportCase = $supportCase;
        return $this;
    }
    /**
     * Get transaction value
     * @return \StructType\RecordRef|null
     */
    public function getTransaction()
    {
        return $this->transaction;
    }
    /**
     * Set transaction value
     * @param \StructType\RecordRef $transaction
     * @return \StructType\PhoneCall
     */
    public function setTransaction(\StructType\RecordRef $transaction = null)
    {
        $this->transaction = $transaction;
        return $this;
    }
    /**
     * Get milestone value
     * @return \StructType\RecordRef|null
     */
    public function getMilestone()
    {
        return $this->milestone;
    }
    /**
     * Set milestone value
     * @param \StructType\RecordRef $milestone
     * @return \StructType\PhoneCall
     */
    public function setMilestone(\StructType\RecordRef $milestone = null)
    {
        $this->milestone = $milestone;
        return $this;
    }
    /**
     * Get customForm value
     * @return \StructType\RecordRef|null
     */
    public function getCustomForm()
    {
        return $this->customForm;
    }
    /**
     * Set customForm value
     * @param \StructType\RecordRef $customForm
     * @return \StructType\PhoneCall
     */
    public function setCustomForm(\StructType\RecordRef $customForm = null)
    {
        $this->customForm = $customForm;
        return $this;
    }
    /**
     * Get title value
     * @return string|null
     */
    public function getTitle()
    {
        return $this->title;
    }
    /**
     * Set title value
     * @param string $title
     * @return \StructType\PhoneCall
     */
    public function setTitle($title = null)
    {
        // validation for constraint: string
        if (!is_null($title) && !is_string($title)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($title, true), gettype($title)), __LINE__);
        }
        $this->title = $title;
        return $this;
    }
    /**
     * Get owner value
     * @return \StructType\RecordRef|null
     */
    public function getOwner()
    {
        return $this->owner;
    }
    /**
     * Set owner value
     * @param \StructType\RecordRef $owner
     * @return \StructType\PhoneCall
     */
    public function setOwner(\StructType\RecordRef $owner = null)
    {
        $this->owner = $owner;
        return $this;
    }
    /**
     * Get assigned value
     * @return \StructType\RecordRef|null
     */
    public function getAssigned()
    {
        return $this->assigned;
    }
    /**
     * Set assigned value
     * @param \StructType\RecordRef $assigned
     * @return \StructType\PhoneCall
     */
    public function setAssigned(\StructType\RecordRef $assigned = null)
    {
        $this->assigned = $assigned;
        return $this;
    }
    /**
     * Get sendEmail value
     * @return bool|null
     */
    public function getSendEmail()
    {
        return $this->sendEmail;
    }
    /**
     * Set sendEmail value
     * @param bool $sendEmail
     * @return \StructType\PhoneCall
     */
    public function setSendEmail($sendEmail = null)
    {
        // validation for constraint: boolean
        if (!is_null($sendEmail) && !is_bool($sendEmail)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a bool, %s given', var_export($sendEmail, true), gettype($sendEmail)), __LINE__);
        }
        $this->sendEmail = $sendEmail;
        return $this;
    }
    /**
     * Get startDate value
     * @return string|null
     */
    public function getStartDate()
    {
        return $this->startDate;
    }
    /**
     * Set startDate value
     * @param string $startDate
     * @return \StructType\PhoneCall
     */
    public function setStartDate($startDate = null)
    {
        // validation for constraint: string
        if (!is_null($startDate) && !is_string($startDate)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($startDate, true), gettype($startDate)), __LINE__);
        }
        $this->startDate = $startDate;
        return $this;
    }
    /**
     * Get endDate value
     * @return string|null
     */
    public function getEndDate()
    {
        return $this->endDate;
    }
    /**
     * Set endDate value
     * @param string $endDate
     * @return \StructType\PhoneCall
     */
    public function setEndDate($endDate = null)
    {
        // validation for constraint: string
        if (!is_null($endDate) && !is_string($endDate)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($endDate, true), gettype($endDate)), __LINE__);
        }
        $this->endDate = $endDate;
        return $this;
    }
    /**
     * Get timedEvent value
     * @return bool|null
     */
    public function getTimedEvent()
    {
        return $this->timedEvent;
    }
    /**
     * Set timedEvent value
     * @param bool $timedEvent
     * @return \StructType\PhoneCall
     */
    public function setTimedEvent($timedEvent = null)
    {
        // validation for constraint: boolean
        if (!is_null($timedEvent) && !is_bool($timedEvent)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a bool, %s given', var_export($timedEvent, true), gettype($timedEvent)), __LINE__);
        }
        $this->timedEvent = $timedEvent;
        return $this;
    }
    /**
     * Get completedDate value
     * @return string|null
     */
    public function getCompletedDate()
    {
        return $this->completedDate;
    }
    /**
     * Set completedDate value
     * @param string $completedDate
     * @return \StructType\PhoneCall
     */
    public function setCompletedDate($completedDate = null)
    {
        // validation for constraint: string
        if (!is_null($completedDate) && !is_string($completedDate)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($completedDate, true), gettype($completedDate)), __LINE__);
        }
        $this->completedDate = $completedDate;
        return $this;
    }
    /**
     * Get phone value
     * @return string|null
     */
    public function getPhone()
    {
        return $this->phone;
    }
    /**
     * Set phone value
     * @param string $phone
     * @return \StructType\PhoneCall
     */
    public function setPhone($phone = null)
    {
        // validation for constraint: string
        if (!is_null($phone) && !is_string($phone)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($phone, true), gettype($phone)), __LINE__);
        }
        $this->phone = $phone;
        return $this;
    }
    /**
     * Get status value
     * @return string|null
     */
    public function getStatus()
    {
        return $this->status;
    }
    /**
     * Set status value
     * @uses \EnumType\PhoneCallStatus::valueIsValid()
     * @uses \EnumType\PhoneCallStatus::getValidValues()
     * @throws \InvalidArgumentException
     * @param string $status
     * @return \StructType\PhoneCall
     */
    public function setStatus($status = null)
    {
        // validation for constraint: enumeration
        if (!\EnumType\PhoneCallStatus::valueIsValid($status)) {
            throw new \InvalidArgumentException(sprintf('Invalid value(s) %s, please use one of: %s from enumeration class \EnumType\PhoneCallStatus', is_array($status) ? implode(', ', $status) : var_export($status, true), implode(', ', \EnumType\PhoneCallStatus::getValidValues())), __LINE__);
        }
        $this->status = $status;
        return $this;
    }
    /**
     * Get priority value
     * @return string|null
     */
    public function getPriority()
    {
        return $this->priority;
    }
    /**
     * Set priority value
     * @uses \EnumType\PhoneCallPriority::valueIsValid()
     * @uses \EnumType\PhoneCallPriority::getValidValues()
     * @throws \InvalidArgumentException
     * @param string $priority
     * @return \StructType\PhoneCall
     */
    public function setPriority($priority = null)
    {
        // validation for constraint: enumeration
        if (!\EnumType\PhoneCallPriority::valueIsValid($priority)) {
            throw new \InvalidArgumentException(sprintf('Invalid value(s) %s, please use one of: %s from enumeration class \EnumType\PhoneCallPriority', is_array($priority) ? implode(', ', $priority) : var_export($priority, true), implode(', ', \EnumType\PhoneCallPriority::getValidValues())), __LINE__);
        }
        $this->priority = $priority;
        return $this;
    }
    /**
     * Get accessLevel value
     * @return bool|null
     */
    public function getAccessLevel()
    {
        return $this->accessLevel;
    }
    /**
     * Set accessLevel value
     * @param bool $accessLevel
     * @return \StructType\PhoneCall
     */
    public function setAccessLevel($accessLevel = null)
    {
        // validation for constraint: boolean
        if (!is_null($accessLevel) && !is_bool($accessLevel)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a bool, %s given', var_export($accessLevel, true), gettype($accessLevel)), __LINE__);
        }
        $this->accessLevel = $accessLevel;
        return $this;
    }
    /**
     * Get reminderType value
     * @return string|null
     */
    public function getReminderType()
    {
        return $this->reminderType;
    }
    /**
     * Set reminderType value
     * @uses \EnumType\PhoneCallReminderType::valueIsValid()
     * @uses \EnumType\PhoneCallReminderType::getValidValues()
     * @throws \InvalidArgumentException
     * @param string $reminderType
     * @return \StructType\PhoneCall
     */
    public function setReminderType($reminderType = null)
    {
        // validation for constraint: enumeration
        if (!\EnumType\PhoneCallReminderType::valueIsValid($reminderType)) {
            throw new \InvalidArgumentException(sprintf('Invalid value(s) %s, please use one of: %s from enumeration class \EnumType\PhoneCallReminderType', is_array($reminderType) ? implode(', ', $reminderType) : var_export($reminderType, true), implode(', ', \EnumType\PhoneCallReminderType::getValidValues())), __LINE__);
        }
        $this->reminderType = $reminderType;
        return $this;
    }
    /**
     * Get reminderMinutes value
     * @return string|null
     */
    public function getReminderMinutes()
    {
        return $this->reminderMinutes;
    }
    /**
     * Set reminderMinutes value
     * @uses \EnumType\PhoneCallReminderMinutes::valueIsValid()
     * @uses \EnumType\PhoneCallReminderMinutes::getValidValues()
     * @throws \InvalidArgumentException
     * @param string $reminderMinutes
     * @return \StructType\PhoneCall
     */
    public function setReminderMinutes($reminderMinutes = null)
    {
        // validation for constraint: enumeration
        if (!\EnumType\PhoneCallReminderMinutes::valueIsValid($reminderMinutes)) {
            throw new \InvalidArgumentException(sprintf('Invalid value(s) %s, please use one of: %s from enumeration class \EnumType\PhoneCallReminderMinutes', is_array($reminderMinutes) ? implode(', ', $reminderMinutes) : var_export($reminderMinutes, true), implode(', ', \EnumType\PhoneCallReminderMinutes::getValidValues())), __LINE__);
        }
        $this->reminderMinutes = $reminderMinutes;
        return $this;
    }
    /**
     * Get createdDate value
     * @return string|null
     */
    public function getCreatedDate()
    {
        return $this->createdDate;
    }
    /**
     * Set createdDate value
     * @param string $createdDate
     * @return \StructType\PhoneCall
     */
    public function setCreatedDate($createdDate = null)
    {
        // validation for constraint: string
        if (!is_null($createdDate) && !is_string($createdDate)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($createdDate, true), gettype($createdDate)), __LINE__);
        }
        $this->createdDate = $createdDate;
        return $this;
    }
    /**
     * Get lastModifiedDate value
     * @return string|null
     */
    public function getLastModifiedDate()
    {
        return $this->lastModifiedDate;
    }
    /**
     * Set lastModifiedDate value
     * @param string $lastModifiedDate
     * @return \StructType\PhoneCall
     */
    public function setLastModifiedDate($lastModifiedDate = null)
    {
        // validation for constraint: string
        if (!is_null($lastModifiedDate) && !is_string($lastModifiedDate)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($lastModifiedDate, true), gettype($lastModifiedDate)), __LINE__);
        }
        $this->lastModifiedDate = $lastModifiedDate;
        return $this;
    }
    /**
     * Get contactList value
     * @return \StructType\PhoneCallContactList|null
     */
    public function getContactList()
    {
        return $this->contactList;
    }
    /**
     * Set contactList value
     * @param \StructType\PhoneCallContactList $contactList
     * @return \StructType\PhoneCall
     */
    public function setContactList(\StructType\PhoneCallContactList $contactList = null)
    {
        $this->contactList = $contactList;
        return $this;
    }
    /**
     * Get timeItemList value
     * @return \StructType\PhoneCallTimeItemList|null
     */
    public function getTimeItemList()
    {
        return $this->timeItemList;
    }
    /**
     * Set timeItemList value
     * @param \StructType\PhoneCallTimeItemList $timeItemList
     * @return \StructType\PhoneCall
     */
    public function setTimeItemList(\StructType\PhoneCallTimeItemList $timeItemList = null)
    {
        $this->timeItemList = $timeItemList;
        return $this;
    }
    /**
     * Get customFieldList value
     * @return \StructType\CustomFieldList|null
     */
    public function getCustomFieldList()
    {
        return $this->customFieldList;
    }
    /**
     * Set customFieldList value
     * @param \StructType\CustomFieldList $customFieldList
     * @return \StructType\PhoneCall
     */
    public function setCustomFieldList(\StructType\CustomFieldList $customFieldList = null)
    {
        $this->customFieldList = $customFieldList;
        return $this;
    }
    /**
     * Get internalId value
     * @return string|null
     */
    public function getInternalId()
    {
        return $this->internalId;
    }
    /**
     * Set internalId value
     * @param string $internalId
     * @return \StructType\PhoneCall
     */
    public function setInternalId($internalId = null)
    {
        // validation for constraint: string
        if (!is_null($internalId) && !is_string($internalId)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($internalId, true), gettype($internalId)), __LINE__);
        }
        $this->internalId = $internalId;
        return $this;
    }
    /**
     * Get externalId value
     * @return string|null
     */
    public function getExternalId()
    {
        return $this->externalId;
    }
    /**
     * Set externalId value
     * @param string $externalId
     * @return \StructType\PhoneCall
     */
    public function setExternalId($externalId = null)
    {
        // validation for constraint: string
        if (!is_null($externalId) && !is_string($externalId)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($externalId, true), gettype($externalId)), __LINE__);
        }
        $this->externalId = $externalId;
        return $this;
    }
}
