<?php

namespace StructType;

use \WsdlToPhp\PackageBase\AbstractStructBase;

/**
 * This class stands for ArtigoMoedaERP StructType
 * Meta informations extracted from the WSDL
 * - nillable: true
 * - type: tns:ArtigoMoedaERP
 * @subpackage Structs
 */
class ArtigoMoedaERP extends AbstractStructBase
{
    /**
     * The Artigo
     * Meta informations extracted from the WSDL
     * - minOccurs: 0
     * - nillable: true
     * @var string
     */
    public $Artigo;
    /**
     * The Moeda
     * Meta informations extracted from the WSDL
     * - minOccurs: 0
     * - nillable: true
     * @var string
     */
    public $Moeda;
    /**
     * The PVP1
     * Meta informations extracted from the WSDL
     * - minOccurs: 0
     * - nillable: true
     * @var float
     */
    public $PVP1;
    /**
     * The PVP1IvaIncluido
     * Meta informations extracted from the WSDL
     * - minOccurs: 0
     * @var bool
     */
    public $PVP1IvaIncluido;
    /**
     * The PVP2
     * Meta informations extracted from the WSDL
     * - minOccurs: 0
     * - nillable: true
     * @var float
     */
    public $PVP2;
    /**
     * The PVP2IvaIncluido
     * Meta informations extracted from the WSDL
     * - minOccurs: 0
     * @var bool
     */
    public $PVP2IvaIncluido;
    /**
     * The PVP3
     * Meta informations extracted from the WSDL
     * - minOccurs: 0
     * - nillable: true
     * @var float
     */
    public $PVP3;
    /**
     * The PVP3IvaIncluido
     * Meta informations extracted from the WSDL
     * - minOccurs: 0
     * @var bool
     */
    public $PVP3IvaIncluido;
    /**
     * The PVP4
     * Meta informations extracted from the WSDL
     * - minOccurs: 0
     * - nillable: true
     * @var float
     */
    public $PVP4;
    /**
     * The PVP4IvaIncluido
     * Meta informations extracted from the WSDL
     * - minOccurs: 0
     * @var bool
     */
    public $PVP4IvaIncluido;
    /**
     * The PVP5
     * Meta informations extracted from the WSDL
     * - minOccurs: 0
     * - nillable: true
     * @var float
     */
    public $PVP5;
    /**
     * The PVP5IvaIncluido
     * Meta informations extracted from the WSDL
     * - minOccurs: 0
     * @var bool
     */
    public $PVP5IvaIncluido;
    /**
     * The PVP6
     * Meta informations extracted from the WSDL
     * - minOccurs: 0
     * - nillable: true
     * @var float
     */
    public $PVP6;
    /**
     * The PVP6IvaIncluido
     * Meta informations extracted from the WSDL
     * - minOccurs: 0
     * @var bool
     */
    public $PVP6IvaIncluido;
    /**
     * The Protegida
     * Meta informations extracted from the WSDL
     * - minOccurs: 0
     * @var bool
     */
    public $Protegida;
    /**
     * The Unidade
     * Meta informations extracted from the WSDL
     * - minOccurs: 0
     * - nillable: true
     * @var string
     */
    public $Unidade;
    /**
     * The VersaoUltAct
     * Meta informations extracted from the WSDL
     * - minOccurs: 0
     * @var string
     */
    public $VersaoUltAct;
    /**
     * Constructor method for ArtigoMoedaERP
     * @uses ArtigoMoedaERP::setArtigo()
     * @uses ArtigoMoedaERP::setMoeda()
     * @uses ArtigoMoedaERP::setPVP1()
     * @uses ArtigoMoedaERP::setPVP1IvaIncluido()
     * @uses ArtigoMoedaERP::setPVP2()
     * @uses ArtigoMoedaERP::setPVP2IvaIncluido()
     * @uses ArtigoMoedaERP::setPVP3()
     * @uses ArtigoMoedaERP::setPVP3IvaIncluido()
     * @uses ArtigoMoedaERP::setPVP4()
     * @uses ArtigoMoedaERP::setPVP4IvaIncluido()
     * @uses ArtigoMoedaERP::setPVP5()
     * @uses ArtigoMoedaERP::setPVP5IvaIncluido()
     * @uses ArtigoMoedaERP::setPVP6()
     * @uses ArtigoMoedaERP::setPVP6IvaIncluido()
     * @uses ArtigoMoedaERP::setProtegida()
     * @uses ArtigoMoedaERP::setUnidade()
     * @uses ArtigoMoedaERP::setVersaoUltAct()
     * @param string $artigo
     * @param string $moeda
     * @param float $pVP1
     * @param bool $pVP1IvaIncluido
     * @param float $pVP2
     * @param bool $pVP2IvaIncluido
     * @param float $pVP3
     * @param bool $pVP3IvaIncluido
     * @param float $pVP4
     * @param bool $pVP4IvaIncluido
     * @param float $pVP5
     * @param bool $pVP5IvaIncluido
     * @param float $pVP6
     * @param bool $pVP6IvaIncluido
     * @param bool $protegida
     * @param string $unidade
     * @param string $versaoUltAct
     */
    public function __construct($artigo = null, $moeda = null, $pVP1 = null, $pVP1IvaIncluido = null, $pVP2 = null, $pVP2IvaIncluido = null, $pVP3 = null, $pVP3IvaIncluido = null, $pVP4 = null, $pVP4IvaIncluido = null, $pVP5 = null, $pVP5IvaIncluido = null, $pVP6 = null, $pVP6IvaIncluido = null, $protegida = null, $unidade = null, $versaoUltAct = null)
    {
        $this
            ->setArtigo($artigo)
            ->setMoeda($moeda)
            ->setPVP1($pVP1)
            ->setPVP1IvaIncluido($pVP1IvaIncluido)
            ->setPVP2($pVP2)
            ->setPVP2IvaIncluido($pVP2IvaIncluido)
            ->setPVP3($pVP3)
            ->setPVP3IvaIncluido($pVP3IvaIncluido)
            ->setPVP4($pVP4)
            ->setPVP4IvaIncluido($pVP4IvaIncluido)
            ->setPVP5($pVP5)
            ->setPVP5IvaIncluido($pVP5IvaIncluido)
            ->setPVP6($pVP6)
            ->setPVP6IvaIncluido($pVP6IvaIncluido)
            ->setProtegida($protegida)
            ->setUnidade($unidade)
            ->setVersaoUltAct($versaoUltAct);
    }
    /**
     * Get Artigo value
     * An additional test has been added (isset) before returning the property value as
     * this property may have been unset before, due to the fact that this property is
     * removable from the request (nillable=true+minOccurs=0)
     * @return string|null
     */
    public function getArtigo()
    {
        return isset($this->Artigo) ? $this->Artigo : null;
    }
    /**
     * Set Artigo value
     * This property is removable from request (nillable=true+minOccurs=0), therefore
     * if the value assigned to this property is null, it is removed from this object
     * @param string $artigo
     * @return \StructType\ArtigoMoedaERP
     */
    public function setArtigo($artigo = null)
    {
        // validation for constraint: string
        if (!is_null($artigo) && !is_string($artigo)) {
            throw new \InvalidArgumentException(sprintf('Invalid value, please provide a string, "%s" given', gettype($artigo)), __LINE__);
        }
        if (is_null($artigo) || (is_array($artigo) && empty($artigo))) {
            unset($this->Artigo);
        } else {
            $this->Artigo = $artigo;
        }
        return $this;
    }
    /**
     * Get Moeda value
     * An additional test has been added (isset) before returning the property value as
     * this property may have been unset before, due to the fact that this property is
     * removable from the request (nillable=true+minOccurs=0)
     * @return string|null
     */
    public function getMoeda()
    {
        return isset($this->Moeda) ? $this->Moeda : null;
    }
    /**
     * Set Moeda value
     * This property is removable from request (nillable=true+minOccurs=0), therefore
     * if the value assigned to this property is null, it is removed from this object
     * @param string $moeda
     * @return \StructType\ArtigoMoedaERP
     */
    public function setMoeda($moeda = null)
    {
        // validation for constraint: string
        if (!is_null($moeda) && !is_string($moeda)) {
            throw new \InvalidArgumentException(sprintf('Invalid value, please provide a string, "%s" given', gettype($moeda)), __LINE__);
        }
        if (is_null($moeda) || (is_array($moeda) && empty($moeda))) {
            unset($this->Moeda);
        } else {
            $this->Moeda = $moeda;
        }
        return $this;
    }
    /**
     * Get PVP1 value
     * An additional test has been added (isset) before returning the property value as
     * this property may have been unset before, due to the fact that this property is
     * removable from the request (nillable=true+minOccurs=0)
     * @return float|null
     */
    public function getPVP1()
    {
        return isset($this->PVP1) ? $this->PVP1 : null;
    }
    /**
     * Set PVP1 value
     * This property is removable from request (nillable=true+minOccurs=0), therefore
     * if the value assigned to this property is null, it is removed from this object
     * @param float $pVP1
     * @return \StructType\ArtigoMoedaERP
     */
    public function setPVP1($pVP1 = null)
    {
        if (is_null($pVP1) || (is_array($pVP1) && empty($pVP1))) {
            unset($this->PVP1);
        } else {
            $this->PVP1 = $pVP1;
        }
        return $this;
    }
    /**
     * Get PVP1IvaIncluido value
     * @return bool|null
     */
    public function getPVP1IvaIncluido()
    {
        return $this->PVP1IvaIncluido;
    }
    /**
     * Set PVP1IvaIncluido value
     * @param bool $pVP1IvaIncluido
     * @return \StructType\ArtigoMoedaERP
     */
    public function setPVP1IvaIncluido($pVP1IvaIncluido = null)
    {
        // validation for constraint: boolean
        if (!is_null($pVP1IvaIncluido) && !is_bool($pVP1IvaIncluido)) {
            throw new \InvalidArgumentException(sprintf('Invalid value, please provide a bool, "%s" given', gettype($pVP1IvaIncluido)), __LINE__);
        }
        $this->PVP1IvaIncluido = $pVP1IvaIncluido;
        return $this;
    }
    /**
     * Get PVP2 value
     * An additional test has been added (isset) before returning the property value as
     * this property may have been unset before, due to the fact that this property is
     * removable from the request (nillable=true+minOccurs=0)
     * @return float|null
     */
    public function getPVP2()
    {
        return isset($this->PVP2) ? $this->PVP2 : null;
    }
    /**
     * Set PVP2 value
     * This property is removable from request (nillable=true+minOccurs=0), therefore
     * if the value assigned to this property is null, it is removed from this object
     * @param float $pVP2
     * @return \StructType\ArtigoMoedaERP
     */
    public function setPVP2($pVP2 = null)
    {
        if (is_null($pVP2) || (is_array($pVP2) && empty($pVP2))) {
            unset($this->PVP2);
        } else {
            $this->PVP2 = $pVP2;
        }
        return $this;
    }
    /**
     * Get PVP2IvaIncluido value
     * @return bool|null
     */
    public function getPVP2IvaIncluido()
    {
        return $this->PVP2IvaIncluido;
    }
    /**
     * Set PVP2IvaIncluido value
     * @param bool $pVP2IvaIncluido
     * @return \StructType\ArtigoMoedaERP
     */
    public function setPVP2IvaIncluido($pVP2IvaIncluido = null)
    {
        // validation for constraint: boolean
        if (!is_null($pVP2IvaIncluido) && !is_bool($pVP2IvaIncluido)) {
            throw new \InvalidArgumentException(sprintf('Invalid value, please provide a bool, "%s" given', gettype($pVP2IvaIncluido)), __LINE__);
        }
        $this->PVP2IvaIncluido = $pVP2IvaIncluido;
        return $this;
    }
    /**
     * Get PVP3 value
     * An additional test has been added (isset) before returning the property value as
     * this property may have been unset before, due to the fact that this property is
     * removable from the request (nillable=true+minOccurs=0)
     * @return float|null
     */
    public function getPVP3()
    {
        return isset($this->PVP3) ? $this->PVP3 : null;
    }
    /**
     * Set PVP3 value
     * This property is removable from request (nillable=true+minOccurs=0), therefore
     * if the value assigned to this property is null, it is removed from this object
     * @param float $pVP3
     * @return \StructType\ArtigoMoedaERP
     */
    public function setPVP3($pVP3 = null)
    {
        if (is_null($pVP3) || (is_array($pVP3) && empty($pVP3))) {
            unset($this->PVP3);
        } else {
            $this->PVP3 = $pVP3;
        }
        return $this;
    }
    /**
     * Get PVP3IvaIncluido value
     * @return bool|null
     */
    public function getPVP3IvaIncluido()
    {
        return $this->PVP3IvaIncluido;
    }
    /**
     * Set PVP3IvaIncluido value
     * @param bool $pVP3IvaIncluido
     * @return \StructType\ArtigoMoedaERP
     */
    public function setPVP3IvaIncluido($pVP3IvaIncluido = null)
    {
        // validation for constraint: boolean
        if (!is_null($pVP3IvaIncluido) && !is_bool($pVP3IvaIncluido)) {
            throw new \InvalidArgumentException(sprintf('Invalid value, please provide a bool, "%s" given', gettype($pVP3IvaIncluido)), __LINE__);
        }
        $this->PVP3IvaIncluido = $pVP3IvaIncluido;
        return $this;
    }
    /**
     * Get PVP4 value
     * An additional test has been added (isset) before returning the property value as
     * this property may have been unset before, due to the fact that this property is
     * removable from the request (nillable=true+minOccurs=0)
     * @return float|null
     */
    public function getPVP4()
    {
        return isset($this->PVP4) ? $this->PVP4 : null;
    }
    /**
     * Set PVP4 value
     * This property is removable from request (nillable=true+minOccurs=0), therefore
     * if the value assigned to this property is null, it is removed from this object
     * @param float $pVP4
     * @return \StructType\ArtigoMoedaERP
     */
    public function setPVP4($pVP4 = null)
    {
        if (is_null($pVP4) || (is_array($pVP4) && empty($pVP4))) {
            unset($this->PVP4);
        } else {
            $this->PVP4 = $pVP4;
        }
        return $this;
    }
    /**
     * Get PVP4IvaIncluido value
     * @return bool|null
     */
    public function getPVP4IvaIncluido()
    {
        return $this->PVP4IvaIncluido;
    }
    /**
     * Set PVP4IvaIncluido value
     * @param bool $pVP4IvaIncluido
     * @return \StructType\ArtigoMoedaERP
     */
    public function setPVP4IvaIncluido($pVP4IvaIncluido = null)
    {
        // validation for constraint: boolean
        if (!is_null($pVP4IvaIncluido) && !is_bool($pVP4IvaIncluido)) {
            throw new \InvalidArgumentException(sprintf('Invalid value, please provide a bool, "%s" given', gettype($pVP4IvaIncluido)), __LINE__);
        }
        $this->PVP4IvaIncluido = $pVP4IvaIncluido;
        return $this;
    }
    /**
     * Get PVP5 value
     * An additional test has been added (isset) before returning the property value as
     * this property may have been unset before, due to the fact that this property is
     * removable from the request (nillable=true+minOccurs=0)
     * @return float|null
     */
    public function getPVP5()
    {
        return isset($this->PVP5) ? $this->PVP5 : null;
    }
    /**
     * Set PVP5 value
     * This property is removable from request (nillable=true+minOccurs=0), therefore
     * if the value assigned to this property is null, it is removed from this object
     * @param float $pVP5
     * @return \StructType\ArtigoMoedaERP
     */
    public function setPVP5($pVP5 = null)
    {
        if (is_null($pVP5) || (is_array($pVP5) && empty($pVP5))) {
            unset($this->PVP5);
        } else {
            $this->PVP5 = $pVP5;
        }
        return $this;
    }
    /**
     * Get PVP5IvaIncluido value
     * @return bool|null
     */
    public function getPVP5IvaIncluido()
    {
        return $this->PVP5IvaIncluido;
    }
    /**
     * Set PVP5IvaIncluido value
     * @param bool $pVP5IvaIncluido
     * @return \StructType\ArtigoMoedaERP
     */
    public function setPVP5IvaIncluido($pVP5IvaIncluido = null)
    {
        // validation for constraint: boolean
        if (!is_null($pVP5IvaIncluido) && !is_bool($pVP5IvaIncluido)) {
            throw new \InvalidArgumentException(sprintf('Invalid value, please provide a bool, "%s" given', gettype($pVP5IvaIncluido)), __LINE__);
        }
        $this->PVP5IvaIncluido = $pVP5IvaIncluido;
        return $this;
    }
    /**
     * Get PVP6 value
     * An additional test has been added (isset) before returning the property value as
     * this property may have been unset before, due to the fact that this property is
     * removable from the request (nillable=true+minOccurs=0)
     * @return float|null
     */
    public function getPVP6()
    {
        return isset($this->PVP6) ? $this->PVP6 : null;
    }
    /**
     * Set PVP6 value
     * This property is removable from request (nillable=true+minOccurs=0), therefore
     * if the value assigned to this property is null, it is removed from this object
     * @param float $pVP6
     * @return \StructType\ArtigoMoedaERP
     */
    public function setPVP6($pVP6 = null)
    {
        if (is_null($pVP6) || (is_array($pVP6) && empty($pVP6))) {
            unset($this->PVP6);
        } else {
            $this->PVP6 = $pVP6;
        }
        return $this;
    }
    /**
     * Get PVP6IvaIncluido value
     * @return bool|null
     */
    public function getPVP6IvaIncluido()
    {
        return $this->PVP6IvaIncluido;
    }
    /**
     * Set PVP6IvaIncluido value
     * @param bool $pVP6IvaIncluido
     * @return \StructType\ArtigoMoedaERP
     */
    public function setPVP6IvaIncluido($pVP6IvaIncluido = null)
    {
        // validation for constraint: boolean
        if (!is_null($pVP6IvaIncluido) && !is_bool($pVP6IvaIncluido)) {
            throw new \InvalidArgumentException(sprintf('Invalid value, please provide a bool, "%s" given', gettype($pVP6IvaIncluido)), __LINE__);
        }
        $this->PVP6IvaIncluido = $pVP6IvaIncluido;
        return $this;
    }
    /**
     * Get Protegida value
     * @return bool|null
     */
    public function getProtegida()
    {
        return $this->Protegida;
    }
    /**
     * Set Protegida value
     * @param bool $protegida
     * @return \StructType\ArtigoMoedaERP
     */
    public function setProtegida($protegida = null)
    {
        // validation for constraint: boolean
        if (!is_null($protegida) && !is_bool($protegida)) {
            throw new \InvalidArgumentException(sprintf('Invalid value, please provide a bool, "%s" given', gettype($protegida)), __LINE__);
        }
        $this->Protegida = $protegida;
        return $this;
    }
    /**
     * Get Unidade value
     * An additional test has been added (isset) before returning the property value as
     * this property may have been unset before, due to the fact that this property is
     * removable from the request (nillable=true+minOccurs=0)
     * @return string|null
     */
    public function getUnidade()
    {
        return isset($this->Unidade) ? $this->Unidade : null;
    }
    /**
     * Set Unidade value
     * This property is removable from request (nillable=true+minOccurs=0), therefore
     * if the value assigned to this property is null, it is removed from this object
     * @param string $unidade
     * @return \StructType\ArtigoMoedaERP
     */
    public function setUnidade($unidade = null)
    {
        // validation for constraint: string
        if (!is_null($unidade) && !is_string($unidade)) {
            throw new \InvalidArgumentException(sprintf('Invalid value, please provide a string, "%s" given', gettype($unidade)), __LINE__);
        }
        if (is_null($unidade) || (is_array($unidade) && empty($unidade))) {
            unset($this->Unidade);
        } else {
            $this->Unidade = $unidade;
        }
        return $this;
    }
    /**
     * Get VersaoUltAct value
     * @return string|null
     */
    public function getVersaoUltAct()
    {
        return $this->VersaoUltAct;
    }
    /**
     * Set VersaoUltAct value
     * @param string $versaoUltAct
     * @return \StructType\ArtigoMoedaERP
     */
    public function setVersaoUltAct($versaoUltAct = null)
    {
        // validation for constraint: string
        if (!is_null($versaoUltAct) && !is_string($versaoUltAct)) {
            throw new \InvalidArgumentException(sprintf('Invalid value, please provide a string, "%s" given', gettype($versaoUltAct)), __LINE__);
        }
        $this->VersaoUltAct = $versaoUltAct;
        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 \StructType\ArtigoMoedaERP
     */
    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__;
    }
}
