fix: assign correct staffing status

This commit is contained in:
Björn Fromme
2025-01-14 17:58:30 +01:00
parent 6fe22d413e
commit abbd067f8c
+27 -9
View File
@@ -137,22 +137,33 @@ class Assignment implements BlameableEntityInterface, TimestampableEntityInterfa
public function updateStaffingStatus(): void public function updateStaffingStatus(): void
{ {
$confirmedDispositions = $this->getValidDispositions(); $confirmedDispositions = $this->getConfirmedDispositions();
$validApplications = $this->getValidApplications(); $validApplications = $this->getValidApplications();
// all available dispositions are taken by confirmed dispositions => staffed
if ($this->availableDispositions === $confirmedDispositions->count()) { if ($this->availableDispositions === $confirmedDispositions->count()) {
$this->setStaffingStatus(Assignment::STATUS_STAFFED); $this->setStaffingStatus(Assignment::STATUS_STAFFED);
} elseif (
$this->availableDispositions > $confirmedDispositions->count() return;
&& 0 < $confirmedDispositions->count() }
// at least one available slot is taken by confirmed disposition => partly staffed
if (0 < $confirmedDispositions->count()
) { ) {
$this->setStaffingStatus(Assignment::STATUS_PARTLY_STAFFED); $this->setStaffingStatus(Assignment::STATUS_PARTLY_STAFFED);
} elseif (
$this->availableDispositions > $confirmedDispositions->count() return;
&& 0 < $validApplications->count() }
) {
// all slots are open but there are valid applications => staffing
if (0 === $confirmedDispositions->count() && 0 < $validApplications->count()) {
$this->setStaffingStatus(Assignment::STATUS_STAFFING); $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); $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 public function getContact(): ?User
{ {
return $this->contact; return $this->contact;