From abbd067f8c97622a15e4d6495848c1c20bd200c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Fromme?= Date: Tue, 14 Jan 2025 17:58:30 +0100 Subject: [PATCH] fix: assign correct staffing status --- src/Entity/Assignment.php | 36 +++++++++++++++++++++++++++--------- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/src/Entity/Assignment.php b/src/Entity/Assignment.php index b72e8e5..17c89eb 100644 --- a/src/Entity/Assignment.php +++ b/src/Entity/Assignment.php @@ -137,22 +137,33 @@ class Assignment implements BlameableEntityInterface, TimestampableEntityInterfa public function updateStaffingStatus(): void { - $confirmedDispositions = $this->getValidDispositions(); + $confirmedDispositions = $this->getConfirmedDispositions(); $validApplications = $this->getValidApplications(); + // all available dispositions are taken by confirmed dispositions => staffed if ($this->availableDispositions === $confirmedDispositions->count()) { $this->setStaffingStatus(Assignment::STATUS_STAFFED); - } elseif ( - $this->availableDispositions > $confirmedDispositions->count() - && 0 < $confirmedDispositions->count() + + return; + } + + // at least one available slot is taken by confirmed disposition => partly staffed + if (0 < $confirmedDispositions->count() ) { $this->setStaffingStatus(Assignment::STATUS_PARTLY_STAFFED); - } elseif ( - $this->availableDispositions > $confirmedDispositions->count() - && 0 < $validApplications->count() - ) { + + return; + } + + // all slots are open but there are valid applications => staffing + if (0 === $confirmedDispositions->count() && 0 < $validApplications->count()) { $this->setStaffingStatus(Assignment::STATUS_STAFFING); - } else { + + return; + } + + // all slots are open and there are no valid applications => un-staffed + if (0 === $this->getConfirmedDispositions()->count() && 0 === $this->getValidApplications()->count()) { $this->setStaffingStatus(Assignment::STATUS_UNSTAFFED); } } @@ -460,6 +471,13 @@ class Assignment implements BlameableEntityInterface, TimestampableEntityInterfa }); } + public function getConfirmedDispositions(): Collection + { + return $this->dispositions->filter(function (Disposition $disposition) { + return Disposition::STATUS_CONFIRMED === $disposition->getStatus(); + }); + } + public function getContact(): ?User { return $this->contact;