Invoice import bugfix
authorVásáry Dániel <vasary@elgekko.net>
Thu, 25 Jan 2024 22:01:19 +0000 (23:01 +0100)
committerVásáry Dániel <vasary@elgekko.net>
Thu, 25 Jan 2024 22:01:19 +0000 (23:01 +0100)
lis-app/pom.xml
lis-app/src/main/resources/application-dev.yaml
lis-app/src/test/resources/application-test.yaml
lis-db/src/main/java/hu/user/lis/db/repository/InvoiceImportRepository.java
lis-service/src/main/java/hu/user/lis/service/nav/mapper/InvoiceMapper.java
lis-workflow/src/main/java/hu/user/lis/workflow/invoice/DownloadInvoiceData.java
lis-workflow/src/main/java/hu/user/lis/workflow/invoice/ListNewInvoices.java

index 27b5c974b554949316881c4d1867fe0d4ba75058..faa6779ea5bc0541d5b82b9b121a43637d6790b4 100644 (file)
@@ -3,7 +3,7 @@
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <artifactId>lis-app</artifactId>
-    <version>0.2.0-SNAPSHOT</version>
+    <version>0.2.1-SNAPSHOT</version>
     <name>SLY-CRM</name>
     <parent>
         <groupId>hu.user</groupId>
index 3f67c178df02745e173270049a6c6b8d5e48a973..214e1308be10b39c359735b0e4a9bb7d26c947b4 100644 (file)
@@ -66,25 +66,25 @@ service:
     trust:
       store: classpath:keystore/lis-keystore.jks
       store.password: password
-    #    api:
-    #      url: https://api-test.onlineszamla.nav.gov.hu/invoiceService/v3
-    #      user: vkvyibj5xgqpbp0
-    #      password: Salabakt3r
-    #      sign-key: fe-9d8b-971c878376204BQEWTHH2HI6
-    #      exchange-key: 3af24BQEWTHH4TSX
-    #      sender-tax-number: 13364937
-    #      sender-company: User Rendszerház Kft.
-    #      sender-country: HU
-    #      sender-contact: Kovács Géza
-    #      days-range: 34
     api:
       url: https://api.onlineszamla.nav.gov.hu/invoiceService/v3
-      user: ddoz0z29mmzw2kl
-      password: Salabakt3r
-      sign-key: 78-bfed-07fd8f1685104GC07C82GM3G
-      exchange-key: 1f414GC07C82IBNV
-      sender-tax-number: 13364937
-      sender-company: ELGEKKO MŰHELY SZOLGÁLTATÓ KORLÁTOLT FELELŐSSÉGŰ TÁRSASÁG
+      user: dufwfvhquolizk4
+      password: Pbd6Mnkt9g
+      sign-key: 05-967b-0e5227e11ca44GF1ZEUBSX8F
+      exchange-key: a5c24GF1ZEUBUGIK
+      sender-tax-number: 13799504
+      sender-company: USER RENDSZERHÁZ Informatikai Korlátolt Felelősségű Társaság
       sender-country: HU
       sender-contact: Kovács Géza
       days-range: 34
+#    api:
+#      url: https://api.onlineszamla.nav.gov.hu/invoiceService/v3
+#      user: ddoz0z29mmzw2kl
+#      password: Salabakt3r
+#      sign-key: 78-bfed-07fd8f1685104GC07C82GM3G
+#      exchange-key: 1f414GC07C82IBNV
+#      sender-tax-number: 13364937
+#      sender-company: ELGEKKO MŰHELY SZOLGÁLTATÓ KORLÁTOLT FELELŐSSÉGŰ TÁRSASÁG
+#      sender-country: HU
+#      sender-contact: Kovács Géza
+#      days-range: 34
index 76691f69a81d59c16173cd3589ad3ec6572c6409..f026c48a5c53a406ecfd11f96c5e9eab4473a453 100644 (file)
@@ -87,11 +87,11 @@ service:
       store.password: password
     api:
       url: https://api.onlineszamla.nav.gov.hu/invoiceService/v3
-      user: 2ws6sjlwdldekwx
-      password: RQnfkpcqKv+4NC!P6t-GV2X85
-      sign-key: 17-a39e-a14aa51723854GALPHFMDZ5C
-      exchange-key: 5ee84GALPHFMFBIZ
-      sender-tax-number: 13364937
+      user: dufwfvhquolizk4
+      password: Pbd6Mnkt9g
+      sign-key: 05-967b-0e5227e11ca44GF1ZEUBSX8F
+      exchange-key: a5c24GF1ZEUBUGIK
+      sender-tax-number: 13799504
       sender-company: USER RENDSZERHÁZ Informatikai Korlátolt Felelősségű Társaság
       sender-country: HU
       sender-contact: Kovács Géza
index b6e73e27ccfd6cd7feb0d1cf8692bd6147c8da67..d24ab9b116011bc64279ca5a1a74cc361f2a9831 100644 (file)
@@ -9,7 +9,7 @@ import java.util.Optional;
 public interface InvoiceImportRepository extends JpaRepository<InvoiceImport, Long> {
 
     //    @Query("SELECT * FROM InvoiceImport i WHERE ")
-    Optional<InvoiceImport> findTopByOrderByInvoiceCreateDate();
+    Optional<InvoiceImport> findTopByOrderByInvoiceCreateDateDesc();
 
     Optional<InvoiceImport> findByInvoice(Invoice selectedEntity);
 }
index 2b23b1182ff5449d6740d6acd0ffa3328a3a659b..6b6c21859d0c4d34e99512fbf6b7ae8f46a8d31b 100644 (file)
@@ -9,6 +9,7 @@ import org.mapstruct.Mapper;
 import org.mapstruct.Mapping;
 import org.mapstruct.MappingTarget;
 
+import java.util.Objects;
 import java.util.stream.Collectors;
 
 @Mapper(componentModel = "spring")
@@ -32,8 +33,13 @@ public interface InvoiceMapper {
     @AfterMapping
     default void afterMapping(@MappingTarget IncomingInvoice.IncomingInvoiceBuilder<?, ?> builder, InvoiceData invoiceData) {
         LinesType invoiceLines = invoiceData.getInvoiceMain().getInvoice().getInvoiceLines();
-        String title = invoiceLines.getLine().stream().map(LineType::getLineDescription)
-                .collect(Collectors.joining(", "));
-        builder.title(title);
+        if (Objects.nonNull(invoiceLines)) {
+            String title = invoiceLines.getLine().stream().map(LineType::getLineDescription)
+                    .collect(Collectors.joining(", "));
+            if (title.length() > 200) {
+                title = title.substring(0, 200) + "...";
+            }
+            builder.title(title);
+        }
     }
 }
\ No newline at end of file
index b618df8c88827bb1308d82b9d10a0cb6044c0f85..6ba5722d53ddaa2468e1a27ffa2189fe0e390478 100644 (file)
@@ -1,9 +1,6 @@
 package hu.user.lis.workflow.invoice;
 
-import hu.user.lis.db.IncomingInvoice;
-import hu.user.lis.db.InvoiceImport;
-import hu.user.lis.db.InvoiceStatus;
-import hu.user.lis.db.Partner;
+import hu.user.lis.db.*;
 import hu.user.lis.db.repository.InvoiceImportRepository;
 import hu.user.lis.db.repository.InvoiceRepository;
 import hu.user.lis.db.repository.PartnerRepository;
@@ -13,6 +10,8 @@ import lombok.extern.log4j.Log4j2;
 import org.camunda.bpm.engine.delegate.DelegateExecution;
 import org.camunda.bpm.engine.delegate.JavaDelegate;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.NestedExceptionUtils;
+import org.springframework.dao.DataIntegrityViolationException;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -41,27 +40,28 @@ public class DownloadInvoiceData implements JavaDelegate {
     @Override
     @Transactional
     public void execute(DelegateExecution delegateExecution) throws Exception {
+        InvoiceImport invoiceImport = null;
         try {
-            String invoiceXml = (String) delegateExecution.getVariable("invoice");
-            log.info("Processing invoice {}", invoiceXml);
-
-            InvoiceImport invoiceImport = createInvoiceImport(invoiceXml);
-            if (Objects.isNull(invoiceImport)) {
-                throw new IllegalStateException("Unsuccessful invoice import!");
+            String invoiceDigestInfo = (String) delegateExecution.getVariable("invoice");
+            log.info("Processing invoice {}", invoiceDigestInfo);
+            invoiceImport = createInvoiceImport(invoiceDigestInfo);
+            if (Objects.nonNull(invoiceImport)) {
+                saveInvoiceImport(invoiceImport);
+                workflowManagerService.startAssignIncomingInvoiceProcess(invoiceImport);
+                log.info("Invoice {} {} processed", invoiceImport.getInvoice().getHumanId(),
+                        invoiceImport.getInvoice().getPartner().getName());
             }
-            workflowManagerService.startAssignIncomingInvoiceProcess(invoiceImport);
-            log.info("Invoice {} {} processed", invoiceImport.getInvoice().getHumanId(),
-                    invoiceImport.getInvoice().getPartner().getName());
+        } catch (DataIntegrityViolationException e) {
+            log.error("DataIntegrityViolationException: {}, cause: {}", e.getMessage(), NestedExceptionUtils.getMostSpecificCause(e).getMessage());
         } catch (Exception e) {
             log.error(e);
         }
     }
 
-    private InvoiceImport createInvoiceImport(String invoiceXml) throws Exception {
+    private InvoiceImport createInvoiceImport(String invoiceDigestInfo) throws Exception {
         List<String> projectSuggestions = new ArrayList<>();
-        IncomingInvoice invoice = incomingInvoiceFetcherService.getInvoiceDataOnline(invoiceXml, projectSuggestions);
+        IncomingInvoice invoice = incomingInvoiceFetcherService.getInvoiceDataOnline(invoiceDigestInfo, projectSuggestions);
         invoice.setStatus(InvoiceStatus.INACTIVE);
-
         Optional<Partner> partnerEntity = partnerRepository.findByVatNr(invoice.getPartner().getVatNr());
         if (partnerEntity.isPresent()) {
             if (isInvoiceImported(invoice.getHumanId(), partnerEntity.get())) {
@@ -71,16 +71,22 @@ public class DownloadInvoiceData implements JavaDelegate {
             invoice.setPartner(partnerEntity.get());
         } else {
             invoice.getPartner().setCreatedByImport(true);
-            partnerRepository.save(invoice.getPartner());
         }
-        invoiceRepository.save(invoice);
-
-        InvoiceImport invoiceImport = InvoiceImport.builder()
+        return InvoiceImport.builder()
                 .invoice(invoice)
                 .suggestedProjects(projectSuggestions)
                 .build();
+    }
+
+    private void saveInvoiceImport(InvoiceImport invoiceImport) throws Exception {
+        Invoice invoice = invoiceImport.getInvoice();
+        Optional.ofNullable(invoice).map(Invoice::getPartner).ifPresent(p -> {
+            if (Objects.isNull(p.getId())) {
+                partnerRepository.save(p);
+            }
+        });
+        Optional.ofNullable(invoice).ifPresent(i -> invoiceRepository.save(i));
         invoiceImportRepository.save(invoiceImport);
-        return invoiceImport;
     }
 
     private boolean isInvoiceImported(String humanId, Partner partner) {
index 00cc837900175a299c15bbeb09191aed4dce9d5b..343da4df0f210cd3f117a8ec123e6c1701d36e3f 100644 (file)
@@ -47,7 +47,7 @@ public class ListNewInvoices implements JavaDelegate {
 
     private int getDaysRange() {
         int result = properties.getDaysRange();
-        Optional<InvoiceImport> opLastImported = invoiceImportRepository.findTopByOrderByInvoiceCreateDate();
+        Optional<InvoiceImport> opLastImported = invoiceImportRepository.findTopByOrderByInvoiceCreateDateDesc();
         if (opLastImported.isPresent()) {
             LocalDateTime createDate = LocalDateTime.ofInstant(opLastImported.get().getInvoice().getCreateDate().toInstant(),
                     ZoneId.systemDefault());