Part-DB.Part-DB-server/src/Entity/Parts/PartTraits/ManufacturerTrait.php
2019-09-16 22:04:59 +02:00

194 lines
No EOL
6.3 KiB
PHP

<?php
/**
*
* part-db version 0.1
* Copyright (C) 2005 Christoph Lechner
* http://www.cl-projects.de/
*
* part-db version 0.2+
* Copyright (C) 2009 K. Jacobs and others (see authors.php)
* http://code.google.com/p/part-db/
*
* Part-DB Version 0.4+
* Copyright (C) 2016 - 2019 Jan Böhmer
* https://github.com/jbtronics
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*
*/
namespace App\Entity\Parts\PartTraits;
use App\Entity\Parts\Manufacturer;
use App\Entity\Parts\Part;
use App\Security\Annotations\ColumnSecurity;
use App\Validator\Constraints\Selectable;
/**
* In this trait all manufacturer related properties of a part are collected (like MPN, manufacturer URL).
* @package App\Entity\Parts\PartTraits
*/
trait ManufacturerTrait
{
/**
* @var Manufacturer|null The manufacturer of this part
* @ORM\ManyToOne(targetEntity="Manufacturer", inversedBy="parts")
* @ORM\JoinColumn(name="id_manufacturer", referencedColumnName="id")
* @ColumnSecurity(prefix="manufacturer", type="App\Entity\Parts\Manufacturer")
* @Selectable()
*/
protected $manufacturer;
/**
* @var string The url to the part on the manufacturer's homepage.
* @ORM\Column(type="string")
* @Assert\Url()
* @ColumnSecurity(prefix="mpn", type="string", placeholder="")
*/
protected $manufacturer_product_url = '';
/**
* @var string The product number used by the manufacturer. If this is set to "", the name field is used.
* @ORM\Column(type="string")
* @ColumnSecurity(prefix="mpn", type="string", placeholder="")
*/
protected $manufacturer_product_number = '';
/**
* @var string The production status of this part. Can be one of the specified ones.
* @ORM\Column(type="string", length=255, nullable=true)
* @Assert\Choice({"announced", "active", "nrfnd", "eol", "discontinued", ""})
* @ColumnSecurity(type="string", prefix="status", placeholder="")
*/
protected $manufacturing_status = '';
/**
* Get the link to the website of the article on the manufacturers website
* When no this part has no explicit url set, then it is tried to generate one from the Manufacturer of this part
* automatically.
* @return string the link to the article
*/
public function getManufacturerProductUrl(): string
{
if ('' !== $this->manufacturer_product_url) {
return $this->manufacturer_product_url;
}
if (null !== $this->getManufacturer()) {
return $this->getManufacturer()->getAutoProductUrl($this->name);
}
return ''; // no url is available
}
/**
* Similar to getManufacturerProductUrl, but here only the database value is returned.
* @return string The manufacturer url saved in DB for this part.
*/
public function getCustomProductURL(): string
{
return $this->manufacturer_product_url;
}
/**
* Returns the manufacturing/production status for this part.
* The status can be one of the following:
* (Similar to https://designspark.zendesk.com/hc/en-us/articles/213584805-What-are-the-Lifecycle-Status-definitions-)
* * "": Status unknown
* * "announced": Part has been announced, but is not in production yet
* * "active": Part is in production and will be for the forseeable future
* * "nrfnd": Not recommended for new designs.
* * "eol": Part will become discontinued soon
* * "discontinued": Part is obsolete/discontinued by the manufacturer
* @return string
*/
public function getManufacturingStatus(): ?string
{
return $this->manufacturing_status;
}
/**
* Sets the manufacturing status for this part
* See getManufacturingStatus() for valid values.
* @param string $manufacturing_status
* @return Part
*/
public function setManufacturingStatus(string $manufacturing_status): self
{
$this->manufacturing_status = $manufacturing_status;
return $this;
}
/**
* Get the manufacturer of this part (if there is one).
*
* @return Manufacturer the manufacturer of this part (if there is one)
*/
public function getManufacturer(): ?Manufacturer
{
return $this->manufacturer;
}
/**
* Returns the assigned manufacturer product number (MPN) for this part.
* @return string
*/
public function getManufacturerProductNumber(): string
{
return $this->manufacturer_product_number;
}
/**
* Sets the manufacturer product number (MPN) for this part.
* @param string $manufacturer_product_number
* @return Part
*/
public function setManufacturerProductNumber(string $manufacturer_product_number): self
{
$this->manufacturer_product_number = $manufacturer_product_number;
return $this;
}
/**
* Sets the URL to the manufacturer site about this Part.
* Set to "" if this part should use the automatically URL based on its manufacturer.
* @param string $new_url The new url
* @return self
*/
public function setManufacturerProductURL(string $new_url): self
{
$this->manufacturer_product_url = $new_url;
return $this;
}
/**
* Sets the new manufacturer of this part.
*
* @param Manufacturer|null $new_manufacturer The new Manufacturer of this part. Set to null, if this part should
* not have a manufacturer.
*
* @return self
*/
public function setManufacturer(?Manufacturer $new_manufacturer): self
{
$this->manufacturer = $new_manufacturer;
return $this;
}
}