use of de.symeda.sormas.api.infrastructure.district.DistrictIndexDto in project SORMAS-Project by hzi-braunschweig.
the class DevModeView method generateContacts.
private void generateContacts() {
initializeRandomGenerator();
ContactGenerationConfig config = contactGeneratorConfigBinder.getBean();
Disease disease = config.getDisease();
List<Disease> diseases = disease == null ? FacadeProvider.getDiseaseConfigurationFacade().getAllDiseases(true, true, true) : null;
if (disease == null) {
disease = random(diseases);
Notification.show("", "Automatically chosen disease: " + disease.getName(), Notification.Type.TRAY_NOTIFICATION);
}
List<String> personUuids = new ArrayList<>();
List<CaseReferenceDto> cases = null;
List<DistrictIndexDto> districts = config.getDistrict() == null ? FacadeProvider.getDistrictFacade().getIndexList(new DistrictCriteria().region(config.getRegion()), 0, Math.min(config.getContactCount() * 2, 50), Arrays.asList(new SortProperty(DistrictDto.NAME))) : null;
if (!config.isCreateWithoutSourceCases()) {
cases = FacadeProvider.getCaseFacade().getRandomCaseReferences(new CaseCriteria().region(config.getRegion()).district(config.getDistrict()).disease(disease), config.getContactCount() * 2, random());
if (cases == null) {
Notification.show("Error", I18nProperties.getString(Strings.messageMissingCases), Notification.Type.ERROR_MESSAGE);
return;
}
}
float baseOffset = random().nextFloat();
int daysBetween = (int) ChronoUnit.DAYS.between(config.startDate, config.endDate);
long dt = System.nanoTime();
for (int i = 0; i < config.getContactCount(); i++) {
fieldVisibilityCheckers = FieldVisibilityCheckers.withDisease(disease).andWithCountry(FacadeProvider.getConfigFacade().getCountryLocale());
LocalDateTime referenceDateTime = getReferenceDateTime(i, config.getContactCount(), baseOffset, disease, config.getStartDate(), daysBetween);
PersonDto person;
if (config.isCreateMultipleContactsPerPerson() && !personUuids.isEmpty() && randomPercent(25)) {
String personUuid = random(personUuids);
person = FacadeProvider.getPersonFacade().getPersonByUuid(personUuid);
} else {
person = PersonDto.build();
fillEntity(person, referenceDateTime);
person.setSymptomJournalStatus(null);
setPersonName(person);
if (config.isCreateMultipleContactsPerPerson()) {
personUuids.add(person.getUuid());
}
}
CaseReferenceDto contactCase = null;
if (!config.isCreateWithoutSourceCases()) {
contactCase = random(cases);
}
ContactDto contact = ContactDto.build();
contact.setPerson(person.toReference());
fillEntity(contact, referenceDateTime);
if (contactCase != null) {
contact.setCaze(contactCase);
}
contact.setDisease(disease);
if (contact.getDisease() == Disease.OTHER) {
contact.setDiseaseDetails("RD " + (random().nextInt(20) + 1));
}
UserReferenceDto userReference = UserProvider.getCurrent().getUserReference();
contact.setReportingUser(userReference);
contact.setReportDateTime(Date.from(referenceDateTime.atZone(ZoneId.systemDefault()).toInstant()));
if (districts != null) {
DistrictIndexDto district = random(districts);
contact.setRegion(district.getRegion());
contact.setDistrict(district.toReference());
} else {
contact.setRegion(config.getRegion());
contact.setDistrict(config.getDistrict());
}
if (contact.getLastContactDate() != null && contact.getLastContactDate().after(contact.getReportDateTime())) {
contact.setLastContactDate(contact.getReportDateTime());
}
if (FollowUpStatus.CANCELED.equals(contact.getFollowUpStatus()) || FollowUpStatus.LOST.equals(contact.getFollowUpStatus())) {
contact.setFollowUpComment("-");
}
// description
contact.setDescription("Contact generated using DevMode on " + LocalDate.now());
FacadeProvider.getPersonFacade().savePerson(person);
contact = FacadeProvider.getContactFacade().save(contact);
if (FacadeProvider.getDiseaseConfigurationFacade().hasFollowUp(contact.getDisease())) {
contact.setFollowUpStatus(random(FollowUpStatus.values()));
} else {
contact.setFollowUpStatus(FollowUpStatus.NO_FOLLOW_UP);
}
contact.setFollowUpUntil(contact.getFollowUpStatus() == FollowUpStatus.NO_FOLLOW_UP ? null : randomDate(referenceDateTime));
// Create visits
if (config.isCreateWithVisits() && FacadeProvider.getDiseaseConfigurationFacade().hasFollowUp(contact.getDisease()) && FollowUpStatus.NO_FOLLOW_UP != contact.getFollowUpStatus()) {
Date latestFollowUpDate = contact.getFollowUpUntil().before(new Date()) ? contact.getFollowUpUntil() : new Date();
Date contactStartDate = ContactLogic.getStartDate(contact);
int followUpCount = random().nextInt(DateHelper.getDaysBetween(contactStartDate, latestFollowUpDate) + 1);
if (followUpCount > 0) {
int[] followUpDays = random().ints(1, followUpCount + 1).distinct().limit(followUpCount).toArray();
List<LocalDateTime> followUpDates = new ArrayList<>();
for (int day : followUpDays) {
followUpDates.add(DateHelper8.toLocalDate(contactStartDate).atStartOfDay().plusDays(day - 1).plusMinutes(random().nextInt(60 * 24 + 1)));
}
for (LocalDateTime date : followUpDates) {
VisitDto visit = VisitDto.build(contact.getPerson(), contact.getDisease(), VisitOrigin.USER);
fillEntity(visit, date);
visit.setVisitUser(userReference);
visit.setVisitDateTime(DateHelper8.toDate(date));
visit.setDisease(contact.getDisease());
if (visit.getVisitStatus() == null) {
visit.setVisitStatus(VisitStatus.COOPERATIVE);
}
FacadeProvider.getVisitFacade().saveVisit(visit);
}
}
}
}
dt = System.nanoTime() - dt;
long perContact = dt / config.getContactCount();
String msg = String.format("Generating %,d contacts took %,d ms (%,d ms per contact)", config.getContactCount(), dt / 1_000_000, perContact / 1_000_000);
logger.info(msg);
Notification.show("", msg, Notification.Type.TRAY_NOTIFICATION);
}
use of de.symeda.sormas.api.infrastructure.district.DistrictIndexDto in project SORMAS-Project by hzi-braunschweig.
the class DistrictFacadeEjb method toIndexDto.
public DistrictIndexDto toIndexDto(District entity) {
if (entity == null) {
return null;
}
DistrictIndexDto dto = new DistrictIndexDto();
DtoHelper.fillDto(dto, entity);
dto.setName(entity.getName());
dto.setEpidCode(entity.getEpidCode());
dto.setGrowthRate(entity.getGrowthRate());
dto.setPopulation(populationDataFacade.getDistrictPopulation(dto.getUuid()));
dto.setRegion(RegionFacadeEjb.toReferenceDto(entity.getRegion()));
dto.setExternalID(entity.getExternalID());
return dto;
}
use of de.symeda.sormas.api.infrastructure.district.DistrictIndexDto in project SORMAS-Project by hzi-braunschweig.
the class InfrastructureController method archiveOrDearchiveAllSelectedItems.
@SuppressWarnings("unchecked")
public void archiveOrDearchiveAllSelectedItems(boolean archive, Collection<?> selectedRows, InfrastructureType infrastructureType, Runnable callback) {
// Check that at least one entry is selected
if (selectedRows.isEmpty()) {
new Notification(I18nProperties.getString(Strings.headingNoRowsSelected), I18nProperties.getString(Strings.messageNoRowsSelected), Type.WARNING_MESSAGE, false).show(Page.getCurrent());
return;
}
// Check if archiving/dearchiving is allowed concerning the hierarchy
Set<String> selectedRowsUuids = selectedRows.stream().map(row -> ((HasUuid) row).getUuid()).collect(Collectors.toSet());
if (InfrastructureType.AREA.equals(infrastructureType) && FacadeProvider.getAreaFacade().isUsedInOtherInfrastructureData(selectedRowsUuids) || InfrastructureType.CONTINENT.equals(infrastructureType) && FacadeProvider.getContinentFacade().isUsedInOtherInfrastructureData(selectedRowsUuids) || InfrastructureType.SUBCONTINENT.equals(infrastructureType) && FacadeProvider.getSubcontinentFacade().isUsedInOtherInfrastructureData(selectedRowsUuids) || InfrastructureType.REGION.equals(infrastructureType) && FacadeProvider.getRegionFacade().isUsedInOtherInfrastructureData(selectedRowsUuids) || InfrastructureType.DISTRICT.equals(infrastructureType) && FacadeProvider.getDistrictFacade().isUsedInOtherInfrastructureData(selectedRowsUuids) || InfrastructureType.COMMUNITY.equals(infrastructureType) && FacadeProvider.getCommunityFacade().isUsedInOtherInfrastructureData(selectedRowsUuids)) {
showArchivingNotPossibleWindow(infrastructureType, true);
return;
}
if (InfrastructureType.COUNTRY.equals(infrastructureType) && FacadeProvider.getCountryFacade().hasArchivedParentInfrastructure(selectedRowsUuids) || InfrastructureType.SUBCONTINENT.equals(infrastructureType) && FacadeProvider.getSubcontinentFacade().hasArchivedParentInfrastructure(selectedRowsUuids) || InfrastructureType.DISTRICT.equals(infrastructureType) && FacadeProvider.getDistrictFacade().hasArchivedParentInfrastructure(selectedRowsUuids) || InfrastructureType.COMMUNITY.equals(infrastructureType) && FacadeProvider.getCommunityFacade().hasArchivedParentInfrastructure(selectedRowsUuids) || InfrastructureType.FACILITY.equals(infrastructureType) && FacadeProvider.getFacilityFacade().hasArchivedParentInfrastructure(selectedRowsUuids) || InfrastructureType.POINT_OF_ENTRY.equals(infrastructureType) && FacadeProvider.getPointOfEntryFacade().hasArchivedParentInfrastructure(selectedRowsUuids)) {
showDearchivingNotPossibleWindow(infrastructureType, false);
return;
}
final String confirmationMessage;
final String notificationMessage;
switch(infrastructureType) {
case CONTINENT:
confirmationMessage = archive ? I18nProperties.getString(Strings.confirmationArchiveContinents) : I18nProperties.getString(Strings.confirmationDearchiveContinents);
notificationMessage = archive ? I18nProperties.getString(Strings.messageContinentsArchived) : I18nProperties.getString(Strings.messageContinentsDearchived);
break;
case SUBCONTINENT:
confirmationMessage = archive ? I18nProperties.getString(Strings.confirmationArchiveSubcontinents) : I18nProperties.getString(Strings.confirmationDearchiveSubcontinents);
notificationMessage = archive ? I18nProperties.getString(Strings.messageSubcontinentsArchived) : I18nProperties.getString(Strings.messageSubcontinentsDearchived);
break;
case AREA:
confirmationMessage = archive ? I18nProperties.getString(Strings.confirmationArchiveAreas) : I18nProperties.getString(Strings.confirmationDearchiveAreas);
notificationMessage = archive ? I18nProperties.getString(Strings.messageAreasArchived) : I18nProperties.getString(Strings.messageAreasDearchived);
break;
case COUNTRY:
confirmationMessage = archive ? I18nProperties.getString(Strings.confirmationArchiveCountries) : I18nProperties.getString(Strings.confirmationDearchiveCountries);
notificationMessage = archive ? I18nProperties.getString(Strings.messageCountriesArchived) : I18nProperties.getString(Strings.messageCountriesDearchived);
break;
case REGION:
confirmationMessage = archive ? I18nProperties.getString(Strings.confirmationArchiveRegions) : I18nProperties.getString(Strings.confirmationDearchiveRegions);
notificationMessage = archive ? I18nProperties.getString(Strings.messageRegionsArchived) : I18nProperties.getString(Strings.messageRegionsDearchived);
break;
case DISTRICT:
confirmationMessage = archive ? I18nProperties.getString(Strings.confirmationArchiveDistricts) : I18nProperties.getString(Strings.confirmationDearchiveDistricts);
notificationMessage = archive ? I18nProperties.getString(Strings.messageDistrictsArchived) : I18nProperties.getString(Strings.messageDistrictsDearchived);
break;
case COMMUNITY:
confirmationMessage = archive ? I18nProperties.getString(Strings.confirmationArchiveCommunities) : I18nProperties.getString(Strings.confirmationDearchiveCommunities);
notificationMessage = archive ? I18nProperties.getString(Strings.messageCommunitiesArchived) : I18nProperties.getString(Strings.messageCommunitiesDearchived);
break;
case FACILITY:
confirmationMessage = archive ? I18nProperties.getString(Strings.confirmationArchiveFacilities) : I18nProperties.getString(Strings.confirmationDearchiveFacilities);
notificationMessage = archive ? I18nProperties.getString(Strings.messageFacilitiesArchived) : I18nProperties.getString(Strings.messageFacilitiesDearchived);
break;
case POINT_OF_ENTRY:
confirmationMessage = archive ? I18nProperties.getString(Strings.confirmationArchivePointsOfEntry) : I18nProperties.getString(Strings.confirmationDearchivePointsOfEntry);
notificationMessage = archive ? I18nProperties.getString(Strings.messagePointsOfEntryArchived) : I18nProperties.getString(Strings.messagePointsOfEntryDearchived);
break;
default:
throw new IllegalArgumentException(infrastructureType.name());
}
VaadinUiUtil.showConfirmationPopup(I18nProperties.getString(Strings.headingConfirmArchiving), new Label(String.format(confirmationMessage, selectedRows.size())), I18nProperties.getString(Strings.yes), I18nProperties.getString(Strings.no), null, e -> {
if (e.booleanValue()) {
switch(infrastructureType) {
case CONTINENT:
for (ContinentDto selectedRow : (Collection<ContinentDto>) selectedRows) {
if (archive) {
FacadeProvider.getContinentFacade().archive(selectedRow.getUuid());
} else {
FacadeProvider.getContinentFacade().dearchive(selectedRow.getUuid());
}
}
break;
case SUBCONTINENT:
for (SubcontinentDto selectedRow : (Collection<SubcontinentDto>) selectedRows) {
if (archive) {
FacadeProvider.getSubcontinentFacade().archive(selectedRow.getUuid());
} else {
FacadeProvider.getSubcontinentFacade().dearchive(selectedRow.getUuid());
}
}
break;
case AREA:
for (AreaDto selectedRow : (Collection<AreaDto>) selectedRows) {
if (archive) {
FacadeProvider.getAreaFacade().archive(selectedRow.getUuid());
} else {
FacadeProvider.getAreaFacade().dearchive(selectedRow.getUuid());
}
}
break;
case COUNTRY:
for (CountryIndexDto selectedRow : (Collection<CountryIndexDto>) selectedRows) {
if (archive) {
FacadeProvider.getCountryFacade().archive(selectedRow.getUuid());
} else {
FacadeProvider.getCountryFacade().dearchive(selectedRow.getUuid());
}
}
break;
case REGION:
for (RegionIndexDto selectedRow : (Collection<RegionIndexDto>) selectedRows) {
if (archive) {
FacadeProvider.getRegionFacade().archive(selectedRow.getUuid());
} else {
FacadeProvider.getRegionFacade().dearchive(selectedRow.getUuid());
}
}
break;
case DISTRICT:
for (DistrictIndexDto selectedRow : (Collection<DistrictIndexDto>) selectedRows) {
if (archive) {
FacadeProvider.getDistrictFacade().archive(selectedRow.getUuid());
} else {
FacadeProvider.getDistrictFacade().dearchive(selectedRow.getUuid());
}
}
break;
case COMMUNITY:
for (CommunityDto selectedRow : (Collection<CommunityDto>) selectedRows) {
if (archive) {
FacadeProvider.getCommunityFacade().archive(selectedRow.getUuid());
} else {
FacadeProvider.getCommunityFacade().dearchive(selectedRow.getUuid());
}
}
break;
case FACILITY:
for (FacilityIndexDto selectedRow : (Collection<FacilityIndexDto>) selectedRows) {
if (archive) {
FacadeProvider.getFacilityFacade().archive(selectedRow.getUuid());
} else {
FacadeProvider.getFacilityFacade().dearchive(selectedRow.getUuid());
}
}
break;
case POINT_OF_ENTRY:
for (PointOfEntryDto selectedRow : (Collection<PointOfEntryDto>) selectedRows) {
if (archive) {
FacadeProvider.getPointOfEntryFacade().archive(selectedRow.getUuid());
} else {
FacadeProvider.getPointOfEntryFacade().dearchive(selectedRow.getUuid());
}
}
break;
default:
throw new IllegalArgumentException(infrastructureType.name());
}
callback.run();
Notification.show(notificationMessage, Type.ASSISTIVE_NOTIFICATION);
}
});
}
use of de.symeda.sormas.api.infrastructure.district.DistrictIndexDto in project SORMAS-Project by hzi-braunschweig.
the class DistrictsGrid method setLazyDataProvider.
public void setLazyDataProvider() {
DataProvider<DistrictIndexDto, DistrictCriteria> dataProvider = DataProvider.fromFilteringCallbacks(query -> FacadeProvider.getDistrictFacade().getIndexList(query.getFilter().orElse(null), query.getOffset(), query.getLimit(), query.getSortOrders().stream().map(sortOrder -> new SortProperty(sortOrder.getSorted(), sortOrder.getDirection() == SortDirection.ASCENDING)).collect(Collectors.toList())).stream(), query -> {
return (int) FacadeProvider.getDistrictFacade().count(query.getFilter().orElse(null));
});
setDataProvider(dataProvider);
setSelectionMode(SelectionMode.NONE);
}
Aggregations