<?php

namespace SGCIS\Struct;

use \WsdlToPhp\PackageBase\AbstractStructBase;

/**
 * This class stands for BillServicePointChargeDetail Struct
 * @subpackage Structs
 */
class BillServicePointChargeDetail extends AbstractStructBase
{
    /**
     * The BillServicePointChargeDetailID
     * Meta informations extracted from the WSDL
     * - maxOccurs: 1
     * - minOccurs: 1
     * @var int
     */
    public $BillServicePointChargeDetailID;
    /**
     * The BillServicePointChargeID
     * Meta informations extracted from the WSDL
     * - maxOccurs: 1
     * - minOccurs: 1
     * @var int
     */
    public $BillServicePointChargeID;
    /**
     * The ChargeID
     * Meta informations extracted from the WSDL
     * - maxOccurs: 1
     * - minOccurs: 1
     * @var int
     */
    public $ChargeID;
    /**
     * The ChargeGroupID
     * Meta informations extracted from the WSDL
     * - maxOccurs: 1
     * - minOccurs: 1
     * @var int
     */
    public $ChargeGroupID;
    /**
     * The ChargeAmount
     * Meta informations extracted from the WSDL
     * - maxOccurs: 1
     * - minOccurs: 1
     * @var float
     */
    public $ChargeAmount;
    /**
     * The CreateDate
     * Meta informations extracted from the WSDL
     * - maxOccurs: 1
     * - minOccurs: 1
     * @var string
     */
    public $CreateDate;
    /**
     * The TaxRate
     * Meta informations extracted from the WSDL
     * - maxOccurs: 1
     * - minOccurs: 1
     * @var float
     */
    public $TaxRate;
    /**
     * The TaxableAmount
     * Meta informations extracted from the WSDL
     * - maxOccurs: 1
     * - minOccurs: 1
     * @var float
     */
    public $TaxableAmount;
    /**
     * The ChargeGroupName
     * Meta informations extracted from the WSDL
     * - maxOccurs: 1
     * - minOccurs: 0
     * @var string
     */
    public $ChargeGroupName;
    /**
     * The ChargeName
     * Meta informations extracted from the WSDL
     * - maxOccurs: 1
     * - minOccurs: 0
     * @var string
     */
    public $ChargeName;
    /**
     * The ChargeCode
     * Meta informations extracted from the WSDL
     * - maxOccurs: 1
     * - minOccurs: 0
     * @var string
     */
    public $ChargeCode;
    /**
     * The TaxAuthorityName
     * Meta informations extracted from the WSDL
     * - maxOccurs: 1
     * - minOccurs: 0
     * @var string
     */
    public $TaxAuthorityName;
    /**
     * Constructor method for BillServicePointChargeDetail
     * @uses BillServicePointChargeDetail::setBillServicePointChargeDetailID()
     * @uses BillServicePointChargeDetail::setBillServicePointChargeID()
     * @uses BillServicePointChargeDetail::setChargeID()
     * @uses BillServicePointChargeDetail::setChargeGroupID()
     * @uses BillServicePointChargeDetail::setChargeAmount()
     * @uses BillServicePointChargeDetail::setCreateDate()
     * @uses BillServicePointChargeDetail::setTaxRate()
     * @uses BillServicePointChargeDetail::setTaxableAmount()
     * @uses BillServicePointChargeDetail::setChargeGroupName()
     * @uses BillServicePointChargeDetail::setChargeName()
     * @uses BillServicePointChargeDetail::setChargeCode()
     * @uses BillServicePointChargeDetail::setTaxAuthorityName()
     * @param int $billServicePointChargeDetailID
     * @param int $billServicePointChargeID
     * @param int $chargeID
     * @param int $chargeGroupID
     * @param float $chargeAmount
     * @param string $createDate
     * @param float $taxRate
     * @param float $taxableAmount
     * @param string $chargeGroupName
     * @param string $chargeName
     * @param string $chargeCode
     * @param string $taxAuthorityName
     */
    public function __construct($billServicePointChargeDetailID = null, $billServicePointChargeID = null, $chargeID = null, $chargeGroupID = null, $chargeAmount = null, $createDate = null, $taxRate = null, $taxableAmount = null, $chargeGroupName = null, $chargeName = null, $chargeCode = null, $taxAuthorityName = null)
    {
        $this
            ->setBillServicePointChargeDetailID($billServicePointChargeDetailID)
            ->setBillServicePointChargeID($billServicePointChargeID)
            ->setChargeID($chargeID)
            ->setChargeGroupID($chargeGroupID)
            ->setChargeAmount($chargeAmount)
            ->setCreateDate($createDate)
            ->setTaxRate($taxRate)
            ->setTaxableAmount($taxableAmount)
            ->setChargeGroupName($chargeGroupName)
            ->setChargeName($chargeName)
            ->setChargeCode($chargeCode)
            ->setTaxAuthorityName($taxAuthorityName);
    }
    /**
     * Get BillServicePointChargeDetailID value
     * @return int
     */
    public function getBillServicePointChargeDetailID()
    {
        return $this->BillServicePointChargeDetailID;
    }
    /**
     * Set BillServicePointChargeDetailID value
     * @param int $billServicePointChargeDetailID
     * @return \SGCIS\Struct\BillServicePointChargeDetail
     */
    public function setBillServicePointChargeDetailID($billServicePointChargeDetailID = null)
    {
        // validation for constraint: int
        if (!is_null($billServicePointChargeDetailID) && !is_numeric($billServicePointChargeDetailID)) {
            throw new \InvalidArgumentException(sprintf('Invalid value, please provide a numeric value, "%s" given', gettype($billServicePointChargeDetailID)), __LINE__);
        }
        $this->BillServicePointChargeDetailID = $billServicePointChargeDetailID;
        return $this;
    }
    /**
     * Get BillServicePointChargeID value
     * @return int
     */
    public function getBillServicePointChargeID()
    {
        return $this->BillServicePointChargeID;
    }
    /**
     * Set BillServicePointChargeID value
     * @param int $billServicePointChargeID
     * @return \SGCIS\Struct\BillServicePointChargeDetail
     */
    public function setBillServicePointChargeID($billServicePointChargeID = null)
    {
        // validation for constraint: int
        if (!is_null($billServicePointChargeID) && !is_numeric($billServicePointChargeID)) {
            throw new \InvalidArgumentException(sprintf('Invalid value, please provide a numeric value, "%s" given', gettype($billServicePointChargeID)), __LINE__);
        }
        $this->BillServicePointChargeID = $billServicePointChargeID;
        return $this;
    }
    /**
     * Get ChargeID value
     * @return int
     */
    public function getChargeID()
    {
        return $this->ChargeID;
    }
    /**
     * Set ChargeID value
     * @param int $chargeID
     * @return \SGCIS\Struct\BillServicePointChargeDetail
     */
    public function setChargeID($chargeID = null)
    {
        // validation for constraint: int
        if (!is_null($chargeID) && !is_numeric($chargeID)) {
            throw new \InvalidArgumentException(sprintf('Invalid value, please provide a numeric value, "%s" given', gettype($chargeID)), __LINE__);
        }
        $this->ChargeID = $chargeID;
        return $this;
    }
    /**
     * Get ChargeGroupID value
     * @return int
     */
    public function getChargeGroupID()
    {
        return $this->ChargeGroupID;
    }
    /**
     * Set ChargeGroupID value
     * @param int $chargeGroupID
     * @return \SGCIS\Struct\BillServicePointChargeDetail
     */
    public function setChargeGroupID($chargeGroupID = null)
    {
        // validation for constraint: int
        if (!is_null($chargeGroupID) && !is_numeric($chargeGroupID)) {
            throw new \InvalidArgumentException(sprintf('Invalid value, please provide a numeric value, "%s" given', gettype($chargeGroupID)), __LINE__);
        }
        $this->ChargeGroupID = $chargeGroupID;
        return $this;
    }
    /**
     * Get ChargeAmount value
     * @return float
     */
    public function getChargeAmount()
    {
        return $this->ChargeAmount;
    }
    /**
     * Set ChargeAmount value
     * @param float $chargeAmount
     * @return \SGCIS\Struct\BillServicePointChargeDetail
     */
    public function setChargeAmount($chargeAmount = null)
    {
        $this->ChargeAmount = $chargeAmount;
        return $this;
    }
    /**
     * Get CreateDate value
     * @return string
     */
    public function getCreateDate()
    {
        return $this->CreateDate;
    }
    /**
     * Set CreateDate value
     * @param string $createDate
     * @return \SGCIS\Struct\BillServicePointChargeDetail
     */
    public function setCreateDate($createDate = null)
    {
        // validation for constraint: string
        if (!is_null($createDate) && !is_string($createDate)) {
            throw new \InvalidArgumentException(sprintf('Invalid value, please provide a string, "%s" given', gettype($createDate)), __LINE__);
        }
        $this->CreateDate = $createDate;
        return $this;
    }
    /**
     * Get TaxRate value
     * @return float
     */
    public function getTaxRate()
    {
        return $this->TaxRate;
    }
    /**
     * Set TaxRate value
     * @param float $taxRate
     * @return \SGCIS\Struct\BillServicePointChargeDetail
     */
    public function setTaxRate($taxRate = null)
    {
        $this->TaxRate = $taxRate;
        return $this;
    }
    /**
     * Get TaxableAmount value
     * @return float
     */
    public function getTaxableAmount()
    {
        return $this->TaxableAmount;
    }
    /**
     * Set TaxableAmount value
     * @param float $taxableAmount
     * @return \SGCIS\Struct\BillServicePointChargeDetail
     */
    public function setTaxableAmount($taxableAmount = null)
    {
        $this->TaxableAmount = $taxableAmount;
        return $this;
    }
    /**
     * Get ChargeGroupName value
     * @return string|null
     */
    public function getChargeGroupName()
    {
        return $this->ChargeGroupName;
    }
    /**
     * Set ChargeGroupName value
     * @param string $chargeGroupName
     * @return \SGCIS\Struct\BillServicePointChargeDetail
     */
    public function setChargeGroupName($chargeGroupName = null)
    {
        // validation for constraint: string
        if (!is_null($chargeGroupName) && !is_string($chargeGroupName)) {
            throw new \InvalidArgumentException(sprintf('Invalid value, please provide a string, "%s" given', gettype($chargeGroupName)), __LINE__);
        }
        $this->ChargeGroupName = $chargeGroupName;
        return $this;
    }
    /**
     * Get ChargeName value
     * @return string|null
     */
    public function getChargeName()
    {
        return $this->ChargeName;
    }
    /**
     * Set ChargeName value
     * @param string $chargeName
     * @return \SGCIS\Struct\BillServicePointChargeDetail
     */
    public function setChargeName($chargeName = null)
    {
        // validation for constraint: string
        if (!is_null($chargeName) && !is_string($chargeName)) {
            throw new \InvalidArgumentException(sprintf('Invalid value, please provide a string, "%s" given', gettype($chargeName)), __LINE__);
        }
        $this->ChargeName = $chargeName;
        return $this;
    }
    /**
     * Get ChargeCode value
     * @return string|null
     */
    public function getChargeCode()
    {
        return $this->ChargeCode;
    }
    /**
     * Set ChargeCode value
     * @param string $chargeCode
     * @return \SGCIS\Struct\BillServicePointChargeDetail
     */
    public function setChargeCode($chargeCode = null)
    {
        // validation for constraint: string
        if (!is_null($chargeCode) && !is_string($chargeCode)) {
            throw new \InvalidArgumentException(sprintf('Invalid value, please provide a string, "%s" given', gettype($chargeCode)), __LINE__);
        }
        $this->ChargeCode = $chargeCode;
        return $this;
    }
    /**
     * Get TaxAuthorityName value
     * @return string|null
     */
    public function getTaxAuthorityName()
    {
        return $this->TaxAuthorityName;
    }
    /**
     * Set TaxAuthorityName value
     * @param string $taxAuthorityName
     * @return \SGCIS\Struct\BillServicePointChargeDetail
     */
    public function setTaxAuthorityName($taxAuthorityName = null)
    {
        // validation for constraint: string
        if (!is_null($taxAuthorityName) && !is_string($taxAuthorityName)) {
            throw new \InvalidArgumentException(sprintf('Invalid value, please provide a string, "%s" given', gettype($taxAuthorityName)), __LINE__);
        }
        $this->TaxAuthorityName = $taxAuthorityName;
        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 \SGCIS\Struct\BillServicePointChargeDetail
     */
    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__;
    }
}
