Skip to content

Commit 8891fca

Browse files
authored
Merge pull request #115 from OpenLMIS/OPSD-40
OPSD-40: Allow skipping date validation when updating requisition
2 parents 22a071a + 4000bc7 commit 8891fca

File tree

5 files changed

+22
-11
lines changed

5 files changed

+22
-11
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
Upcoming Version (WIP)
22
==================
33

4+
Improvements:
5+
* Optional `override` query parameter to `PUT /requisitions/{id}` endpoint.
6+
* When `override=true`, the endpoint skips date validation during the update process.
7+
* Existing ETag behavior remains unchanged.
8+
49
8.4.1 / 16.05.2025
510
==================
611

src/main/java/org/openlmis/requisition/web/BaseRequisitionController.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,8 @@ InitiateResult doInitiate(UUID programId, UUID facilityId, UUID suggestedPeriod,
251251
}
252252

253253
UpdatePreparationResult doUpdatePreparation(UUID requisitionId,
254-
Requisition.Importer requisitionImporter, HttpServletRequest request, Profiler profiler) {
254+
Requisition.Importer requisitionImporter, HttpServletRequest request, boolean override,
255+
Profiler profiler) {
255256
if (null != requisitionImporter.getId()
256257
&& !Objects.equals(requisitionImporter.getId(), requisitionId)) {
257258
throw new ValidationMessageException(ERROR_ID_MISMATCH);
@@ -260,9 +261,12 @@ UpdatePreparationResult doUpdatePreparation(UUID requisitionId,
260261
Requisition requisitionToUpdate = findRequisition(requisitionId, profiler);
261262

262263
profiler.start("VALIDATE_TIMESTAMPS");
263-
requisitionVersionValidator
264-
.validateRequisitionTimestamps(requisitionImporter.getModifiedDate(), requisitionToUpdate)
265-
.throwExceptionIfHasErrors();
264+
if (!override) {
265+
requisitionVersionValidator
266+
.validateRequisitionTimestamps(requisitionImporter.getModifiedDate(),
267+
requisitionToUpdate)
268+
.throwExceptionIfHasErrors();
269+
}
266270

267271
checkPermission(
268272
profiler,

src/main/java/org/openlmis/requisition/web/RequisitionController.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -265,12 +265,13 @@ public void deleteRequisition(@PathVariable("id") UUID requisitionId) {
265265
@ResponseStatus(HttpStatus.OK)
266266
public RequisitionDto updateRequisition(@RequestBody RequisitionDto requisitionDto,
267267
@PathVariable("id") UUID requisitionId,
268+
@RequestParam(name = "override", required = false, defaultValue = "false") boolean override,
268269
HttpServletRequest request,
269270
HttpServletResponse response) {
270271
Profiler profiler = getProfiler("UPDATE_REQUISITION", requisitionId, requisitionDto);
271272

272273
UpdatePreparationResult result = doUpdatePreparation(requisitionId, requisitionDto,
273-
request, profiler);
274+
request, override, profiler);
274275

275276
Requisition requisitionToUpdate = result.getRequisitionToUpdate();
276277

src/main/java/org/openlmis/requisition/web/RequisitionV2Controller.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,11 +124,12 @@ public RequisitionV2Dto initiate(@RequestParam(value = "program") UUID programId
124124
@PutMapping("/{id}")
125125
public RequisitionV2Dto updateRequisition(@PathVariable("id") UUID requisitionId,
126126
@RequestBody RequisitionV2Dto requisitionDto,
127+
@RequestParam(name = "override", required = false, defaultValue = "false") boolean override,
127128
HttpServletRequest request, HttpServletResponse response) {
128129
Profiler profiler = getProfiler("UPDATE_REQUISITION_V2", requisitionId, requisitionDto);
129130

130131
UpdatePreparationResult result = doUpdatePreparation(requisitionId, requisitionDto,
131-
request, profiler);
132+
request, override, profiler);
132133

133134
Requisition requisitionToUpdate = result.getRequisitionToUpdate();
134135

src/test/java/org/openlmis/requisition/web/RequisitionControllerTest.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -550,7 +550,7 @@ public void shouldReturnBadRequestWhenRequisitionIdDiffersFromTheOneInUrl() thro
550550
RequisitionDto requisitionDto = mock(RequisitionDto.class);
551551
when(requisitionDto.getId()).thenReturn(uuid1);
552552

553-
requisitionController.updateRequisition(requisitionDto, uuid2, request, response);
553+
requisitionController.updateRequisition(requisitionDto, uuid2, false, request, response);
554554
}
555555

556556
@Test(expected = VersionMismatchException.class)
@@ -571,7 +571,7 @@ public void shouldReturnBadRequestWhenThereIsNewerVersion() throws Exception {
571571
any(ZonedDateTime.class), any(Requisition.class)))
572572
.thenCallRealMethod();
573573

574-
requisitionController.updateRequisition(requisitionDto, uuid1, request, response);
574+
requisitionController.updateRequisition(requisitionDto, uuid1, false, request, response);
575575
}
576576

577577
@Test
@@ -603,7 +603,7 @@ public void shouldUpdateRequisition() {
603603
when(facilityReferenceDataService.findOne(any(UUID.class))).thenReturn(
604604
DtoGenerator.of(FacilityDto.class));
605605

606-
requisitionController.updateRequisition(requisitionDto, uuid1, request, response);
606+
requisitionController.updateRequisition(requisitionDto, uuid1, true, request, response);
607607

608608
assertEquals(template, initiatedRequsition.getTemplate());
609609
verify(initiatedRequsition).updateFrom(
@@ -649,7 +649,7 @@ public void shouldUpdateStockBasedRequisition() {
649649
any(LocalDate.class), any(LocalDate.class)))
650650
.thenReturn(Collections.singletonList(stockCardRangeSummaryDto));
651651

652-
requisitionController.updateRequisition(requisitionDto, uuid1, request, response);
652+
requisitionController.updateRequisition(requisitionDto, uuid1, false, request, response);
653653

654654
assertEquals(template, initiatedRequsition.getTemplate());
655655
verify(initiatedRequsition).updateFrom(
@@ -675,7 +675,7 @@ public void shouldNotUpdateWithInvalidRequisition() {
675675
.validateEtagVersionIfPresent(any(HttpServletRequest.class), any(Requisition.class));
676676

677677
assertThatThrownBy(() -> requisitionController
678-
.updateRequisition(requisitionDto, uuid1, request, response))
678+
.updateRequisition(requisitionDto, uuid1, false, request, response))
679679
.isInstanceOf(VersionMismatchException.class);
680680

681681
verify(requisitionService).validateCanSaveRequisition(initiatedRequsition);

0 commit comments

Comments
 (0)