<?php

namespace CustomerManagement\StructType;

use \WsdlToPhp\PackageBase\AbstractStructBase;

/**
 * This class stands for EquipmentDeviceNote StructType
 * @subpackage Structs
 */
class EquipmentDeviceNote extends AbstractStructBase
{
    /**
     * The CreateDateTimeUTC
     * Meta information extracted from the WSDL
     * - maxOccurs: 1
     * - minOccurs: 1
     * @var string
     */
    public $CreateDateTimeUTC;
    /**
     * The ModifiedDateTimeUTC
     * Meta information extracted from the WSDL
     * - maxOccurs: 1
     * - minOccurs: 1
     * - nillable: true
     * @var string
     */
    public $ModifiedDateTimeUTC;
    /**
     * The DeviceID
     * Meta information extracted from the WSDL
     * - maxOccurs: 1
     * - minOccurs: 1
     * @var int
     */
    public $DeviceID;
    /**
     * The ConditionID
     * Meta information extracted from the WSDL
     * - maxOccurs: 1
     * - minOccurs: 1
     * @var int
     */
    public $ConditionID;
    /**
     * The WarrantyDate
     * Meta information extracted from the WSDL
     * - maxOccurs: 1
     * - minOccurs: 1
     * - nillable: true
     * @var string
     */
    public $WarrantyDate;
    /**
     * The ExpirationDate
     * Meta information extracted from the WSDL
     * - maxOccurs: 1
     * - minOccurs: 1
     * - nillable: true
     * @var string
     */
    public $ExpirationDate;
    /**
     * The PurchasedByCustomer
     * Meta information extracted from the WSDL
     * - maxOccurs: 1
     * - minOccurs: 1
     * - nillable: true
     * @var bool
     */
    public $PurchasedByCustomer;
    /**
     * The InstalledByCustomer
     * Meta information extracted from the WSDL
     * - maxOccurs: 1
     * - minOccurs: 1
     * - nillable: true
     * @var bool
     */
    public $InstalledByCustomer;
    /**
     * The InstalledByBuilder
     * Meta information extracted from the WSDL
     * - maxOccurs: 1
     * - minOccurs: 1
     * - nillable: true
     * @var bool
     */
    public $InstalledByBuilder;
    /**
     * The DeviceNoteInstallerType
     * Meta information extracted from the WSDL
     * - maxOccurs: 1
     * - minOccurs: 1
     * @var string
     */
    public $DeviceNoteInstallerType;
    /**
     * The DeviceNotePurchaserType
     * Meta information extracted from the WSDL
     * - maxOccurs: 1
     * - minOccurs: 1
     * @var string
     */
    public $DeviceNotePurchaserType;
    /**
     * The DeviceNoteInstallationMethod
     * Meta information extracted from the WSDL
     * - maxOccurs: 1
     * - minOccurs: 1
     * @var string
     */
    public $DeviceNoteInstallationMethod;
    /**
     * The TextDescription
     * Meta information extracted from the WSDL
     * - maxOccurs: 1
     * - minOccurs: 0
     * @var string
     */
    public $TextDescription;
    /**
     * The LastModifiedByRep
     * Meta information extracted from the WSDL
     * - maxOccurs: 1
     * - minOccurs: 0
     * @var string
     */
    public $LastModifiedByRep;
    /**
     * The Images
     * Meta information extracted from the WSDL
     * - maxOccurs: 1
     * - minOccurs: 0
     * @var \CustomerManagement\ArrayType\ArrayOfDeviceNoteImage
     */
    public $Images;
    /**
     * Constructor method for EquipmentDeviceNote
     * @uses EquipmentDeviceNote::setCreateDateTimeUTC()
     * @uses EquipmentDeviceNote::setModifiedDateTimeUTC()
     * @uses EquipmentDeviceNote::setDeviceID()
     * @uses EquipmentDeviceNote::setConditionID()
     * @uses EquipmentDeviceNote::setWarrantyDate()
     * @uses EquipmentDeviceNote::setExpirationDate()
     * @uses EquipmentDeviceNote::setPurchasedByCustomer()
     * @uses EquipmentDeviceNote::setInstalledByCustomer()
     * @uses EquipmentDeviceNote::setInstalledByBuilder()
     * @uses EquipmentDeviceNote::setDeviceNoteInstallerType()
     * @uses EquipmentDeviceNote::setDeviceNotePurchaserType()
     * @uses EquipmentDeviceNote::setDeviceNoteInstallationMethod()
     * @uses EquipmentDeviceNote::setTextDescription()
     * @uses EquipmentDeviceNote::setLastModifiedByRep()
     * @uses EquipmentDeviceNote::setImages()
     * @param string $createDateTimeUTC
     * @param string $modifiedDateTimeUTC
     * @param int $deviceID
     * @param int $conditionID
     * @param string $warrantyDate
     * @param string $expirationDate
     * @param bool $purchasedByCustomer
     * @param bool $installedByCustomer
     * @param bool $installedByBuilder
     * @param string $deviceNoteInstallerType
     * @param string $deviceNotePurchaserType
     * @param string $deviceNoteInstallationMethod
     * @param string $textDescription
     * @param string $lastModifiedByRep
     * @param \CustomerManagement\ArrayType\ArrayOfDeviceNoteImage $images
     */
    public function __construct($createDateTimeUTC = null, $modifiedDateTimeUTC = null, $deviceID = null, $conditionID = null, $warrantyDate = null, $expirationDate = null, $purchasedByCustomer = null, $installedByCustomer = null, $installedByBuilder = null, $deviceNoteInstallerType = null, $deviceNotePurchaserType = null, $deviceNoteInstallationMethod = null, $textDescription = null, $lastModifiedByRep = null, \CustomerManagement\ArrayType\ArrayOfDeviceNoteImage $images = null)
    {
        $this
            ->setCreateDateTimeUTC($createDateTimeUTC)
            ->setModifiedDateTimeUTC($modifiedDateTimeUTC)
            ->setDeviceID($deviceID)
            ->setConditionID($conditionID)
            ->setWarrantyDate($warrantyDate)
            ->setExpirationDate($expirationDate)
            ->setPurchasedByCustomer($purchasedByCustomer)
            ->setInstalledByCustomer($installedByCustomer)
            ->setInstalledByBuilder($installedByBuilder)
            ->setDeviceNoteInstallerType($deviceNoteInstallerType)
            ->setDeviceNotePurchaserType($deviceNotePurchaserType)
            ->setDeviceNoteInstallationMethod($deviceNoteInstallationMethod)
            ->setTextDescription($textDescription)
            ->setLastModifiedByRep($lastModifiedByRep)
            ->setImages($images);
    }
    /**
     * Get CreateDateTimeUTC value
     * @return string
     */
    public function getCreateDateTimeUTC()
    {
        return $this->CreateDateTimeUTC;
    }
    /**
     * Set CreateDateTimeUTC value
     * @param string $createDateTimeUTC
     * @return \CustomerManagement\StructType\EquipmentDeviceNote
     */
    public function setCreateDateTimeUTC($createDateTimeUTC = null)
    {
        // validation for constraint: string
        if (!is_null($createDateTimeUTC) && !is_string($createDateTimeUTC)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($createDateTimeUTC, true), gettype($createDateTimeUTC)), __LINE__);
        }
        $this->CreateDateTimeUTC = $createDateTimeUTC;
        return $this;
    }
    /**
     * Get ModifiedDateTimeUTC value
     * @return string
     */
    public function getModifiedDateTimeUTC()
    {
        return $this->ModifiedDateTimeUTC;
    }
    /**
     * Set ModifiedDateTimeUTC value
     * @param string $modifiedDateTimeUTC
     * @return \CustomerManagement\StructType\EquipmentDeviceNote
     */
    public function setModifiedDateTimeUTC($modifiedDateTimeUTC = null)
    {
        // validation for constraint: string
        if (!is_null($modifiedDateTimeUTC) && !is_string($modifiedDateTimeUTC)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($modifiedDateTimeUTC, true), gettype($modifiedDateTimeUTC)), __LINE__);
        }
        $this->ModifiedDateTimeUTC = $modifiedDateTimeUTC;
        return $this;
    }
    /**
     * Get DeviceID value
     * @return int
     */
    public function getDeviceID()
    {
        return $this->DeviceID;
    }
    /**
     * Set DeviceID value
     * @param int $deviceID
     * @return \CustomerManagement\StructType\EquipmentDeviceNote
     */
    public function setDeviceID($deviceID = null)
    {
        // validation for constraint: int
        if (!is_null($deviceID) && !(is_int($deviceID) || ctype_digit($deviceID))) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide an integer value, %s given', var_export($deviceID, true), gettype($deviceID)), __LINE__);
        }
        $this->DeviceID = $deviceID;
        return $this;
    }
    /**
     * Get ConditionID value
     * @return int
     */
    public function getConditionID()
    {
        return $this->ConditionID;
    }
    /**
     * Set ConditionID value
     * @param int $conditionID
     * @return \CustomerManagement\StructType\EquipmentDeviceNote
     */
    public function setConditionID($conditionID = null)
    {
        // validation for constraint: int
        if (!is_null($conditionID) && !(is_int($conditionID) || ctype_digit($conditionID))) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide an integer value, %s given', var_export($conditionID, true), gettype($conditionID)), __LINE__);
        }
        $this->ConditionID = $conditionID;
        return $this;
    }
    /**
     * Get WarrantyDate value
     * @return string
     */
    public function getWarrantyDate()
    {
        return $this->WarrantyDate;
    }
    /**
     * Set WarrantyDate value
     * @param string $warrantyDate
     * @return \CustomerManagement\StructType\EquipmentDeviceNote
     */
    public function setWarrantyDate($warrantyDate = null)
    {
        // validation for constraint: string
        if (!is_null($warrantyDate) && !is_string($warrantyDate)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($warrantyDate, true), gettype($warrantyDate)), __LINE__);
        }
        $this->WarrantyDate = $warrantyDate;
        return $this;
    }
    /**
     * Get ExpirationDate value
     * @return string
     */
    public function getExpirationDate()
    {
        return $this->ExpirationDate;
    }
    /**
     * Set ExpirationDate value
     * @param string $expirationDate
     * @return \CustomerManagement\StructType\EquipmentDeviceNote
     */
    public function setExpirationDate($expirationDate = null)
    {
        // validation for constraint: string
        if (!is_null($expirationDate) && !is_string($expirationDate)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($expirationDate, true), gettype($expirationDate)), __LINE__);
        }
        $this->ExpirationDate = $expirationDate;
        return $this;
    }
    /**
     * Get PurchasedByCustomer value
     * @return bool
     */
    public function getPurchasedByCustomer()
    {
        return $this->PurchasedByCustomer;
    }
    /**
     * Set PurchasedByCustomer value
     * @param bool $purchasedByCustomer
     * @return \CustomerManagement\StructType\EquipmentDeviceNote
     */
    public function setPurchasedByCustomer($purchasedByCustomer = null)
    {
        // validation for constraint: boolean
        if (!is_null($purchasedByCustomer) && !is_bool($purchasedByCustomer)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a bool, %s given', var_export($purchasedByCustomer, true), gettype($purchasedByCustomer)), __LINE__);
        }
        $this->PurchasedByCustomer = $purchasedByCustomer;
        return $this;
    }
    /**
     * Get InstalledByCustomer value
     * @return bool
     */
    public function getInstalledByCustomer()
    {
        return $this->InstalledByCustomer;
    }
    /**
     * Set InstalledByCustomer value
     * @param bool $installedByCustomer
     * @return \CustomerManagement\StructType\EquipmentDeviceNote
     */
    public function setInstalledByCustomer($installedByCustomer = null)
    {
        // validation for constraint: boolean
        if (!is_null($installedByCustomer) && !is_bool($installedByCustomer)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a bool, %s given', var_export($installedByCustomer, true), gettype($installedByCustomer)), __LINE__);
        }
        $this->InstalledByCustomer = $installedByCustomer;
        return $this;
    }
    /**
     * Get InstalledByBuilder value
     * @return bool
     */
    public function getInstalledByBuilder()
    {
        return $this->InstalledByBuilder;
    }
    /**
     * Set InstalledByBuilder value
     * @param bool $installedByBuilder
     * @return \CustomerManagement\StructType\EquipmentDeviceNote
     */
    public function setInstalledByBuilder($installedByBuilder = null)
    {
        // validation for constraint: boolean
        if (!is_null($installedByBuilder) && !is_bool($installedByBuilder)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a bool, %s given', var_export($installedByBuilder, true), gettype($installedByBuilder)), __LINE__);
        }
        $this->InstalledByBuilder = $installedByBuilder;
        return $this;
    }
    /**
     * Get DeviceNoteInstallerType value
     * @return string
     */
    public function getDeviceNoteInstallerType()
    {
        return $this->DeviceNoteInstallerType;
    }
    /**
     * Set DeviceNoteInstallerType value
     * @uses \CustomerManagement\EnumType\DeviceInstallerEnum::valueIsValid()
     * @uses \CustomerManagement\EnumType\DeviceInstallerEnum::getValidValues()
     * @throws \InvalidArgumentException
     * @param string $deviceNoteInstallerType
     * @return \CustomerManagement\StructType\EquipmentDeviceNote
     */
    public function setDeviceNoteInstallerType($deviceNoteInstallerType = null)
    {
        // validation for constraint: enumeration
        if (!\CustomerManagement\EnumType\DeviceInstallerEnum::valueIsValid($deviceNoteInstallerType)) {
            throw new \InvalidArgumentException(sprintf('Invalid value(s) %s, please use one of: %s from enumeration class \CustomerManagement\EnumType\DeviceInstallerEnum', is_array($deviceNoteInstallerType) ? implode(', ', $deviceNoteInstallerType) : var_export($deviceNoteInstallerType, true), implode(', ', \CustomerManagement\EnumType\DeviceInstallerEnum::getValidValues())), __LINE__);
        }
        $this->DeviceNoteInstallerType = $deviceNoteInstallerType;
        return $this;
    }
    /**
     * Get DeviceNotePurchaserType value
     * @return string
     */
    public function getDeviceNotePurchaserType()
    {
        return $this->DeviceNotePurchaserType;
    }
    /**
     * Set DeviceNotePurchaserType value
     * @uses \CustomerManagement\EnumType\DevicePurchaserEnum::valueIsValid()
     * @uses \CustomerManagement\EnumType\DevicePurchaserEnum::getValidValues()
     * @throws \InvalidArgumentException
     * @param string $deviceNotePurchaserType
     * @return \CustomerManagement\StructType\EquipmentDeviceNote
     */
    public function setDeviceNotePurchaserType($deviceNotePurchaserType = null)
    {
        // validation for constraint: enumeration
        if (!\CustomerManagement\EnumType\DevicePurchaserEnum::valueIsValid($deviceNotePurchaserType)) {
            throw new \InvalidArgumentException(sprintf('Invalid value(s) %s, please use one of: %s from enumeration class \CustomerManagement\EnumType\DevicePurchaserEnum', is_array($deviceNotePurchaserType) ? implode(', ', $deviceNotePurchaserType) : var_export($deviceNotePurchaserType, true), implode(', ', \CustomerManagement\EnumType\DevicePurchaserEnum::getValidValues())), __LINE__);
        }
        $this->DeviceNotePurchaserType = $deviceNotePurchaserType;
        return $this;
    }
    /**
     * Get DeviceNoteInstallationMethod value
     * @return string
     */
    public function getDeviceNoteInstallationMethod()
    {
        return $this->DeviceNoteInstallationMethod;
    }
    /**
     * Set DeviceNoteInstallationMethod value
     * @uses \CustomerManagement\EnumType\DeviceInstallationMethodEnum::valueIsValid()
     * @uses \CustomerManagement\EnumType\DeviceInstallationMethodEnum::getValidValues()
     * @throws \InvalidArgumentException
     * @param string $deviceNoteInstallationMethod
     * @return \CustomerManagement\StructType\EquipmentDeviceNote
     */
    public function setDeviceNoteInstallationMethod($deviceNoteInstallationMethod = null)
    {
        // validation for constraint: enumeration
        if (!\CustomerManagement\EnumType\DeviceInstallationMethodEnum::valueIsValid($deviceNoteInstallationMethod)) {
            throw new \InvalidArgumentException(sprintf('Invalid value(s) %s, please use one of: %s from enumeration class \CustomerManagement\EnumType\DeviceInstallationMethodEnum', is_array($deviceNoteInstallationMethod) ? implode(', ', $deviceNoteInstallationMethod) : var_export($deviceNoteInstallationMethod, true), implode(', ', \CustomerManagement\EnumType\DeviceInstallationMethodEnum::getValidValues())), __LINE__);
        }
        $this->DeviceNoteInstallationMethod = $deviceNoteInstallationMethod;
        return $this;
    }
    /**
     * Get TextDescription value
     * @return string|null
     */
    public function getTextDescription()
    {
        return $this->TextDescription;
    }
    /**
     * Set TextDescription value
     * @param string $textDescription
     * @return \CustomerManagement\StructType\EquipmentDeviceNote
     */
    public function setTextDescription($textDescription = null)
    {
        // validation for constraint: string
        if (!is_null($textDescription) && !is_string($textDescription)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($textDescription, true), gettype($textDescription)), __LINE__);
        }
        $this->TextDescription = $textDescription;
        return $this;
    }
    /**
     * Get LastModifiedByRep value
     * @return string|null
     */
    public function getLastModifiedByRep()
    {
        return $this->LastModifiedByRep;
    }
    /**
     * Set LastModifiedByRep value
     * @param string $lastModifiedByRep
     * @return \CustomerManagement\StructType\EquipmentDeviceNote
     */
    public function setLastModifiedByRep($lastModifiedByRep = null)
    {
        // validation for constraint: string
        if (!is_null($lastModifiedByRep) && !is_string($lastModifiedByRep)) {
            throw new \InvalidArgumentException(sprintf('Invalid value %s, please provide a string, %s given', var_export($lastModifiedByRep, true), gettype($lastModifiedByRep)), __LINE__);
        }
        $this->LastModifiedByRep = $lastModifiedByRep;
        return $this;
    }
    /**
     * Get Images value
     * @return \CustomerManagement\ArrayType\ArrayOfDeviceNoteImage|null
     */
    public function getImages()
    {
        return $this->Images;
    }
    /**
     * Set Images value
     * @param \CustomerManagement\ArrayType\ArrayOfDeviceNoteImage $images
     * @return \CustomerManagement\StructType\EquipmentDeviceNote
     */
    public function setImages(\CustomerManagement\ArrayType\ArrayOfDeviceNoteImage $images = null)
    {
        $this->Images = $images;
        return $this;
    }
    /**
     * Method called when an object has been exported with var_export() functions
     * It allows to return an object instantiated with the values
     * @see AbstractStructBase::__set_state()
     * @uses AbstractStructBase::__set_state()
     * @param array $array the exported values
     * @return \CustomerManagement\StructType\EquipmentDeviceNote
     */
    public static function __set_state(array $array)
    {
        return parent::__set_state($array);
    }
    /**
     * Method returning the class name
     * @return string __CLASS__
     */
    public function __toString()
    {
        return __CLASS__;
    }
}
