diff --git a/lib/taskana-core/src/main/java/org/taskana/TaskService.java b/lib/taskana-core/src/main/java/org/taskana/TaskService.java index 744414a8f..76e1fd00d 100644 --- a/lib/taskana-core/src/main/java/org/taskana/TaskService.java +++ b/lib/taskana-core/src/main/java/org/taskana/TaskService.java @@ -108,7 +108,9 @@ public interface TaskService { List states); /** - * Put task into another basket + * Transfer task to another workbasket. + * + * The transfer set the transferred flag and resets the read flag. * * @param workbasketId * @return the updated task @@ -116,6 +118,15 @@ public interface TaskService { */ public Task transfer(String taskId, String workbasketId) throws TaskNotFoundException, WorkbasketNotFoundException, NotAuthorizedException; + + /** + * Marks a task as read. + * + * @param taskId the id of the task to be updated + * @param isRead the new status of the read flag. + * @return Task the updated Task + */ + public Task setTaskRead(String taskId, boolean isRead) throws TaskNotFoundException; public List getTaskCountByWorkbasketAndDaysInPastAndState(long daysInPast, List states); diff --git a/lib/taskana-core/src/main/java/org/taskana/impl/TaskServiceImpl.java b/lib/taskana-core/src/main/java/org/taskana/impl/TaskServiceImpl.java index 77c5cc7a7..cb40122b0 100644 --- a/lib/taskana-core/src/main/java/org/taskana/impl/TaskServiceImpl.java +++ b/lib/taskana-core/src/main/java/org/taskana/impl/TaskServiceImpl.java @@ -74,6 +74,8 @@ public class TaskServiceImpl implements TaskService { task.setState(TaskState.READY); task.setCreated(now); task.setModified(now); + task.setRead(false); + task.setTransferred(false); taskMapper.insert(task); logger.debug("Task '{}' created.", task.getId()); return task; @@ -147,11 +149,15 @@ public class TaskServiceImpl implements TaskService { taskanaEngine.getWorkbasketService().getWorkbasket(destinationWorkbasketId); } + // reset read flag and set transferred flag + task.setRead(false); + task.setTransferred(true); + // transfer task from source to destination workbasket task.setWorkbasketId(destinationWorkbasketId); task.setModified(Timestamp.valueOf(LocalDateTime.now())); taskMapper.update(task); - + return getTaskById(taskId); } @@ -164,4 +170,13 @@ public class TaskServiceImpl implements TaskService { return taskMapper.getTaskCountByWorkbasketIdAndDaysInPastAndState(fromDate, states); } + @Override + public Task setTaskRead(String taskId, boolean isRead) throws TaskNotFoundException { + Task task = getTaskById(taskId); + task.setRead(true); + task.setModified(Timestamp.valueOf(LocalDateTime.now())); + taskMapper.update(task); + return getTaskById(taskId); + } + } diff --git a/lib/taskana-core/src/main/java/org/taskana/model/Task.java b/lib/taskana-core/src/main/java/org/taskana/model/Task.java index dbd214504..16f3ef09d 100644 --- a/lib/taskana-core/src/main/java/org/taskana/model/Task.java +++ b/lib/taskana-core/src/main/java/org/taskana/model/Task.java @@ -22,6 +22,8 @@ public class Task { private String type; private String workbasketId; private String owner; + private boolean isRead; + private boolean isTransferred; public String getId() { return id; @@ -143,6 +145,22 @@ public class Task { this.owner = owner; } + public boolean isRead() { + return isRead; + } + + public void setRead(boolean isRead) { + this.isRead = isRead; + } + + public boolean isTransferred() { + return isTransferred; + } + + public void setTransferred(boolean isTransferred) { + this.isTransferred = isTransferred; + } + public String toString() { StringBuffer sb = new StringBuffer(); sb.append("TASK("); @@ -161,6 +179,8 @@ public class Task { sb.append(", type="+type); sb.append(", workbasketId="+workbasketId); sb.append(", owner="+owner); + sb.append(", isRead="+isRead); + sb.append(", isTransferred="+isTransferred); sb.append(")"); return sb.toString(); diff --git a/lib/taskana-core/src/main/java/org/taskana/model/mappings/TaskMapper.java b/lib/taskana-core/src/main/java/org/taskana/model/mappings/TaskMapper.java index 4fcf99cec..37476b388 100644 --- a/lib/taskana-core/src/main/java/org/taskana/model/mappings/TaskMapper.java +++ b/lib/taskana-core/src/main/java/org/taskana/model/mappings/TaskMapper.java @@ -18,7 +18,7 @@ import org.taskana.model.TaskState; public interface TaskMapper { - @Select("SELECT ID, TENANT_ID, CREATED, CLAIMED, COMPLETED, MODIFIED, PLANNED, DUE, NAME, DESCRIPTION, PRIORITY, STATE, TYPE, WORKBASKETID, OWNER " + @Select("SELECT ID, TENANT_ID, CREATED, CLAIMED, COMPLETED, MODIFIED, PLANNED, DUE, NAME, DESCRIPTION, PRIORITY, STATE, TYPE, WORKBASKETID, OWNER, IS_READ, IS_TRANSFERRED " + "FROM task " + "WHERE ID = #{id}") @Results(value = { @@ -36,10 +36,12 @@ public interface TaskMapper { @Result(property = "state", column = "STATE"), @Result(property = "type", column = "TYPE"), @Result(property = "workbasketId", column = "WORKBASKETID"), - @Result(property = "owner", column = "OWNER")}) + @Result(property = "owner", column = "OWNER"), + @Result(property = "isRead", column = "IS_READ"), + @Result(property = "isTransferred", column = "IS_TRANSFERRED")}) Task findById(String id); - @Select("SELECT ID, TENANT_ID, CREATED, CLAIMED, COMPLETED, MODIFIED, PLANNED, DUE, NAME, DESCRIPTION, PRIORITY, STATE, TYPE, WORKBASKETID, OWNER " + @Select("SELECT ID, TENANT_ID, CREATED, CLAIMED, COMPLETED, MODIFIED, PLANNED, DUE, NAME, DESCRIPTION, PRIORITY, STATE, TYPE, WORKBASKETID, OWNER, IS_READ, IS_TRANSFERRED " + "FROM task " + "WHERE WORKBASKETID = #{workbasketId} " + "ORDER BY ID") @@ -58,11 +60,13 @@ public interface TaskMapper { @Result(property = "state", column = "STATE"), @Result(property = "type", column = "TYPE"), @Result(property = "workbasketId", column = "WORKBASKETID"), - @Result(property = "owner", column = "OWNER")}) + @Result(property = "owner", column = "OWNER"), + @Result(property = "isRead", column = "IS_READ"), + @Result(property = "isTransferred", column = "IS_TRANSFERRED")}) List findByWorkBasketId(String workbasketId); @Select("