mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-06-07 18:44:08 +00:00
fixed: do not show same person twice if persons are members simultaneously
This commit is contained in:
parent
4ef48216ed
commit
09b2c9a14e
@ -14,6 +14,7 @@ namespace Chill\PersonBundle\Entity\Household;
|
||||
use ArrayIterator;
|
||||
use Chill\MainBundle\Entity\Address;
|
||||
use Chill\MainBundle\Entity\Embeddable\CommentEmbeddable;
|
||||
use Chill\PersonBundle\Entity\Person;
|
||||
use Chill\PersonBundle\Validator\Constraints\Household\MaxHolder;
|
||||
use DateTime;
|
||||
use DateTimeImmutable;
|
||||
@ -354,7 +355,12 @@ class Household
|
||||
return $this->members;
|
||||
}
|
||||
|
||||
public function getMembersDuringMembership(HouseholdMember $membership)
|
||||
/**
|
||||
* get all the members during a given membership.
|
||||
*
|
||||
* @return Collection|HouseholdMember[]
|
||||
*/
|
||||
public function getMembersDuringMembership(HouseholdMember $membership): Collection
|
||||
{
|
||||
return $this->getMembersOnRange(
|
||||
$membership->getStartDate(),
|
||||
@ -441,6 +447,28 @@ class Household
|
||||
return $this->getNonCurrentMembers($now)->matching($criteria);
|
||||
}
|
||||
|
||||
/**
|
||||
* get all the unique persons during a given membership.
|
||||
*
|
||||
* same as @see(self::getMembersDuringMembership}, except that the collection is filtered to
|
||||
* return unique members.
|
||||
*
|
||||
* @return Collection|Person[]
|
||||
*/
|
||||
public function getPersonsDuringMembership(HouseholdMember $member): Collection
|
||||
{
|
||||
// make list unique
|
||||
$membersByHash = [];
|
||||
|
||||
foreach ($this->getMembersDuringMembership($member) as $m) {
|
||||
if (null !== $m && null !== $m->getPerson()) {
|
||||
$membersByHash[spl_object_hash($m->getPerson())] = $m->getPerson();
|
||||
}
|
||||
}
|
||||
|
||||
return new ArrayCollection(array_values($membersByHash));
|
||||
}
|
||||
|
||||
public function getPreviousAddressOf(Address $address): ?Address
|
||||
{
|
||||
$iterator = new ArrayIterator($this->getAddressesOrdered());
|
||||
|
@ -65,18 +65,18 @@
|
||||
<h3>{{ 'household.Members at same time'|trans }}</h3>
|
||||
</div>
|
||||
<div class="wl-col list">
|
||||
{% set simultaneous = p.household.getMembersDuringMembership(p) %}
|
||||
{% set simultaneous = p.household.getPersonsDuringMembership(p) %}
|
||||
{% if simultaneous|length == 0 %}
|
||||
<p class="chill-no-data-statement">
|
||||
{{ 'household.Any simultaneous members'|trans }}
|
||||
</p>
|
||||
{% else %}
|
||||
{% for m in simultaneous -%}
|
||||
{% for person in simultaneous -%}
|
||||
{% include '@ChillMain/OnTheFly/_insert_vue_onthefly.html.twig' with {
|
||||
action: 'show', displayBadge: true,
|
||||
targetEntity: { name: 'person', id: m.person.id },
|
||||
buttonText: m.person|chill_entity_render_string,
|
||||
isDead: m.person.deathdate is not null
|
||||
targetEntity: { name: 'person', id: person.id },
|
||||
buttonText: person|chill_entity_render_string,
|
||||
isDead: person.deathdate is not null
|
||||
} %}
|
||||
{%- endfor -%}
|
||||
{% endif %}
|
||||
|
@ -135,4 +135,51 @@ final class HouseholdTest extends TestCase
|
||||
$this->assertEquals(new DateTimeImmutable('2021-12-31'), $second->getStartDate());
|
||||
$this->assertEquals(new DateTimeImmutable('2021-12-31'), $inside->getEndDate());
|
||||
}
|
||||
|
||||
public function testHouseholdGetPersonsDuringMembership()
|
||||
{
|
||||
$household = new Household();
|
||||
$person1 = new Person();
|
||||
$person2 = new Person();
|
||||
$personOut = new Person();
|
||||
|
||||
$household->addMember(
|
||||
$member1 = (new HouseholdMember())
|
||||
->setStartDate(new DateTimeImmutable('2021-01-01'))
|
||||
->setEndDate(new DateTimeImmutable('2021-12-01'))
|
||||
->setPerson($person1)
|
||||
);
|
||||
|
||||
$household->addMember(
|
||||
$member2a = (new HouseholdMember())
|
||||
->setStartDate(new DateTimeImmutable('2021-01-01'))
|
||||
->setEndDate(new DateTimeImmutable('2021-05-01'))
|
||||
->setPerson($person2)
|
||||
);
|
||||
|
||||
$household->addMember(
|
||||
$member2b = (new HouseholdMember())
|
||||
->setStartDate(new DateTimeImmutable('2021-11-01'))
|
||||
->setEndDate(new DateTimeImmutable('2022-06-01'))
|
||||
->setPerson($person2)
|
||||
);
|
||||
|
||||
$household->addMember(
|
||||
$memberOut = (new HouseholdMember())
|
||||
->setStartDate(new DateTimeImmutable('2019-01-01'))
|
||||
->setEndDate(new DateTimeImmutable('2019-12-01'))
|
||||
->setPerson($personOut)
|
||||
);
|
||||
|
||||
$this->assertCount(0, $household->getPersonsDuringMembership($memberOut));
|
||||
|
||||
$this->assertCount(1, $household->getPersonsDuringMembership($member1));
|
||||
$this->assertContains($person2, $household->getPersonsDuringMembership($member1));
|
||||
|
||||
$this->assertCount(1, $household->getPersonsDuringMembership($member2a));
|
||||
$this->assertContains($person1, $household->getPersonsDuringMembership($member2a));
|
||||
|
||||
$this->assertCount(1, $household->getPersonsDuringMembership($member2b));
|
||||
$this->assertContains($person1, $household->getPersonsDuringMembership($member2b));
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user