FIX [duplicate] adding test and handlers to handle fusion of doublons with special cases - after codewithme session

This commit is contained in:
2023-07-13 15:30:33 +02:00
parent 0423540976
commit e0cdf06e99
9 changed files with 377 additions and 32 deletions

View File

@@ -0,0 +1,35 @@
<?php
namespace Chill\PersonBundle\Actions\Remove\Handler;
use Chill\PersonBundle\Entity\AccompanyingPeriodParticipation;
class PersonMoveAccompanyingPeriodParticipationHandler
{
public function supports(string $className, string $field): bool
{
return $className === AccompanyingPeriodParticipation::class;
}
public function getSqls(string $className, string $field, Person $from, Person $to): array
{
$insertSql = sprintf(<<<SQL
INSERT INTO chill_person_accompanying_period_participation (person_id, accompanyingperiod_id, id, startdate, enddate)
SELECT %d, accompanyingperiod_id, nextval('chill_person_person_center_history_id_seq'), startdate, enddate
FROM chill_person_accompanying_period_participation cpapp
WHERE person_id = %d
AND NOT EXISTS (
SELECT 1 FROM chill_person_accompanying_period_participation cpapp2
WHERE
person_id = %d
AND daterange(cpapp.startdate, cpapp.enddate) && daterange(cpapp2.startdate, cpapp2.enddate)
)
SQL, $to->getId(), $from->getId(), $to->getId());
$deleteSql = sprintf(<<<SQL
DELETE FROM chill_person_accompanying_period_participation WHERE person_id = %d
SQL, $from->getId());
return [$sqlInsert, $deleteSql];
}
}

View File

@@ -0,0 +1,45 @@
<?php
namespace Chill\PersonBundle\Actions\Remove\Handler;
use Chill\PersonBundle\Actions\Remove\PersonMoveSqlHandlerInterface;
use Chill\PersonBundle\Entity\Person;
class PersonMoveCenterHistoryHandler implements PersonMoveSqlHandlerInterface
{
public function supports(string $className, string $field): bool
{
return $className === Person\PersonCenterHistory::class;
}
public function getSqls(string $className, string $field, Person $from, Person $to): array
{
$insertSql = sprintf(<<<SQL
INSERT INTO chill_person_person_center_history (id, person_id, center_id, startdate, enddate, createdat, updatedat, createdby_id, updatedby_id)
SELECT nextval('chill_person_person_center_history_id_seq'), %d, center_id, startdate, enddate, createdat, updatedat, createdby_id, updatedby_id
FROM chill_person_person_center_history cppch
WHERE person_id = %d
AND NOT EXISTS (
SELECT 1 FROM chill_person_person_center_history cppch2
WHERE
person_id = %d
AND daterange(cppch.startdate, cppch.enddate) && daterange(cppch2.startdate, cppch2.enddate)
)
SQL, $to->getId(), $from->getId(), $to->getId());
$updateSql = sprintf(<<<SQL
UPDATE chill_person_person_center_history cppch
SET startdate =
WHERE person_id = %d
AND EXISTS (
SELECT 1 FROM chill_person_person_center_history cppch2
WHERE
person_id = %d
AND daterange(cppch.startdate, cppch.enddate) && daterange(cppch2.startdate, cppch2.enddate)
)
SQL, $to->getId());
}
}

View File

@@ -0,0 +1,38 @@
<?php
namespace Chill\PersonBundle\Actions\Remove\Handler;
use Chill\PersonBundle\Actions\Remove\PersonMoveSqlHandlerInterface;
use Chill\PersonBundle\Entity\Household\HouseholdMember;
use Chill\PersonBundle\Entity\Person;
class PersonMoveHouseholdHandler implements PersonMoveSqlHandlerInterface
{
public function supports(string $className, string $field): bool
{
return $className === HouseholdMember::class;
}
public function getSqls(string $className, string $field, Person $from, Person $to): array
{
$sqlInsert = sprintf(<<<SQL
INSERT INTO chill_person_household_members (id, person_id, household_id, startdate, enddate, comment, sharedhousehold, position_id, holder)
SELECT nextval('chill_person_household_members_id_seq'), %d, household_id, startdate, enddate, comment, sharedhousehold, position_id, holder
FROM chill_person_household_members cphm
WHERE person_id = %d
AND NOT EXISTS (
SELECT 1 FROM chill_person_household_members cphm_inner
WHERE
person_id = %d
AND daterange(cphm.startdate, cphm.enddate) && daterange(cphm_inner.startdate, cphm_inner.enddate)
)
SQL, $to->getId(), $from->getId(), $to->getId());
$deleteSql = sprintf(<<<SQL
DELETE FROM chill_person_household_members WHERE person_id = %d
SQL, $from->getId());
return [$sqlInsert, $deleteSql];
}
}