Skip to content

Commit 5d7d87c

Browse files
committed
fix: comparisons for discharge/abrogation dates
1 parent 8d93db8 commit 5d7d87c

File tree

4 files changed

+50
-24
lines changed

4 files changed

+50
-24
lines changed

module/Decision/src/Mapper/Member.php

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
namespace Decision\Mapper;
66

77
use Application\Mapper\BaseMapper;
8+
use DateTime;
89
use Decision\Model\Member as MemberModel;
910
use Decision\Model\Organ as OrganModel;
1011
use Decision\Model\OrganMember as OrganMemberModel;
@@ -128,9 +129,13 @@ public function findOrgans(MemberModel $member): array
128129
->join('o.members', 'om')
129130
->join('om.member', 'm')
130131
->where('m.lidnr = :lidnr')
131-
->andWhere('om.dischargeDate IS NULL');
132+
->andWhere($qb->expr()->orX(
133+
$qb->expr()->isNull('om.dischargeDate'),
134+
$qb->expr()->gt('om.dischargeDate', ':now')
135+
));
132136

133-
$qb->setParameter('lidnr', $member->getLidnr());
137+
$qb->setParameter('lidnr', $member->getLidnr())
138+
->setParameter('now', new DateTime());
134139

135140
return $qb->getQuery()->getResult();
136141
}
@@ -147,10 +152,14 @@ public function findCurrentInstallations(MemberModel $member): array
147152
->from(OrganMemberModel::class, 'om')
148153
->leftJoin('om.organ', 'o')
149154
->where('om.member = :member')
150-
->andWhere('om.installDate <= CURRENT_TIMESTAMP()')
151-
->andWhere('om.dischargeDate IS NULL OR om.dischargeDate > CURRENT_TIMESTAMP()');
155+
->andWhere('om.installDate <= :now')
156+
->andWhere($qb->expr()->orX(
157+
$qb->expr()->isNull('om.dischargeDate'),
158+
$qb->expr()->gt('om.dischargeDate', ':now')
159+
));
152160

153-
$qb->setParameter('member', $member);
161+
$qb->setParameter('member', $member)
162+
->setParameter('now', new DateTime());
154163

155164
return $qb->getQuery()->getResult();
156165
}
@@ -167,10 +176,13 @@ public function findHistoricalInstallations(MemberModel $member): array
167176
->from(OrganMemberModel::class, 'om')
168177
->leftJoin('om.organ', 'o')
169178
->where('om.member = :member')
170-
->andWhere('om.dischargeDate IS NOT NULL')
171-
->andWhere('om.dischargeDate <= CURRENT_TIMESTAMP()');
179+
->andWhere($qb->expr()->andX(
180+
$qb->expr()->isNotNull('om.dischargeDate'),
181+
$qb->expr()->lte('om.dischargeDate', ':now')
182+
));
172183

173-
$qb->setParameter('member', $member);
184+
$qb->setParameter('member', $member)
185+
->setParameter('now', new DateTime());
174186

175187
return $qb->getQuery()->getResult();
176188
}

module/Decision/src/Mapper/Organ.php

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
namespace Decision\Mapper;
66

77
use Application\Mapper\BaseMapper;
8+
use DateTime;
89
use Decision\Model\Enums\OrganTypes;
910
use Decision\Model\Organ as OrganModel;
1011
use Doctrine\ORM\NonUniqueResultException;
@@ -26,28 +27,37 @@ class Organ extends BaseMapper
2627
*/
2728
public function findActive(?OrganTypes $type = null): array
2829
{
29-
$criteria = [
30-
'abrogationDate' => null,
31-
];
30+
$qb = $this->getRepository()->createQueryBuilder('o');
31+
$qb->where($qb->expr()->orX(
32+
$qb->expr()->isNull('o.abrogationDate'),
33+
$qb->expr()->gt('o.abrogationDate', ':now'),
34+
))
35+
->setParameter('now', new DateTime());
3236

3337
if (null !== $type) {
34-
$criteria['type'] = $type;
38+
$qb->andWhere('o.type = :type')
39+
->setParameter('type', $type);
3540
}
3641

37-
return $this->getRepository()->findBy($criteria);
42+
return $qb->getQuery()->getResult();
3843
}
3944

4045
/**
4146
* Check if an organ with id `$id` is not abrogated.
4247
*/
4348
public function findActiveById(int $id): ?OrganModel
4449
{
45-
return $this->getRepository()->findOneBy(
46-
[
47-
'id' => $id,
48-
'abrogationDate' => null,
49-
],
50-
);
50+
$qb = $this->getRepository()->createQueryBuilder('o');
51+
$qb->where('o.id = :id')
52+
->andWhere($qb->expr()->orX(
53+
$qb->expr()->isNull('o.abrogationDate'),
54+
$qb->expr()->gt('o.abrogationDate', ':now')
55+
));
56+
57+
$qb->setParameter('id', $id)
58+
->setParameter('now', new DateTime());
59+
60+
return $qb->getQuery()->getOneOrNullResult();
5161
}
5262

5363
/**
@@ -58,7 +68,11 @@ public function findActiveById(int $id): ?OrganModel
5868
public function findAbrogated(?OrganTypes $type = null): array
5969
{
6070
$qb = $this->getRepository()->createQueryBuilder('o');
61-
$qb->where('o.abrogationDate IS NOT NULL')
71+
$qb->where($qb->expr()->andX(
72+
$qb->expr()->isNotNull('o.abrogationDate'),
73+
$qb->expr()->lte('o.abrogationDate', ':now')
74+
))
75+
->setParameter('now', new DateTime())
6276
->orderBy('o.abrogationDate', 'DESC');
6377

6478
if (null !== $type) {

module/Decision/src/Model/Member.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -668,7 +668,7 @@ static function (BoardMember $boardMember) use ($today) {
668668
$dischargeDate = $boardMember->getDischargeDate();
669669

670670
// Keep installation if not discharged or discharged in the future
671-
return null === $dischargeDate || $dischargeDate >= $today;
671+
return null === $dischargeDate || $dischargeDate > $today;
672672
},
673673
);
674674

@@ -855,12 +855,12 @@ protected function isCurrentBoard(BoardMember $boardMember): bool
855855
// Installation was (before) today.
856856
if (
857857
null === $releaseDate
858-
|| $releaseDate >= $now
858+
|| $releaseDate > $now
859859
) {
860860
// Not yet released or the release is the in the future.
861861
if (
862862
null === $dischargeDate
863-
|| $dischargeDate >= $now
863+
|| $dischargeDate > $now
864864
) {
865865
// Not yet discharged or the discharge is in the future.
866866
return true;

module/User/src/Permissions/Assertion/IsOrganMember.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,6 @@ protected function isCurrentMember(OrganMember $organMember): bool
6868
$now = new DateTime();
6969

7070
return $organMember->getInstallDate() <= $now &&
71-
(null === $organMember->getDischargeDate() || $organMember->getDischargeDate() >= $now);
71+
(null === $organMember->getDischargeDate() || $organMember->getDischargeDate() > $now);
7272
}
7373
}

0 commit comments

Comments
 (0)