# HG changeset patch # User Tomas Zeman # Date 1338903643 -7200 # Node ID b6a00fd29998b432fd06f8a3f1f734d364d69e2a # Parent 1fcbeae1f9da5980afea5ff22eed5b49cacd81e8 934f1febd6c5104c Task number diff -r 1fcbeae1f9da -r b6a00fd29998 src/main/resources/db/db-schema.sql --- a/src/main/resources/db/db-schema.sql Wed May 30 22:51:02 2012 +0200 +++ b/src/main/resources/db/db-schema.sql Tue Jun 05 15:40:43 2012 +0200 @@ -192,6 +192,7 @@ create table "task" ( "id" bigint primary key not null, "name" varchar(100) not null, + "num" integer not null, "project_id" bigint not null, "responsible" bigint not null, "deadline" timestamp not null, diff -r 1fcbeae1f9da -r b6a00fd29998 src/main/resources/db/schema-changes-0.2-0.3.sql --- a/src/main/resources/db/schema-changes-0.2-0.3.sql Wed May 30 22:51:02 2012 +0200 +++ b/src/main/resources/db/schema-changes-0.2-0.3.sql Tue Jun 05 15:40:43 2012 +0200 @@ -69,3 +69,21 @@ alter table "task_attachment" add foreign key ("attachment") references "attachment"("id") on delete cascade; alter table "project_attachment" add unique("project","attachment"); alter table "task_attachment" add unique("task","attachment"); + +-- task number +create sequence task_2012; +create sequence task_2013; +create sequence task_2014; +create sequence task_2015; +create sequence task_2016; +create sequence task_2017; +create sequence task_2018; +create sequence task_2019; +create sequence task_2020; +ALTER TABLE task ADD num integer; +CREATE VIEW vtask AS SELECT * FROM task ORDER BY id; +CREATE RULE rtask AS ON UPDATE TO vtask DO INSTEAD UPDATE task SET num = NEW.num WHERE id = NEW.id; +UPDATE vtask SET num = nextval('task_2012'); +DROP RULE rtask ON vtask; +DROP VIEW vtask; +ALTER TABLE task ALTER COLUMN num SET NOT NULL; diff -r 1fcbeae1f9da -r b6a00fd29998 src/main/scala/fis/pm/model/Task.scala --- a/src/main/scala/fis/pm/model/Task.scala Wed May 30 22:51:02 2012 +0200 +++ b/src/main/scala/fis/pm/model/Task.scala Tue Jun 05 15:40:43 2012 +0200 @@ -16,10 +16,11 @@ package fis.pm.model import fis.aaa.model._ -import fis.base.model.Entity +import fis.base.model.{Entity, ReadOnlyField} +import fis.db.PgsqlSequencer import fis.cl.model._ import net.liftweb.common._ -import net.liftweb.record.{MetaRecord, Record} +import net.liftweb.record.{LifecycleCallbacks, MetaRecord, Record} import net.liftweb.record.field._ import net.liftweb.util._ import net.tz.lift.model._ @@ -41,6 +42,12 @@ protected[pm] val stateFld = new CodeListItemField(this, CodeList('task_state), _.i1.toString, { v => Text(v.i1.toString)}) with FL + @Column("num") + protected val numFld = new TaskNumber(this) + lazy val ident = ReadOnlyField(numFld) + def number = (numFld.year, numFld.get) + def numberStr = numFld.toString + def state: TaskState = stateFld.item.map { TaskState(_) } openOr EmptyTaskState } @@ -66,4 +73,16 @@ TaskStateItem(i.id, i.i1.get, i.i1.get == 100) } +private[model] class TaskNumber(t: Task) extends IntField[Task](t) with + LifecycleCallbacks with FL { + + def year = t.createdAt.dateTime.getYear + override def beforeCreate { + val sequencer = PgsqlSequencer("task_%d".format(year)) + set(sequencer.next.toInt) + } + override def toString = "%d/%03d".format(year, get) + override def asHtml = Text(toString) +} + // vim: set ts=2 sw=2 et: diff -r 1fcbeae1f9da -r b6a00fd29998 src/main/scala/fis/pm/ui/TaskForm.scala --- a/src/main/scala/fis/pm/ui/TaskForm.scala Wed May 30 22:51:02 2012 +0200 +++ b/src/main/scala/fis/pm/ui/TaskForm.scala Tue Jun 05 15:40:43 2012 +0200 @@ -26,8 +26,10 @@ protected object task extends ScreenVar[Task](Task.createRecord) - protected def fields(t: Task): List[BaseField] = List(t.name, t.project, - t.taskType, t.stateFld, t.deadline, t.responsible, t.note) + protected def fields(t: Task): List[BaseField] = + (t.id != t.idField.defaultValue).box(t.ident).toList ++ + List(t.name, t.project, t.taskType, t.stateFld, t.deadline, t.responsible, + t.note) override def screenFields = fields(task) diff -r 1fcbeae1f9da -r b6a00fd29998 src/main/scala/fis/pm/ui/TaskSnippet.scala --- a/src/main/scala/fis/pm/ui/TaskSnippet.scala Wed May 30 22:51:02 2012 +0200 +++ b/src/main/scala/fis/pm/ui/TaskSnippet.scala Tue Jun 05 15:40:43 2012 +0200 @@ -89,8 +89,8 @@ def view: Task => Box[String] = (viewLoc.calcHref _) andThen (Box !! _) } - private def fields(t: Task) = List(t.name, t.project, t.taskType, t.stateFld, - t.createdBy, t.createdAt, t.deadline, t.responsible, t.note) + private def fields(t: Task) = List(t.ident, t.name, t.project, t.taskType, + t.stateFld, t.createdBy, t.createdAt, t.deadline, t.responsible, t.note) private case class TaskLink(t: Task) extends EntityLink[Task](t, url.view) diff -r 1fcbeae1f9da -r b6a00fd29998 src/main/scala/fis/pm/ui/TaskTable.scala --- a/src/main/scala/fis/pm/ui/TaskTable.scala Wed May 30 22:51:02 2012 +0200 +++ b/src/main/scala/fis/pm/ui/TaskTable.scala Tue Jun 05 15:40:43 2012 +0200 @@ -15,13 +15,20 @@ */ package fis.pm.ui +import fis.base.model._ +import fis.base.ui._ import fis.pm.model._ -import fis.base.ui._ +import net.liftweb.common._ +import net.tz.lift.snippet._ -object TaskTable extends FieldTable[Task] { - def fields(t: Task) = EntityLink(t) ++ Seq(t.deadline, t.responsible, - t.note) +trait TaskTable extends FieldTable[Task] { + protected def identField(t: Task) = new ReadOnlyField(t.ident.name, t.ident.displayName, + a(TaskSnippet.url.view(t))(t.ident.asHtml), Empty) + def fields(t: Task) = Seq(identField(t)) ++ EntityLink(t) ++ Seq(t.deadline, + t.responsible, t.note) def apply(l: Iterable[Task]) = build(Task, l) } +object TaskTable extends TaskTable + // vim: set ts=2 sw=2 et: diff -r 1fcbeae1f9da -r b6a00fd29998 src/main/webapp/templates-hidden/_resources.html --- a/src/main/webapp/templates-hidden/_resources.html Wed May 30 22:51:02 2012 +0200 +++ b/src/main/webapp/templates-hidden/_resources.html Tue Jun 05 15:40:43 2012 +0200 @@ -249,6 +249,7 @@ Project Type Deadline + Number Responsible State [%%] Comments diff -r 1fcbeae1f9da -r b6a00fd29998 src/main/webapp/templates-hidden/_resources_cs.html --- a/src/main/webapp/templates-hidden/_resources_cs.html Wed May 30 22:51:02 2012 +0200 +++ b/src/main/webapp/templates-hidden/_resources_cs.html Tue Jun 05 15:40:43 2012 +0200 @@ -235,6 +235,7 @@ Projekt Typ úkolu Termín + Číslo Odpovědný Stav [%%] Komentáře