|
18 | 18 | package de.symeda.sormas.backend.contact; |
19 | 19 |
|
20 | 20 | import static de.symeda.sormas.backend.visit.VisitLogic.getVisitResult; |
| 21 | +import static java.time.temporal.ChronoUnit.DAYS; |
21 | 22 |
|
22 | 23 | import java.math.BigInteger; |
23 | 24 | import java.sql.Timestamp; |
|
57 | 58 | import org.slf4j.Logger; |
58 | 59 | import org.slf4j.LoggerFactory; |
59 | 60 |
|
| 61 | +import de.symeda.sormas.api.CountryHelper; |
60 | 62 | import de.symeda.sormas.api.Disease; |
61 | 63 | import de.symeda.sormas.api.Language; |
62 | 64 | import de.symeda.sormas.api.caze.CaseReferenceDto; |
|
116 | 118 | import de.symeda.sormas.backend.clinicalcourse.ClinicalCourseFacadeEjb; |
117 | 119 | import de.symeda.sormas.backend.common.AbstractAdoService; |
118 | 120 | import de.symeda.sormas.backend.common.AbstractDomainObject; |
| 121 | +import de.symeda.sormas.backend.common.ConfigFacadeEjb; |
119 | 122 | import de.symeda.sormas.backend.common.FollowUpTaskCreationException; |
120 | 123 | import de.symeda.sormas.backend.epidata.EpiData; |
121 | 124 | import de.symeda.sormas.backend.epidata.EpiDataFacadeEjb; |
@@ -193,6 +196,8 @@ public class ContactFacadeEjb implements ContactFacade { |
193 | 196 | private EpiDataFacadeEjbLocal epiDataFacade; |
194 | 197 | @EJB |
195 | 198 | private ClinicalCourseFacadeEjb.ClinicalCourseFacadeEjbLocal clinicalCourseFacade; |
| 199 | + @EJB |
| 200 | + private ConfigFacadeEjb.ConfigFacadeEjbLocal configFacade; |
196 | 201 |
|
197 | 202 | @Override |
198 | 203 | public List<String> getAllActiveUuids() { |
@@ -274,9 +279,24 @@ public ContactDto saveContact(ContactDto dto, boolean handleChanges) { |
274 | 279 | // } |
275 | 280 |
|
276 | 281 | Contact entity = fromDto(dto); |
277 | | - |
278 | 282 | contactService.ensurePersisted(entity); |
279 | 283 |
|
| 284 | + if (configFacade.isConfiguredCountry(CountryHelper.COUNTRY_CODE_SWITZERLAND) && existingContact == null) { |
| 285 | + LocalDate now = LocalDate.now(); |
| 286 | + LocalDate reportDate = DateHelper8.toLocalDate(entity.getReportDateTime()); |
| 287 | + if (DAYS.between(reportDate, now) <= 30) { |
| 288 | + try { |
| 289 | + User assignee = taskService.getTaskAssignee(entity); |
| 290 | + LocalDateTime fromDateTime = LocalDate.now().atStartOfDay(); |
| 291 | + LocalDateTime toDateTime = fromDateTime.plusDays(1); |
| 292 | + Task task = getContactTask(TaskType.CONTACT_INVESTIGATION, fromDateTime, toDateTime, entity, assignee); |
| 293 | + taskService.ensurePersisted(task); |
| 294 | + } catch (FollowUpTaskCreationException e) { |
| 295 | + logger.warn(e.getMessage()); |
| 296 | + } |
| 297 | + } |
| 298 | + } |
| 299 | + |
280 | 300 | if (handleChanges) { |
281 | 301 | updateContactVisitAssociations(existingContactDto, entity); |
282 | 302 |
|
@@ -1263,22 +1283,26 @@ public void generateContactFollowUpTasks() { |
1263 | 1283 | } |
1264 | 1284 |
|
1265 | 1285 | // none found -> create the task |
1266 | | - Task task = taskService.buildTask(null); |
1267 | | - task.setTaskContext(TaskContext.CONTACT); |
1268 | | - task.setContact(contact); |
1269 | | - task.setTaskType(TaskType.CONTACT_FOLLOW_UP); |
1270 | | - task.setSuggestedStart(DateHelper8.toDate(fromDateTime)); |
1271 | | - task.setDueDate(DateHelper8.toDate(toDateTime.minusMinutes(1))); |
1272 | | - task.setAssigneeUser(assignee); |
1273 | | - |
1274 | | - if (contact.isHighPriority()) { |
1275 | | - task.setPriority(TaskPriority.HIGH); |
1276 | | - } |
1277 | | - |
| 1286 | + Task task = getContactTask(TaskType.CONTACT_FOLLOW_UP, fromDateTime, toDateTime, contact, assignee); |
1278 | 1287 | taskService.ensurePersisted(task); |
1279 | 1288 | } |
1280 | 1289 | } |
1281 | 1290 |
|
| 1291 | + private Task getContactTask(TaskType taskType, LocalDateTime fromDateTime, LocalDateTime toDateTime, Contact contact, User assignee) { |
| 1292 | + Task task = taskService.buildTask(null); |
| 1293 | + task.setTaskContext(TaskContext.CONTACT); |
| 1294 | + task.setContact(contact); |
| 1295 | + task.setTaskType(taskType); |
| 1296 | + task.setSuggestedStart(DateHelper8.toDate(fromDateTime)); |
| 1297 | + task.setDueDate(DateHelper8.toDate(toDateTime.minusMinutes(1))); |
| 1298 | + task.setAssigneeUser(assignee); |
| 1299 | + |
| 1300 | + if (contact.isHighPriority()) { |
| 1301 | + task.setPriority(TaskPriority.HIGH); |
| 1302 | + } |
| 1303 | + return task; |
| 1304 | + } |
| 1305 | + |
1282 | 1306 | @Override |
1283 | 1307 | public void validate(ContactDto contact) throws ValidationRuntimeException { |
1284 | 1308 |
|
|
0 commit comments