Failed Conditions
Push — master ( 8f957f...3e56ea )
by Zbigniew
05:35
created

ParkingReservationRepository   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 120
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 5

Test Coverage

Coverage 54.55%

Importance

Changes 0
Metric Value
wmc 9
lcom 1
cbo 5
dl 0
loc 120
ccs 36
cts 66
cp 0.5455
rs 10
c 0
b 0
f 0

7 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A getSystemMember() 0 6 1
A getPlacesCountAvailableForDate() 0 33 3
A getReservationsForDate() 0 16 1
A getMembersWithMembershipForDate() 0 17 1
A getMembersNeedsForDate() 0 13 1
A getEntityManager() 0 4 1
1
<?php
2
3
declare(strict_types=1);
4
5
/*
6
 * This file is part of the zibios/sharep.
7
 *
8
 * (c) Zbigniew Ślązak
9
 */
10
11
namespace App\Repository\Functional;
12
13
use App\Entity\Parking\Availability;
14
use App\Entity\Parking\AvailabilityBreak;
15
use App\Entity\Parking\Member;
16
use App\Entity\Parking\MemberNeed;
17
use App\Entity\Parking\Reservation;
18
use App\Enum\Functional\ApplicationEnum;
19
use App\Repository\Traits\SaveEntityTrait;
20
use Doctrine\ORM\EntityManagerInterface;
21
22
class ParkingReservationRepository
23
{
24
    use SaveEntityTrait;
25
26
    /**
27
     * @var EntityManagerInterface
28
     */
29
    private $entityManager;
30
31
    public function __construct(EntityManagerInterface $entityManager)
32
    {
33
        $this->entityManager = $entityManager;
34
    }
35
36
    public function getSystemMember(): ?Member
0 ignored issues
show
Documentation introduced by
The return type could not be reliably inferred; please add a @return annotation.

Our type inference engine in quite powerful, but sometimes the code does not provide enough clues to go by. In these cases we request you to add a @return annotation as described here.

Loading history...
37
    {
38
        return $this->entityManager
39
            ->getRepository(Member::class)
40
            ->getSystemMember();
41
    }
42
43 1
    public function getPlacesCountAvailableForDate(\DateTimeImmutable $date): int
44
    {
45 1
        $availablePlaces = 0;
46
        /** @var Availability|null $availability */
47 1
        $availability = $this->entityManager
48 1
            ->createQueryBuilder()
49 1
            ->select('a')
50 1
            ->from(Availability::class, 'a')
51 1
            ->where('a.fromDate <= :selectedDate')
52 1
            ->andWhere('a.toDate >= :selectedDate')
53 1
            ->setParameter('selectedDate', $date->format(ApplicationEnum::DATE_FORMAT))
54 1
            ->getQuery()
55 1
            ->getOneOrNullResult()
56
        ;
57 1
        if ($availability) {
58 1
            $availablePlaces = $availability->getPlaces();
59
            /** @var AvailabilityBreak|null $availabilityBreak */
60 1
            $availabilityBreak = $this->entityManager
61 1
                ->createQueryBuilder()
62 1
                ->select('ab')
63 1
                ->from(AvailabilityBreak::class, 'ab')
64 1
                ->where('ab.date = :selectedDate')
65 1
                ->setParameter('selectedDate', $date->format(ApplicationEnum::DATE_FORMAT))
66 1
                ->getQuery()
67 1
                ->getOneOrNullResult()
68
            ;
69 1
            if ($availabilityBreak) {
70 1
                $availablePlaces = $availabilityBreak->getPlaces();
71
            }
72
        }
73
74 1
        return $availablePlaces;
75
    }
76
77
    /**
78
     * @return array|Member[]
79
     */
80
    public function getReservationsForDate(\DateTimeImmutable $date): array
81
    {
82
        /** @var Reservation[]|array $reservations */
83
        $reservations = $this->entityManager
84
            ->createQueryBuilder()
85
            ->select('r')
86
            ->from(Reservation::class, 'r')
87
            ->join('r.member', 'm')
88
            ->where('r.date = :selectedDate')
89
            ->setParameter('selectedDate', $date->format(ApplicationEnum::DATE_FORMAT))
90
            ->getQuery()
91
            ->getResult()
92
        ;
93
94
        return $reservations;
95
    }
96
97
    /**
98
     * @return array|Member[]
99
     */
100 1
    public function getMembersWithMembershipForDate(\DateTimeImmutable $date): array
101
    {
102
        /** @var Member[]|array $members */
103 1
        $members = $this->entityManager
104 1
            ->createQueryBuilder()
105 1
            ->select('m')
106 1
            ->from(Member::class, 'm')
107 1
            ->join('m.memberships', 'ms')
108 1
            ->where('ms.fromDate <= :selectedDate')
109 1
            ->andWhere('ms.toDate >= :selectedDate')
110 1
            ->setParameter('selectedDate', $date->format(ApplicationEnum::DATE_FORMAT))
111 1
            ->getQuery()
112 1
            ->getResult()
113
        ;
114
115 1
        return $members;
116
    }
117
118
    /**
119
     * @return array|MemberNeed[]
120
     */
121
    public function getMembersNeedsForDate(\DateTimeImmutable $date): array
122
    {
123
        return $this->entityManager
124
            ->createQueryBuilder()
125
            ->select('mn, m')
126
            ->from(MemberNeed::class, 'mn')
127
            ->join('mn.member', 'm')
128
            ->where('mn.date <= :selectedDate')
129
            ->setParameter('selectedDate', $date->format(ApplicationEnum::DATE_FORMAT))
130
            ->getQuery()
131
            ->getResult()
132
        ;
133
    }
134
135
    //------------------------------------------------------------------------------------------------------------------
136
137
    private function getEntityManager(): EntityManagerInterface
0 ignored issues
show
Unused Code introduced by
This method is not used, and could be removed.
Loading history...
138
    {
139
        return $this->entityManager;
140
    }
141
}
142