Clipboard copy of non digit on invoice from handled
authorVásáry Dániel <vasary@elgekko.net>
Tue, 16 Jan 2024 14:31:33 +0000 (15:31 +0100)
committerVásáry Dániel <vasary@elgekko.net>
Tue, 16 Jan 2024 14:31:33 +0000 (15:31 +0100)
KB.md
lis-app/src/main/resources/logback-dev.xml
lis-service/src/main/java/hu/user/lis/service/dataimport/PartnerXlsProcessor.java
lis-service/src/main/java/hu/user/lis/service/dataimport/ProjectXlsProcessor.java
lis-service/src/main/java/hu/user/lis/service/dataimport/XlsProcessor.java
lis-ui/src/main/resources/metainfo/zk/zk.xml
lis-ui/src/main/resources/web/form/invoice-form.zul
lis-ui/src/main/resources/web/partners.zul
lis-ui/src/main/resources/web/static/js/clipboard.utils.js [new file with mode: 0644]

diff --git a/KB.md b/KB.md
index 1ebf57ffcc0156eafa8182af1a33f86a3d8a7017..26390f8fd048ff24bb47d7532fc63baf30a5ee6d 100644 (file)
--- a/KB.md
+++ b/KB.md
@@ -46,6 +46,9 @@ https://www.zkoss.org/wiki/ZK_Developer%27s_Reference/Testing/Testing_Tips
 https://www.zkoss.org/wiki/Small_Talks/2013/October/ZK_Testing_with_Sahi
 https://zkfiddle.org/sample/3ltrsms/9-Grid-style-7-1
 https://zkfiddle.org/sample/3bmc52p/1-detect-dark-mode
+#client scripting & binding
+https://www.zkoss.org/wiki/ZUML_Reference/ZUML/Namespaces/Client_Attribute
+https://www.zkoss.org/wiki/ZUML_Reference/ZUML/Namespaces
 
 ##### Spring ZK
 
index 6cc83afe21f2eb7e8f4e2247baa5808419030f27..5773e16b7885245347871ca0e5175b6ca0a4fcfb 100644 (file)
@@ -7,7 +7,29 @@
             </Pattern>
         </layout>
     </appender>
+
+    <appender name="PROJECT" class="ch.qos.logback.core.FileAppender">
+        <file>c:/temp/sly-crm-project.log</file>
+        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+            <Pattern>%m%n</Pattern>
+        </encoder>
+    </appender>
+    <appender name="PARTNER" class="ch.qos.logback.core.FileAppender">
+        <file>c:/temp/sly-crm-partner.log</file>
+        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+            <Pattern>%m%n</Pattern>
+        </encoder>
+    </appender>
+
     <root level="info">
         <appender-ref ref="Console"/>
     </root>
+
+    <logger name="PROJECT" level="info" additivity="false">
+        <appender-ref ref="PROJECT"/>
+    </logger>
+    <logger name="PARTNER" level="info" additivity="false">
+        <appender-ref ref="PARTNER"/>
+    </logger>
+
 </configuration>
\ No newline at end of file
index 5884eb1ddd0191e13428ef52a5fd2fef29af1956..a57354504d97c4703f162f649b7776fd68af1f76 100644 (file)
@@ -14,6 +14,7 @@ import java.util.Objects;
 @Log4j2
 @Component
 public class PartnerXlsProcessor extends XlsProcessor<Partner> {
+    private static final org.apache.logging.log4j.Logger partnerLog = org.apache.logging.log4j.LogManager.getLogger("PARTNER");
     @Autowired
     private PartnerRepository partnerRepository;
 
@@ -39,7 +40,13 @@ public class PartnerXlsProcessor extends XlsProcessor<Partner> {
     @Override
     protected void process(Partner entity) {
         partnerRepository.save(entity);
+        partnerLog.info("{};{}", entity.getName(), entity.getVatNr());
         log.info("Partner added: {}", entity.getName());
     }
 
+    @Override
+    protected void processInvalid(Map<String, String> rowData, Partner entity) {
+        partnerLog.info("{};{}", entity.getName(), entity.getVatNr());
+    }
+
 }
index 8745a3b9c1eb1e765ff0c40c468a15854cfb4aa2..7e5d65f9dcbdef6b08556b0589616abb5887293f 100644 (file)
@@ -12,12 +12,14 @@ import org.springframework.stereotype.Component;
 
 import java.io.IOException;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Optional;
 
 @Log4j2
 @Component
 public class ProjectXlsProcessor extends XlsProcessor<Project> {
     public static final String IMPORTED = "IMPORTED";
+    private static final org.apache.logging.log4j.Logger projectLog = org.apache.logging.log4j.LogManager.getLogger("PROJECT");
     @Autowired
     private ProjectRepository projectRepository;
 
@@ -45,19 +47,14 @@ public class ProjectXlsProcessor extends XlsProcessor<Project> {
     protected Project mapEntity(Map<String, String> rowData) {
         Project entity = projectXlsMapper.toEntity(rowData);
         entity.setProjectStatus(defaultProjectStatus);
-        entity.setActive(true);
-
-        if (entity.getHumanId().equals("99000199")) {
-            log.info("");
-        }
         return entity;
     }
 
     @Override
     protected boolean isValid(Project entity) {
         return !StringUtils.isBlank(entity.getName())
-                && !StringUtils.isBlank(entity.getHumanId());
-//                && !Objects.isNull(entity.getPartner());
+                && !StringUtils.isBlank(entity.getHumanId())
+                && !Objects.isNull(entity.getPartner());
     }
 
     @Override
@@ -66,4 +63,8 @@ public class ProjectXlsProcessor extends XlsProcessor<Project> {
         log.info("Project added: {}", entity.getName());
     }
 
+    @Override
+    protected void processInvalid(Map<String, String> rowData, Project entity) {
+        projectLog.info("{};{};{}", entity.getHumanId(), entity.getName(), rowData.get("Ügyfél"));
+    }
 }
index b7184803bdc0e33c2f51443919da9d28e7d7debe..1d364b0cfec16c41aaa3f60f7105d2091098e3bf 100644 (file)
@@ -54,6 +54,8 @@ public abstract class XlsProcessor<T> {
         try {
             if (isValid(entity)) {
                 process(entity);
+            } else {
+                processInvalid(rowData, entity);
             }
         } catch (Exception e) {
             log.error("Processing error for {}", r, e);
@@ -82,4 +84,7 @@ public abstract class XlsProcessor<T> {
     protected abstract boolean isValid(T entity);
 
     protected abstract void process(T entity);
+
+    protected void processInvalid(Map<String, String> rowData, T entity) {
+    }
 }
index 1fa2120edd8f62f7917bbf2f63182a8876ca1bf0..836301712ec1aec313371814609b310ddf3a6393 100644 (file)
@@ -6,6 +6,20 @@
         <timeout-uri>/timeout</timeout-uri>
     </session-config>
     <client-config>
+        <data-handler>
+            <name>data-mask</name><!-- the attribute name, i.e. data-mask -->
+            <script src="http://igorescobar.github.io/jQuery-Mask-Plugin/js/jquery.mask.min.js"/>
+            <script>
+                function (wgt, dataValue) {
+                jq(wgt.$n()).mask(dataValue);
+
+                // unformat after onChange event.
+                wgt.listen({onChange: function (event) {
+                event.data.value = jq(this.$n()).cleanVal();
+                }});
+                }
+            </script>
+        </data-handler>
         <error-reload>
             <device-type>ajax</device-type>
             <error-code>403</error-code>
index 4a70986c7f130d0cdb6dc4bbd1d8f336453dc5a2..5a52302a05c62d525001699e415f0e3a63c9be55 100644 (file)
@@ -1,5 +1,6 @@
 <?component name="entity-selector" inline="true" class="hu.user.lis.ui.editor.widget.EntitySelector"?>
-<zk>
+<zk xmlns:c="client/attribute">
+    <script src="~./static/js/clipboard.utils.js"/>
     <zscript>
         import hu.user.lis.db.Currency;
         ListModelList currencies = new ListModelList(Currency.values());
                                        format="#,###.##" locale="hu" instant="true"
                                        onChange="@command('onNetAmountChange')"
                                        forward="onOK=submit.onClick, onCancel=cancel.onClick"
-                                       disabled="@bind(vm.readonlyForm)"/>
+                                       disabled="@bind(vm.readonlyForm)"
+                                       c:onPaste="preventPastingNonDigit(event)"/>
                         </vlayout>
                         <vlayout>
                             <label value="Bruttó összeg"/>
                             <doublebox value="@bind(vm.formDocument.grossAmount) @validator(vm)"
                                        format="#,###.##" locale="hu" instant="true"
                                        forward="onOK=submit.onClick, onCancel=cancel.onClick"
-                                       disabled="@bind(vm.readonlyForm)"/>
+                                       disabled="@bind(vm.readonlyForm)"
+                                       c:onPaste="preventPastingNonDigit(event)"/>
                         </vlayout>
                         <vlayout>
                             <label value="ÁFA (HUF)"/>
                             <doublebox value="@bind(vm.formDocument.vatAmount) @validator(vm)"
                                        format="#,###.##" locale="hu" instant="true"
                                        forward="onOK=submit.onClick, onCancel=cancel.onClick"
-                                       disabled="@bind(vm.readonlyForm)"/>
+                                       disabled="@bind(vm.readonlyForm)"
+                                       c:onPaste="preventPastingNonDigit(event)"/>
                         </vlayout>
                     </hlayout>
                     <hlayout>
index c9cb8454f9551f89da49ef476c02cd8acdcd80d3..ddadcc395abd046c993b6666f812171c89bd4893 100644 (file)
@@ -2,6 +2,7 @@
     <window vflex="true" viewModel="@id('vm') @init('hu.user.lis.ui.view.PartnersViewModel')">
         <!--        <timer id="timer" delay="500" repeats="true" onTimer="@command('uiTick')"/>-->
         <caption label="Partnerek"/>
+        <!--        <textbox xmlns:c="client/attribute" c:data-mask="00:00:00" onChange='Clients.log(self.value)'/>-->
         <borderlayout>
             <north flex="true">
                 <toolbar>
diff --git a/lis-ui/src/main/resources/web/static/js/clipboard.utils.js b/lis-ui/src/main/resources/web/static/js/clipboard.utils.js
new file mode 100644 (file)
index 0000000..435004f
--- /dev/null
@@ -0,0 +1,10 @@
+console.log("Included!");
+function preventPastingNonDigit(e){
+    var pastedText = e.clipboardData ? e.clipboardData.getData('text') : window.clipboardData.getData('text');
+    var regex = new RegExp(/\D/g);
+    if (pastedText !== null && regex.test(pastedText)) {
+        var formattedText = pastedText.replace(/\D/g,'');
+        //console.log(pastedText, formattedText, e);
+        e.target.value = formattedText;
+    }
+}