2323use OpenApi \Annotations as OA ;
2424use OrangeHRM \Admin \Traits \Service \UserServiceTrait ;
2525use OrangeHRM \Claim \Api \Model \ClaimExpenseModel ;
26+ use OrangeHRM \Claim \Api \Traits \ClaimRequestAPIHelperTrait ;
2627use OrangeHRM \Claim \Dto \ClaimExpenseSearchFilterParams ;
2728use OrangeHRM \Claim \Traits \Service \ClaimServiceTrait ;
2829use OrangeHRM \Core \Api \CommonParams ;
3334use OrangeHRM \Core \Api \V2 \EndpointResult ;
3435use OrangeHRM \Core \Api \V2 \Exception \ForbiddenException ;
3536use OrangeHRM \Core \Api \V2 \Exception \InvalidParamException ;
37+ use OrangeHRM \Core \Api \V2 \Exception \RecordNotFoundException ;
3638use OrangeHRM \Core \Api \V2 \Model \ArrayModel ;
3739use OrangeHRM \Core \Api \V2 \ParameterBag ;
3840use OrangeHRM \Core \Api \V2 \RequestParams ;
4547use OrangeHRM \Core \Traits \Service \DateTimeHelperTrait ;
4648use OrangeHRM \Core \Traits \UserRoleManagerTrait ;
4749use OrangeHRM \Entity \ClaimExpense ;
48- use OrangeHRM \Entity \ClaimRequest ;
4950use OrangeHRM \Entity \ExpenseType ;
51+ use OrangeHRM \Entity \WorkflowStateMachine ;
5052use OrangeHRM \ORM \Exception \TransactionException ;
5153
5254class 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}
0 commit comments