mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-06-12 13:24:25 +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 ArrayIterator;
|
||||||
use Chill\MainBundle\Entity\Address;
|
use Chill\MainBundle\Entity\Address;
|
||||||
use Chill\MainBundle\Entity\Embeddable\CommentEmbeddable;
|
use Chill\MainBundle\Entity\Embeddable\CommentEmbeddable;
|
||||||
|
use Chill\PersonBundle\Entity\Person;
|
||||||
use Chill\PersonBundle\Validator\Constraints\Household\MaxHolder;
|
use Chill\PersonBundle\Validator\Constraints\Household\MaxHolder;
|
||||||
use DateTime;
|
use DateTime;
|
||||||
use DateTimeImmutable;
|
use DateTimeImmutable;
|
||||||
@ -354,7 +355,12 @@ class Household
|
|||||||
return $this->members;
|
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(
|
return $this->getMembersOnRange(
|
||||||
$membership->getStartDate(),
|
$membership->getStartDate(),
|
||||||
@ -441,6 +447,28 @@ class Household
|
|||||||
return $this->getNonCurrentMembers($now)->matching($criteria);
|
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
|
public function getPreviousAddressOf(Address $address): ?Address
|
||||||
{
|
{
|
||||||
$iterator = new ArrayIterator($this->getAddressesOrdered());
|
$iterator = new ArrayIterator($this->getAddressesOrdered());
|
||||||
|
@ -65,18 +65,18 @@
|
|||||||
<h3>{{ 'household.Members at same time'|trans }}</h3>
|
<h3>{{ 'household.Members at same time'|trans }}</h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="wl-col list">
|
<div class="wl-col list">
|
||||||
{% set simultaneous = p.household.getMembersDuringMembership(p) %}
|
{% set simultaneous = p.household.getPersonsDuringMembership(p) %}
|
||||||
{% if simultaneous|length == 0 %}
|
{% if simultaneous|length == 0 %}
|
||||||
<p class="chill-no-data-statement">
|
<p class="chill-no-data-statement">
|
||||||
{{ 'household.Any simultaneous members'|trans }}
|
{{ 'household.Any simultaneous members'|trans }}
|
||||||
</p>
|
</p>
|
||||||
{% else %}
|
{% else %}
|
||||||
{% for m in simultaneous -%}
|
{% for person in simultaneous -%}
|
||||||
{% include '@ChillMain/OnTheFly/_insert_vue_onthefly.html.twig' with {
|
{% include '@ChillMain/OnTheFly/_insert_vue_onthefly.html.twig' with {
|
||||||
action: 'show', displayBadge: true,
|
action: 'show', displayBadge: true,
|
||||||
targetEntity: { name: 'person', id: m.person.id },
|
targetEntity: { name: 'person', id: person.id },
|
||||||
buttonText: m.person|chill_entity_render_string,
|
buttonText: person|chill_entity_render_string,
|
||||||
isDead: m.person.deathdate is not null
|
isDead: person.deathdate is not null
|
||||||
} %}
|
} %}
|
||||||
{%- endfor -%}
|
{%- endfor -%}
|
||||||
{% endif %}
|
{% 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'), $second->getStartDate());
|
||||||
$this->assertEquals(new DateTimeImmutable('2021-12-31'), $inside->getEndDate());
|
$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