Skip to content

Commit 55adad8

Browse files
committed
Fixed the risk owner and decission approver data process, fixed the report and export/import process, improved the history data preparation
1 parent ca701af commit 55adad8

14 files changed

Lines changed: 381 additions & 212 deletions

src/Entity/AnrHistory.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ class AnrHistory
4444
public const CONSEQUENCE_REPUTATION = 'consequence_reputation';
4545
public const CONSEQUENCE_LEGAL = 'consequence_legal';
4646
public const CONSEQUENCE_FINANCIAL = 'consequence_financial';
47+
public const IMPACT_SCALE_UPDATE = 'impact_scale_update';
4748

4849
public const CREATED = 1;
4950
public const FIELD_UPDATED = 10;
@@ -54,6 +55,7 @@ class AnrHistory
5455
public const CONSEQUENCE_CREATED = 30;
5556
public const CONSEQUENCE_UPDATED = 31;
5657
public const CONSEQUENCE_DELETED = 32;
58+
public const IMPACT_SCALE_UPDATED = 33;
5759

5860
public const RESIDUAL_ACCEPTANCE_UPDATED = 40;
5961

src/Export/Service/AnrExportService.php

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ private function prepareExportData(Entity\Anr $anr, array $exportParams): array
120120
) : [],
121121
'library' => $withLibrary ? $this->prepareLibraryData($anr, !$withKnowledgeBase) : [],
122122
'supervisors' => $this->prepareSupervisorsData($anr),
123+
'risk_owners' => $this->prepareLegacyRiskOwnersData($anr),
123124
'instances' => $this->prepareInstancesData(
124125
$anr,
125126
!$withLibrary,
@@ -271,6 +272,32 @@ private function prepareSupervisorIdentity(?Entity\AnrSupervisor $supervisor): ?
271272
];
272273
}
273274

275+
private function prepareLegacyRiskOwnersData(Entity\Anr $anr): array
276+
{
277+
$result = [];
278+
/** @var Entity\AnrSupervisor $supervisor */
279+
foreach ($this->anrSupervisorTable->findByAnrOrdered($anr) as $supervisor) {
280+
if (!$supervisor->hasRole(Entity\AnrSupervisorRole::ROLE_RISK_OWNER)) {
281+
continue;
282+
}
283+
284+
$result[] = [
285+
'name' => $supervisor->getName(),
286+
];
287+
}
288+
289+
return $result;
290+
}
291+
292+
private function prepareLegacyRiskOwnerName(?Entity\AnrSupervisor $supervisor): ?string
293+
{
294+
if ($supervisor === null) {
295+
return null;
296+
}
297+
298+
return $supervisor->hasRole(Entity\AnrSupervisorRole::ROLE_RISK_OWNER) ? $supervisor->getName() : null;
299+
}
300+
274301
private function prepareResidualRiskAcceptanceData(
275302
?string $decision,
276303
?Entity\AnrSupervisor $approverSupervisor,

src/Export/Service/Traits/InformationInstanceRiskExportTrait.php

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -69,12 +69,10 @@ private function prepareInformationInstanceRiskData(
6969
'riskIntegrity' => $withEval ? $instanceRisk->getRiskIntegrity() : -1,
7070
'riskAvailability' => $withEval ? $instanceRisk->getRiskAvailability() : -1,
7171
'context' => $withEval ? $instanceRisk->getContext() : '',
72+
'riskOwner' => $this->prepareLegacyRiskOwnerName($instanceRisk->getRiskOwnerSupervisor()),
7273
'riskOwnerSupervisor' => $withEval
7374
? $this->prepareSupervisorIdentity($instanceRisk->getRiskOwnerSupervisor())
7475
: null,
75-
'risk_owner_supervisor' => $withEval
76-
? $this->prepareSupervisorIdentity($instanceRisk->getRiskOwnerSupervisor())
77-
: null,
7876
'lastReviewDate' => $withEval ? $instanceRisk->getLastReviewDate()?->format('Y-m-d') : null,
7977
'reviewFrequency' => $withEval ? $instanceRisk->getReviewFrequency() : null,
8078
'residualRiskDecision' => $withEval ? $instanceRisk->getResidualRiskDecision() : null,
@@ -100,17 +98,6 @@ private function prepareInformationInstanceRiskData(
10098
$instanceRisk->getResidualRiskJustification()
10199
)
102100
: null,
103-
'residual_risk_acceptance' => $withEval
104-
? $this->prepareResidualRiskAcceptanceData(
105-
$instanceRisk->getResidualRiskDecision(),
106-
$instanceRisk->getResidualAcceptanceApproverSupervisor(),
107-
$instanceRisk->getResidualRiskDecidedAt(),
108-
$instanceRisk->getResidualAcceptancePerformedByName(),
109-
$instanceRisk->getResidualAcceptancePerformedByEmail(),
110-
$instanceRisk->isResidualAcceptancePerformedOnBehalf(),
111-
$instanceRisk->getResidualRiskJustification()
112-
)
113-
: null,
114101
'recommendations' => $recommendationsData,
115102
];
116103
}

src/Export/Service/Traits/OperationalInstanceRiskExportTrait.php

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -71,12 +71,10 @@ private function prepareOperationalInstanceRiskData(
7171
'mitigation' => $withEval ? $operationalInstanceRisk->getMitigation() : '',
7272
'specific' => $operationalInstanceRisk->getSpecific(),
7373
'context' => $withEval ? $operationalInstanceRisk->getContext() : '',
74+
'riskOwner' => $this->prepareLegacyRiskOwnerName($operationalInstanceRisk->getRiskOwnerSupervisor()),
7475
'riskOwnerSupervisor' => $withEval
7576
? $this->prepareSupervisorIdentity($operationalInstanceRisk->getRiskOwnerSupervisor())
7677
: null,
77-
'risk_owner_supervisor' => $withEval
78-
? $this->prepareSupervisorIdentity($operationalInstanceRisk->getRiskOwnerSupervisor())
79-
: null,
8078
'lastReviewDate' => $withEval ? $operationalInstanceRisk->getLastReviewDate()?->format('Y-m-d') : null,
8179
'reviewFrequency' => $withEval ? $operationalInstanceRisk->getReviewFrequency() : null,
8280
'residualRiskDecision' => $withEval ? $operationalInstanceRisk->getResidualRiskDecision() : null,
@@ -108,17 +106,6 @@ private function prepareOperationalInstanceRiskData(
108106
$operationalInstanceRisk->getResidualRiskJustification()
109107
)
110108
: null,
111-
'residual_risk_acceptance' => $withEval
112-
? $this->prepareResidualRiskAcceptanceData(
113-
$operationalInstanceRisk->getResidualRiskDecision(),
114-
$operationalInstanceRisk->getResidualAcceptanceApproverSupervisor(),
115-
$operationalInstanceRisk->getResidualRiskDecidedAt(),
116-
$operationalInstanceRisk->getResidualAcceptancePerformedByName(),
117-
$operationalInstanceRisk->getResidualAcceptancePerformedByEmail(),
118-
$operationalInstanceRisk->isResidualAcceptancePerformedOnBehalf(),
119-
$operationalInstanceRisk->getResidualRiskJustification()
120-
)
121-
: null,
122109
'recommendations' => $recommendationsData,
123110
'operationalInstanceRiskScales' => $operationalInstanceRiskScales,
124111
];

src/Import/Processor/InstanceRiskImportProcessor.php

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -126,13 +126,24 @@ private function processInstanceRiskData(Entity\Instance $instance, array $insta
126126
$reviewFrequency = trim((string)$instanceRiskData['reviewFrequency']);
127127
$instanceRisk->setReviewFrequency($reviewFrequency === '' ? null : $reviewFrequency);
128128
}
129-
$riskOwnerSupervisor = $instanceRiskData['riskOwnerSupervisor'] ?? $instanceRiskData['risk_owner_supervisor'] ?? null;
129+
$riskOwnerSupervisor = $instanceRiskData['riskOwnerSupervisor'] ?? null;
130130
if (!empty($riskOwnerSupervisor) && is_array($riskOwnerSupervisor)) {
131131
$this->anrSupervisorService->assignRiskOwnerSupervisorData(
132132
$anr,
133133
$riskOwnerSupervisor,
134-
$instanceRisk
134+
$instanceRisk,
135+
false
135136
);
137+
} else {
138+
$legacyRiskOwnerName = trim((string)($instanceRiskData['riskOwner'] ?? ''));
139+
if ($legacyRiskOwnerName !== '') {
140+
$this->anrSupervisorService->assignRiskOwnerSupervisorName(
141+
$anr,
142+
$legacyRiskOwnerName,
143+
$instanceRisk,
144+
false
145+
);
146+
}
136147
}
137148
if (array_key_exists('residualRiskDecision', $instanceRiskData)) {
138149
$residualRiskDecision = mb_strtolower(trim((string)$instanceRiskData['residualRiskDecision']));
@@ -148,7 +159,8 @@ private function processInstanceRiskData(Entity\Instance $instance, array $insta
148159
$anr,
149160
$residualAcceptanceApproverSupervisor['name'] ?? null,
150161
$residualAcceptanceApproverSupervisor['email'] ?? null,
151-
[Entity\AnrSupervisorRole::ROLE_RESIDUAL_RISK_APPROVER]
162+
[Entity\AnrSupervisorRole::ROLE_RESIDUAL_RISK_APPROVER],
163+
false
152164
)
153165
);
154166
}
@@ -178,9 +190,7 @@ private function processInstanceRiskData(Entity\Instance $instance, array $insta
178190
$residualRiskJustification === '' ? null : $residualRiskJustification
179191
);
180192
}
181-
$residualRiskAcceptance = $instanceRiskData['residualRiskAcceptance']
182-
?? $instanceRiskData['residual_risk_acceptance']
183-
?? null;
193+
$residualRiskAcceptance = $instanceRiskData['residualRiskAcceptance'] ?? null;
184194
if (!empty($residualRiskAcceptance) && is_array($residualRiskAcceptance)) {
185195
$instanceRisk->setResidualRiskDecision(
186196
$this->normalizeResidualRiskDecision($residualRiskAcceptance['decision'] ?? null)
@@ -217,7 +227,8 @@ private function processInstanceRiskData(Entity\Instance $instance, array $insta
217227
$anr,
218228
$approverData['name'] ?? null,
219229
$approverData['email'] ?? null,
220-
[Entity\AnrSupervisorRole::ROLE_RESIDUAL_RISK_APPROVER]
230+
[Entity\AnrSupervisorRole::ROLE_RESIDUAL_RISK_APPROVER],
231+
false
221232
);
222233
$instanceRisk->setResidualAcceptanceApproverSupervisor($approverSupervisor)
223234
->setResidualRiskDecidedBySupervisor($approverSupervisor);

src/Import/Processor/OperationalInstanceRiskImportProcessor.php

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,10 @@ public function processOperationalInstanceRisksData(
9797
->setSpecific($operationalInstanceRiskData['specific'] ?? 0);
9898
if (!empty($operationalInstanceRiskData['riskSource'])) {
9999
$operationalInstanceRisk->setRiskSource(
100-
$this->riskSourceImportProcessor->processRiskSourceData($anr, $operationalInstanceRiskData['riskSource'])
100+
$this->riskSourceImportProcessor->processRiskSourceData(
101+
$anr,
102+
$operationalInstanceRiskData['riskSource']
103+
)
101104
);
102105
}
103106
if ($this->importCacheHelper->getValueFromArrayCache('with_eval')) {
@@ -112,17 +115,26 @@ public function processOperationalInstanceRisksData(
112115
->setComment($operationalInstanceRiskData['comment'] ?? '')
113116
->setMitigation($operationalInstanceRiskData['mitigation'] ?? '')
114117
->setContext($operationalInstanceRiskData['context'] ?? '');
115-
$riskOwnerSupervisor = $operationalInstanceRiskData['riskOwnerSupervisor']
116-
?? $operationalInstanceRiskData['risk_owner_supervisor']
117-
?? null;
118+
$riskOwnerSupervisor = $operationalInstanceRiskData['riskOwnerSupervisor'] ?? null;
118119
if (!empty($riskOwnerSupervisor)
119120
&& is_array($riskOwnerSupervisor)
120121
) {
121122
$this->anrSupervisorService->assignRiskOwnerSupervisorData(
122123
$anr,
123124
$riskOwnerSupervisor,
124-
$operationalInstanceRisk
125+
$operationalInstanceRisk,
126+
false
125127
);
128+
} else {
129+
$legacyRiskOwnerName = trim((string)($operationalInstanceRiskData['riskOwner'] ?? ''));
130+
if ($legacyRiskOwnerName !== '') {
131+
$this->anrSupervisorService->assignRiskOwnerSupervisorName(
132+
$anr,
133+
$legacyRiskOwnerName,
134+
$operationalInstanceRisk,
135+
false
136+
);
137+
}
126138
}
127139
if (array_key_exists('lastReviewDate', $operationalInstanceRiskData)) {
128140
$operationalInstanceRisk->setLastReviewDate(
@@ -152,7 +164,8 @@ public function processOperationalInstanceRisksData(
152164
$anr,
153165
$residualAcceptanceApproverSupervisor['name'] ?? null,
154166
$residualAcceptanceApproverSupervisor['email'] ?? null,
155-
[Entity\AnrSupervisorRole::ROLE_RESIDUAL_RISK_APPROVER]
167+
[Entity\AnrSupervisorRole::ROLE_RESIDUAL_RISK_APPROVER],
168+
false
156169
)
157170
);
158171
}
@@ -184,9 +197,7 @@ public function processOperationalInstanceRisksData(
184197
$justification = trim((string)$operationalInstanceRiskData['residualRiskJustification']);
185198
$operationalInstanceRisk->setResidualRiskJustification($justification === '' ? null : $justification);
186199
}
187-
$residualRiskAcceptance = $operationalInstanceRiskData['residualRiskAcceptance']
188-
?? $operationalInstanceRiskData['residual_risk_acceptance']
189-
?? null;
200+
$residualRiskAcceptance = $operationalInstanceRiskData['residualRiskAcceptance'] ?? null;
190201
if (!empty($residualRiskAcceptance)
191202
&& is_array($residualRiskAcceptance)
192203
) {
@@ -229,7 +240,8 @@ public function processOperationalInstanceRisksData(
229240
$anr,
230241
$approverData['name'] ?? null,
231242
$approverData['email'] ?? null,
232-
[Entity\AnrSupervisorRole::ROLE_RESIDUAL_RISK_APPROVER]
243+
[Entity\AnrSupervisorRole::ROLE_RESIDUAL_RISK_APPROVER],
244+
false
233245
);
234246
$operationalInstanceRisk->setResidualAcceptanceApproverSupervisor($approverSupervisor)
235247
->setResidualRiskDecidedBySupervisor($approverSupervisor);

src/Import/Service/InstanceImportService.php

Lines changed: 0 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -225,37 +225,6 @@ private function processSupervisorsImportData(Entity\Anr $anr, array $data): voi
225225
if (!empty($data['supervisors']) && is_array($data['supervisors'])) {
226226
$this->anrSupervisorService->processForImport($anr, $data['supervisors']);
227227
}
228-
229-
if (empty($data['risk_owners']) || !is_array($data['risk_owners'])) {
230-
return;
231-
}
232-
233-
$legacySupervisors = [];
234-
foreach ($data['risk_owners'] as $riskOwner) {
235-
if (is_string($riskOwner)) {
236-
$riskOwner = ['name' => $riskOwner];
237-
}
238-
if (!is_array($riskOwner)) {
239-
continue;
240-
}
241-
242-
$name = trim((string)($riskOwner['name'] ?? $riskOwner['label'] ?? ''));
243-
$email = trim((string)($riskOwner['email'] ?? ''));
244-
if ($name === '' && $email === '') {
245-
continue;
246-
}
247-
248-
$legacySupervisors[] = [
249-
'name' => $name !== '' ? $name : $email,
250-
'email' => $email !== '' ? $email : null,
251-
'roles' => [Entity\AnrSupervisorRole::ROLE_RISK_OWNER],
252-
'isActive' => true,
253-
];
254-
}
255-
256-
if (!empty($legacySupervisors)) {
257-
$this->anrSupervisorService->processForImport($anr, $legacySupervisors);
258-
}
259228
}
260229

261230
private function processKnowledgeBaseData(Entity\Anr $anr, array $knowledgeBaseData): void

src/Import/Traits/ImportDataStructureAdapterTrait.php

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
use Monarc\Core\Entity\AmvSuperClass;
1111
use Monarc\Core\Entity\InstanceRiskSuperClass;
1212
use Monarc\Core\Entity\ScaleSuperClass;
13+
use Monarc\FrontOffice\Entity\AnrSupervisorRole;
1314

1415
trait ImportDataStructureAdapterTrait
1516
{
@@ -284,7 +285,6 @@ private function prepareInstanceRisksData(array $data, int $languageIndex): arra
284285
'riskAvailability' => $instanceRiskDatum['riskD'],
285286
'context' => $instanceRiskDatum['context'],
286287
'riskOwnerSupervisor' => $this->prepareLegacyRiskOwnerSupervisor($instanceRiskDatum['riskOwner'] ?? null),
287-
'risk_owner_supervisor' => $this->prepareLegacyRiskOwnerSupervisor($instanceRiskDatum['riskOwner'] ?? null),
288288
'lastReviewDate' => $instanceRiskDatum['lastReviewDate'] ?? null,
289289
'reviewFrequency' => $instanceRiskDatum['reviewFrequency'] ?? null,
290290
'residualRiskDecision' => $instanceRiskDatum['residualRiskDecision'] ?? null,
@@ -391,9 +391,6 @@ private function prepareOperationalInstanceRisksData(array $data, int $languageI
391391
'riskOwnerSupervisor' => $this->prepareLegacyRiskOwnerSupervisor(
392392
$operationalInstanceRiskData['riskOwner'] ?? null
393393
),
394-
'risk_owner_supervisor' => $this->prepareLegacyRiskOwnerSupervisor(
395-
$operationalInstanceRiskData['riskOwner'] ?? null
396-
),
397394
'recommendations' => $recommendationsData,
398395
'operationalInstanceRiskScales' => $operationalInstanceRiskData['scalesValues'],
399396
];
@@ -446,6 +443,6 @@ private function prepareLegacyRiskOwnerSupervisor(mixed $riskOwner): ?array
446443
{
447444
$name = trim((string)$riskOwner);
448445

449-
return $name === '' ? null : ['name' => $name];
446+
return $name === '' ? null : ['name' => $name, 'roles' => [AnrSupervisorRole::ROLE_RISK_OWNER]];
450447
}
451448
}

src/Service/AnrHistoryService.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ public function createEntry(
9898
}
9999

100100
/**
101-
* @param array<int, array{targetType:int,targetId:int,changeType:int,fieldCode:?string,oldValue:mixed,newValue:mixed}> $entries
101+
* @param array $entries
102102
*/
103103
public function createEntries(Anr $anr, array $entries): void
104104
{
@@ -193,7 +193,7 @@ private function normalizeValue(mixed $value): ?string
193193
}
194194

195195
if (is_bool($value)) {
196-
return $value ? '1' : '0';
196+
return $value ? 'true' : 'false';
197197
}
198198

199199
if (is_scalar($value)) {

0 commit comments

Comments
 (0)