--- 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))
--- /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 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta content="text/html; charset=UTF-8" http-equiv="content-type" />
+ <title>Entity View</title>
+ </head>
+ <body class="lift:content_id=main">
+ <div id="main" class="lift:surround?with=default;at=content">
+ <head_merge>
+ <script type="text/javascript">
+ $(document).ready(function() {
+ $('.company-field').toggle($('#create_new_company').is(':checked'));
+ $('.company-select').toggle(!$('#create_new_company').is(':checked'));
+ $('#create_new_company').bind('change', function() {
+ $('.company-field').toggle($(this).is(':checked'));
+ $('.company-select').toggle(!$(this).is(':checked'));
+ });
+ });
+ </script>
+ </head_merge>
+
+ <div class="row">
+ <div class="span12">
+ <span class="lift:form"></span>
+ </div>
+ </div> <!-- /row -->
+ </div>
+ </body>
+</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.
-->
<res name="Projects" lang="en" default="true">Projects</res>
<!-- project fields -->
--- 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 @@
<res name="Edit locations" lang="cs">Upravit lokality</res>
<res name="Edit locations of project %s" lang="cs">Upravit lokality pro projekt %s</res>
<res name="Locations saved." lang="cs">Lokality uloženy.</res>
+ <res name="Create new company?" lang="cs">Vytvořit novou společnost?</res>
+ <res name="Create new company instead of choosing an existing one." lang="cs">Vytvoří se nová společnost místo výběru z existujících.</res>
<!-- project fields -->
<res name="project.name" lang="cs">Název</res>
<res name="project.note" lang="cs">Poznámka</res>