Transfer evaluations (and related documents) during merge

This commit is contained in:
Julie Lenaerts 2025-05-20 16:43:39 +02:00
parent 9a3fef862e
commit 26fd16ab07
2 changed files with 29 additions and 11 deletions

View File

@ -0,0 +1,6 @@
kind: Fixed
body: Fix the transfer of evaluations and documents during of accompanyingperiodwork
time: 2025-05-20T16:44:29.093304653+02:00
custom:
Issue: ""
SchemaChange: No schema change

View File

@ -17,9 +17,9 @@ use Doctrine\ORM\EntityManagerInterface;
/** /**
* Service for merging two AccompanyingPeriodWork entities into a single entity. * Service for merging two AccompanyingPeriodWork entities into a single entity.
*/ */
class AccompanyingPeriodWorkMergeService readonly class AccompanyingPeriodWorkMergeService
{ {
public function __construct(private readonly EntityManagerInterface $em) {} public function __construct(private EntityManagerInterface $em) {}
/** /**
* Merges two AccompanyingPeriodWork entities into one by transferring relevant data and removing the obsolete entity. * Merges two AccompanyingPeriodWork entities into one by transferring relevant data and removing the obsolete entity.
@ -35,8 +35,9 @@ class AccompanyingPeriodWorkMergeService
$this->alterStartDate($toKeep, $toDelete); $this->alterStartDate($toKeep, $toDelete);
$this->alterEndDate($toKeep, $toDelete); $this->alterEndDate($toKeep, $toDelete);
$this->concatenateComments($toKeep, $toDelete); $this->concatenateComments($toKeep, $toDelete);
$this->transferEvaluationsSQL($toKeep, $toDelete);
$this->transferWorkflowsSQL($toKeep, $toDelete); $this->transferWorkflowsSQL($toKeep, $toDelete);
$this->updateReferencesSQL($toKeep, $toDelete); $this->updateReferences($toKeep, $toDelete);
$entityManager->remove($toDelete); $entityManager->remove($toDelete);
}); });
@ -54,6 +55,16 @@ class AccompanyingPeriodWorkMergeService
); );
} }
private function transferEvaluationsSQL(AccompanyingPeriodWork $toKeep, AccompanyingPeriodWork $toDelete): void
{
$this->em->getConnection()->executeQuery(
"UPDATE chill_person_accompanying_period_work_evaluation cpapwe
SET accompanyingperiodwork_id = :toKeepId
WHERE cpapwe.accompanyingperiodwork_id = :toDeleteId",
['toKeepId' => $toKeep->getId(), 'toDeleteId' => $toDelete->getId()]
);
}
private function alterStartDate(AccompanyingPeriodWork $toKeep, AccompanyingPeriodWork $toDelete): void private function alterStartDate(AccompanyingPeriodWork $toKeep, AccompanyingPeriodWork $toDelete): void
{ {
$startDate = min($toKeep->getStartDate(), $toDelete->getStartDate()); $startDate = min($toKeep->getStartDate(), $toDelete->getStartDate());
@ -74,16 +85,17 @@ class AccompanyingPeriodWorkMergeService
private function concatenateComments(AccompanyingPeriodWork $toKeep, AccompanyingPeriodWork $toDelete): void private function concatenateComments(AccompanyingPeriodWork $toKeep, AccompanyingPeriodWork $toDelete): void
{ {
if ($toDelete->getNote() !== '') {
$toKeep->setNote($toKeep->getNote()."\n\n-----------------\n\n".$toDelete->getNote()); $toKeep->setNote($toKeep->getNote()."\n\n-----------------\n\n".$toDelete->getNote());
}
if (count($toDelete->getPrivateComment()->getComments()) > 0) {
$toKeep->getPrivateComment()->concatenateComments($toDelete->getPrivateComment()); $toKeep->getPrivateComment()->concatenateComments($toDelete->getPrivateComment());
} }
private function updateReferencesSQL(AccompanyingPeriodWork $toKeep, AccompanyingPeriodWork $toDelete): void
{
foreach ($toDelete->getAccompanyingPeriodWorkEvaluations() as $evaluation) {
$toKeep->addAccompanyingPeriodWorkEvaluation($evaluation);
} }
private function updateReferences(AccompanyingPeriodWork $toKeep, AccompanyingPeriodWork $toDelete): void
{
foreach ($toDelete->getReferrers() as $referrer) { foreach ($toDelete->getReferrers() as $referrer) {
// we only keep the current referrer // we only keep the current referrer
$toKeep->addReferrer($referrer); $toKeep->addReferrer($referrer);