Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
46 / 46
100.00% covered (success)
100.00%
7 / 7
CRAP
100.00% covered (success)
100.00%
1 / 1
Owner
100.00% covered (success)
100.00%
46 / 46
100.00% covered (success)
100.00%
7 / 7
13
100.00% covered (success)
100.00%
1 / 1
 readEntity
100.00% covered (success)
100.00%
7 / 7
100.00% covered (success)
100.00%
1 / 1
1
 readResolvedReferences
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
3
 readList
100.00% covered (success)
100.00%
11 / 11
100.00% covered (success)
100.00%
1 / 1
3
 readByOrganisationId
100.00% covered (success)
100.00%
7 / 7
100.00% covered (success)
100.00%
1 / 1
1
 deleteEntity
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
1 / 1
3
 writeEntity
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
1 / 1
1
 updateEntity
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3namespace BO\Zmsdb;
4
5use BO\Zmsentities\Owner as Entity;
6use BO\Zmsentities\Collection\OwnerList as Collection;
7
8class Owner extends Base
9{
10    /**
11    * read entity
12    *
13     * @param int|string $itemId
14     * @param int $resolveReferences
15     *
16     * @return Entity
17    */
18    public function readEntity($itemId, $resolveReferences = 0)
19    {
20        $query = new Query\Owner(Query\Base::SELECT);
21        $query
22            ->addEntityMapping()
23            ->addResolvedReferences($resolveReferences)
24            ->addConditionOwnerId($itemId);
25        $owner = $this->fetchOne($query, new Entity());
26        return $this->readResolvedReferences($owner, $resolveReferences);
27    }
28
29    #[\Override]
30    public function readResolvedReferences(\BO\Zmsentities\Schema\Entity $entity, $resolveReferences)
31    {
32        if (0 < $resolveReferences && isset($entity['id'])) {
33            $entity['organisations'] = (new Organisation())->readByOwnerId($entity['id'], $resolveReferences - 1);
34        }
35        return $entity;
36    }
37
38     /**
39     * read list of owners
40     *
41     * @param int $resolveReferences
42     *
43     * @return Collection
44     */
45    public function readList($resolveReferences = 0)
46    {
47        $ownerList = new Collection();
48        $query = new Query\Owner(Query\Base::SELECT);
49        $query
50            ->addResolvedReferences($resolveReferences)
51            ->addEntityMapping();
52        $result = $this->fetchList($query, new Entity());
53        if (count($result)) {
54            foreach ($result as $entity) {
55                $entity = $this->readResolvedReferences($entity, $resolveReferences);
56                $ownerList->addEntity($entity);
57            }
58        }
59        return $ownerList;
60    }
61
62    public function readByOrganisationId($organisationId, $resolveReferences = 0)
63    {
64        $query = new Query\Owner(Query\Base::SELECT);
65        $query
66            ->addEntityMapping()
67            ->addResolvedReferences($resolveReferences)
68            ->addConditionOrganisationId($organisationId);
69        $owner = $this->fetchOne($query, new Entity());
70        return $this->readResolvedReferences($owner, $resolveReferences);
71    }
72
73    /**
74    * remove an owner
75    *
76     * @param int|string $itemId
77     *
78     * @return Entity|null
79    */
80    public function deleteEntity($itemId)
81    {
82        $entity = $this->readEntity($itemId, 1);
83        if (0 < $entity->toProperty()->organisations->get()->count()) {
84            throw new Exception\Owner\OrganisationListNotEmpty();
85        }
86        $query =  new Query\Owner(Query\Base::DELETE);
87        $query->addConditionOwnerId($itemId);
88        return ($this->deleteItem($query)) ? $entity : null;
89    }
90
91    /**
92     * write an owner
93     *
94     * @param \BO\Zmsentities\Owner $entity
95     *
96     * @return Entity
97     */
98    public function writeEntity(\BO\Zmsentities\Owner $entity)
99    {
100        $query = new Query\Owner(Query\Base::INSERT);
101        $values = $query->reverseEntityMapping($entity);
102        $query->addValues($values);
103        $this->writeItem($query);
104        $lastInsertId = $this->getWriter()->lastInsertId();
105        return $this->readEntity($lastInsertId);
106    }
107
108    /**
109     * update an owner
110     *
111     * @param int|string $ownerId
112     * @param \BO\Zmsentities\Owner $entity
113     *
114     * @return Entity
115     */
116    public function updateEntity($ownerId, \BO\Zmsentities\Owner $entity)
117    {
118        $query = new Query\Owner(Query\Base::UPDATE);
119        $query->addConditionOwnerId($ownerId);
120        $values = $query->reverseEntityMapping($entity);
121        $query->addValues($values);
122        $this->writeItem($query);
123        return $this->readEntity($ownerId);
124    }
125}