Add project and partner name to project selector/filter
authorelgekko <vasary@elgekko.net>
Tue, 23 May 2023 09:00:33 +0000 (11:00 +0200)
committerelgekko <vasary@elgekko.net>
Tue, 23 May 2023 09:00:33 +0000 (11:00 +0200)
lis-ui/src/main/java/hu/user/lis/ui/converter/ProjectToInfoConverter.java [new file with mode: 0644]
lis-ui/src/main/java/hu/user/lis/ui/data/ProjectSelectorDataModel.java
lis-ui/src/main/java/hu/user/lis/ui/editor/ServiceRecordEditorModel.java
lis-ui/src/main/java/hu/user/lis/ui/view/ServiceRecordsViewModel.java
lis-ui/src/main/resources/web/project-filter.zul
lis-ui/src/main/resources/web/project-selector.zul
lis-ui/src/main/resources/web/service-record-editor.zul
lis-ui/src/main/resources/web/service-records.zul

diff --git a/lis-ui/src/main/java/hu/user/lis/ui/converter/ProjectToInfoConverter.java b/lis-ui/src/main/java/hu/user/lis/ui/converter/ProjectToInfoConverter.java
new file mode 100644 (file)
index 0000000..51cf2c9
--- /dev/null
@@ -0,0 +1,19 @@
+package hu.user.lis.ui.converter;
+
+import hu.user.lis.db.Project;
+import org.zkoss.bind.BindContext;
+import org.zkoss.bind.Converter;
+import org.zkoss.zul.Bandbox;
+
+public class ProjectToInfoConverter implements Converter<String, Project, Bandbox> {
+
+    @Override
+    public String coerceToUi(Project project, Bandbox bandbox, BindContext bindContext) {
+        return project == null ? null : String.format("%s | %s | %s", project.getHumanId(), project.getName(), project.getPartner().getName());
+    }
+
+    @Override
+    public Project coerceToBean(String s, Bandbox bandbox, BindContext bindContext) {
+        return null;
+    }
+}
\ No newline at end of file
index 807334d835c8887baee63bddda769c3f22669913..48c4786d941cbaa251f1befb7de613be8a5a6cd5 100644 (file)
@@ -23,12 +23,25 @@ public class ProjectSelectorDataModel extends CachedDataModel<Project> {
     @Autowired
     ProjectService projectService;
     private String partialName;
+    private String partialPartnerName;
+    private String partialHumanId;
 
     private boolean filter(Project project) {
-        if (StringUtils.isBlank(partialName)) {
+        if (StringUtils.isBlank(partialHumanId) && StringUtils.isBlank(partialName) && StringUtils.isBlank(partialPartnerName)) {
             return true;
-        } else {
-            if (project.getHumanId().toLowerCase().startsWith(partialName.toLowerCase())) {
+        }
+        if (StringUtils.isNotBlank(partialHumanId)) {
+            if (project.getHumanId().toLowerCase().contains(partialHumanId.toLowerCase())) {
+                return true;
+            }
+        }
+        if (StringUtils.isNotBlank(partialName)) {
+            if (project.getName().toLowerCase().contains(partialName.toLowerCase())) {
+                return true;
+            }
+        }
+        if (StringUtils.isNotBlank(partialPartnerName)) {
+            if (project.getPartner().getName().toLowerCase().contains(partialPartnerName.toLowerCase())) {
                 return true;
             }
         }
@@ -54,10 +67,21 @@ public class ProjectSelectorDataModel extends CachedDataModel<Project> {
         return result;
     }
 
-    public void search(String partialName) {
-        log.info("Searching project using filter {}", partialName);
+    public void search(String partialName, String partialPartnerName, String partialHumanId) {
+        log.info("Searching projects using filter {} {} {}", partialHumanId, partialName, partialHumanId);
+        this.partialPartnerName = partialPartnerName;
+        this.partialHumanId = partialHumanId;
         this.partialName = partialName;
         super.reset();
         BindUtils.postNotifyChange(null, null, this, "*");
     }
+
+    public void getLimited() {
+        log.info("Searching projects using limit {}", SEARCH_LIMIT);
+        this.partialPartnerName = null;
+        this.partialHumanId = null;
+        this.partialName = null;
+        super.reset();
+        BindUtils.postNotifyChange(null, null, this, "*");
+    }
 }
index 294b83f37cea496bdba3d34e2fb60c164bc82cb7..3e9bdb750f3a6df435c761eb9931267679723e9a 100644 (file)
@@ -50,14 +50,14 @@ public class ServiceRecordEditorModel extends AbstractValidator {
     public void onProjectBandChanging(@ContextParam(ContextType.BIND_CONTEXT) BindContext ctx) {
         InputEvent event = (InputEvent) ctx.getTriggerEvent();
         log.info("onProjectBandChanging: {}", event.getValue());
-        projectSelectorDataModel.search(event.getValue());
+        projectSelectorDataModel.search(event.getValue(), null, null);
     }
 
     @Command
     public void onProjectBandOpen(@ContextParam(ContextType.BIND_CONTEXT) BindContext ctx) {
         OpenEvent event = (OpenEvent) ctx.getTriggerEvent();
         log.info("onProjectBandOpen: {}", event.isOpen());
-        projectSelectorDataModel.search(null);
+        projectSelectorDataModel.getLimited();
     }
 
     @Command
index 06cefa5398b45bbb568a3e437f827173f1266a09..10f93037136b3ddb054221c56998b24639c50a12 100644 (file)
@@ -64,14 +64,14 @@ public class ServiceRecordsViewModel implements EventListener {
     public void onProjectFilterBandChanging(@ContextParam(ContextType.BIND_CONTEXT) BindContext ctx) {
         InputEvent event = (InputEvent) ctx.getTriggerEvent();
         log.info("onProjectFilterBandChanging: {}", event.getValue());
-        projectSelectorDataModel.search(event.getValue());
+        projectSelectorDataModel.search(event.getValue(), null, null);
     }
 
     @Command
     public void onProjectFilterBandOpen(@ContextParam(ContextType.BIND_CONTEXT) BindContext ctx) {
         OpenEvent event = (OpenEvent) ctx.getTriggerEvent();
         log.info("onProjectFilterBandOpen: {}", event.isOpen());
-        projectSelectorDataModel.search(null);
+        projectSelectorDataModel.getLimited();
     }
 
     @Command
index ae38c7261448a6b561c08246c957bf52dafec0b5..7be201b5d77da231b67032f4eb68a93fe87f11b5 100644 (file)
@@ -1,8 +1,8 @@
 <zk xmlns:c="client">
     <bandbox id="projectFilterBandBox" autodrop="true" iconSclass="z-icon-sort-down"
-             value="@load(vm.filterProject) @converter('hu.user.lis.ui.converter.ProjectToNameConverter')"
+             value="@load(vm.filterProject) @converter('hu.user.lis.ui.converter.ProjectToInfoConverter')"
              onChanging="@command('onProjectFilterBandChanging')" onOpen="@command('onProjectFilterBandOpen')"
-             forward="onOK=submit.onClick, onCancel=cancel.onClick">
+             forward="onOK=submit.onClick, onCancel=cancel.onClick" width="400px">
         <attribute c:name="_doKeyDown">
             <![CDATA[
                             function (evt) {
                      onClick="projectFilterBandBox.close()"
                      onDoubleClick="projectFilterBandBox.close()">
                 <listhead visible="false">
-                    <listheader label="name" vflex="max"/>
+                    <listheader label="Azonosító" vflex="max"/>
+                    <listheader label="Név" vflex="max"/>
+                    <listheader label="Partner név" vflex="max"/>
                 </listhead>
                 <template name="model">
                     <listitem>
                         <listcell label="@load(each.humanId)"/>
+                        <listcell label="@load(each.name)"/>
+                        <listcell label="@load(each.partner.name)"/>
                     </listitem>
                 </template>
             </listbox>
index 171f46e27b5e4a2fd3cc9e1f82c3e84bba76745a..24d1cc9b47243afc65e75573bc7db415599fa817 100644 (file)
@@ -1,7 +1,7 @@
 <zk xmlns:c="client">
-    <hlayout hflex="true">
-        <bandbox id="projectBandBox" autodrop="true" iconSclass="z-icon-sort-down"
-                 value="@load(vm.formDocument.project) @converter('hu.user.lis.ui.converter.ProjectToNameConverter')"
+    <hlayout hflex="min">
+        <bandbox id="projectBandBox" autodrop="true" iconSclass="z-icon-sort-down" hflex="true"
+                 value="@load(vm.formDocument.project) @converter('hu.user.lis.ui.converter.ProjectToInfoConverter')"
                  onChanging="@command('onProjectBandChanging')" onOpen="@command('onProjectBandOpen')"
                  forward="onOK=submit.onClick, onCancel=cancel.onClick">
             <attribute c:name="_doKeyDown">
                             }
                         ]]>
             </attribute>
-            <bandpopup>
-                <listbox id="projectList" height="250px" width="450px"
+            <bandpopup width="500px">
+                <listbox id="projectList" height="250px" hflex="true"
                          model="@bind(vm.projectSelectorDataModel)"
                          selectedItem="@bind(vm.formDocument.project) @validator(vm)"
                          onClick="projectBandBox.close()"
                          onDoubleClick="projectBandBox.close()">
                     <listhead visible="false">
-                        <listheader label="name" vflex="max"/>
+                        <listheader label="Azonosító"/>
+                        <listheader label="Név"/>
+                        <listheader label="Partner név"/>
                     </listhead>
                     <template name="model">
                         <listitem>
                             <listcell label="@load(each.humanId)"/>
+                            <listcell label="@load(each.name)"/>
+                            <listcell label="@load(each.partner.name)"/>
                         </listitem>
                     </template>
                 </listbox>
index a51c2e7a7034e1b76c8c918f02a7240a0dc53c1a..7cc8c8e7aab32aeba34328984eae4e4003c12dac 100644 (file)
@@ -1,7 +1,7 @@
 <?component name="associate-selector" inline="true" macroURI="~./associate-selector.zul"?>
 <?component name="project-selector" inline="true" macroURI="~./project-selector.zul"?>
 <zk>
-    <window id="serviceRecordPopup" width="50%" height="400px" closable="true"
+    <window id="serviceRecordPopup" width="50%" height="450px" closable="true"
             viewModel="@id('vm') @init('hu.user.lis.ui.editor.ServiceRecordEditorModel')">
         <caption label="Munkalap szerkesztés"/>
         <borderlayout>
                         <tab label="Munkalap"/>
                     </tabs>
                     <tabpanels>
-                        <tabpanel>
-                            <vlayout>
+                        <tabpanel hflex="true">
+                            <vlayout hflex="true">
+                                <vlayout hflex="true">
+                                    <label value="Projekt"/>
+                                    <project-selector hflex="true"/>
+                                </vlayout>
                                 <hlayout>
-                                    <vlayout>
-                                        <label value="Projekt"/>
-                                        <project-selector/>
-                                    </vlayout>
                                     <vlayout>
                                         <label value="Munkatárs"/>
                                         <associate-selector/>
index 65038cb099bc9a74560231a404fba9b97c716807..84312000fd7a832dc526f42caf0bd92b3dd1ff1c 100644 (file)
@@ -25,7 +25,9 @@
                          autopaging="true" pagingPosition="top" onSelect="@command('onListSelection')"
                          onDoubleClick="@command('onEdit')">
                     <listhead sizable="true">
-                        <listheader label="Projekt" align="left"/>
+                        <listheader label="Projekt azonosító" align="left"/>
+                        <listheader label="Projekt név" align="left"/>
+                        <listheader label="Partner név" align="left"/>
                         <listheader label="Munkatárs" align="left"/>
                         <listheader label="Munkanap" align="left"/>
                         <listheader label="Leírás" align="left"/>
@@ -35,6 +37,8 @@
                     <template name="model">
                         <listitem>
                             <listcell label="@load(each.project.humanId)"/>
+                            <listcell label="@load(each.project.name)"/>
+                            <listcell label="@load(each.project.partner.name)"/>
                             <listcell label="@load(each.associate.name)"/>
                             <listcell
                                     label="@load(each.workDay) @converter('hu.user.lis.ui.converter.DateToStringConverter')"/>