first impl of person Mover + add fixtures

This commit is contained in:
2021-05-28 16:41:37 +02:00
parent 94bcbac06a
commit 87ba68971c
13 changed files with 384 additions and 21 deletions

View File

@@ -0,0 +1,80 @@
<?php
namespace Chill\PersonBundle\Household;
use Symfony\Component\Validator\ConstraintViolationListInterface;
use Chill\PersonBundle\Entity\Household\HouseholdMember;
use Chill\PersonBundle\Entity\Household\Position;
use Chill\PersonBundle\Entity\Household\Household;
use Chill\PersonBundle\Entity\Person;
use Symfony\Component\Validator\Validator\ValidatorInterface;
class MoveMembers
{
private ValidatorInterface $validator;
private Household $household;
private array $persistables = [];
private array $memershipsAffected = [];
public function __construct(ValidatorInterface $validator)
{
$this->validation = $validator;
}
public function toHousehold(Household $household): self
{
$this->household = $household;
return $this;
}
public function addMovement(\DateTimeInterface $date, Person $person, Position $position, ?bool $holder = false, ?string $comment = null): self
{
if (NULL === $this->household) {
throw new \LogicException("You must define a household first");
}
$membership = (new HouseholdMember())
->setStartDate($date)
->setPerson($person)
->setPosition($position)
->setHolder($holder)
->setHousehold($this->household)
->setComment($comment)
;
if ($position->getShareHousehold()) {
foreach ($person->getHouseholdParticipations() as $participation) {
if (FALSE === $participation->getShareHousehold()) {
continue;
}
if ($participation === $membership) {
continue;
}
if ($participation->getEndDate() === NULL || $participation->getEndDate() > $date) {
$participation->setEndDate($date);
$this->membershipsAffected[] = $participation;
}
}
}
$this->membershipsAffected[] = $membership;
$this->persistables[] = $membership;
return $this;
}
public function validate(): ConstraintViolationListInterface
{
}
public function getPersistable(): array
{
return $this->persistables;
}
}

View File

@@ -0,0 +1,27 @@
<?php
namespace Chill\PersonBundle\Household;
use Chill\PersonBundle\Household\MoveMembers;
use Chill\PersonBundle\Entity\Household\Household;
use Symfony\Component\Validator\Validator\ValidatorInterface;
class MoveMembersFactory
{
public function __construct(ValidatorInterface $validator)
{
$this->validator = $validator;
}
public function createMovement(?Household $household): MoveMembers
{
$movement = new MoveMembers($this->validator);
if ($household) {
$movement->toHousehold($household);
}
return $movement;
}
}