src/Entity/Formula.php line 14

  1. <?php
  2. namespace App\Entity;
  3. use App\Enum\FormulaType;
  4. use App\Repository\FormulaRepository;
  5. use Doctrine\Common\Collections\ArrayCollection;
  6. use Doctrine\Common\Collections\Collection;
  7. use Doctrine\DBAL\Types\Types;
  8. use Doctrine\ORM\Mapping as ORM;
  9. use Gedmo\Timestampable\Traits\TimestampableEntity;
  10. #[ORM\Entity(repositoryClassFormulaRepository::class)]
  11. class Formula
  12. {
  13.     use TimestampableEntity;
  14.     #[ORM\Id]
  15.     #[ORM\GeneratedValue]
  16.     #[ORM\Column]
  17.     private ?int $id null;
  18.     #[ORM\Column(length255)]
  19.     private ?string $name null;
  20.     #[ORM\Column(typeTypes::TEXTnullabletrue)]
  21.     private ?string $formulaExpression null;
  22.     #[ORM\Column(typeTypes::TEXTnullabletrue)]
  23.     private ?string $description null;
  24.     #[ORM\Column(length255)]
  25.     private ?FormulaType $formulaType null;
  26.     #[ORM\OneToMany(mappedBy'formula'targetEntityRuleCondition::class)]
  27.     private Collection $ruleConditions;
  28.     #[ORM\OneToMany(mappedBy'hold'targetEntityRuleResult::class)]
  29.     private Collection $holdRuleResults;
  30.     #[ORM\OneToMany(mappedBy'minimum'targetEntityRuleResult::class)]
  31.     private Collection $minimumRuleResults;
  32.     #[ORM\OneToMany(mappedBy'formula'targetEntityRuleResult::class)]
  33.     private Collection $ruleResults;
  34.     #[ORM\OneToMany(mappedBy'formula'targetEntityPayCurve::class)]
  35.     private Collection $payCurves;
  36.     public function __construct()
  37.     {
  38.         $this->ruleConditions = new ArrayCollection();
  39.         $this->holdRuleResults = new ArrayCollection();
  40.         $this->minimumRuleResults = new ArrayCollection();
  41.         $this->ruleResults = new ArrayCollection();
  42.         $this->payCurves = new ArrayCollection();
  43.     }
  44.     public function getId(): ?int
  45.     {
  46.         return $this->id;
  47.     }
  48.     public function getName(): ?string
  49.     {
  50.         return $this->name;
  51.     }
  52.     public function setName(string $name): self
  53.     {
  54.         $this->name $name;
  55.         return $this;
  56.     }
  57.     public function getFormulaExpression(): ?string
  58.     {
  59.         return $this->formulaExpression;
  60.     }
  61.     public function setFormulaExpression(?string $formulaExpression): self
  62.     {
  63.         $this->formulaExpression $formulaExpression;
  64.         return $this;
  65.     }
  66.     public function getDescription(): ?string
  67.     {
  68.         return $this->description;
  69.     }
  70.     public function setDescription(?string $description): self
  71.     {
  72.         $this->description $description;
  73.         return $this;
  74.     }
  75.     public function getFormulaType(): ?FormulaType
  76.     {
  77.         return $this->formulaType;
  78.     }
  79.     public function setFormulaType(FormulaType $formulaType): self
  80.     {
  81.         $this->formulaType $formulaType;
  82.         return $this;
  83.     }
  84.     /**
  85.      * @return Collection<int, RuleCondition>
  86.      */
  87.     public function getRuleConditions(): Collection
  88.     {
  89.         return $this->ruleConditions;
  90.     }
  91.     public function addRuleCondition(RuleCondition $ruleCondition): self
  92.     {
  93.         if (!$this->ruleConditions->contains($ruleCondition)) {
  94.             $this->ruleConditions->add($ruleCondition);
  95.             $ruleCondition->setFormula($this);
  96.         }
  97.         return $this;
  98.     }
  99.     public function removeRuleCondition(RuleCondition $ruleCondition): self
  100.     {
  101.         if ($this->ruleConditions->removeElement($ruleCondition)) {
  102.             // set the owning side to null (unless already changed)
  103.             if ($ruleCondition->getFormula() === $this) {
  104.                 $ruleCondition->setFormula(null);
  105.             }
  106.         }
  107.         return $this;
  108.     }
  109.     public function __toString(): string
  110.     {
  111.         return (string)$this->name;
  112.     }
  113.     /**
  114.      * @return Collection<int, RuleResult>
  115.      */
  116.     public function getHoldRuleResults(): Collection
  117.     {
  118.         return $this->holdRuleResults;
  119.     }
  120.     public function addHoldRuleResult(RuleResult $holdRuleResult): static
  121.     {
  122.         if (!$this->holdRuleResults->contains($holdRuleResult)) {
  123.             $this->holdRuleResults->add($holdRuleResult);
  124.             $holdRuleResult->setHold($this);
  125.         }
  126.         return $this;
  127.     }
  128.     public function removeHoldRuleResult(RuleResult $holdRuleResult): static
  129.     {
  130.         if ($this->holdRuleResults->removeElement($holdRuleResult)) {
  131.             // set the owning side to null (unless already changed)
  132.             if ($holdRuleResult->getHold() === $this) {
  133.                 $holdRuleResult->setHold(null);
  134.             }
  135.         }
  136.         return $this;
  137.     }
  138.     /**
  139.      * @return Collection<int, RuleResult>
  140.      */
  141.     public function getMinimumRuleResults(): Collection
  142.     {
  143.         return $this->minimumRuleResults;
  144.     }
  145.     public function addMinimumRuleResult(RuleResult $minimumRuleResult): static
  146.     {
  147.         if (!$this->minimumRuleResults->contains($minimumRuleResult)) {
  148.             $this->minimumRuleResults->add($minimumRuleResult);
  149.             $minimumRuleResult->setMinimum($this);
  150.         }
  151.         return $this;
  152.     }
  153.     public function removeMinimumRuleResult(RuleResult $minimumRuleResult): static
  154.     {
  155.         if ($this->minimumRuleResults->removeElement($minimumRuleResult)) {
  156.             // set the owning side to null (unless already changed)
  157.             if ($minimumRuleResult->getMinimum() === $this) {
  158.                 $minimumRuleResult->setMinimum(null);
  159.             }
  160.         }
  161.         return $this;
  162.     }
  163.     /**
  164.      * @return Collection<int, RuleResult>
  165.      */
  166.     public function getRuleResults(): Collection
  167.     {
  168.         return $this->ruleResults;
  169.     }
  170.     public function addRuleResult(RuleResult $ruleResult): static
  171.     {
  172.         if (!$this->ruleResults->contains($ruleResult)) {
  173.             $this->ruleResults->add($ruleResult);
  174.             $ruleResult->setFormula($this);
  175.         }
  176.         return $this;
  177.     }
  178.     public function removeRuleResult(RuleResult $ruleResult): static
  179.     {
  180.         if ($this->ruleResults->removeElement($ruleResult)) {
  181.             // set the owning side to null (unless already changed)
  182.             if ($ruleResult->getFormula() === $this) {
  183.                 $ruleResult->setFormula(null);
  184.             }
  185.         }
  186.         return $this;
  187.     }
  188.     /**
  189.      * @return Collection<int, PayCurve>
  190.      */
  191.     public function getPayCurves(): Collection
  192.     {
  193.         return $this->payCurves;
  194.     }
  195.     public function addPayCurve(PayCurve $payCurve): static
  196.     {
  197.         if (!$this->payCurves->contains($payCurve)) {
  198.             $this->payCurves->add($payCurve);
  199.             $payCurve->setFormula($this);
  200.         }
  201.         return $this;
  202.     }
  203.     public function removePayCurve(PayCurve $payCurve): static
  204.     {
  205.         if ($this->payCurves->removeElement($payCurve)) {
  206.             // set the owning side to null (unless already changed)
  207.             if ($payCurve->getFormula() === $this) {
  208.                 $payCurve->setFormula(null);
  209.             }
  210.         }
  211.         return $this;
  212.     }
  213.     /**
  214.      * Get all rules where this formula is used
  215.      * @return Collection<int, Rule>
  216.      */
  217.     public function getRelatedRules(): Collection
  218.     {
  219.         $rules = new ArrayCollection();
  220.         
  221.         // Get rules from RuleConditions
  222.         foreach ($this->ruleConditions as $ruleCondition) {
  223.             $ruleVersion $ruleCondition->getRuleVersion();
  224.             if ($ruleVersion && $ruleVersion->getRule() && !$rules->contains($ruleVersion->getRule())) {
  225.                 $rules->add($ruleVersion->getRule());
  226.             }
  227.         }
  228.         
  229.         // Get rules from RuleResults (formula)
  230.         foreach ($this->ruleResults as $ruleResult) {
  231.             if ($ruleResult->getRule() && !$rules->contains($ruleResult->getRule())) {
  232.                 $rules->add($ruleResult->getRule());
  233.             }
  234.         }
  235.         
  236.         // Get rules from RuleResults (hold)
  237.         foreach ($this->holdRuleResults as $ruleResult) {
  238.             if ($ruleResult->getRule() && !$rules->contains($ruleResult->getRule())) {
  239.                 $rules->add($ruleResult->getRule());
  240.             }
  241.         }
  242.         
  243.         // Get rules from RuleResults (minimum)
  244.         foreach ($this->minimumRuleResults as $ruleResult) {
  245.             if ($ruleResult->getRule() && !$rules->contains($ruleResult->getRule())) {
  246.                 $rules->add($ruleResult->getRule());
  247.             }
  248.         }
  249.         
  250.         return $rules;
  251.     }
  252. }