From 122be9b25525e59943b61d9f52a2e9e7ef0f02ae Mon Sep 17 00:00:00 2001 From: Ioannis Igoumenos Date: Sun, 16 Nov 2025 06:00:22 +0200 Subject: [PATCH] petition status mapper --- .../Transmogrify/config/schema/tables.json | 2 + .../src/Lib/Traits/TypeMapperTrait.php | 39 +++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/app/plugins/Transmogrify/config/schema/tables.json b/app/plugins/Transmogrify/config/schema/tables.json index f3f926b2e..799453515 100644 --- a/app/plugins/Transmogrify/config/schema/tables.json +++ b/app/plugins/Transmogrify/config/schema/tables.json @@ -441,6 +441,8 @@ "co_enrollment_flow_id": null, "co_id": null, "cou_id": "cou_id", + "status": "&mapPetitionStatus", + "token": null, "enrollee_org_identity_id": null, "archived_org_identity_id": null, "enrollee_co_person_id": "enrollee_person_id", diff --git a/app/plugins/Transmogrify/src/Lib/Traits/TypeMapperTrait.php b/app/plugins/Transmogrify/src/Lib/Traits/TypeMapperTrait.php index c619bc932..952414f6d 100644 --- a/app/plugins/Transmogrify/src/Lib/Traits/TypeMapperTrait.php +++ b/app/plugins/Transmogrify/src/Lib/Traits/TypeMapperTrait.php @@ -29,6 +29,7 @@ namespace Transmogrify\Lib\Traits; +use App\Lib\Enum\PetitionStatusEnum; use Doctrine\DBAL\Exception; use Doctrine\DBAL\Exception\UniqueConstraintViolationException; use Transmogrify\Lib\Util\RawSqlQueries; @@ -403,6 +404,44 @@ protected function mapOrgIdentitycoPersonId(array $row): ?int return null; } + + /** + * Maps v4 petition status codes to v5 PetitionStatusEnum values + * + * For in-progress/active v4 statuses (A,Y,C,CR,PA,PC,PV), maps to Terminated. + * For final/non-active outcomes (F,X,N,D2), preserves equivalent v5 status. + * Unknown/legacy values default to Terminated status. + * + * @param array $row Row data containing v4 petition status code in 'status' field + * @return string|null Mapped v5 PetitionStatusEnum value or null if status empty/missing + * @since COmanage Registry v5.2.0 + */ + protected function mapPetitionStatus(array $row): ?string + { + $v4 = $row['status'] ?? null; + if ($v4 === null || $v4 === '') { + return null; + } + + // Treat any in-progress/active statuses as Terminated in v5 + // Active (A), Approved (Y), Confirmed (C), Created (CR), + // Pending Approval (PA), Pending Confirmation (PC), Pending Vetting (PV) + $active = ['A', 'Y', 'C', 'CR', 'PA', 'PC', 'PV']; + if (in_array($v4, $active, true)) { + return PetitionStatusEnum::Terminated; // 'CX' + } + + // Preserve final/non-active outcomes + return match ($v4) { + 'F' => PetitionStatusEnum::Finalized, + 'X' => PetitionStatusEnum::Declined, + 'N' => PetitionStatusEnum::Denied, + 'D2' => PetitionStatusEnum::Duplicate, + default => PetitionStatusEnum::Terminated, + }; + } + + /** * Map server type code to corresponding plugin path *