mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-06-07 18:44:08 +00:00
Update schema to store accompanying period work referrer history
This commit is contained in:
parent
239372270e
commit
363785b779
@ -156,7 +156,7 @@ class AccompanyingPeriodWork implements AccompanyingPeriodLinkedWithSocialIssues
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @var Collection<int, AccompanyingPeriodWorkReferrerHistory>
|
* @var Collection<int, AccompanyingPeriodWorkReferrerHistory>
|
||||||
* @ORM\OneToMany(targetEntity=AccompanyingPeriodWorkReferrerHistory::class, cascade={"persist", "remove"}, mappedBy="accompanyingPeriodWork")
|
* @ORM\OneToMany(targetEntity=AccompanyingPeriodWorkReferrerHistory::class, cascade={"persist", "remove"}, mappedBy="accompanyingPeriodWork", orphanRemoval=true)
|
||||||
* @ORM\JoinTable(name="chill_person_accompanying_period_work_referrer")
|
* @ORM\JoinTable(name="chill_person_accompanying_period_work_referrer")
|
||||||
*/
|
*/
|
||||||
private Collection $referrersHistory;
|
private Collection $referrersHistory;
|
||||||
@ -357,9 +357,17 @@ class AccompanyingPeriodWork implements AccompanyingPeriodLinkedWithSocialIssues
|
|||||||
*/
|
*/
|
||||||
public function getReferrers(): ReadableCollection
|
public function getReferrers(): ReadableCollection
|
||||||
{
|
{
|
||||||
return $this->referrersHistory->map(fn (AccompanyingPeriodWorkReferrerHistory $h) => $h->getUser());
|
return $this->referrersHistory
|
||||||
|
->filter(fn (AccompanyingPeriodWorkReferrerHistory $h) => null === $h->getEndDate())
|
||||||
|
->map(fn (AccompanyingPeriodWorkReferrerHistory $h) => $h->getUser());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getReferrersHistory(): Collection
|
||||||
|
{
|
||||||
|
return $this->referrersHistory;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Collection<int, Result>
|
* @return Collection<int, Result>
|
||||||
*/
|
*/
|
||||||
@ -442,6 +450,7 @@ class AccompanyingPeriodWork implements AccompanyingPeriodLinkedWithSocialIssues
|
|||||||
|
|
||||||
if ($history->isDateRangeEmpty()) {
|
if ($history->isDateRangeEmpty()) {
|
||||||
$history->removeAccompanyingPeriodWork();
|
$history->removeAccompanyingPeriodWork();
|
||||||
|
$this->referrersHistory->removeElement($history);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -38,29 +38,24 @@ class AccompanyingPeriodWorkReferrerHistory implements TrackCreationInterface, T
|
|||||||
* @var \DateTimeImmutable|null
|
* @var \DateTimeImmutable|null
|
||||||
* @ORM\Column(type="date_immutable", nullable=true, options={"default": null})
|
* @ORM\Column(type="date_immutable", nullable=true, options={"default": null})
|
||||||
*/
|
*/
|
||||||
private ?\DateTimeImmutable $endDate;
|
private ?\DateTimeImmutable $endDate = null;
|
||||||
|
|
||||||
/**
|
|
||||||
* @var AccompanyingPeriodWork|null
|
|
||||||
* @ORM\ManyToOne(targetEntity=AccompanyingPeriodWork::class, inversedBy="referrersHistory")
|
|
||||||
*/
|
|
||||||
private ?AccompanyingPeriodWork $accompanyingPeriodWork;
|
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
AccompanyingPeriodWork $accompanyingPeriodWork,
|
/**
|
||||||
|
* @ORM\ManyToOne(targetEntity=AccompanyingPeriodWork::class, inversedBy="referrersHistory")
|
||||||
|
*/
|
||||||
|
private ?AccompanyingPeriodWork $accompanyingPeriodWork,
|
||||||
/**
|
/**
|
||||||
* @var User
|
* @var User
|
||||||
* @ORM\ManyToOne(targetEntity=User::class)
|
* @ORM\ManyToOne(targetEntity=User::class)
|
||||||
*/
|
*/
|
||||||
private readonly User $user,
|
private User $user,
|
||||||
/**
|
/**
|
||||||
* @var \DateTimeImmutable
|
* @var \DateTimeImmutable
|
||||||
* @ORM\Column(type="date_immutable", nullable=false)
|
* @ORM\Column(type="date_immutable", nullable=false)
|
||||||
*/
|
*/
|
||||||
private readonly \DateTimeImmutable $startDate,
|
private \DateTimeImmutable $startDate
|
||||||
) {
|
) {}
|
||||||
$this->accompanyingPeriodWork = $accompanyingPeriodWork;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getId(): ?int
|
public function getId(): ?int
|
||||||
{
|
{
|
||||||
|
@ -0,0 +1,96 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Chill is a software for social workers
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view
|
||||||
|
* the LICENSE file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Chill\PersonBundle\Tests\Entity\AccompanyingPeriod;
|
||||||
|
|
||||||
|
use Chill\MainBundle\Entity\User;
|
||||||
|
use Chill\PersonBundle\Entity\AccompanyingPeriod\AccompanyingPeriodWork;
|
||||||
|
use Chill\PersonBundle\Entity\AccompanyingPeriod\AccompanyingPeriodWorkReferrerHistory;
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @internal
|
||||||
|
* @coversNothing
|
||||||
|
*/
|
||||||
|
class AccompanyingPeriodWorkTest extends TestCase
|
||||||
|
{
|
||||||
|
public function testReferrerHistory(): void
|
||||||
|
{
|
||||||
|
$work = new AccompanyingPeriodWork();
|
||||||
|
$userA = new User();
|
||||||
|
$userB = new User();
|
||||||
|
$userC = new User();
|
||||||
|
|
||||||
|
self::assertCount(0, $work->getReferrers());
|
||||||
|
|
||||||
|
$work->addReferrer($userA);
|
||||||
|
|
||||||
|
self::assertCount(1, $work->getReferrers());
|
||||||
|
self::assertContains($userA, $work->getReferrers());
|
||||||
|
|
||||||
|
$work->addReferrer($userB);
|
||||||
|
|
||||||
|
self::assertCount(2, $work->getReferrers());
|
||||||
|
self::assertContains($userA, $work->getReferrers());
|
||||||
|
self::assertContains($userB, $work->getReferrers());
|
||||||
|
|
||||||
|
$work->addReferrer($userC);
|
||||||
|
$work->removeReferrer($userB);
|
||||||
|
|
||||||
|
self::assertCount(2, $work->getReferrers());
|
||||||
|
self::assertContains($userA, $work->getReferrers());
|
||||||
|
self::assertNotContains($userB, $work->getReferrers());
|
||||||
|
self::assertContains($userC, $work->getReferrers());
|
||||||
|
|
||||||
|
$work->removeReferrer($userA);
|
||||||
|
self::assertNotContains($userA, $work->getReferrers());
|
||||||
|
self::assertNotContains($userB, $work->getReferrers());
|
||||||
|
self::assertContains($userC, $work->getReferrers());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testReferrerHistoryOnDifferentDays(): void
|
||||||
|
{
|
||||||
|
|
||||||
|
$work = new AccompanyingPeriodWork();
|
||||||
|
$userA = new User();
|
||||||
|
$userB = new User();
|
||||||
|
$userC = new User();
|
||||||
|
|
||||||
|
$work->addReferrer($userA);
|
||||||
|
|
||||||
|
$historyA = $work->getReferrersHistory()->first();
|
||||||
|
$reflection = new \ReflectionClass($historyA);
|
||||||
|
$startDateReflection = $reflection->getProperty('startDate');
|
||||||
|
$startDateReflection->setAccessible(true);
|
||||||
|
$startDateReflection->setValue($historyA, new \DateTimeImmutable('1 year ago'));
|
||||||
|
|
||||||
|
$work->addReferrer($userB);
|
||||||
|
$work->addReferrer($userC);
|
||||||
|
|
||||||
|
$work->removeReferrer($userB);
|
||||||
|
$work->removeReferrer($userA);
|
||||||
|
|
||||||
|
self::assertCount(1, $work->getReferrers());
|
||||||
|
self::assertNotContains($userA, $work->getReferrers());
|
||||||
|
self::assertNotContains($userB, $work->getReferrers());
|
||||||
|
self::assertContains($userC, $work->getReferrers());
|
||||||
|
|
||||||
|
self::assertCount(2, $work->getReferrersHistory());
|
||||||
|
|
||||||
|
$historyA = $work->getReferrersHistory()
|
||||||
|
->filter(fn (AccompanyingPeriodWorkReferrerHistory $h) => $userA === $h->getUser())
|
||||||
|
->first();
|
||||||
|
|
||||||
|
self::assertNotFalse($historyA);
|
||||||
|
self::assertSame($userA, $historyA->getUser());
|
||||||
|
self::assertEquals((new \DateTimeImmutable())->format('Y-m-d'), $historyA->getEndDate()->format('Y-m-d'));
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user