mirror of
https://github.com/Part-DB/Part-DB-server.git
synced 2025-12-26 04:49:32 +00:00
Split Part entity class into multiple traits.
The part class has become very big and clumsy, that way it should be easier to maintain this entity...
This commit is contained in:
parent
3ecbe19fd6
commit
f7c2f1032f
8 changed files with 1041 additions and 774 deletions
194
src/Entity/Parts/PartTraits/ManufacturerTrait.php
Normal file
194
src/Entity/Parts/PartTraits/ManufacturerTrait.php
Normal file
|
|
@ -0,0 +1,194 @@
|
|||
<?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;
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue