19 package org.turro.dossier.task;
21 import java.util.Collection;
22 import java.util.List;
23 import java.util.stream.Stream;
24 import org.turro.collections.FlatList;
25 import org.turro.dossier.db.DossierPU;
26 import org.turro.dossier.entity.Dossier;
27 import org.turro.dossier.entity.Issue;
28 import org.turro.dossier.entity.IssuePredecessor;
29 import org.turro.dossier.entity.IssueStatus;
30 import org.turro.jpa.Dao;
31 import org.turro.sql.SqlClause;
44 if(subtasks.isEmpty()) {
47 double done = subtasks.stream().filter(ti -> ti.getIssue().getStatus().isFinished()).count();
48 return (done / subtasks.size()) * 100.0;
57 Collection<TaskItem> model =
getRoots();
58 model.forEach((task) -> fillSubtasks(task));
66 try(Stream<Issue> stream = SqlClause.select(
"i").from(
"Issue i")
67 .where().equal(
"i.dossier", dossier)
71 .and().empty(
"i.targets")
73 .stream(
Issue.class)) {
74 return stream.map(i ->
new TaskItem(i,
null, 1)).toList();
80 try(Stream<IssuePredecessor> stream = SqlClause.select(
"p").from(
"IssuePredecessor p")
81 .where().equal(
"p.target", item.
getIssue())
86 .and(
"p.target.dossier = p.source.dossier")
90 return stream.map(p ->
new TaskItem(p.getSource(), p.getType(), item.
getLevel() + 1))
95 public Collection<TaskItem>
getFlat(Collection<TaskItem> items) {
96 FlatList list =
new FlatList<TaskItem>() {
98 protected Collection<TaskItem> subItems(
TaskItem item) {
102 items.forEach((item) -> {
110 private void fillSubtasks(
TaskItem task) {
113 fillSubtasks(subtask);
120 return new Tasks(dossier,
null, onlyOpen, sameDossier);
124 return new Tasks(
null, issue, onlyOpen, sameDossier);
127 private final Dao dao;
129 private final Issue issue;
130 private final boolean onlyOpen, sameDossier;
132 private Tasks(
Dossier dossier,
Issue issue,
boolean onlyOpen,
boolean sameDossier) {
134 this.dossier = dossier;
136 this.onlyOpen = onlyOpen;
137 this.sameDossier = sameDossier;
void addSubtask(TaskItem subtask)
Collection< TaskItem > getSubtasks()
Collection< TaskItem > getFilledRoots()
static Tasks from(Dossier dossier, boolean onlyOpen, boolean sameDossier)
Collection< TaskItem > getRoots()
Collection< TaskItem > getFilledFlat()
Collection< TaskItem > getFlat(Collection< TaskItem > items)
Collection< TaskItem > getSubtasks(TaskItem item)
double getPercentTasksDone()
static Tasks from(Issue issue, boolean onlyOpen, boolean sameDossier)
static List< IssueStatus > selectBy(Boolean seen, Boolean working, Boolean standBy, Boolean finished)