feat(composant) : add composant slot entities for structure normalization
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -113,6 +113,27 @@ class Composant
|
|||||||
#[ORM\OneToMany(mappedBy: 'composant', targetEntity: MachineComponentLink::class)]
|
#[ORM\OneToMany(mappedBy: 'composant', targetEntity: MachineComponentLink::class)]
|
||||||
private Collection $machineLinks;
|
private Collection $machineLinks;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var Collection<int, ComposantPieceSlot>
|
||||||
|
*/
|
||||||
|
#[ORM\OneToMany(targetEntity: ComposantPieceSlot::class, mappedBy: 'composant', cascade: ['persist', 'remove'], orphanRemoval: true)]
|
||||||
|
#[ORM\OrderBy(['position' => 'ASC'])]
|
||||||
|
private Collection $pieceSlots;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var Collection<int, ComposantSubcomponentSlot>
|
||||||
|
*/
|
||||||
|
#[ORM\OneToMany(targetEntity: ComposantSubcomponentSlot::class, mappedBy: 'composant', cascade: ['persist', 'remove'], orphanRemoval: true)]
|
||||||
|
#[ORM\OrderBy(['position' => 'ASC'])]
|
||||||
|
private Collection $subcomponentSlots;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var Collection<int, ComposantProductSlot>
|
||||||
|
*/
|
||||||
|
#[ORM\OneToMany(targetEntity: ComposantProductSlot::class, mappedBy: 'composant', cascade: ['persist', 'remove'], orphanRemoval: true)]
|
||||||
|
#[ORM\OrderBy(['position' => 'ASC'])]
|
||||||
|
private Collection $productSlots;
|
||||||
|
|
||||||
#[ORM\Column(type: Types::DATETIME_IMMUTABLE, name: 'createdAt')]
|
#[ORM\Column(type: Types::DATETIME_IMMUTABLE, name: 'createdAt')]
|
||||||
#[Groups(['composant:read'])]
|
#[Groups(['composant:read'])]
|
||||||
private DateTimeImmutable $createdAt;
|
private DateTimeImmutable $createdAt;
|
||||||
@@ -129,6 +150,9 @@ class Composant
|
|||||||
$this->documents = new ArrayCollection();
|
$this->documents = new ArrayCollection();
|
||||||
$this->customFieldValues = new ArrayCollection();
|
$this->customFieldValues = new ArrayCollection();
|
||||||
$this->machineLinks = new ArrayCollection();
|
$this->machineLinks = new ArrayCollection();
|
||||||
|
$this->pieceSlots = new ArrayCollection();
|
||||||
|
$this->subcomponentSlots = new ArrayCollection();
|
||||||
|
$this->productSlots = new ArrayCollection();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getName(): string
|
public function getName(): string
|
||||||
@@ -270,4 +294,79 @@ class Composant
|
|||||||
{
|
{
|
||||||
return $this->customFieldValues;
|
return $this->customFieldValues;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Collection<int, ComposantPieceSlot>
|
||||||
|
*/
|
||||||
|
public function getPieceSlots(): Collection
|
||||||
|
{
|
||||||
|
return $this->pieceSlots;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function addPieceSlot(ComposantPieceSlot $pieceSlot): static
|
||||||
|
{
|
||||||
|
if (!$this->pieceSlots->contains($pieceSlot)) {
|
||||||
|
$this->pieceSlots->add($pieceSlot);
|
||||||
|
$pieceSlot->setComposant($this);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function removePieceSlot(ComposantPieceSlot $pieceSlot): static
|
||||||
|
{
|
||||||
|
$this->pieceSlots->removeElement($pieceSlot);
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Collection<int, ComposantSubcomponentSlot>
|
||||||
|
*/
|
||||||
|
public function getSubcomponentSlots(): Collection
|
||||||
|
{
|
||||||
|
return $this->subcomponentSlots;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function addSubcomponentSlot(ComposantSubcomponentSlot $subcomponentSlot): static
|
||||||
|
{
|
||||||
|
if (!$this->subcomponentSlots->contains($subcomponentSlot)) {
|
||||||
|
$this->subcomponentSlots->add($subcomponentSlot);
|
||||||
|
$subcomponentSlot->setComposant($this);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function removeSubcomponentSlot(ComposantSubcomponentSlot $subcomponentSlot): static
|
||||||
|
{
|
||||||
|
$this->subcomponentSlots->removeElement($subcomponentSlot);
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Collection<int, ComposantProductSlot>
|
||||||
|
*/
|
||||||
|
public function getProductSlots(): Collection
|
||||||
|
{
|
||||||
|
return $this->productSlots;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function addProductSlot(ComposantProductSlot $productSlot): static
|
||||||
|
{
|
||||||
|
if (!$this->productSlots->contains($productSlot)) {
|
||||||
|
$this->productSlots->add($productSlot);
|
||||||
|
$productSlot->setComposant($this);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function removeProductSlot(ComposantProductSlot $productSlot): static
|
||||||
|
{
|
||||||
|
$this->productSlots->removeElement($productSlot);
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
112
src/Entity/ComposantPieceSlot.php
Normal file
112
src/Entity/ComposantPieceSlot.php
Normal file
@@ -0,0 +1,112 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace App\Entity;
|
||||||
|
|
||||||
|
use App\Entity\Trait\CuidEntityTrait;
|
||||||
|
use DateTimeImmutable;
|
||||||
|
use Doctrine\DBAL\Types\Types;
|
||||||
|
use Doctrine\ORM\Mapping as ORM;
|
||||||
|
|
||||||
|
#[ORM\Entity]
|
||||||
|
#[ORM\Table(name: 'composant_piece_slots')]
|
||||||
|
#[ORM\HasLifecycleCallbacks]
|
||||||
|
class ComposantPieceSlot
|
||||||
|
{
|
||||||
|
use CuidEntityTrait;
|
||||||
|
|
||||||
|
#[ORM\Id]
|
||||||
|
#[ORM\Column(type: Types::STRING, length: 36)]
|
||||||
|
private ?string $id = null;
|
||||||
|
|
||||||
|
#[ORM\ManyToOne(targetEntity: Composant::class, inversedBy: 'pieceSlots')]
|
||||||
|
#[ORM\JoinColumn(name: 'composantId', referencedColumnName: 'id', nullable: false, onDelete: 'CASCADE')]
|
||||||
|
private Composant $composant;
|
||||||
|
|
||||||
|
#[ORM\ManyToOne(targetEntity: ModelType::class)]
|
||||||
|
#[ORM\JoinColumn(name: 'typePieceId', referencedColumnName: 'id', nullable: true, onDelete: 'SET NULL')]
|
||||||
|
private ?ModelType $typePiece = null;
|
||||||
|
|
||||||
|
#[ORM\ManyToOne(targetEntity: Piece::class)]
|
||||||
|
#[ORM\JoinColumn(name: 'selectedPieceId', referencedColumnName: 'id', nullable: true, onDelete: 'SET NULL')]
|
||||||
|
private ?Piece $selectedPiece = null;
|
||||||
|
|
||||||
|
#[ORM\Column(type: Types::INTEGER, options: ['default' => 1])]
|
||||||
|
private int $quantity = 1;
|
||||||
|
|
||||||
|
#[ORM\Column(type: Types::INTEGER, options: ['default' => 0])]
|
||||||
|
private int $position = 0;
|
||||||
|
|
||||||
|
#[ORM\Column(type: Types::DATETIME_IMMUTABLE, name: 'createdAt')]
|
||||||
|
private DateTimeImmutable $createdAt;
|
||||||
|
|
||||||
|
#[ORM\Column(type: Types::DATETIME_IMMUTABLE, name: 'updatedAt')]
|
||||||
|
private DateTimeImmutable $updatedAt;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->createdAt = new DateTimeImmutable();
|
||||||
|
$this->updatedAt = new DateTimeImmutable();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getComposant(): Composant
|
||||||
|
{
|
||||||
|
return $this->composant;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setComposant(Composant $composant): static
|
||||||
|
{
|
||||||
|
$this->composant = $composant;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getTypePiece(): ?ModelType
|
||||||
|
{
|
||||||
|
return $this->typePiece;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setTypePiece(?ModelType $typePiece): static
|
||||||
|
{
|
||||||
|
$this->typePiece = $typePiece;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getSelectedPiece(): ?Piece
|
||||||
|
{
|
||||||
|
return $this->selectedPiece;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setSelectedPiece(?Piece $selectedPiece): static
|
||||||
|
{
|
||||||
|
$this->selectedPiece = $selectedPiece;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getQuantity(): int
|
||||||
|
{
|
||||||
|
return $this->quantity;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setQuantity(int $quantity): static
|
||||||
|
{
|
||||||
|
$this->quantity = $quantity;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getPosition(): int
|
||||||
|
{
|
||||||
|
return $this->position;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setPosition(int $position): static
|
||||||
|
{
|
||||||
|
$this->position = $position;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
}
|
||||||
112
src/Entity/ComposantProductSlot.php
Normal file
112
src/Entity/ComposantProductSlot.php
Normal file
@@ -0,0 +1,112 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace App\Entity;
|
||||||
|
|
||||||
|
use App\Entity\Trait\CuidEntityTrait;
|
||||||
|
use DateTimeImmutable;
|
||||||
|
use Doctrine\DBAL\Types\Types;
|
||||||
|
use Doctrine\ORM\Mapping as ORM;
|
||||||
|
|
||||||
|
#[ORM\Entity]
|
||||||
|
#[ORM\Table(name: 'composant_product_slots')]
|
||||||
|
#[ORM\HasLifecycleCallbacks]
|
||||||
|
class ComposantProductSlot
|
||||||
|
{
|
||||||
|
use CuidEntityTrait;
|
||||||
|
|
||||||
|
#[ORM\Id]
|
||||||
|
#[ORM\Column(type: Types::STRING, length: 36)]
|
||||||
|
private ?string $id = null;
|
||||||
|
|
||||||
|
#[ORM\ManyToOne(targetEntity: Composant::class, inversedBy: 'productSlots')]
|
||||||
|
#[ORM\JoinColumn(name: 'composantId', referencedColumnName: 'id', nullable: false, onDelete: 'CASCADE')]
|
||||||
|
private Composant $composant;
|
||||||
|
|
||||||
|
#[ORM\ManyToOne(targetEntity: ModelType::class)]
|
||||||
|
#[ORM\JoinColumn(name: 'typeProductId', referencedColumnName: 'id', nullable: true, onDelete: 'SET NULL')]
|
||||||
|
private ?ModelType $typeProduct = null;
|
||||||
|
|
||||||
|
#[ORM\ManyToOne(targetEntity: Product::class)]
|
||||||
|
#[ORM\JoinColumn(name: 'selectedProductId', referencedColumnName: 'id', nullable: true, onDelete: 'SET NULL')]
|
||||||
|
private ?Product $selectedProduct = null;
|
||||||
|
|
||||||
|
#[ORM\Column(type: Types::STRING, length: 255, nullable: true, name: 'familyCode')]
|
||||||
|
private ?string $familyCode = null;
|
||||||
|
|
||||||
|
#[ORM\Column(type: Types::INTEGER, options: ['default' => 0])]
|
||||||
|
private int $position = 0;
|
||||||
|
|
||||||
|
#[ORM\Column(type: Types::DATETIME_IMMUTABLE, name: 'createdAt')]
|
||||||
|
private DateTimeImmutable $createdAt;
|
||||||
|
|
||||||
|
#[ORM\Column(type: Types::DATETIME_IMMUTABLE, name: 'updatedAt')]
|
||||||
|
private DateTimeImmutable $updatedAt;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->createdAt = new DateTimeImmutable();
|
||||||
|
$this->updatedAt = new DateTimeImmutable();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getComposant(): Composant
|
||||||
|
{
|
||||||
|
return $this->composant;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setComposant(Composant $composant): static
|
||||||
|
{
|
||||||
|
$this->composant = $composant;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getTypeProduct(): ?ModelType
|
||||||
|
{
|
||||||
|
return $this->typeProduct;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setTypeProduct(?ModelType $typeProduct): static
|
||||||
|
{
|
||||||
|
$this->typeProduct = $typeProduct;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getSelectedProduct(): ?Product
|
||||||
|
{
|
||||||
|
return $this->selectedProduct;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setSelectedProduct(?Product $selectedProduct): static
|
||||||
|
{
|
||||||
|
$this->selectedProduct = $selectedProduct;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getFamilyCode(): ?string
|
||||||
|
{
|
||||||
|
return $this->familyCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setFamilyCode(?string $familyCode): static
|
||||||
|
{
|
||||||
|
$this->familyCode = $familyCode;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getPosition(): int
|
||||||
|
{
|
||||||
|
return $this->position;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setPosition(int $position): static
|
||||||
|
{
|
||||||
|
$this->position = $position;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
}
|
||||||
127
src/Entity/ComposantSubcomponentSlot.php
Normal file
127
src/Entity/ComposantSubcomponentSlot.php
Normal file
@@ -0,0 +1,127 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace App\Entity;
|
||||||
|
|
||||||
|
use App\Entity\Trait\CuidEntityTrait;
|
||||||
|
use DateTimeImmutable;
|
||||||
|
use Doctrine\DBAL\Types\Types;
|
||||||
|
use Doctrine\ORM\Mapping as ORM;
|
||||||
|
|
||||||
|
#[ORM\Entity]
|
||||||
|
#[ORM\Table(name: 'composant_subcomponent_slots')]
|
||||||
|
#[ORM\HasLifecycleCallbacks]
|
||||||
|
class ComposantSubcomponentSlot
|
||||||
|
{
|
||||||
|
use CuidEntityTrait;
|
||||||
|
|
||||||
|
#[ORM\Id]
|
||||||
|
#[ORM\Column(type: Types::STRING, length: 36)]
|
||||||
|
private ?string $id = null;
|
||||||
|
|
||||||
|
#[ORM\ManyToOne(targetEntity: Composant::class, inversedBy: 'subcomponentSlots')]
|
||||||
|
#[ORM\JoinColumn(name: 'composantId', referencedColumnName: 'id', nullable: false, onDelete: 'CASCADE')]
|
||||||
|
private Composant $composant;
|
||||||
|
|
||||||
|
#[ORM\Column(type: Types::STRING, length: 255, nullable: true)]
|
||||||
|
private ?string $alias = null;
|
||||||
|
|
||||||
|
#[ORM\Column(type: Types::STRING, length: 255, nullable: true, name: 'familyCode')]
|
||||||
|
private ?string $familyCode = null;
|
||||||
|
|
||||||
|
#[ORM\ManyToOne(targetEntity: ModelType::class)]
|
||||||
|
#[ORM\JoinColumn(name: 'typeComposantId', referencedColumnName: 'id', nullable: true, onDelete: 'SET NULL')]
|
||||||
|
private ?ModelType $typeComposant = null;
|
||||||
|
|
||||||
|
#[ORM\ManyToOne(targetEntity: Composant::class)]
|
||||||
|
#[ORM\JoinColumn(name: 'selectedComposantId', referencedColumnName: 'id', nullable: true, onDelete: 'SET NULL')]
|
||||||
|
private ?Composant $selectedComposant = null;
|
||||||
|
|
||||||
|
#[ORM\Column(type: Types::INTEGER, options: ['default' => 0])]
|
||||||
|
private int $position = 0;
|
||||||
|
|
||||||
|
#[ORM\Column(type: Types::DATETIME_IMMUTABLE, name: 'createdAt')]
|
||||||
|
private DateTimeImmutable $createdAt;
|
||||||
|
|
||||||
|
#[ORM\Column(type: Types::DATETIME_IMMUTABLE, name: 'updatedAt')]
|
||||||
|
private DateTimeImmutable $updatedAt;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->createdAt = new DateTimeImmutable();
|
||||||
|
$this->updatedAt = new DateTimeImmutable();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getComposant(): Composant
|
||||||
|
{
|
||||||
|
return $this->composant;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setComposant(Composant $composant): static
|
||||||
|
{
|
||||||
|
$this->composant = $composant;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAlias(): ?string
|
||||||
|
{
|
||||||
|
return $this->alias;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setAlias(?string $alias): static
|
||||||
|
{
|
||||||
|
$this->alias = $alias;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getFamilyCode(): ?string
|
||||||
|
{
|
||||||
|
return $this->familyCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setFamilyCode(?string $familyCode): static
|
||||||
|
{
|
||||||
|
$this->familyCode = $familyCode;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getTypeComposant(): ?ModelType
|
||||||
|
{
|
||||||
|
return $this->typeComposant;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setTypeComposant(?ModelType $typeComposant): static
|
||||||
|
{
|
||||||
|
$this->typeComposant = $typeComposant;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getSelectedComposant(): ?Composant
|
||||||
|
{
|
||||||
|
return $this->selectedComposant;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setSelectedComposant(?Composant $selectedComposant): static
|
||||||
|
{
|
||||||
|
$this->selectedComposant = $selectedComposant;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getPosition(): int
|
||||||
|
{
|
||||||
|
return $this->position;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setPosition(int $position): static
|
||||||
|
{
|
||||||
|
$this->position = $position;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user