src/main/scala/fis/pm/model/PmSchema.scala
changeset 100 1fcbeae1f9da
parent 98 eac38214183d
child 103 6a2a19785cd8
--- a/src/main/scala/fis/pm/model/PmSchema.scala	Thu May 24 11:19:26 2012 +0200
+++ b/src/main/scala/fis/pm/model/PmSchema.scala	Wed May 30 22:51:02 2012 +0200
@@ -18,9 +18,11 @@
 import fis.aaa.model.{AaaSchema, User}
 import fis.base.model.{BaseSchema, Entity}
 import fis.cl.model.CodeListSchema
+import fis.fs.model.FsSchema
 import net.liftweb.squerylrecord.RecordTypeMode._
 
-trait PmSchema extends BaseSchema with AaaSchema with CodeListSchema {
+trait PmSchema extends BaseSchema with AaaSchema with CodeListSchema with
+  FsSchema {
 
   /* project */
   val projectT = tableWithSeq[Project]
@@ -81,6 +83,24 @@
     ))
   projectLocation.leftForeignKeyDeclaration.constrainReference(onDelete cascade)
   projectLocation.rightForeignKeyDeclaration.constrainReference(onDelete cascade)
+
+  /* project/task attachments */
+  val projectAttachment = manyToManyRelation(projectT, attachmentT).
+    via[ProjectAttachment]((p, a, pa) => (
+      p.id === pa.project,
+      a.id === pa.attachment
+    ))
+  projectAttachment.leftForeignKeyDeclaration.constrainReference(onDelete cascade)
+  projectAttachment.rightForeignKeyDeclaration.constrainReference(onDelete cascade)
+
+  val taskAttachment = manyToManyRelation(taskT, attachmentT).
+    via[TaskAttachment]((t, a, ta) => (
+      t.id === ta.task,
+      a.id === ta.attachment
+    ))
+  taskAttachment.leftForeignKeyDeclaration.constrainReference(onDelete cascade)
+  taskAttachment.rightForeignKeyDeclaration.constrainReference(onDelete cascade)
+
 }
 
 object PmSchema extends PmSchema
@@ -128,6 +148,20 @@
     from(PmSchema.projectLocation.right(l))(p => select(p) orderBy(p.name asc))
 }
 
+object ProjectAttachments {
+  import fis.fs.model._
+  def apply(p: Project): Iterable[Attachment] =
+    from(PmSchema.projectAttachment.left(p))(a =>
+      select(a) orderBy(a.name asc))
+}
+
+object TaskAttachments {
+  import fis.fs.model._
+  def apply(t: Task): Iterable[Attachment] =
+    from(PmSchema.taskAttachment.left(t))(a =>
+      select(a) orderBy(a.name asc))
+}
+
 /* Many-to-many relations */
 
 import org.squeryl.KeyedEntity
@@ -143,4 +177,14 @@
   def id = CompositeKey2(project, location)
 }
 
+case class ProjectAttachment(val project: Long, val attachment: Long)
+  extends KeyedEntity[CompositeKey2[Long, Long]] {
+  def id = CompositeKey2(project, attachment)
+}
+
+case class TaskAttachment(val task: Long, val attachment: Long)
+  extends KeyedEntity[CompositeKey2[Long, Long]] {
+  def id = CompositeKey2(task, attachment)
+}
+
 // vim: set ts=2 sw=2 et: