<?php
namespace App\Admin\Entity;
use App\Admin\Enum\DomainValueType;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\Common\Collections\Criteria;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
/**
* StdDomainsValues
*/
#[ORM\Table(name: 'std_domains_values')]
#[ORM\Index(name: 'FK_std_domains_values_std_users', columns: ['created_by'])]
#[ORM\Index(name: 'FK_std_domains_values_std_languages', columns: ['language_code'])]
#[ORM\Index(name: 'FK_std_domains_values_std_users_2', columns: ['updated_by'])]
#[ORM\Index(name: 'IDX_3A0935D7115F0EE5', columns: ['domain_id'])]
#[ORM\Index(name: 'FK_std_domains_values_std_domains_values', columns: ['parent_domain_value_id'])]
#[ORM\Index(name: 'idx_erp_code', columns: ['erp_code'])]
#[ORM\UniqueConstraint(name: 'machine_name_domain_language_code_machine_name', columns: ['domain_id', 'language_code', 'machine_name'])]
#[ORM\Entity(repositoryClass: 'App\Admin\Repository\StdDomainsValuesRepository')]
#[UniqueEntity(
fields: ['description', 'domain'],
message: 'domains_unique_value',
)]
#[UniqueEntity(
fields: 'erpCode',
message: 'domains_unique_erpcode',
)]
class StdDomainsValues
{
/**
* @var int
*/
#[ORM\Column(name: 'id', type: 'integer', nullable: false)]
#[ORM\Id]
#[ORM\GeneratedValue(strategy: 'IDENTITY')]
private $id;
/**
* @var string|null
*/
#[ORM\Column(name: 'machine_name', type: 'string', length: 50, nullable: true)]
private $machineName;
/**
* @var string|null
*/
#[ORM\Column(name: 'description', type: 'string', length: 50, nullable: true)]
private $description;
/**
* @var bool|null
*/
#[ORM\Column(name: 'is_active', type: 'boolean', nullable: true, options: ['default' => 1])]
private $isActive = '1';
/**
* @var \DateTime|null
*/
#[ORM\Column(name: 'created_date', type: 'datetime', nullable: true)]
private $createdDate;
/**
* @var \DateTime|null
*/
#[ORM\Column(name: 'updated_date', type: 'datetime', nullable: true)]
private $updatedDate;
/**
* @var \StdUsers
*/
#[ORM\JoinColumn(name: 'updated_by', referencedColumnName: 'id')]
#[ORM\ManyToOne(targetEntity: 'StdUsers')]
private $updatedBy;
/**
* @var \StdLanguages
*/
#[ORM\JoinColumn(name: 'language_code', referencedColumnName: 'language_code')]
#[ORM\ManyToOne(targetEntity: 'StdLanguages')]
private $languageCode;
/**
* @var \StdUsers
*/
#[ORM\JoinColumn(name: 'created_by', referencedColumnName: 'id')]
#[ORM\ManyToOne(targetEntity: 'StdUsers')]
private $createdBy;
/**
* @var \StdDomains
*/
#[ORM\JoinColumn(name: 'domain_id', referencedColumnName: 'id')]
#[ORM\ManyToOne(targetEntity: 'StdDomains', inversedBy: 'values')]
private $domain;
/**
* @var StdDomainsValues
*/
#[ORM\JoinColumn(name: 'parent_domain_value_id', referencedColumnName: 'id')]
#[ORM\ManyToOne(targetEntity: 'StdDomainsValues', inversedBy: 'childrenDomainsValues')]
private $parentDomainValue;
/**
* @var Doctrine\Common\Collections\ArrayCollection|null
*/
#[ORM\OneToMany(targetEntity: 'StdDomainsValues', mappedBy: 'parentDomainValue', cascade: ['persist'])]
private $childrenDomainsValues;
/**
* @var Doctrine\Common\Collections\ArrayCollection|null
*/
#[ORM\OneToMany(targetEntity: 'StdDomainsValuesContent', mappedBy: 'domainValue', cascade: ['persist', 'remove'], orphanRemoval: true)]
private $contents;
/**
* @var string|null
*/
#[ORM\Column(name: 'erp_code', type: 'string', length: 50, nullable: true)]
private $erpCode;
#[ORM\Column(name: 'domain_type', type: 'string', length: 255, nullable: true, options: ['default' => DomainValueType::Generic->value])]
private ?string $type = DomainValueType::Generic->value;
#[ORM\Column(name: 'icon', type: 'string', length: 255, nullable: true)]
private $icon;
/**
* @var int|null
*/
#[ORM\Column(name: 'order_value', type: 'integer', length: 10, nullable: true)]
private $orderValue;
#[ORM\OneToOne(targetEntity: StdGeoMap::class, inversedBy: 'domainValue')]
#[ORM\JoinColumn(name: 'geo_map_id', referencedColumnName: 'id', nullable: true)]
private $geoMap;
public function __construct()
{
$this->contents = new ArrayCollection();
$this->childrenDomainsValues = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
public function getMachineName(): ?string
{
return $this->machineName;
}
public function setMachineName(?string $machineName): self
{
$this->machineName = $machineName;
return $this;
}
public function getDescription(): ?string
{
return $this->description;
}
public function setDescription(?string $description): self
{
$this->description = $description;
return $this;
}
public function getIsActive(): ?bool
{
return $this->isActive;
}
public function setIsActive(?bool $isActive): self
{
$this->isActive = $isActive;
return $this;
}
public function getCreatedDate(): ?\DateTimeInterface
{
return $this->createdDate;
}
public function setCreatedDate(?\DateTimeInterface $createdDate): self
{
$this->createdDate = $createdDate;
return $this;
}
public function getUpdatedDate(): ?\DateTimeInterface
{
return $this->updatedDate;
}
public function setUpdatedDate(?\DateTimeInterface $updatedDate): self
{
$this->updatedDate = $updatedDate;
return $this;
}
public function getUpdatedBy(): ?StdUsers
{
return $this->updatedBy;
}
public function setUpdatedBy(?StdUsers $updatedBy): self
{
$this->updatedBy = $updatedBy;
return $this;
}
public function getLanguageCode(): ?StdLanguages
{
return $this->languageCode;
}
public function setLanguageCode(?StdLanguages $languageCode): self
{
$this->languageCode = $languageCode;
return $this;
}
public function getCreatedBy(): ?StdUsers
{
return $this->createdBy;
}
public function setCreatedBy(?StdUsers $createdBy): self
{
$this->createdBy = $createdBy;
return $this;
}
public function getDomain(): ?StdDomains
{
return $this->domain;
}
public function setDomain(?StdDomains $domain): self
{
$this->domain = $domain;
return $this;
}
public function getParentDomainValue(): ?StdDomainsValues
{
return $this->parentDomainValue;
}
public function setParentDomainValue(?StdDomainsValues $parentDomainValue): self
{
$this->parentDomainValue = $parentDomainValue;
return $this;
}
/**
* @return Collection|EcmShippingMethodsContent[]
*/
public function getChildrenDomainsValues(): ?Collection
{
return $this->childrenDomainsValues;
}
/**
* @return Collection|EcmShippingMethodsContent[]
*/
public function getContents(): ?Collection
{
return $this->contents;
}
public function removeContent(StdDomainsValuesContent $content): self
{
if ($this->contents->contains($content)) {
$this->contents->removeElement($content);
// set the owning side to null (unless already changed)
if ($content->getDomainValue() === $this) {
$content->setDomainValue(null);
}
}
return $this;
}
public function addContent(StdDomainsValuesContent $content): self
{
if (!$this->contents->contains($content)) {
$this->contents[] = $content;
$content->setDomainValue($this);
}
return $this;
}
public function getLocalizedContents(StdLanguages $locale): ?StdDomainsValuesContent
{
$criteria = Criteria::create()
->where(Criteria::expr()->eq("languageCode", $locale))
->setMaxResults(1);
if($this->getContents()){
$contents = $this->getContents()->matching($criteria);
if(count($contents)){
$contents = array_values($contents->toArray());
return $contents[0];
}else{
return null;
}
}else{
return null;
}
}
public function getErpCode(): ?string
{
return $this->erpCode;
}
public function setErpCode(?string $erpCode): self
{
$this->erpCode = $erpCode;
return $this;
}
public function getOrderValue(): ?int
{
return $this->orderValue;
}
public function setOrderValue(?int $orderValue): self
{
$this->orderValue = $orderValue;
return $this;
}
public function getType(): ?DomainValueType
{
return $this->type ? DomainValueType::from($this->type) : null;
}
public function setType(DomainValueType|string|null $type): self
{
if ($type instanceof DomainValueType) {
$this->type = $type->value;
} else {
$this->type = $type;
}
return $this;
}
public function getGeoMap(): ?StdGeoMap
{
return $this->geoMap;
}
public function setGeoMap(?StdGeoMap $geoMap): self
{
$this->geoMap = $geoMap;
return $this;
}
/**
* @return mixed
*/
public function getIcon()
{
return $this->icon;
}
/**
* @param mixed $icon
*/
public function setIcon($icon): void
{
$this->icon = $icon;
}
/**
* Get all ancestor IDs (parent, grandparent, etc.)
*
* @return array
*/
public function getAncestorIds(): array
{
$ancestorIds = [];
$current = $this->parentDomainValue;
while ($current !== null) {
$ancestorIds[] = $current->getId();
$current = $current->getParentDomainValue();
}
return $ancestorIds;
}
/**
* Get all descendant IDs (children, grandchildren, etc.)
*
* @return array
*/
public function getDescendantIds(): array
{
$descendantIds = [];
foreach ($this->childrenDomainsValues as $child) {
$descendantIds[] = $child->getId();
// Recursively get descendants of this child
$descendantIds = array_merge($descendantIds, $child->getDescendantIds());
}
return $descendantIds;
}
}