--- a/src/main/scala/fis/pm/ui/TaskSnippet.scala Tue Jun 05 15:40:44 2012 +0200
+++ b/src/main/scala/fis/pm/ui/TaskSnippet.scala Tue Jun 05 15:40:44 2012 +0200
@@ -17,6 +17,7 @@
import fis.aaa.ui.IfLoggedIn
import fis.base.ui._
+import fis.cl.model._
import fis.fs.model._
import fis.fs.ui._
import fis.pm.model._
@@ -24,6 +25,7 @@
import net.liftweb.http._
import net.liftweb.sitemap._
import net.liftweb.sitemap.Loc._
+import net.liftweb.squerylrecord.RecordTypeMode._
import net.liftweb.util._
import net.liftweb.util.Helpers._
import net.tz.lift.model._
@@ -35,7 +37,21 @@
private val listM = Menu("task.list", l10n("Tasks")) / prefix >>
Title(_ => i18n("Tasks")) >>
- locTpl("entity/list") >> Snippet("list", ClearNodes) >> Hidden
+ locTpl("task/list") >> Snippet("list", list)
+
+ private val listUnfinishedM = Menu("task.list-unfinished",
+ l10n("tasks.unfinished")) / prefix >>
+ Title(_ => i18n("Tasks")) >>
+ new TaskReport(() => from(PmSchema.taskT, CodeListSchema.cli)((t, i) =>
+ where(t.stateFld === i.id and TaskState.unfinishedClause(i))
+ select(t) orderBy(t.deadline asc))) >>
+ locTpl("task/list") >> Snippet("list", list) >> Hidden
+
+ private val listAllM = Menu("task.list-all",
+ l10n("tasks.all")) / prefix / "all" >>
+ Title(_ => i18n("All Tasks")) >>
+ new TaskReport(() => PmSchema.tasks) >>
+ locTpl("task/list") >> Snippet("list", list) >> Hidden
private val viewPre = Menu.param[Task]("task.view", l10n("Task"), parse,
encode) / prefix / * >> Title(t => i18n("Task %s", t.linkName)) >>
@@ -71,12 +87,28 @@
private lazy val deleteLoc = deleteM.toLoc
private lazy val postCommentLoc = postCommentM.toLoc
- val menu = listM submenus(viewM, editM, deleteM, postCommentM,
- attachments.menu)
+ val menu = listM submenus(listUnfinishedM, listAllM, viewM, editM, deleteM,
+ postCommentM, attachments.menu)
private def cur = viewLoc.currentValue or editLoc.currentValue or
deleteLoc.currentValue or postCommentLoc.currentValue
+ private def list: CssTr = {
+ val curM = Box(for {
+ m <- List(listUnfinishedM, listAllM)
+ cur <- S.location
+ loc <- SiteMap.findAndTestLoc(m.name) if cur.calcDefaultHref == loc.calcDefaultHref
+ } yield m) openOr listUnfinishedM
+
+ "li" #> (List(listUnfinishedM, listAllM) map { m =>
+ val nav = (new SecNavMenu(m)).toHtml
+ (m == curM).box(addAttributes(nav, "class" -> "active")) openOr nav }) &
+ ".content *" #> curM.params.flatMap {
+ case v: TaskReport => _TaskTable(v.tasks)
+ case _ => Nil
+ }
+ }
+
private def panel: CssTr = "*" #> cur.map { t => ViewPanel(fields(t)) }
private def comments: CssTr = "*" #> cur.map { t =>
@@ -96,6 +128,17 @@
EntityLink.register[Task](TaskLink(_))
+ private object _TaskTable extends TaskTable {
+ override def fields(t: Task) = (Seq(identField(t)) ++ EntityLink(t) ++
+ Seq(t.project, t.stateFld, t.deadline, t.responsible, t.note)
+ ) map Delayed(t)
+ }
+
+ private class TaskReport(f: () => Iterable[Task]) extends LocInfo[Iterable[Task]] {
+ def apply() = Full(f)
+ def tasks = f()
+ }
+
private object form extends TaskForm {
override def localSetup() {