# HG changeset patch # User Tomas Zeman # Date 1334922423 -7200 # Node ID 3ce7ecb6bc708be0286765263c14bac19a0f8c8f # Parent 4bcb7deedd3f3223af6e6d388d3c580a12e26553 Contact entities diff -r 4bcb7deedd3f -r 3ce7ecb6bc70 src/main/scala/fis/aaa/model/AaaSchema.scala --- a/src/main/scala/fis/aaa/model/AaaSchema.scala Fri Apr 20 09:45:51 2012 +0200 +++ b/src/main/scala/fis/aaa/model/AaaSchema.scala Fri Apr 20 13:47:03 2012 +0200 @@ -16,7 +16,7 @@ package fis.aaa.model import fis.base.model.BaseSchema -import fis.crm.model.{Contact, CrmSchema, EntityContact} +import fis.crm.model.{Contact, ContactEntities, CrmSchema, EntityContact} import net.liftweb.squerylrecord.RecordTypeMode._ /** @@ -47,7 +47,7 @@ )) userContacts.leftForeignKeyDeclaration.constrainReference(onDelete cascade) userContacts.rightForeignKeyDeclaration.constrainReference(onDelete cascade) - + ContactEntities.register(userContacts) } object AaaSchema extends AaaSchema diff -r 4bcb7deedd3f -r 3ce7ecb6bc70 src/main/scala/fis/crm/model/CrmSchema.scala --- a/src/main/scala/fis/crm/model/CrmSchema.scala Fri Apr 20 09:45:51 2012 +0200 +++ b/src/main/scala/fis/crm/model/CrmSchema.scala Fri Apr 20 13:47:03 2012 +0200 @@ -15,7 +15,7 @@ */ package fis.crm.model -import fis.base.model.BaseSchema +import fis.base.model.{BaseSchema, Entity} import fis.geo.model.GeoSchema import net.liftweb.squerylrecord.RecordTypeMode._ @@ -62,6 +62,7 @@ )) companyContacts.leftForeignKeyDeclaration.constrainReference(onDelete cascade) companyContacts.rightForeignKeyDeclaration.constrainReference(onDelete cascade) + ContactEntities.register(companyContacts) def allCompanies: Iterable[Company] = from(companyT) (c => select(c) orderBy(c.name asc)) @@ -80,6 +81,21 @@ import org.squeryl.KeyedEntity import org.squeryl.dsl._ +object ContactEntities { + type T = ManyToManyRelation[Entity[_], Contact, _] + + import java.util.concurrent.{ConcurrentHashMap => CHash} + import scala.collection.JavaConversions._ + private val rels = new CHash[String, T] + + def register[L <: Entity[_], A <: KeyedEntity[_]]( + rel: ManyToManyRelation[L, Contact, A])(implicit man:Manifest[L]) { + rels.put(man.toString, rel.asInstanceOf[T]) + } + + def apply(c: Contact): Iterable[Entity[_]] = rels.values flatMap { _.right(c) } +} + trait EntityContact[T] extends KeyedEntity[CompositeKey2[Long, Long]] { def entity: Long def contact: Long diff -r 4bcb7deedd3f -r 3ce7ecb6bc70 src/main/scala/fis/crm/ui/ContactSnippet.scala --- a/src/main/scala/fis/crm/ui/ContactSnippet.scala Fri Apr 20 09:45:51 2012 +0200 +++ b/src/main/scala/fis/crm/ui/ContactSnippet.scala Fri Apr 20 13:47:03 2012 +0200 @@ -15,10 +15,12 @@ */ package fis.crm.ui +import fis.base.model._ import fis.base.ui._ import fis.crm.model._ import net.liftweb.common._ import net.liftweb.http._ +import net.liftweb.record.Record import net.liftweb.sitemap._ import net.liftweb.sitemap.Loc._ import net.liftweb.util._ @@ -40,7 +42,8 @@ private val viewPre = Menu.param[Contact]("contact.view", l10n("Contact"), parse, encode) / prefix / * >> Title(c => i18n("Contact %s", c.linkName)) >> - locTpl("entity/view") >> Snippet("panel", panel) >> Hidden + locTpl("contact/view") >> Snippet("panel", panel) >> + Snippet("entities", entities) >> Hidden private val editPre = Menu.param[Contact]("contact.edit", l10n("Edit"), parse, encode) / prefix / * / EDIT >> @@ -68,6 +71,19 @@ private def panel: CssTr = "*" #> viewLoc.currentValue.map { ContactPanel(_) } + private def entities: CssTr = "*" #> viewLoc.currentValue.map { c => + FieldTable[EntityWrapper[Contact]](_.fields, EntityWrapper(Contact.createRecord))( + ContactEntities(c) map { e => EntityWrapper(e.asInstanceOf[Entity[Contact]]) }) + } + + private case class EntityWrapper[T <: Record[T]](e: Entity[T]) { + val note = e.note + val linkField = EntityLink(e)(scala.reflect.Manifest.classType(e.getClass)) + val typeField = new ReadOnlyField("type", l10n("Entity type"), + i18n(e.getClass.getSimpleName), Empty) + val fields = linkField.toSeq :+ typeField :+ note + } + object url { def view: Contact => Box[String] = (viewLoc.calcHref _) andThen (Box !! _) } diff -r 4bcb7deedd3f -r 3ce7ecb6bc70 src/main/webapp/contact/view.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/webapp/contact/view.html Fri Apr 20 13:47:03 2012 +0200 @@ -0,0 +1,24 @@ + + + + + Entity View + + +
+
+
+ +
+
+
+
+

+ +
+
+
+ + + + diff -r 4bcb7deedd3f -r 3ce7ecb6bc70 src/main/webapp/templates-hidden/_resources.html --- a/src/main/webapp/templates-hidden/_resources.html Fri Apr 20 09:45:51 2012 +0200 +++ b/src/main/webapp/templates-hidden/_resources.html Fri Apr 20 13:47:03 2012 +0200 @@ -10,6 +10,7 @@ Name @@ -61,6 +62,7 @@ Work phone Private phone Fax + Assigned objects @@ -58,6 +59,7 @@ Pracovní tel.č. Soukromé tel.č. Fax + Přiřazeno k @@ -117,6 +119,7 @@ + Společnost Společnosti Vytvořit společnost Společnost %s