Adjust query to transfer relationship from one person to another depending on whether original person was in the to or from position

This commit is contained in:
Julie Lenaerts 2023-10-30 11:53:41 +01:00
parent 4d20a46717
commit db70ce4a61

View File

@ -26,7 +26,15 @@ class PersonMoveRelationHandler implements PersonMoveSqlHandlerInterface
{ {
$insertSql = sprintf(<<<'SQL' $insertSql = sprintf(<<<'SQL'
INSERT INTO chill_person_relationships (id, relation_id, reverse, createdat, createdby_id, fromperson_id, toperson_id) INSERT INTO chill_person_relationships (id, relation_id, reverse, createdat, createdby_id, fromperson_id, toperson_id)
SELECT nextval('chill_person_relationships_id_seq'), relation_id, reverse, createdat, createdby_id, fromperson_id, toperson_id SELECT nextval('chill_person_relationships_id_seq'), relation_id, reverse, createdat, createdby_id,
CASE
WHEN cpr.fromperson_id = %d THEN %d
ELSE cpr.fromperson_id
END as fromperson,
CASE
WHEN cpr.toperson_id = %d THEN %d
ELSE cpr.toperson_id
END as toperson
FROM chill_person_relationships cpr FROM chill_person_relationships cpr
WHERE fromperson_id = %d OR toperson_id = %d WHERE fromperson_id = %d OR toperson_id = %d
AND NOT EXISTS ( AND NOT EXISTS (
@ -35,7 +43,7 @@ class PersonMoveRelationHandler implements PersonMoveSqlHandlerInterface
cpr2.fromperson_id = %d AND cpr2.toperson_id = %d cpr2.fromperson_id = %d AND cpr2.toperson_id = %d
OR cpr2.fromperson_id = %d AND cpr2.toperson_id = %d OR cpr2.fromperson_id = %d AND cpr2.toperson_id = %d
); );
SQL, $from->getId(), $from->getId(), $to->getId(), $from->getId(), $from->getId(), $to->getId()); SQL, $from->getId(), $to->getId(), $from->getId(), $to->getId(), $from->getId(), $from->getId(), $to->getId(), $from->getId(), $from->getId(), $to->getId());
$deleteSql = [ $deleteSql = [
sprintf('DELETE FROM chill_person_relationships WHERE fromperson_id = %d', $from->getId()), sprintf('DELETE FROM chill_person_relationships WHERE fromperson_id = %d', $from->getId()),