# HG changeset patch # User Tomas Zeman # Date 1338903645 -7200 # Node ID 26e9d0e4a619057ac18fe74bcbd57ade3ecb3b9d # Parent 83d4c4990086cb37de9a5292c743db2ab5bed554 a705d9cd29fa9bec Optional company creation on project creation diff -r 83d4c4990086 -r 26e9d0e4a619 src/main/scala/fis/pm/ui/ProjectSnippet.scala --- a/src/main/scala/fis/pm/ui/ProjectSnippet.scala Tue Jun 05 15:40:45 2012 +0200 +++ b/src/main/scala/fis/pm/ui/ProjectSnippet.scala Tue Jun 05 15:40:45 2012 +0200 @@ -45,7 +45,7 @@ private val createPre = Menu("project.create", l10n("Create")) / prefix / ADD >> Title(_ => i18n("Create project")) >> IfLoggedIn.test >> - locTpl("entity/form") >> Snippet("form", form) >> Hidden + locTpl("project/form") >> Snippet("form", form) >> Hidden private val viewPre = Menu.param[Project]("project.view", l10n("Project"), parse, encode) / prefix / * >> Title(p => i18n("Project %s", p.linkName)) >> @@ -56,7 +56,7 @@ private val editPre = Menu.param[Project]("project.edit", l10n("Edit"), parse, encode) / prefix / * / EDIT >> Title(p => i18n("Edit project %s", p.linkName)) >> IfLoggedIn.testVal >> - locTpl("entity/form") >> Snippet("form", form) >> Hidden + locTpl("project/form") >> Snippet("form", form) >> Hidden private val deletePre = Menu.param[Project]("project.delete", l10n("Delete"), parse, encode) / prefix / * / DELETE >> @@ -152,16 +152,41 @@ SaveButton { private object project extends ScreenVar[Project](Project.createRecord) - private object company extends ScreenVar[CompanyField]( + private object company extends ScreenVar[ProjectCompanyField]( ProjectCompanyField(project)) + private object companyRec extends ScreenVar[Company](Company.createRecord) + private object address extends ScreenVar[Address](Address.createRecord) + + private val createNewCompany = builder(l10n("Create new company?"), false, + FormFieldId("create_new_company")). + help(i18n("Create new company instead of choosing an existing one.")).make private def formFields(p: Project) = { - List(p.name, p.identS, p.phaseFld, p.stateFld, p.deadline, p.responsible, - p.productLine, company.get, p.locationA, p.locationB, p.description, - p.note) + val pFlds = List[FieldContainer](p.name, p.identS, p.phaseFld, p.stateFld, + p.deadline, p.responsible, p.productLine, p.locationA, p.locationB, + p.description, p.note) + val companySelect = field(company.get, FormFieldId("company_select")) + p.id == p.idField.defaultValue match { + case false => pFlds :+ companySelect + case true => + val c = companyRec.get + val cFlds = field(c.name, FormFieldId("comp_name")) :: + field(c.ico, FormFieldId("comp_ico")) :: + field(c.dic, FormFieldId("comp_dic")) :: + field(ReadOnlyField.labelOnly(c.address), FormFieldId("comp_addr")) :: + (address.formFields map { f => field(f, + FormFieldId(f.uniqueFieldId.map("comp_" + _) openOr nextFuncName)) }) + (pFlds :+ createNewCompany :+ companySelect) ::: cFlds + } } - override def screenFields: List[BaseField] = formFields(project) + override def screenFields = formFields(project) flatMap(_.allFields) + + protected override def decorateLine(f: ScreenFieldInfo): CssTr = + (f.field.uniqueFieldId.filter { _.startsWith("comp_") } map { _ => + ".control-group [class+]" #> "company-field" }) or + (f.field.uniqueFieldId.filter { _.startsWith("company_select") } map { _ => + ".control-group [class+]" #> "company-select" }) openOr PassThru override def localSetup() { cur.foreach { p => project(p); company(ProjectCompanyField(p)) } @@ -170,12 +195,21 @@ def finish() { save(project) foreach { p => val fk = PmSchema.projectCompany.left(p) - company.vend match { - case Full(c) if fk.exists(_.id == c.id) => // empty, no update - case Full(c) => - fk.dissociateAll - fk.associate(c) - case _ => fk.dissociateAll + createNewCompany.get match { + case false => company.vend match { + case Full(c) if fk.exists(_.id == c.id) => // empty, no update + case Full(c) => + fk.dissociateAll + fk.associate(c) + case _ => fk.dissociateAll + } + case true => AddressCrud.save(address).foreach { a => + CompanyCrud.save(companyRec.address(a.id)).foreach { c => + S notice l10n("Company %s saved.", c.linkName) + fk.dissociateAll + fk.associate(c) + } + } } S notice l10n("Project %s saved.", p.linkName) S.redirectTo(viewLoc.calcHref(p)) diff -r 83d4c4990086 -r 26e9d0e4a619 src/main/webapp/project/form.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/webapp/project/form.html Tue Jun 05 15:40:45 2012 +0200 @@ -0,0 +1,31 @@ + + + + + Entity View + + +
+ + + + +
+
+ +
+
+
+ + + + diff -r 83d4c4990086 -r 26e9d0e4a619 src/main/webapp/templates-hidden/_resources.html --- a/src/main/webapp/templates-hidden/_resources.html Tue Jun 05 15:40:45 2012 +0200 +++ b/src/main/webapp/templates-hidden/_resources.html Tue Jun 05 15:40:45 2012 +0200 @@ -207,6 +207,8 @@ Edit locations Edit locations of project %s Locations saved. + Create new company? + Create new company instead of choosing an existing one. --> Projects diff -r 83d4c4990086 -r 26e9d0e4a619 src/main/webapp/templates-hidden/_resources_cs.html --- a/src/main/webapp/templates-hidden/_resources_cs.html Tue Jun 05 15:40:45 2012 +0200 +++ b/src/main/webapp/templates-hidden/_resources_cs.html Tue Jun 05 15:40:45 2012 +0200 @@ -197,6 +197,8 @@ Upravit lokality Upravit lokality pro projekt %s Lokality uloženy. + Vytvořit novou společnost? + Vytvoří se nová společnost místo výběru z existujících. Název Poznámka