src/main/scala/fis/pm/model/PmSchema.scala
changeset 85 3ef84ec492fa
parent 83 f7553032b302
child 86 2616b8424462
--- a/src/main/scala/fis/pm/model/PmSchema.scala	Fri Apr 27 16:18:28 2012 +0200
+++ b/src/main/scala/fis/pm/model/PmSchema.scala	Tue May 01 21:40:36 2012 +0200
@@ -63,6 +63,15 @@
   val commentTask = oneToManyRelation(taskT, commentT).
     via((t, c) => (t.id === c.task))
   commentTask.foreignKeyDeclaration.constrainReference(onDelete cascade)
+
+  /* project - company */
+  val projectCompany = manyToManyRelation(projectT, companyT).
+    via[ProjectCompany]((p, c, pc) => (
+      p.id === pc.project,
+      c.id === pc.company
+    ))
+  projectCompany.leftForeignKeyDeclaration.constrainReference(onDelete cascade)
+  projectCompany.rightForeignKeyDeclaration.constrainReference(onDelete cascade)
 }
 
 object PmSchema extends PmSchema
@@ -77,4 +86,20 @@
     from(PmSchema.commentTask.left(t))(c => select(c) orderBy(c.createdAt asc))
 }
 
+object CompanyProjects {
+  import fis.crm.model.Company
+  def apply(c: Company): Iterable[Project] =
+    from(PmSchema.projectCompany.right(c))(p => select(p) orderBy(p.name asc))
+}
+
+/* Many-to-many relations */
+
+import org.squeryl.KeyedEntity
+import org.squeryl.dsl._
+
+case class ProjectCompany(val project: Long, val company: Long)
+  extends KeyedEntity[CompositeKey2[Long, Long]] {
+  def id = CompositeKey2(project, company)
+}
+
 // vim: set ts=2 sw=2 et: