Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 47
0.00% covered (danger)
0.00%
0 / 13
CRAP
0.00% covered (danger)
0.00%
0 / 1
Kategorie
0.00% covered (danger)
0.00%
0 / 47
0.00% covered (danger)
0.00%
0 / 13
600
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 __toString
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 addAufgabe
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 addAufgabeTermin
0.00% covered (danger)
0.00%
0 / 9
0.00% covered (danger)
0.00%
0 / 1
12
 addAufgabeTerminKategorie
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
6
 addTermin
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getAufgabeTerminKategorien
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getAufgaben
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
6
 getLfdnr
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getTermine
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
12
 removeAufgabe
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
12
 removeAufgabeTerminKategorie
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
6
 removeTermin
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
12
1<?php
2
3declare(strict_types=1);
4
5namespace Satag\AmicronEntityBundle\Entity;
6
7use Doctrine\Common\Collections\ArrayCollection;
8use Doctrine\Common\Collections\Collection;
9use Doctrine\DBAL\Types\Types;
10use Doctrine\ORM\Mapping as ORM;
11use Satag\AmicronEntityBundle\Traits\BlameableEntity;
12use Satag\AmicronEntityBundle\Traits\BlameableEntityInterface;
13
14/**
15 * Kategorien für Termine.
16 */
17#[ORM\Entity]
18#[ORM\Table(name: 'KATEGORIEN')]
19#[ORM\UniqueConstraint(name: 'KATEGORIEN_UK', columns: ['name'])]
20class Kategorie extends AbstractAmicronEntity implements BlameableEntityInterface, \Stringable
21{
22    use BlameableEntity;
23
24    /**
25     * @var Collection<int, AufgabeTerminKategorie>
26     */
27    #[ORM\OneToMany(mappedBy: 'kategorie', targetEntity: AufgabeTerminKategorie::class, cascade: ['persist'], fetch: 'EXTRA_LAZY', orphanRemoval: true)]
28    private Collection $aufgabeTerminKategorien;
29
30    #[ORM\Column(name: 'lfdnr', type: Types::INTEGER, nullable: false)]
31    #[ORM\Id]
32    #[ORM\GeneratedValue(strategy: 'SEQUENCE')]
33    #[ORM\SequenceGenerator(sequenceName: 'GEN_LFDNR', allocationSize: 1, initialValue: 1)]
34    public private(set) ?int $lfdnr = null;
35
36    public function __construct(
37        #[ORM\Column(name: 'name', type: Types::STRING, length: 80, nullable: true)]
38        public ?string $name = null
39    ) {
40        $this->aufgabeTerminKategorien = new ArrayCollection();
41    }
42
43    #[\Override]
44    public function __toString(): string
45    {
46        return \sprintf('%s (%s)', $this->name, $this->lfdnr);
47    }
48
49    public function addAufgabe(Aufgabe $aufgabe): self
50    {
51        $this->addAufgabeTermin($aufgabe);
52
53        return $this;
54    }
55
56    public function addAufgabeTermin(AbstractAufgabeTermin $aufgabeTermin): self
57    {
58        foreach ($this->getAufgabeTerminKategorien() as $aufgabeTerminKategorie) {
59            if ($aufgabeTerminKategorie->getAufgabeTermin() === $aufgabeTermin) {
60                return $this;
61            }
62        }
63
64        $aufgabeTerminKategorie = new AufgabeTerminKategorie();
65        $aufgabeTerminKategorie
66            ->setKategorie($this)
67            ->setAufgabeTermin($aufgabeTermin);
68        $this->addAufgabeTerminKategorie($aufgabeTerminKategorie);
69
70        return $this;
71    }
72
73    public function addAufgabeTerminKategorie(AufgabeTerminKategorie $aufgabeTerminKategorie): self
74    {
75        if ($this->aufgabeTerminKategorien->contains($aufgabeTerminKategorie)) {
76            return $this;
77        }
78
79        $this->aufgabeTerminKategorien->add($aufgabeTerminKategorie);
80        // needed to update the owning side of the relationship!
81        $aufgabeTerminKategorie->setKategorie($this);
82        $aufgabeTerminKategorie->getAufgabeTermin()?->addAufgabeTerminKategorie($aufgabeTerminKategorie);
83
84        return $this;
85    }
86
87    public function addTermin(Termin $termin): self
88    {
89        $this->addAufgabeTermin($termin);
90
91        return $this;
92    }
93
94    /**
95     * @return Collection<int, AufgabeTerminKategorie>
96     */
97    public function getAufgabeTerminKategorien(): ArrayCollection|Collection
98    {
99        return $this->aufgabeTerminKategorien;
100    }
101
102    /**
103     * @return Collection<int, Aufgabe>
104     */
105    public function getAufgaben(): Collection
106    {
107        $aufgaben = new ArrayCollection();
108        foreach ($this->getAufgabeTerminKategorien() as $terminKategorie) {
109            $aufgaben->add($terminKategorie->getAufgabeTermin());
110        }
111
112        return $aufgaben;
113    }
114
115    public function getLfdnr(): ?int
116    {
117        return $this->lfdnr;
118    }
119
120    /**
121     * @return Collection<int, Termin>
122     */
123    public function getTermine(): Collection
124    {
125        $termine = new ArrayCollection();
126        foreach ($this->getAufgabeTerminKategorien() as $aufgabeTerminKategorie) {
127            if ($aufgabeTerminKategorie->getAufgabeTermin() instanceof Termin) {
128                $termine->add($aufgabeTerminKategorie->getAufgabeTermin());
129            }
130        }
131
132        return $termine;
133    }
134
135    public function removeAufgabe(Aufgabe $termin): self
136    {
137        foreach ($this->getAufgabeTerminKategorien() as $terminKategorie) {
138            if ($terminKategorie->getAufgabeTermin() === $termin) {
139                $this->removeAufgabeTerminKategorie($terminKategorie);
140
141                return $this;
142            }
143        }
144
145        return $this;
146    }
147
148    public function removeAufgabeTerminKategorie(AufgabeTerminKategorie $aufgabeTerminKategorie): void
149    {
150        if (!$this->aufgabeTerminKategorien->contains($aufgabeTerminKategorie)) {
151            return;
152        }
153
154        $aufgabeTerminKategorie->getAufgabeTermin()?->removeAufgabeTerminKategorie($aufgabeTerminKategorie);
155        $this->aufgabeTerminKategorien->removeElement($aufgabeTerminKategorie);
156        // needed to update the owning side of the relationship!
157        $aufgabeTerminKategorie->setKategorie(null);
158    }
159
160    public function removeTermin(Termin $termin): self
161    {
162        foreach ($this->getAufgabeTerminKategorien() as $aufgabeTerminKategorie) {
163            if ($aufgabeTerminKategorie->getAufgabeTermin() === $termin) {
164                $this->removeAufgabeTerminKategorie($aufgabeTerminKategorie);
165
166                return $this;
167            }
168        }
169
170        return $this;
171    }
172}