3434import java .util .HashMap ;
3535import java .util .List ;
3636import java .util .Map ;
37+ import java .util .Objects ;
3738import java .util .Optional ;
3839import java .util .Random ;
3940import java .util .Set ;
7778import de .symeda .sormas .api .caze .AgeAndBirthDateDto ;
7879import de .symeda .sormas .api .caze .BirthDateDto ;
7980import de .symeda .sormas .api .caze .BurialInfoDto ;
81+ import de .symeda .sormas .api .caze .CaseBulkEditData ;
8082import de .symeda .sormas .api .caze .CaseClassification ;
8183import de .symeda .sormas .api .caze .CaseCriteria ;
8284import de .symeda .sormas .api .caze .CaseDataDto ;
131133import de .symeda .sormas .api .person .PersonDto ;
132134import de .symeda .sormas .api .person .PersonReferenceDto ;
133135import de .symeda .sormas .api .person .PresentCondition ;
136+ import de .symeda .sormas .api .region .CommunityReferenceDto ;
134137import de .symeda .sormas .api .region .DistrictDto ;
135138import de .symeda .sormas .api .region .DistrictReferenceDto ;
136139import de .symeda .sormas .api .region .RegionReferenceDto ;
@@ -1477,11 +1480,119 @@ public CaseDataDto saveCase(CaseDataDto dto) throws ValidationRuntimeException {
14771480 return saveCase (dto , true );
14781481 }
14791482
1483+ public void saveBulkCase (
1484+ List <String > caseUuidList ,
1485+ CaseBulkEditData updatedCaseBulkEditData ,
1486+ boolean diseaseChange ,
1487+ boolean classificationChange ,
1488+ boolean investigationStatusChange ,
1489+ boolean outcomeChange ,
1490+ boolean surveillanceOfficerChange )
1491+ throws ValidationRuntimeException {
1492+
1493+ for (String caseUuid : caseUuidList ) {
1494+ Case caze = caseService .getByUuid (caseUuid );
1495+ CaseDataDto existingCaseDto = toDto (caze );
1496+
1497+ updateCaseWithBulkData (
1498+ updatedCaseBulkEditData ,
1499+ caze ,
1500+ diseaseChange ,
1501+ classificationChange ,
1502+ investigationStatusChange ,
1503+ outcomeChange ,
1504+ surveillanceOfficerChange );
1505+ doSave (caze , true , existingCaseDto );
1506+ }
1507+ }
1508+
1509+ public void saveBulkEditWithFacilities (
1510+ List <String > caseUuidList ,
1511+ CaseBulkEditData updatedCaseBulkEditData ,
1512+ boolean diseaseChange ,
1513+ boolean classificationChange ,
1514+ boolean investigationStatusChange ,
1515+ boolean outcomeChange ,
1516+ boolean surveillanceOfficerChange ,
1517+ Boolean doTransfer ) {
1518+
1519+ Region newRegion = regionService .getByUuid (updatedCaseBulkEditData .getRegion ().getUuid ());
1520+ District newDistrict = districtService .getByUuid (updatedCaseBulkEditData .getDistrict ().getUuid ());
1521+ CommunityReferenceDto communityDto = updatedCaseBulkEditData .getCommunity ();
1522+ Community newCommunity = null ;
1523+ if (communityDto != null ) {
1524+ newCommunity = communityService .getByUuid (updatedCaseBulkEditData .getCommunity ().getUuid ());
1525+ }
1526+
1527+ for (String caseUuid : caseUuidList ) {
1528+ Case caze = caseService .getByUuid (caseUuid );
1529+ CaseDataDto existingCaseDto = toDto (caze );
1530+
1531+ updateCaseWithBulkData (
1532+ updatedCaseBulkEditData ,
1533+ caze ,
1534+ diseaseChange ,
1535+ classificationChange ,
1536+ investigationStatusChange ,
1537+ outcomeChange ,
1538+ surveillanceOfficerChange );
1539+
1540+ caze .setRegion (newRegion );
1541+ caze .setDistrict (newDistrict );
1542+ caze .setCommunity (newCommunity );
1543+ caze .setFacilityType (updatedCaseBulkEditData .getFacilityType ());
1544+ caze .setHealthFacility (facilityService .getByUuid (updatedCaseBulkEditData .getHealthFacility ().getUuid ()));
1545+ caze .setHealthFacilityDetails (updatedCaseBulkEditData .getHealthFacilityDetails ());
1546+ CaseLogic .handleHospitalization (toDto (caze ), existingCaseDto , doTransfer );
1547+ doSave (caze , true , existingCaseDto );
1548+ }
1549+ }
1550+
1551+ private void updateCaseWithBulkData (
1552+ CaseBulkEditData updatedCaseBulkEditData ,
1553+ Case existingCase ,
1554+ boolean diseaseChange ,
1555+ boolean classificationChange ,
1556+ boolean investigationStatusChange ,
1557+ boolean outcomeChange ,
1558+ boolean surveillanceOfficerChange ) {
1559+
1560+ if (diseaseChange ) {
1561+ existingCase .setDisease (updatedCaseBulkEditData .getDisease ());
1562+ existingCase .setDiseaseDetails (updatedCaseBulkEditData .getDiseaseDetails ());
1563+ existingCase .setPlagueType (updatedCaseBulkEditData .getPlagueType ());
1564+ existingCase .setDengueFeverType (updatedCaseBulkEditData .getDengueFeverType ());
1565+ existingCase .setRabiesType (updatedCaseBulkEditData .getRabiesType ());
1566+ }
1567+ if (classificationChange ) {
1568+ existingCase .setCaseClassification (updatedCaseBulkEditData .getCaseClassification ());
1569+ }
1570+ if (investigationStatusChange ) {
1571+ existingCase .setInvestigationStatus (updatedCaseBulkEditData .getInvestigationStatus ());
1572+ }
1573+ if (outcomeChange ) {
1574+ existingCase .setOutcome (updatedCaseBulkEditData .getOutcome ());
1575+ }
1576+ // Setting the surveillance officer is only allowed if all selected cases are in
1577+ // the same district
1578+ if (surveillanceOfficerChange ) {
1579+ existingCase .setSurveillanceOfficer (userService .getByUuid (updatedCaseBulkEditData .getSurveillanceOfficer ().getUuid ()));
1580+ }
1581+
1582+ if (Objects .nonNull (updatedCaseBulkEditData .getHealthFacilityDetails ())) {
1583+ existingCase .setHealthFacilityDetails (updatedCaseBulkEditData .getHealthFacilityDetails ());
1584+ }
1585+ }
1586+
14801587 public CaseDataDto saveCase (CaseDataDto dto , boolean handleChanges ) throws ValidationRuntimeException {
14811588
14821589 Case caze = caseService .getByUuid (dto .getUuid ());
14831590 CaseDataDto existingCaseDto = handleChanges ? toDto (caze ) : null ;
14841591
1592+ return caseSave (dto , handleChanges , caze , existingCaseDto );
1593+ }
1594+
1595+ private CaseDataDto caseSave (CaseDataDto dto , boolean handleChanges , Case caze , CaseDataDto existingCaseDto ) {
14851596 SymptomsHelper .updateIsSymptomatic (dto .getSymptoms ());
14861597
14871598 restorePseudonymizedDto (dto , caze , existingCaseDto );
@@ -1495,15 +1606,19 @@ public CaseDataDto saveCase(CaseDataDto dto, boolean handleChanges) throws Valid
14951606 caze .setCreationVersion (InfoProvider .get ().getVersion ());
14961607 }
14971608
1609+ doSave (caze , handleChanges , existingCaseDto );
1610+
1611+ return convertToDto (caze , Pseudonymizer .getDefault (userService ::hasRight ));
1612+ }
1613+
1614+ private void doSave (Case caze , boolean handleChanges , CaseDataDto existingCaseDto ) {
14981615 caseService .ensurePersisted (caze );
14991616 if (handleChanges ) {
15001617 updateCaseVisitAssociations (existingCaseDto , caze );
15011618 caseService .updateFollowUpUntilAndStatus (caze );
15021619
15031620 onCaseChanged (existingCaseDto , caze );
15041621 }
1505-
1506- return convertToDto (caze , Pseudonymizer .getDefault (userService ::hasRight ));
15071622 }
15081623
15091624 private void updateCaseVisitAssociations (CaseDataDto existingCase , Case caze ) {
0 commit comments