a705d9cd29fa9bec Optional company creation on project creation
authorTomas Zeman <tzeman@volny.cz>
Tue, 05 Jun 2012 15:40:45 +0200
changeset 107 26e9d0e4a619
parent 106 83d4c4990086
child 108 ef4e3e0ef83f
a705d9cd29fa9bec Optional company creation on project creation
src/main/scala/fis/pm/ui/ProjectSnippet.scala
src/main/webapp/project/form.html
src/main/webapp/templates-hidden/_resources.html
src/main/webapp/templates-hidden/_resources_cs.html
--- 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>