Reset DB table identities, add invoice payment, add project id regexp
authorVásáry Dániel <vasary@elgekko.net>
Tue, 24 Oct 2023 14:41:02 +0000 (16:41 +0200)
committerVásáry Dániel <vasary@elgekko.net>
Tue, 24 Oct 2023 14:41:02 +0000 (16:41 +0200)
lis-app/src/main/resources/application-dev.yaml
lis-app/src/test/java/hu/user/lis/workflow/TaxOfficeInvoiceApiIT.java
lis-service/src/main/java/hu/user/lis/service/nav/TaxOfficeInvoiceService.java
lis-services/lis-service.iml [deleted file]
lis-ui/src/main/java/hu/user/lis/ui/editor/ImportInvoiceAssignEditorModel.java
lis-ui/src/main/java/hu/user/lis/ui/editor/InvoiceEditorModel.java
lis-ui/src/main/java/hu/user/lis/ui/view/AssignInvoicesViewModel.java
lis-ui/src/main/resources/web/import-invoices-assign.zul
lis-workflow/src/main/java/hu/user/lis/workflow/invoice/DownloadInvoiceData.java
lis-workflow/src/main/java/hu/user/lis/workflow/invoice/service/IncomingInvoiceFetcherService.java
lis-workflow/src/main/java/hu/user/lis/workflow/properties/WorkflowProperties.java

index d6ebf7f86816d33524db88ecb8ea228e50f30092..7ec2477f118cb5e29c7334af9a7e067b0f0fb9c4 100644 (file)
@@ -59,6 +59,7 @@ application:
   workflow:
     import-invoice:
       input-path: /temp/invoice-import
+      project-id-pattern: \d{4}-\d{4}
 service:
   nav:
     trust:
index d78729e4ccb90802a0737d05c990ce0747ff7452..61e5755dc469e0b2e4cc0cf65dd7fd6e163fd2e8 100644 (file)
@@ -173,8 +173,9 @@ public class TaxOfficeInvoiceApiIT {
                     for (InvoiceDigestType invoiceDigest : invoiceList.get()) {
                         String invoiceNumber = invoiceDigest.getInvoiceNumber();
                         String supplierTaxNumber = invoiceDigest.getSupplierTaxNumber();
-                        Optional<InvoiceData> invoiceData = taxOfficeInvoiceService.queryInboundInvoiceData(invoiceNumber, supplierTaxNumber);
-                        invoiceData.ifPresent(invoice -> log.info("Found invoice: {}", taxOfficeXmlConverter.toXml(invoice)));
+                        String invoiceXML = taxOfficeInvoiceService.queryInboundInvoiceDataAsString(invoiceNumber, supplierTaxNumber);
+                        Optional<InvoiceData> invoiceData = taxOfficeXmlConverter.fromXml(invoiceXML, InvoiceData.class);
+                        invoiceData.ifPresent(invoice -> log.info("Found invoice: {}", invoiceXML));
                     }
                 }
             }
index dc410cc1385b6551a81f07ac6fc7550a51042e63..682b812a8d00e272c8d0c71e0da78a38492d440b 100644 (file)
@@ -1,7 +1,6 @@
 package hu.user.lis.service.nav;
 
 import hu.gov.nav.schemas.osa._3_0.api.*;
-import hu.gov.nav.schemas.osa._3_0.data.InvoiceData;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -44,7 +43,7 @@ public class TaxOfficeInvoiceService {
         return taxOfficeXmlConverter.fromXml(response, QueryInvoiceDigestResponse.class);
     }
 
-    public Optional<InvoiceData> queryInboundInvoiceData(String invoiceNumber, String supplierTaxNumber) throws Exception {
+    public String queryInboundInvoiceDataAsString(String invoiceNumber, String supplierTaxNumber) throws Exception {
         InvoiceNumberQueryType query = new InvoiceNumberQueryType();
         query.setInvoiceDirection(InvoiceDirectionType.INBOUND);
         query.setInvoiceNumber(invoiceNumber);
@@ -75,7 +74,7 @@ public class TaxOfficeInvoiceService {
         } else {
             invoiceData = new String(invoiceBytes);
         }
-        return taxOfficeXmlConverter.fromXml(invoiceData, InvoiceData.class);
+        return invoiceData;
     }
 
 }
diff --git a/lis-services/lis-service.iml b/lis-services/lis-service.iml
deleted file mode 100644 (file)
index 00b3a57..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module version="4">
-  <component name="SonarLintModuleSettings">
-    <option name="uniqueId" value="28f051fb-5766-4e3e-8837-e81b969fbd4c" />
-  </component>
-</module>
\ No newline at end of file
index d6e701bd2dc28892fbb5c10b3444f9fedaf8a39a..b303ec3badfcafb24c8469244f0913cc8be4912f 100644 (file)
@@ -24,6 +24,7 @@ public class ImportInvoiceAssignEditorModel extends InvoiceEditorModel {
     boolean canEditPartner;
 
     @Init
+    @Override
     public void init() {
         super.init();
         canEditPartner = Objects.isNull(getFormDocument().getPartner().getId());
@@ -36,6 +37,7 @@ public class ImportInvoiceAssignEditorModel extends InvoiceEditorModel {
                 && Objects.nonNull(entity.getFile());
     }
 
+    @Override
     @AfterCompose
     public void onAfterCompose(@ContextParam(ContextType.VIEW) Component view) {
         getEntitySelectorRouter().configureSelector(Project.class, getFormDocument(), "project");
@@ -46,8 +48,6 @@ public class ImportInvoiceAssignEditorModel extends InvoiceEditorModel {
     @Command
     public void onEditPartner() {
         Partner entity = partnersDataModel.clone(getFormDocument().getPartner());
-        Editors.doEdit(Editors.PARTNER, entity, modifiedEntity -> {
-            getFormDocument().setPartner(modifiedEntity);
-        });
+        Editors.doEdit(Editors.PARTNER, entity, modifiedEntity -> getFormDocument().setPartner(modifiedEntity));
     }
 }
index df7a7bbb3e5485020bb5532e48e6676bd86aa707..4d208e471c6cc2a95e02c072362d3c830771e0e6 100644 (file)
@@ -26,8 +26,8 @@ public class InvoiceEditorModel extends EntityEditorModel<Invoice> {
     private boolean vatCalculated;
 
     @Init
+    @Override
     public void init() {
-
         super.init();
     }
 
index 8698df78168967693a245fda9468f7275e46e9ad..7fe62d0f8f89e761f23bb0dc5d4bb2cbf4a26485 100644 (file)
@@ -50,6 +50,7 @@ public class AssignInvoicesViewModel extends EntityViewModel<JSONObject> impleme
     }
 
     @Init
+    @Override
     public void init() {
         super.init();
         eventBus.registerForProcessEvent(this);
index b994ce18a54a9cec1cf6778f22bd61e94959e4a7..e3c75b2a9de6854db81a71ffb99a198a0cca20bb 100644 (file)
                     <listhead sizable="true">
                         <listheader label="Azonosító" sort="auto(humanId)" align="left"/>
                         <listheader label="Partner" sort="auto(partner.name)" align="left"/>
+                        <listheader label="Javasolt projektek" align="left"/>
                     </listhead>
                     <template name="model">
                         <listitem>
                             <listcell label="@load(each['invoiceEntity'].humanId)"/>
                             <listcell label="@load(each['invoiceEntity'].partner.name)"/>
+                            <listcell label="@load(each['projectSuggestions'])"/>
                         </listitem>
                     </template>
                 </listbox>
index ee5ed39b24ec1fadec3db217ef40f8f7c0e0720b..e453367c2348a14ec6e70b5344092af01b0f0019 100644 (file)
@@ -10,6 +10,8 @@ import org.camunda.bpm.engine.delegate.JavaDelegate;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Optional;
 
 @Log4j2
@@ -37,10 +39,12 @@ public class DownloadInvoiceData implements JavaDelegate {
     public void execute(DelegateExecution delegateExecution) throws Exception {
         String invoiceXml = (String) delegateExecution.getVariable("invoice");
         log.info("Processing invoice {}", invoiceXml);
-        IncomingInvoice invoice = incomingInvoiceFetcherService.getInvoiceDataOnline(invoiceXml);
+        List<String> projectSuggestions = new ArrayList<>();
+        IncomingInvoice invoice = incomingInvoiceFetcherService.getInvoiceDataOnline(invoiceXml, projectSuggestions);
         Optional<Partner> partnerEntity = partnerRepository.findByVatNr(invoice.getPartner().getVatNr());
         partnerEntity.ifPresent(invoice::setPartner);
         delegateExecution.setVariableLocal("invoiceEntity", invoice);
+        delegateExecution.setVariableLocal("projectSuggestions", projectSuggestions);
         log.info("Invoice {} processed", invoiceXml);
     }
 }
index d3587c064fdae899925df79461f2ee59db3d6815..a6241b00f11d346c9d2786a4be057c9012ba9154 100644 (file)
@@ -14,6 +14,7 @@ import hu.user.lis.service.data.DataGeneratorService;
 import hu.user.lis.service.nav.TaxOfficeDataConverter;
 import hu.user.lis.service.nav.TaxOfficeInvoiceService;
 import hu.user.lis.service.nav.TaxOfficeXmlConverter;
+import hu.user.lis.workflow.properties.WorkflowProperties;
 import org.apache.commons.lang3.RandomUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -25,6 +26,8 @@ import java.nio.file.Path;
 import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -47,6 +50,10 @@ public class IncomingInvoiceFetcherService {
     @Autowired
     private TaxOfficeXmlConverter taxOfficeXmlConverter;
 
+
+    @Autowired
+    private WorkflowProperties workflowProperties;
+
     public List<String> getNewInvoices() {
         return Arrays.asList("Invoice-test-1", "Invoice-test-2", "Invoice-test-3");
     }
@@ -102,11 +109,15 @@ public class IncomingInvoiceFetcherService {
         return partners.get(RandomUtils.nextInt(0, partners.size()));
     }
 
-    public IncomingInvoice getInvoiceDataOnline(String invoiceDigestInfo) throws Exception {
+    public IncomingInvoice getInvoiceDataOnline(String invoiceDigestInfo, List<String> projectSuggestions) throws Exception {
         String[] tokens = invoiceDigestInfo.split(",");
         String invoiceNumber = tokens[0];
         String supplierTaxNumber = tokens[1];
-        InvoiceData invoiceData = taxOfficeInvoiceService.queryInboundInvoiceData(invoiceNumber, supplierTaxNumber).orElseThrow(NullPointerException::new);
+        String invoiceXML = taxOfficeInvoiceService.queryInboundInvoiceDataAsString(invoiceNumber, supplierTaxNumber);
+        InvoiceData invoiceData = taxOfficeXmlConverter.fromXml(invoiceXML, InvoiceData.class).orElseThrow(NullPointerException::new);
+        if (projectSuggestions != null) {
+            projectSuggestions.addAll(searchProjectId(invoiceXML));
+        }
         String invoiceXml = taxOfficeXmlConverter.toXml(invoiceData);
         IncomingInvoice result = taxOfficeDataConverter.getIncomingInvoice(invoiceXml);
         Partner partner = taxOfficeDataConverter.getPartner(invoiceXml);
@@ -151,4 +162,14 @@ public class IncomingInvoiceFetcherService {
         }
         return result;
     }
+
+    public List<String> searchProjectId(String invoiceXML) {
+        List<String> result = new ArrayList<>();
+        Pattern compiledPattern = Pattern.compile(workflowProperties.getImportInvoice().getProjectIdPattern());
+        Matcher m = compiledPattern.matcher(invoiceXML);
+        while (m.find()) {
+            result.add(m.group());
+        }
+        return result;
+    }
 }
index f454ac5c1155e6220d9d3a84ce19d919e6d18e36..c62fcb7d9d1c1135fa2fbcba5c4d5fe144cffade 100644 (file)
@@ -17,6 +17,8 @@ public class WorkflowProperties {
     @Setter
     public static class ImportInvoice {
         private String inputPath;
+
+        private String projectIdPattern;
     }
 
 }