Skip to content

Commit cfe6423

Browse files
author
Nethmin Dulsara
authored
OHRM5X-1953: Improve claim - workflow support for APIs (orangehrm#1646)
* OHRM5X-1953: Refactor MyClaimRequestAPI and EmployeeClaimRequestAPI
1 parent e4c8d54 commit cfe6423

23 files changed

Lines changed: 1458 additions & 220 deletions

installer/Migration/V5_4_0/Migration.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -286,8 +286,8 @@ public function up(): void
286286
]
287287
)
288288
->setParameter('module_id', $this->getDataGroupHelper()->getModuleIdByName('claim'))
289-
->setParameter('user_role_id', $this->getDataGroupHelper()->getUserRoleIdByName('Ess'))
290-
->setParameter('action', 'claim/submitClaim')
289+
->setParameter('user_role_id', $this->getDataGroupHelper()->getUserRoleIdByName('ESS'))
290+
->setParameter('action', 'claim/submitClaim') //TODO: change to myClaim
291291
->executeQuery();
292292

293293
$viewClaimModuleScreenId = $this->getConnection()

src/plugins/orangehrmClaimPlugin/Api/ClaimAttachmentAPI.php

Lines changed: 19 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
use Exception;
2323
use OpenApi\Annotations as OA;
2424
use OrangeHRM\Claim\Api\Model\ClaimAttachmentModel;
25+
use OrangeHRM\Claim\Api\Traits\ClaimRequestAPIHelperTrait;
2526
use OrangeHRM\Claim\Dto\ClaimAttachmentSearchFilterParams;
2627
use OrangeHRM\Claim\Dto\PartialClaimAttachment;
2728
use OrangeHRM\Claim\Traits\Service\ClaimServiceTrait;
@@ -46,8 +47,6 @@
4647
use OrangeHRM\Core\Traits\Service\DateTimeHelperTrait;
4748
use OrangeHRM\Core\Traits\UserRoleManagerTrait;
4849
use OrangeHRM\Entity\ClaimAttachment;
49-
use OrangeHRM\Entity\ClaimRequest;
50-
use OrangeHRM\Entity\Employee;
5150
use OrangeHRM\Entity\WorkflowStateMachine;
5251
use OrangeHRM\ORM\Exception\TransactionException;
5352

@@ -58,6 +57,7 @@ class ClaimAttachmentAPI extends Endpoint implements CrudEndpoint
5857
use AuthUserTrait;
5958
use DateTimeHelperTrait;
6059
use UserRoleManagerTrait;
60+
use ClaimRequestAPIHelperTrait;
6161

6262
public const PARAMETER_REQUEST_ID = 'requestId';
6363
public const PARAMETER_CLAIM_ATTACHMENT = 'attachment';
@@ -178,17 +178,9 @@ public function create(): EndpointResult
178178
);
179179
$claimRequest = $this->getClaimRequest($requestId);
180180
$claimAttachment->setRequestId($requestId);
181-
$isActionAllowed = $this->getUserRoleManager()->isActionAllowed(
182-
WorkflowStateMachine::FLOW_CLAIM,
183-
$claimRequest->getStatus(),
184-
WorkflowStateMachine::CLAIM_ACTION_SUBMIT,
185-
[],
186-
[],
187-
[Employee::class => $claimRequest->getEmployee()->getEmpNumber()]
188-
);
189-
if (!$isActionAllowed) {
190-
throw $this->getForbiddenException();
191-
}
181+
182+
$this->isActionAllowed(WorkflowStateMachine::CLAIM_ACTION_SUBMIT, $claimRequest);
183+
192184
$claimAttachment->getDecorator()->setUserByUserId(
193185
$this->getAuthUser()->getUserId()
194186
);
@@ -198,13 +190,14 @@ public function create(): EndpointResult
198190
$claimAttachment->setAttachedDate($this->getDateTimeHelper()->getNow());
199191
$this->setAttachment($claimAttachment);
200192
$this->commitTransaction();
201-
} catch (InvalidParamException|ForbiddenException $e) {
193+
} catch (InvalidParamException|ForbiddenException | RecordNotFoundException $e) {
202194
$this->rollBackTransaction();
203195
throw $e;
204196
} catch (Exception $e) {
205197
$this->rollBackTransaction();
206198
throw new TransactionException($e);
207199
}
200+
208201
return new EndpointResourceResult(
209202
ClaimAttachmentModel::class,
210203
$this->getPartialClaimAttachment($claimAttachment)
@@ -314,39 +307,14 @@ public function delete(): EndpointResult
314307
);
315308
$ids = $this->getRequestParams()->getArray(RequestParams::PARAM_TYPE_BODY, CommonParams::PARAMETER_IDS);
316309
$claimRequest = $this->getClaimRequest($requestId);
317-
$isActionAllowed = $this->getUserRoleManager()->isActionAllowed(
318-
WorkflowStateMachine::FLOW_CLAIM,
319-
$claimRequest->getStatus(),
320-
WorkflowStateMachine::CLAIM_ACTION_SUBMIT,
321-
[],
322-
[],
323-
[Employee::class => $claimRequest->getEmployee()->getEmpNumber()]
324-
);
325-
if (!$isActionAllowed) {
326-
throw $this->getForbiddenException();
327-
}
310+
311+
$this->isActionAllowed(WorkflowStateMachine::CLAIM_ACTION_SUBMIT, $claimRequest);
312+
328313
$this->getClaimService()
329314
->getClaimDao()
330315
->deleteClaimAttachments($requestId, $ids);
331-
return new EndpointResourceResult(ArrayModel::class, $ids);
332-
}
333316

334-
/**
335-
* @param int $requestId
336-
* @return ClaimRequest
337-
*/
338-
private function getClaimRequest(int $requestId): ClaimRequest
339-
{
340-
$claimRequest = $this->getClaimService()
341-
->getClaimDao()
342-
->getClaimRequestById($requestId);
343-
if (!$claimRequest instanceof ClaimRequest) {
344-
throw $this->getInvalidParamException(self::PARAMETER_REQUEST_ID);
345-
}
346-
if (!$this->getUserRoleManagerHelper()->isEmployeeAccessible($claimRequest->getEmployee()->getEmpNumber())) {
347-
throw $this->getForbiddenException();
348-
}
349-
return $claimRequest;
317+
return new EndpointResourceResult(ArrayModel::class, $ids);
350318
}
351319

352320
/**
@@ -405,6 +373,7 @@ public function getOne(): EndpointResult
405373
->getClaimDao()
406374
->getPartialClaimAttachment($requestId, $attachId);
407375
$this->throwRecordNotFoundExceptionIfNotExist($claimAttachment, PartialClaimAttachment::class);
376+
408377
return new EndpointResourceResult(ClaimAttachmentModel::class, $claimAttachment);
409378
}
410379

@@ -471,17 +440,9 @@ public function update(): EndpointResult
471440
CommonParams::PARAMETER_ID
472441
);
473442
$claimRequest = $this->getClaimRequest($requestId);
474-
$isActionAllowed = $this->getUserRoleManager()->isActionAllowed(
475-
WorkflowStateMachine::FLOW_CLAIM,
476-
$claimRequest->getStatus(),
477-
WorkflowStateMachine::CLAIM_ACTION_SUBMIT,
478-
[],
479-
[],
480-
[Employee::class => $claimRequest->getEmployee()->getEmpNumber()],
481-
);
482-
if (!$isActionAllowed) {
483-
throw $this->getForbiddenException();
484-
}
443+
444+
$this->isActionAllowed(WorkflowStateMachine::CLAIM_ACTION_SUBMIT, $claimRequest);
445+
485446
$claimAttachment = $this->getClaimService()
486447
->getClaimDao()
487448
->getClaimAttachment($requestId, $attachId);
@@ -496,9 +457,11 @@ public function update(): EndpointResult
496457
null,
497458
false
498459
);
460+
499461
if (!is_null($description)) {
500462
$claimAttachment->setDescription($description);
501463
}
464+
502465
if (!is_null($attachment)) {
503466
$claimAttachment->getDecorator()->setUserByUserId(
504467
$this->getAuthUser()->getUserId()
@@ -508,6 +471,7 @@ public function update(): EndpointResult
508471
$claimAttachment->setFilename($attachment->getFileName());
509472
$claimAttachment->setAttachment($attachment->getContent());
510473
}
474+
511475
$this->getClaimService()->getClaimDao()->saveClaimAttachment($claimAttachment);
512476
$this->commitTransaction();
513477
} catch (ForbiddenException | InvalidParamException | RecordNotFoundException $e) {
@@ -517,6 +481,7 @@ public function update(): EndpointResult
517481
$this->rollBackTransaction();
518482
throw new TransactionException($e);
519483
}
484+
520485
return new EndpointResourceResult(
521486
ClaimAttachmentModel::class,
522487
$this->getPartialClaimAttachment($claimAttachment)

src/plugins/orangehrmClaimPlugin/Api/ClaimExpenseAPI.php

Lines changed: 27 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
use OpenApi\Annotations as OA;
2424
use OrangeHRM\Admin\Traits\Service\UserServiceTrait;
2525
use OrangeHRM\Claim\Api\Model\ClaimExpenseModel;
26+
use OrangeHRM\Claim\Api\Traits\ClaimRequestAPIHelperTrait;
2627
use OrangeHRM\Claim\Dto\ClaimExpenseSearchFilterParams;
2728
use OrangeHRM\Claim\Traits\Service\ClaimServiceTrait;
2829
use OrangeHRM\Core\Api\CommonParams;
@@ -33,6 +34,7 @@
3334
use OrangeHRM\Core\Api\V2\EndpointResult;
3435
use OrangeHRM\Core\Api\V2\Exception\ForbiddenException;
3536
use OrangeHRM\Core\Api\V2\Exception\InvalidParamException;
37+
use OrangeHRM\Core\Api\V2\Exception\RecordNotFoundException;
3638
use OrangeHRM\Core\Api\V2\Model\ArrayModel;
3739
use OrangeHRM\Core\Api\V2\ParameterBag;
3840
use OrangeHRM\Core\Api\V2\RequestParams;
@@ -45,8 +47,8 @@
4547
use OrangeHRM\Core\Traits\Service\DateTimeHelperTrait;
4648
use OrangeHRM\Core\Traits\UserRoleManagerTrait;
4749
use OrangeHRM\Entity\ClaimExpense;
48-
use OrangeHRM\Entity\ClaimRequest;
4950
use OrangeHRM\Entity\ExpenseType;
51+
use OrangeHRM\Entity\WorkflowStateMachine;
5052
use OrangeHRM\ORM\Exception\TransactionException;
5153

5254
class ClaimExpenseAPI extends Endpoint implements CrudEndpoint
@@ -57,6 +59,7 @@ class ClaimExpenseAPI extends Endpoint implements CrudEndpoint
5759
use AuthUserTrait;
5860
use UserRoleManagerTrait;
5961
use UserServiceTrait;
62+
use ClaimRequestAPIHelperTrait;
6063

6164
public const PARAMETER_EXPENSE_TYPE_ID = 'expenseTypeId';
6265
public const PARAMETER_AMOUNT = 'amount';
@@ -109,6 +112,7 @@ public function getAll(): EndpointResult
109112
$this->setSortingAndPaginationParams($claimExpenseSearchFilterParams);
110113
$requestId = $this->getRequestParams()
111114
->getInt(RequestParams::PARAM_TYPE_ATTRIBUTE, self::PARAMETER_REQUEST_ID);
115+
112116
$this->getClaimRequest($requestId);
113117
$claimExpenseSearchFilterParams->setRequestId($requestId);
114118
$claimExpenses = $this->getClaimService()
@@ -120,6 +124,7 @@ public function getAll(): EndpointResult
120124
$total = $this->getClaimService()
121125
->getClaimDao()
122126
->getClaimExpenseTotal($claimExpenseSearchFilterParams);
127+
123128
return new EndpointCollectionResult(
124129
ClaimExpenseModel::class,
125130
$claimExpenses,
@@ -191,7 +196,10 @@ public function setClaimExpense(ClaimExpense $claimExpense): void
191196
RequestParams::PARAM_TYPE_ATTRIBUTE,
192197
self::PARAMETER_REQUEST_ID
193198
);
194-
$this->getClaimRequest($requestId);
199+
$claimRequest = $this->getClaimRequest($requestId);
200+
201+
$this->isActionAllowed(WorkflowStateMachine::CLAIM_ACTION_SUBMIT, $claimRequest);
202+
195203
$claimExpense->getDecorator()->setClaimRequestByRequestId($requestId);
196204
$expenseTypeId = $this->getRequestParams()->getInt(
197205
RequestParams::PARAM_TYPE_BODY,
@@ -220,7 +228,7 @@ public function setClaimExpense(ClaimExpense $claimExpense): void
220228
->getClaimDao()
221229
->saveClaimExpense($claimExpense);
222230
$this->commitTransaction();
223-
} catch (ForbiddenException | InvalidParamException $e) {
231+
} catch (ForbiddenException | InvalidParamException | RecordNotFoundException $e) {
224232
$this->rollBackTransaction();
225233
throw $e;
226234
} catch (Exception $e) {
@@ -245,7 +253,8 @@ public function getValidationRuleForCreate(): ParamRuleCollection
245253
),
246254
new ParamRule(
247255
self::PARAMETER_AMOUNT,
248-
new Rule(Rules::FLOAT_TYPE)
256+
new Rule(Rules::FLOAT_TYPE), //TODO:: handle decimal points
257+
new Rule(Rules::MIN, [0])
249258
),
250259
new ParamRule(
251260
self::PARAMETER_DATE,
@@ -279,12 +288,16 @@ public function delete(): EndpointResult
279288
{
280289
$requestId = $this->getRequestParams()
281290
->getInt(RequestParams::PARAM_TYPE_ATTRIBUTE, self::PARAMETER_REQUEST_ID);
282-
$this->getClaimRequest($requestId);
291+
$claimRequest = $this->getClaimRequest($requestId);
292+
293+
$this->isActionAllowed(WorkflowStateMachine::CLAIM_ACTION_SUBMIT, $claimRequest);
294+
283295
$ids = $this->getRequestParams()
284296
->getArray(RequestParams::PARAM_TYPE_BODY, CommonParams::PARAMETER_IDS);
285297
$this->getClaimService()
286298
->getClaimDao()
287299
->deleteClaimExpense($requestId, $ids);
300+
288301
return new EndpointResourceResult(ArrayModel::class, $ids);
289302
}
290303

@@ -333,11 +346,12 @@ public function getValidationRuleForDelete(): ParamRuleCollection
333346
*
334347
* @inheritDoc
335348
*/
336-
public function getOne(): EndpointResult //TODO:Check the claim request state
349+
public function getOne(): EndpointResult
337350
{
338351
$requestId = $this->getRequestParams()
339352
->getInt(RequestParams::PARAM_TYPE_ATTRIBUTE, self::PARAMETER_REQUEST_ID);
340353
$this->getClaimRequest($requestId);
354+
341355
$claimExpenseId = $this->getRequestParams()->getInt(
342356
RequestParams::PARAM_TYPE_ATTRIBUTE,
343357
CommonParams::PARAMETER_ID
@@ -346,6 +360,7 @@ public function getOne(): EndpointResult //TODO:Check the claim request state
346360
->getClaimDao()
347361
->getClaimRequestExpense($requestId, $claimExpenseId);
348362
$this->throwRecordNotFoundExceptionIfNotExist($claimExpense, ClaimExpense::class);
363+
349364
return new EndpointResourceResult(ClaimExpenseModel::class, $claimExpense);
350365
}
351366

@@ -405,7 +420,10 @@ public function update(): EndpointResult
405420
{
406421
$requestId = $this->getRequestParams()
407422
->getInt(RequestParams::PARAM_TYPE_ATTRIBUTE, self::PARAMETER_REQUEST_ID);
408-
$this->getClaimRequest($requestId);
423+
$claimRequest = $this->getClaimRequest($requestId);
424+
425+
$this->isActionAllowed(WorkflowStateMachine::CLAIM_ACTION_SUBMIT, $claimRequest);
426+
409427
$claimExpenseId = $this->getRequestParams()
410428
->getInt(RequestParams::PARAM_TYPE_ATTRIBUTE, CommonParams::PARAMETER_ID);
411429
$claimExpense = $this->getClaimService()
@@ -436,7 +454,8 @@ public function getValidationRuleForUpdate(): ParamRuleCollection
436454
),
437455
new ParamRule(
438456
self::PARAMETER_AMOUNT,
439-
new Rule(Rules::FLOAT_TYPE)
457+
new Rule(Rules::FLOAT_TYPE),
458+
new Rule(Rules::MIN, [0])
440459
),
441460
new ParamRule(
442461
self::PARAMETER_DATE,
@@ -452,22 +471,4 @@ public function getValidationRuleForUpdate(): ParamRuleCollection
452471
),
453472
);
454473
}
455-
456-
/**
457-
* @param int $requestId
458-
* @return ClaimRequest
459-
*/
460-
private function getClaimRequest(int $requestId): ClaimRequest
461-
{
462-
$claimRequest = $this->getClaimService()
463-
->getClaimDao()
464-
->getClaimRequestById($requestId);
465-
if (!$claimRequest instanceof ClaimRequest) {
466-
throw $this->getInvalidParamException(self::PARAMETER_REQUEST_ID);
467-
}
468-
if (!$this->getUserRoleManagerHelper()->isEmployeeAccessible($claimRequest->getEmployee()->getEmpNumber())) {
469-
throw $this->getForbiddenException();
470-
}
471-
return $claimRequest;
472-
}
473474
}

src/plugins/orangehrmClaimPlugin/Api/ClaimExpenseTypeAPI.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
namespace OrangeHRM\Claim\Api;
2121

22+
use OpenApi\Annotations as OA;
2223
use OrangeHRM\Claim\Api\Model\ClaimExpenseTypeModel;
2324
use OrangeHRM\Claim\Dto\ClaimExpenseTypeSearchFilterParams;
2425
use OrangeHRM\Claim\Traits\Service\ClaimServiceTrait;

0 commit comments

Comments
 (0)