diff --git a/src/State/TaskCalendarProcessor.php b/src/State/TaskCalendarProcessor.php index fd612d4..5e3013e 100644 --- a/src/State/TaskCalendarProcessor.php +++ b/src/State/TaskCalendarProcessor.php @@ -8,6 +8,7 @@ use ApiPlatform\Metadata\Delete; use ApiPlatform\Metadata\Operation; use ApiPlatform\State\ProcessorInterface; use App\Entity\Task; +use App\Entity\TaskStatus; use App\Service\CalDavService; use Doctrine\ORM\EntityManagerInterface; use Symfony\Component\DependencyInjection\Attribute\Autowire; @@ -49,9 +50,16 @@ final readonly class TaskCalendarProcessor implements ProcessorInterface return $result; } - // CRITICAL: Store original status BEFORE persist to detect isFinal transition - $originalStatus = $data->getStatus(); - $wasAlreadyFinal = $originalStatus?->getIsFinal() ?? false; + // Detect isFinal transition using Doctrine UnitOfWork. + // $data already has the NEW values (API Platform deserialized the PATCH). + // UnitOfWork originalEntityData stores the DB snapshot with entity references for relations. + $uow = $this->entityManager->getUnitOfWork(); + $originalData = $uow->getOriginalEntityData($data); + $wasAlreadyFinal = false; + + if (isset($originalData['status']) && $originalData['status'] instanceof TaskStatus) { + $wasAlreadyFinal = $originalData['status']->getIsFinal(); + } $result = $this->persistProcessor->process($data, $operation, $uriVariables, $context);