Fix handling comments and workflows on acpw

This commit is contained in:
Julie Lenaerts 2025-03-26 20:25:54 +01:00
parent f523b9adb3
commit 5e6833975b

View File

@ -31,13 +31,16 @@ class AccompanyingPeriodWorkMergeService
try { try {
$queries = array_merge( $queries = array_merge(
$this->updateReferences($toKeep, $toDelete), $this->updateReferencesSQL($toKeep, $toDelete),
$this->transferWorkflowsSQL($toKeep, $toDelete),
$this->generateStartDateSQL($toDelete, $toKeep), $this->generateStartDateSQL($toDelete, $toKeep),
$this->generateEndDateSQL($toDelete, $toKeep), $this->generateEndDateSQL($toDelete, $toKeep),
$this->generateCommentSQL($toDelete, $toKeep),
$this->removeAccompanyingPeriodWork($toDelete) $this->removeAccompanyingPeriodWork($toDelete)
); );
foreach ($queries as $query) { foreach ($queries as $query) {
dump($query);
$conn->executeStatement($query['sql'], $query['params']); $conn->executeStatement($query['sql'], $query['params']);
} }
@ -49,6 +52,20 @@ class AccompanyingPeriodWorkMergeService
} }
} }
private function transferWorkflowsSQL(AccompanyingPeriodWork $toKeep, AccompanyingPeriodWork $toDelete): array
{
$queries = [];
$queries[] = [
'sql' => "UPDATE chill_main_workflow_entity w
SET relatedentityid = :toKeepId
WHERE w.relatedentityid = :toDeleteId
AND w.relatedentityclass = 'Chill\PersonBundle\Entity\AccompanyingPeriod\AccompanyingPeriodWork'",
'params' => ['toKeepId' => $toKeep->getId(), 'toDeleteId' => $toDelete->getId()],
];
return $queries;
}
private function generateStartDateSQL(AccompanyingPeriodWork $toDelete, AccompanyingPeriodWork $toKeep): array private function generateStartDateSQL(AccompanyingPeriodWork $toDelete, AccompanyingPeriodWork $toKeep): array
{ {
$queries = []; $queries = [];
@ -89,7 +106,41 @@ class AccompanyingPeriodWorkMergeService
return $queries; return $queries;
} }
private function updateReferences(AccompanyingPeriodWork $toKeep, AccompanyingPeriodWork $toDelete): array private function generateCommentSQL(AccompanyingPeriodWork $toDelete, AccompanyingPeriodWork $toKeep): array
{
$queries = [];
$queries[] = [
'sql' => "WITH updated_values AS (
SELECT
acpw1.id AS to_update,
acpw1.note || ' ' || acpw2.note AS new_note,
jsonb_set(
acpw1.privatecomment_comments::jsonb,
'{1}',
to_jsonb((acpw1.privatecomment_comments::jsonb->>'1') || ' ' || (acpw2.privatecomment_comments::jsonb->>'1'))
) AS new_privatecomment_comments
FROM
chill_person_accompanying_period_work acpw1,
chill_person_accompanying_period_work acpw2
WHERE
acpw1.id = :toKeep AND
acpw2.id = :toDelete
)
UPDATE chill_person_accompanying_period_work
SET
note = updated_values.new_note,
privatecomment_comments = updated_values.new_privatecomment_comments
FROM
updated_values
WHERE
chill_person_accompanying_period_work.id = updated_values.to_update",
'params' => ['toDelete' => $toDelete->getId(), 'toKeep' => $toKeep->getId()],
];
return $queries;
}
private function updateReferencesSQL(AccompanyingPeriodWork $toKeep, AccompanyingPeriodWork $toDelete): array
{ {
$queries = []; $queries = [];
$allMeta = $this->em->getMetadataFactory()->getAllMetadata(); $allMeta = $this->em->getMetadataFactory()->getAllMetadata();