Invoice filter search date type
authorVásáry Dániel <vasary@elgekko.net>
Sun, 26 Nov 2023 20:44:52 +0000 (21:44 +0100)
committerVásáry Dániel <vasary@elgekko.net>
Sun, 26 Nov 2023 20:44:52 +0000 (21:44 +0100)
lis-db/src/main/java/hu/user/lis/db/repository/InvoiceRepositorySearchImpl.java
lis-db/src/main/java/hu/user/lis/db/repository/filter/DateType.java [new file with mode: 0644]
lis-db/src/main/java/hu/user/lis/db/repository/filter/InvoiceFilter.java
lis-ui/src/main/java/hu/user/lis/ui/converter/DateTypeConverter.java [new file with mode: 0644]
lis-ui/src/main/java/hu/user/lis/ui/view/InvoicesViewModel.java
lis-ui/src/main/resources/web/invoices.zul
lis-ui/src/main/resources/web/widget/entity-selector.zul

index 1c4be4faa26f57b1010ba008edbf82c995d4322e..f9eb249824e28fa966557a6a7a29bfc436e369bd 100644 (file)
@@ -13,6 +13,7 @@ import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 import java.util.Objects;
 
@@ -46,15 +47,20 @@ public class InvoiceRepositorySearchImpl implements InvoiceRepositorySearch {
             predicates.add(cb.isFalse(root.get("paid")));
         }
 
-        if (Objects.nonNull(filter.getPaymentDeadLineFrom())) {
-            if (Objects.nonNull(filter.getPaymentDeadLineTo())) {
-                predicates.add(cb.between(root.get("paymentDeadline"), filter.getPaymentDeadLineFrom(), filter.getPaymentDeadLineTo()));
+        if (Objects.nonNull(filter.getDateType())) {
+            String field = filter.getDateType().getField();
+            Date dateFrom = filter.getPaymentDeadLineFrom();
+            Date dateTo = filter.getPaymentDeadLineTo();
+            if (Objects.nonNull(dateFrom)) {
+                if (Objects.nonNull(dateTo)) {
+                    predicates.add(cb.between(root.get(field), dateFrom, dateTo));
+                } else {
+                    predicates.add(cb.greaterThanOrEqualTo(root.get(field), dateFrom));
+                }
             } else {
-                predicates.add(cb.greaterThanOrEqualTo(root.get("paymentDeadline"), filter.getPaymentDeadLineFrom()));
-            }
-        } else {
-            if (Objects.nonNull(filter.getPaymentDeadLineTo())) {
-                predicates.add(cb.lessThanOrEqualTo(root.get("paymentDeadline"), filter.getPaymentDeadLineTo()));
+                if (Objects.nonNull(dateTo)) {
+                    predicates.add(cb.lessThanOrEqualTo(root.get(field), dateTo));
+                }
             }
         }
 
diff --git a/lis-db/src/main/java/hu/user/lis/db/repository/filter/DateType.java b/lis-db/src/main/java/hu/user/lis/db/repository/filter/DateType.java
new file mode 100644 (file)
index 0000000..c7c4f40
--- /dev/null
@@ -0,0 +1,16 @@
+package hu.user.lis.db.repository.filter;
+
+import lombok.Getter;
+
+@Getter
+public enum DateType {
+    PAYMENT_DEADLINE("Fizetési határidő", "paymentDeadline"), CREATE_DATE("Kiállítás dátuma", "createDate"), COMPLETION_DATE("Teljesítés dátuma", "completionDate");
+
+    private final String display;
+    private final String field;
+
+    DateType(String display, String field) {
+        this.display = display;
+        this.field = field;
+    }
+}
index 09c27321cc253814ac27a78da2ab862892b50997..14914d73f21ba5cef5d9193b7b082019d1884ccc 100644 (file)
@@ -29,4 +29,6 @@ public class InvoiceFilter extends PageableFilter {
 
     private Date paymentDeadLineTo;
 
+    private DateType dateType;
+
 }
diff --git a/lis-ui/src/main/java/hu/user/lis/ui/converter/DateTypeConverter.java b/lis-ui/src/main/java/hu/user/lis/ui/converter/DateTypeConverter.java
new file mode 100644 (file)
index 0000000..0d0075b
--- /dev/null
@@ -0,0 +1,36 @@
+package hu.user.lis.ui.converter;
+
+import hu.user.lis.db.repository.filter.DateType;
+import org.springframework.stereotype.Component;
+import org.zkoss.bind.BindContext;
+import org.zkoss.bind.Converter;
+import org.zkoss.zul.ListModel;
+import org.zkoss.zul.Selectbox;
+import org.zkoss.zul.ext.Selectable;
+
+import java.util.Objects;
+
+@Component
+public class DateTypeConverter implements Converter<Object, DateType, Selectbox> {
+    @Override
+    public Object coerceToUi(DateType dateType, Selectbox box, BindContext bindContext) {
+        if (Objects.isNull(dateType)) {
+            return IGNORED_VALUE;
+        }
+        final ListModel<?> model = box.getModel();
+        ((Selectable<Object>) model).clearSelection();
+        for (int i = 0; i < model.getSize(); i++) {
+            DateType status = (DateType) model.getElementAt(i);
+            if (status.equals(dateType)) {
+                return i;
+            }
+        }
+        return IGNORED_VALUE;
+    }
+
+    @Override
+    public DateType coerceToBean(Object order, Selectbox bandbox, BindContext bindContext) {
+        ListModel<DateType> model = bandbox.getModel();
+        return model.getElementAt((int) order);
+    }
+}
\ No newline at end of file
index 1b4a0d66d3d3bead0a5c068d6a11cb70e46f7ac1..816d6f0b029490852b1490ae83672874612aa093 100644 (file)
@@ -2,6 +2,7 @@ package hu.user.lis.ui.view;
 
 import com.google.common.collect.ImmutableMap;
 import hu.user.lis.db.*;
+import hu.user.lis.db.repository.filter.DateType;
 import hu.user.lis.db.repository.filter.InvoiceFilter;
 import hu.user.lis.ui.Constants;
 import hu.user.lis.ui.data.InvoiceDataModel;
@@ -43,12 +44,17 @@ public class InvoicesViewModel extends EntityViewModel<Invoice> implements Event
     @WireVariable
     private InvoiceDataModel invoiceDataModel;
 
+//    @Getter
+//    @WireVariable
+//    private DateTypeConverter dateTypeConverter;
+
     @Init
     @Override
     public void init() {
         super.init();
         invoiceFilter = InvoiceFilter.builder()
                 .incoming(true)
+                .dateType(DateType.PAYMENT_DEADLINE)
                 .status(InvoiceStatus.ACTIVE)
                 .build();
         eventBus.register(this);
index 0eb16291380b4b2f55a088ae7d5650af5f242eac..006990f8f72f74273d1a42bf256aca1c578727a9 100644 (file)
@@ -1,5 +1,9 @@
 <?component name="entity-selector" inline="true" class="hu.user.lis.ui.editor.widget.EntitySelector"?>
 <zk>
+    <zscript>
+        import hu.user.lis.db.repository.filter.DateType;
+        ListModelList dateTypes = new ListModelList(DateType.values());
+    </zscript>
     <window vflex="true" viewModel="@id('vm') @init('hu.user.lis.ui.view.InvoicesViewModel')">
         <caption label="Számlák"/>
         <borderlayout>
                         <label value="Partner"/>
                         <separator orient="vertical"/>
                         <entity-selector entity="Partner" style="display: inline-block;" width="300px"/>
+
                         <space bar="true"/>
+
                         <label value="Projekt"/>
                         <separator orient="vertical"/>
                         <entity-selector entity="Project" style="display: inline-block;" width="300px"/>
+
                         <space bar="true"/>
+
                         <toolbarbutton mode="toggle" iconSclass="z-icon-external-link" label="Költség"
                                        checked="@load(vm.invoiceFilter.incoming)"
                                        onClick="@command('setIncoming', incoming=true)"/>
                         <toolbarbutton mode="toggle" iconSclass="z-icon-sign-in" label="Bevétel"
                                        checked="@load(!vm.invoiceFilter.incoming)"
                                        onClick="@command('setIncoming', incoming=false)"/>
+
                         <space bar="true"/>
-                        <!--                    <separator orient="vertical"/>-->
-                        <label value="Fizetési határidő"/>
+                        <!--                        <selectbox model="${dateTypes}"-->
+                        <!--                                   width="100%"-->
+                        <!--                                   selectedIndex="@bind(vm.invoiceFilter.dateType) @converter(vm.dateTypeConverter)">-->
+                        <!--                            <template name="model">-->
+                        <!--                                ${each.display}-->
+                        <!--                            </template>-->
+                        <!--                        </selectbox>-->
+
+                        <combobox instant="true" model="${dateTypes}" selectedItem="@bind(vm.invoiceFilter.dateType)"
+                                  readonly="true">
+                            <template name="model">
+                                <comboitem label="${each.display}"/>
+                            </template>
+                        </combobox>
                         <separator orient="vertical"/>
                         <datebox instant="true" format="yyyy. MM. dd."
                                  value="@bind(vm.invoiceFilter.paymentDeadLineFrom)"/>
@@ -36,6 +57,7 @@
                                  value="@bind(vm.invoiceFilter.paymentDeadLineTo)"/>
 
                         <space bar="true"/>
+
                         <toolbarbutton mode="toggle" iconSclass="z-icon-credit-card" label="Fizetve"
                                        checked="@bind(vm.invoiceFilter.paid)"/>
 
index c317fe8f326abee72e42148e78394eab1d755ff1..666405e896d45156cce2627c45bc8d9a8f103f40 100644 (file)
@@ -10,6 +10,7 @@
                                 var keyCode = evt.keyCode;
                                 console.log(keyCode, zk.$("$entityBandBox").getValue());
                                 if (keyCode == 13){
+                                    //zk.$.notify("Hello World");
                                     zk.$("$entityBandBox").close();
                                     zk.$("$entityBandBox").focus();
                                     return;