Skip to content

Commit edb1ec0

Browse files
OHRM5X-2118: Add leave - new summary model to leave-entitlements API (orangehrm#1654)
1 parent f33a092 commit edb1ec0

16 files changed

+1007
-309
lines changed

installer/Migration/V5_4_0/Migration.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ private function createOAuth2Tables(): void
175175
->addColumn('client_id', Types::BIGINT)
176176
->addColumn('user_id', Types::INTEGER)
177177
->addColumn('redirect_uri', Types::STRING, ['Length' => 2000])
178-
->addColumn('expiry_date_time', Types::DATETIME_IMMUTABLE)
178+
->addColumn('expiry_date_time_utc', Types::DATETIME_IMMUTABLE)
179179
->addColumn('revoked', Types::BOOLEAN)
180180
->addUniqueIndex(['authorization_code'], 'idx_authorization_code')
181181
->setPrimaryKey(['id'])
@@ -194,7 +194,7 @@ private function createOAuth2Tables(): void
194194
->addColumn('access_token', Types::STRING, ['Length' => 255])
195195
->addColumn('client_id', Types::BIGINT)
196196
->addColumn('user_id', Types::INTEGER)
197-
->addColumn('expiry_date_time', Types::DATETIME_IMMUTABLE)
197+
->addColumn('expiry_date_time_utc', Types::DATETIME_IMMUTABLE)
198198
->addColumn('revoked', Types::BOOLEAN)
199199
->addUniqueIndex(['access_token'], 'idx_access_token')
200200
->setPrimaryKey(['id'])
@@ -212,7 +212,7 @@ private function createOAuth2Tables(): void
212212
->addColumn('id', Types::BIGINT, ['Autoincrement' => true])
213213
->addColumn('refresh_token', Types::STRING, ['Length' => 255])
214214
->addColumn('access_token', Types::STRING, ['Length' => 255])
215-
->addColumn('expiry_date_time', Types::DATETIME_IMMUTABLE)
215+
->addColumn('expiry_date_time_utc', Types::DATETIME_IMMUTABLE)
216216
->addColumn('revoked', Types::BOOLEAN)
217217
->addUniqueIndex(['refresh_token'], 'idx_refresh_token')
218218
->setPrimaryKey(['id'])

src/lib/framework/Http/Request.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,9 @@ public static function createFromGlobals(): self
5454
{
5555
if (!isset($_SERVER['HTTP_AUTHORIZATION']) || !isset($_SERVER['REDIRECT_HTTP_AUTHORIZATION'])) {
5656
// https://github.com/symfony/symfony/issues/19693
57-
$headers = getallheaders();
58-
if (isset($headers['Authorization'])) {
59-
$_SERVER['HTTP_AUTHORIZATION'] = $headers['Authorization'];
57+
$headers = array_change_key_case(getallheaders(), CASE_LOWER);
58+
if (isset($headers['authorization'])) {
59+
$_SERVER['HTTP_AUTHORIZATION'] = $headers['authorization'];
6060
}
6161
}
6262
return parent::createFromGlobals();

src/plugins/orangehrmCoreOAuthPlugin/Controller/AuthorizationController.php

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,14 @@
2222
use League\OAuth2\Server\Exception\OAuthServerException;
2323
use OrangeHRM\Authentication\Auth\User as AuthUser;
2424
use OrangeHRM\Authentication\Controller\LoginController;
25+
use OrangeHRM\Config\Config;
2526
use OrangeHRM\Core\Controller\AbstractVueController;
2627
use OrangeHRM\Core\Controller\Exception\RequestForwardableException;
2728
use OrangeHRM\Core\Controller\PublicControllerInterface;
2829
use OrangeHRM\Core\Traits\Auth\AuthUserTrait;
2930
use OrangeHRM\Core\Traits\LoggerTrait;
3031
use OrangeHRM\Core\Vue\Component;
3132
use OrangeHRM\Core\Vue\Prop;
32-
use OrangeHRM\CorporateBranding\Traits\ThemeServiceTrait;
3333
use OrangeHRM\Framework\Http\Request;
3434
use OrangeHRM\Framework\Services;
3535
use OrangeHRM\OAuth\Traits\OAuthServerTrait;
@@ -42,7 +42,6 @@ class AuthorizationController extends AbstractVueController implements PublicCon
4242
use OAuthServerTrait;
4343
use PsrHttpFactoryHelperTrait;
4444
use LoggerTrait;
45-
use ThemeServiceTrait;
4645
use AuthUserTrait;
4746

4847
/**
@@ -82,8 +81,13 @@ public function preRender(Request $request): void
8281
);
8382
}
8483

84+
$assetsVersion = Config::get(Config::VUE_BUILD_TIMESTAMP);
8585
$component->addProp(
86-
new Prop('login-banner-src', Prop::TYPE_STRING, $this->getThemeService()->getLoginBannerURL($request))
86+
new Prop(
87+
'login-banner-src',
88+
Prop::TYPE_STRING,
89+
$request->getBasePath() . "/images/ohrm_branding.png?v=$assetsVersion"
90+
)
8791
);
8892

8993
$this->setComponent($component);

src/plugins/orangehrmCoreOAuthPlugin/entity/OAuthAccessToken.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ class OAuthAccessToken
6363
/**
6464
* @var DateTimeImmutable
6565
*
66-
* @ORM\Column(name="expiry_date_time", type="datetime_immutable", nullable=false)
66+
* @ORM\Column(name="expiry_date_time_utc", type="datetime_immutable", nullable=false)
6767
*/
6868
private DateTimeImmutable $expiryDateTime;
6969

src/plugins/orangehrmCoreOAuthPlugin/entity/OAuthAuthorizationCode.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ class OAuthAuthorizationCode
7070
/**
7171
* @var DateTimeImmutable
7272
*
73-
* @ORM\Column(name="expiry_date_time", type="datetime_immutable", nullable=false)
73+
* @ORM\Column(name="expiry_date_time_utc", type="datetime_immutable", nullable=false)
7474
*/
7575
private DateTimeImmutable $expiryDateTime;
7676

src/plugins/orangehrmCoreOAuthPlugin/entity/OAuthRefreshToken.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ class OAuthRefreshToken
5656
/**
5757
* @var DateTimeImmutable
5858
*
59-
* @ORM\Column(name="expiry_date_time", type="datetime_immutable", nullable=false)
59+
* @ORM\Column(name="expiry_date_time_utc", type="datetime_immutable", nullable=false)
6060
*/
6161
private DateTimeImmutable $expiryDateTime;
6262

src/plugins/orangehrmCoreOAuthPlugin/test/fixtures/AccessTokenRepositoryTest.yaml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ OAuthClient:
1212
- { "id": 4,"name": "OAuth Client 3","client_id": "45349b9c3676b30a3d4bce76d68c50b0","redirect_uri": "https://example.com/oauth/callback","is_confidential": 1,"enabled": 1 }
1313

1414
OAuthAuthorizationCode:
15-
- { "id": 1,"authorization_code": "4527715fe2b6a045bcf4036d6d55e6b3c9e0dd64aae3fcbc7ec50b1fe43d39fb0670fcbaf12d46c4","client_id": 1,"user_id": 1,"redirect_uri": "com.orangehrm.opensource://oauthCallback","expiry_date_time": "2023-03-16 10:18:14","revoked": 0 }
16-
- { "id": 2,"authorization_code": "ebecfb310f7ea082cd8a256dfac7a1bf9ddb9d6774d4e653abccbc5fed955c07be8517c839b6b095","client_id": 2,"user_id": 5,"redirect_uri": "https://example.com/oauth/callback","expiry_date_time": "2023-03-17 10:18:14","revoked": 1 }
15+
- { "id": 1,"authorization_code": "4527715fe2b6a045bcf4036d6d55e6b3c9e0dd64aae3fcbc7ec50b1fe43d39fb0670fcbaf12d46c4","client_id": 1,"user_id": 1,"redirect_uri": "com.orangehrm.opensource://oauthCallback","expiryDateTime": "2023-03-16 10:18:14","revoked": 0 }
16+
- { "id": 2,"authorization_code": "ebecfb310f7ea082cd8a256dfac7a1bf9ddb9d6774d4e653abccbc5fed955c07be8517c839b6b095","client_id": 2,"user_id": 5,"redirect_uri": "https://example.com/oauth/callback","expiryDateTime": "2023-03-17 10:18:14","revoked": 1 }
1717

1818
OAuthAccessToken:
19-
- { "id": 1,"access_token": "05a81084f60f6440c8bd2555200836584e365210aee54ffee8e9dc04c7ec0068a6cde45ef5999e47","client_id": 2,"user_id": 1,"expiry_date_time": "2023-03-17 11:43:35","revoked": 1 }
20-
- { "id": 2,"access_token": "388b9ae63e03fafa079ef891142828dc869e5b5f67c6094614492259ce95794e3f18a9057b667eae","client_id": 1,"user_id": 5,"expiry_date_time": "2023-03-17 11:44:54","revoked": 0 }
19+
- { "id": 1,"access_token": "05a81084f60f6440c8bd2555200836584e365210aee54ffee8e9dc04c7ec0068a6cde45ef5999e47","client_id": 2,"user_id": 1,"expiryDateTime": "2023-03-17 11:43:35","revoked": 1 }
20+
- { "id": 2,"access_token": "388b9ae63e03fafa079ef891142828dc869e5b5f67c6094614492259ce95794e3f18a9057b667eae","client_id": 1,"user_id": 5,"expiryDateTime": "2023-03-17 11:44:54","revoked": 0 }

src/plugins/orangehrmCoreOAuthPlugin/test/fixtures/AuthorizationCodeRepositoryTest.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,5 @@ OAuthClient:
1212
- { "id": 4,"name": "OAuth Client 3","client_id": "45349b9c3676b30a3d4bce76d68c50b0","redirect_uri": "https://example.com/oauth/callback","is_confidential": 1,"enabled": 1 }
1313

1414
OAuthAuthorizationCode:
15-
- { "id": 1,"authorization_code": "4527715fe2b6a045bcf4036d6d55e6b3c9e0dd64aae3fcbc7ec50b1fe43d39fb0670fcbaf12d46c4","client_id": 1,"user_id": 1,"redirect_uri": "com.orangehrm.opensource://oauthCallback","expiry_date_time": "2023-03-16 10:18:14","revoked": 0 }
16-
- { "id": 2,"authorization_code": "ebecfb310f7ea082cd8a256dfac7a1bf9ddb9d6774d4e653abccbc5fed955c07be8517c839b6b095","client_id": 2,"user_id": 5,"redirect_uri": "https://example.com/oauth/callback","expiry_date_time": "2023-03-17 10:18:14","revoked": 1 }
15+
- { "id": 1,"authorization_code": "4527715fe2b6a045bcf4036d6d55e6b3c9e0dd64aae3fcbc7ec50b1fe43d39fb0670fcbaf12d46c4","client_id": 1,"user_id": 1,"redirect_uri": "com.orangehrm.opensource://oauthCallback","expiryDateTime": "2023-03-16 10:18:14","revoked": 0 }
16+
- { "id": 2,"authorization_code": "ebecfb310f7ea082cd8a256dfac7a1bf9ddb9d6774d4e653abccbc5fed955c07be8517c839b6b095","client_id": 2,"user_id": 5,"redirect_uri": "https://example.com/oauth/callback","expiryDateTime": "2023-03-17 10:18:14","revoked": 1 }

src/plugins/orangehrmCoreOAuthPlugin/test/fixtures/RefreshTokenRepositoryTest.yaml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,14 @@ OAuthClient:
1212
- { "id": 4,"name": "OAuth Client 3","client_id": "45349b9c3676b30a3d4bce76d68c50b0","redirect_uri": "https://example.com/oauth/callback","is_confidential": 1,"enabled": 1 }
1313

1414
OAuthAuthorizationCode:
15-
- { "id": 1,"authorization_code": "4527715fe2b6a045bcf4036d6d55e6b3c9e0dd64aae3fcbc7ec50b1fe43d39fb0670fcbaf12d46c4","client_id": 1,"user_id": 1,"redirect_uri": "com.orangehrm.opensource://oauthCallback","expiry_date_time": "2023-03-16 10:18:14","revoked": 0 }
16-
- { "id": 2,"authorization_code": "ebecfb310f7ea082cd8a256dfac7a1bf9ddb9d6774d4e653abccbc5fed955c07be8517c839b6b095","client_id": 2,"user_id": 5,"redirect_uri": "https://example.com/oauth/callback","expiry_date_time": "2023-03-17 10:18:14","revoked": 1 }
15+
- { "id": 1,"authorization_code": "4527715fe2b6a045bcf4036d6d55e6b3c9e0dd64aae3fcbc7ec50b1fe43d39fb0670fcbaf12d46c4","client_id": 1,"user_id": 1,"redirect_uri": "com.orangehrm.opensource://oauthCallback","expiryDateTime": "2023-03-16 10:18:14","revoked": 0 }
16+
- { "id": 2,"authorization_code": "ebecfb310f7ea082cd8a256dfac7a1bf9ddb9d6774d4e653abccbc5fed955c07be8517c839b6b095","client_id": 2,"user_id": 5,"redirect_uri": "https://example.com/oauth/callback","expiryDateTime": "2023-03-17 10:18:14","revoked": 1 }
1717

1818
OAuthAccessToken:
19-
- { "id": 1,"access_token": "05a81084f60f6440c8bd2555200836584e365210aee54ffee8e9dc04c7ec0068a6cde45ef5999e47","client_id": 2,"user_id": 1,"expiry_date_time": "2023-03-17 11:43:35","revoked": 1 }
20-
- { "id": 2,"access_token": "388b9ae63e03fafa079ef891142828dc869e5b5f67c6094614492259ce95794e3f18a9057b667eae","client_id": 1,"user_id": 5,"expiry_date_time": "2023-03-17 11:44:54","revoked": 0 }
21-
- { "id": 3,"access_token": "random_id","client_id": 1,"user_id": 5,"expiry_date_time": "2023-03-17 11:44:54","revoked": 0 }
19+
- { "id": 1,"access_token": "05a81084f60f6440c8bd2555200836584e365210aee54ffee8e9dc04c7ec0068a6cde45ef5999e47","client_id": 2,"user_id": 1,"expiryDateTime": "2023-03-17 11:43:35","revoked": 1 }
20+
- { "id": 2,"access_token": "388b9ae63e03fafa079ef891142828dc869e5b5f67c6094614492259ce95794e3f18a9057b667eae","client_id": 1,"user_id": 5,"expiryDateTime": "2023-03-17 11:44:54","revoked": 0 }
21+
- { "id": 3,"access_token": "random_id","client_id": 1,"user_id": 5,"expiryDateTime": "2023-03-17 11:44:54","revoked": 0 }
2222

2323
OAuthRefreshToken:
24-
- { "id": 1,"refresh_token": "571420fd098500e2e14023c1a088f7cecc4ad285a35c1efbae96bfb1e76630c4e56c244b61b52825","access_token": "05a81084f60f6440c8bd2555200836584e365210aee54ffee8e9dc04c7ec0068a6cde45ef5999e47","expiry_date_time": "2023-04-17 11:13:35","revoked": 1 }
25-
- { "id": 2,"refresh_token": "9fac7adebd19b01f53a69ba5c9898d283dacda7296b8063899312ff599b4ccf240fd92dd033dc768","access_token": "388b9ae63e03fafa079ef891142828dc869e5b5f67c6094614492259ce95794e3f18a9057b667eae","expiry_date_time": "2023-04-17 11:14:54","revoked": 0 }
24+
- { "id": 1,"refresh_token": "571420fd098500e2e14023c1a088f7cecc4ad285a35c1efbae96bfb1e76630c4e56c244b61b52825","access_token": "05a81084f60f6440c8bd2555200836584e365210aee54ffee8e9dc04c7ec0068a6cde45ef5999e47","expiryDateTime": "2023-04-17 11:13:35","revoked": 1 }
25+
- { "id": 2,"refresh_token": "9fac7adebd19b01f53a69ba5c9898d283dacda7296b8063899312ff599b4ccf240fd92dd033dc768","access_token": "388b9ae63e03fafa079ef891142828dc869e5b5f67c6094614492259ce95794e3f18a9057b667eae","expiryDateTime": "2023-04-17 11:14:54","revoked": 0 }

src/plugins/orangehrmLeavePlugin/Api/LeaveEntitlementAPI.php

Lines changed: 88 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
use OrangeHRM\Core\Traits\Service\DateTimeHelperTrait;
3737
use OrangeHRM\Entity\LeaveEntitlement;
3838
use OrangeHRM\Leave\Api\Model\LeaveEntitlementModel;
39+
use OrangeHRM\Leave\Api\Model\LeaveEntitlementSummaryModel;
3940
use OrangeHRM\Leave\Api\Traits\LeaveEntitlementPermissionTrait;
4041
use OrangeHRM\Leave\Api\ValidationRules\LeaveTypeIdRule;
4142
use OrangeHRM\Leave\Dto\LeaveEntitlementSearchFilterParams;
@@ -57,10 +58,19 @@ class LeaveEntitlementAPI extends Endpoint implements CrudEndpoint
5758
public const PARAMETER_ENTITLEMENT = 'entitlement';
5859
public const PARAMETER_LOCATION_ID = 'locationId';
5960
public const PARAMETER_SUBUNIT_ID = 'subunitId';
61+
public const FILTER_MODEL = 'model';
6062

6163
public const META_PARAMETER_SUM = 'sum';
6264
public const META_PARAMETER_COUNT = 'count';
6365

66+
public const MODEL_DEFAULT = 'default';
67+
public const MODEL_SUMMARY = 'summary';
68+
69+
public const MODEL_MAP = [
70+
self::MODEL_DEFAULT => LeaveEntitlementModel::class,
71+
self::MODEL_SUMMARY => LeaveEntitlementSummaryModel::class,
72+
];
73+
6474
/**
6575
* @OA\Get(
6676
* path="/api/v2/leave/leave-entitlements/{id}",
@@ -69,13 +79,26 @@ class LeaveEntitlementAPI extends Endpoint implements CrudEndpoint
6979
* name="id",
7080
* @OA\Schema(type="integer")
7181
* ),
82+
* @OA\Parameter(
83+
* name="model",
84+
* in="query",
85+
* required=false,
86+
* @OA\Schema(
87+
* type="string",
88+
* enum={\OrangeHRM\Leave\Api\LeaveEntitlementAPI::MODEL_DEFAULT, \OrangeHRM\Leave\Api\LeaveEntitlementAPI::MODEL_SUMMARY},
89+
* default=\OrangeHRM\Leave\Api\LeaveEntitlementAPI::MODEL_DEFAULT
90+
* )
91+
* ),
7292
* @OA\Response(
7393
* response="200",
7494
* description="Success",
7595
* @OA\JsonContent(
7696
* @OA\Property(
7797
* property="data",
78-
* ref="#/components/schemas/Leave-LeaveEntitlementModel"
98+
* oneOf={
99+
* @OA\Schema(ref="#/components/schemas/Leave-LeaveEntitlementModel"),
100+
* @OA\Schema(ref="#/components/schemas/Leave-LeaveEntitlementSummaryModel"),
101+
* }
79102
* ),
80103
* @OA\Property(property="meta", type="object")
81104
* )
@@ -92,7 +115,11 @@ public function getOne(): EndpointResult
92115
->getLeaveEntitlement($this->getIdUrlAttribute());
93116
$this->throwRecordNotFoundExceptionIfNotExist($leaveEntitlement, LeaveEntitlement::class);
94117
$this->checkLeaveEntitlementAccessible($leaveEntitlement);
95-
return new EndpointResourceResult(LeaveEntitlementModel::class, $leaveEntitlement);
118+
return new EndpointResourceResult(
119+
$this->getModelClass(),
120+
$leaveEntitlement,
121+
new ParameterBag([CommonParams::PARAMETER_EMP_NUMBER => $leaveEntitlement->getEmployee()->getEmpNumber()])
122+
);
96123
}
97124

98125
/**
@@ -112,7 +139,8 @@ private function getIdUrlAttribute(): int
112139
public function getValidationRuleForGetOne(): ParamRuleCollection
113140
{
114141
return new ParamRuleCollection(
115-
$this->getIdParamRule()
142+
$this->getIdParamRule(),
143+
$this->getModelClassParamRule(),
116144
);
117145
}
118146

@@ -128,27 +156,29 @@ private function getIdParamRule(): ParamRule
128156
* @OA\Get(
129157
* path="/api/v2/leave/leave-entitlements",
130158
* tags={"Leave/Entitlements"},
131-
* @OA\PathParameter(
159+
* @OA\Parameter(
132160
* name="empNumber",
161+
* in="query",
162+
* required=false,
133163
* @OA\Schema(type="integer")
134164
* ),
135165
* @OA\Parameter(
136166
* name="leaveTypeId",
137167
* in="query",
138-
* required=true,
168+
* required=false,
139169
* @OA\Schema(type="integer")
140170
* ),
141171
* @OA\Parameter(
142172
* name="fromDate",
143173
* in="query",
144-
* required=true,
145-
* @OA\Schema(type="number")
174+
* required=false,
175+
* @OA\Schema(type="string")
146176
* ),
147177
* @OA\Parameter(
148178
* name="toDate",
149179
* in="query",
150-
* required=true,
151-
* @OA\Schema(type="number")
180+
* required=false,
181+
* @OA\Schema(type="string")
152182
* ),
153183
* @OA\Parameter(
154184
* name="sortField",
@@ -159,19 +189,35 @@ private function getIdParamRule(): ParamRule
159189
* @OA\Parameter(ref="#/components/parameters/sortOrder"),
160190
* @OA\Parameter(ref="#/components/parameters/limit"),
161191
* @OA\Parameter(ref="#/components/parameters/offset"),
192+
* @OA\Parameter(
193+
* name="model",
194+
* in="query",
195+
* required=false,
196+
* @OA\Schema(
197+
* type="string",
198+
* enum={\OrangeHRM\Leave\Api\LeaveEntitlementAPI::MODEL_DEFAULT, \OrangeHRM\Leave\Api\LeaveEntitlementAPI::MODEL_SUMMARY},
199+
* default=\OrangeHRM\Leave\Api\LeaveEntitlementAPI::MODEL_DEFAULT
200+
* )
201+
* ),
162202
* @OA\Response(
163203
* response="200",
164204
* description="Success",
165205
* @OA\JsonContent(
166206
* @OA\Property(
167207
* property="data",
168-
* ref="#/components/schemas/Leave-LeaveEntitlementModel"
208+
* type="array",
209+
* @OA\Items(oneOf={
210+
* @OA\Schema(ref="#/components/schemas/Leave-LeaveEntitlementModel"),
211+
* @OA\Schema(ref="#/components/schemas/Leave-LeaveEntitlementSummaryModel"),
212+
* })
169213
* ),
170214
* @OA\Property(property="meta",
171215
* type="object",
172-
* @OA\Property(property="total", type="integer"),
173-
* @OA\Property(property="fromDate", type="number"),
174-
* @OA\Property(property="toDate", type="number")
216+
* @OA\Property(property="total", type="number"),
217+
* @OA\Property(property="sum", type="number"),
218+
* @OA\Property(property="fromDate", type="string"),
219+
* @OA\Property(property="toDate", type="string"),
220+
* @OA\Property(property="empNumber", type="integer"),
175221
* )
176222
* )
177223
* ),
@@ -223,7 +269,7 @@ public function getAll(): EndpointResult
223269
->getLeaveEntitlementsSum($entitlementSearchFilterParams);
224270

225271
return new EndpointCollectionResult(
226-
LeaveEntitlementModel::class,
272+
$this->getModelClass(),
227273
$entitlements,
228274
new ParameterBag(
229275
[
@@ -233,11 +279,38 @@ public function getAll(): EndpointResult
233279
->formatDateTimeToYmd($fromDate),
234280
LeaveCommonParams::PARAMETER_TO_DATE => $this->getDateTimeHelper()
235281
->formatDateTimeToYmd($toDate),
282+
CommonParams::PARAMETER_EMP_NUMBER => $empNumber,
236283
]
237284
)
238285
);
239286
}
240287

288+
/**
289+
* @return string
290+
*/
291+
protected function getModelClass(): string
292+
{
293+
$model = $this->getRequestParams()->getString(
294+
RequestParams::PARAM_TYPE_QUERY,
295+
self::FILTER_MODEL,
296+
self::MODEL_DEFAULT,
297+
);
298+
return self::MODEL_MAP[$model];
299+
}
300+
301+
/**
302+
* @return ParamRule
303+
*/
304+
protected function getModelClassParamRule(): ParamRule
305+
{
306+
return $this->getValidationDecorator()->notRequiredParamRule(
307+
new ParamRule(
308+
self::FILTER_MODEL,
309+
new Rule(Rules::IN, [array_keys(self::MODEL_MAP)])
310+
),
311+
);
312+
}
313+
241314
/**
242315
* @inheritDoc
243316
*/
@@ -249,6 +322,7 @@ public function getValidationRuleForGetAll(): ParamRuleCollection
249322
$this->getValidationDecorator()->notRequiredParamRule($this->getLeaveTypeIdParamRule()),
250323
$this->getValidationDecorator()->notRequiredParamRule($fromDateRule),
251324
$this->getValidationDecorator()->notRequiredParamRule($toDateRule),
325+
$this->getModelClassParamRule(),
252326
...$this->getSortingAndPaginationParamsRules(LeaveEntitlementSearchFilterParams::ALLOWED_SORT_FIELDS)
253327
);
254328
}

0 commit comments

Comments
 (0)