From c9056fdfb531c1eca16d556c6fc2c46560138dcf Mon Sep 17 00:00:00 2001 From: =?utf8?q?V=C3=A1s=C3=A1ry=20D=C3=A1niel?= Date: Thu, 25 Jan 2024 23:01:19 +0100 Subject: [PATCH] Invoice import bugfix --- lis-app/pom.xml | 2 +- .../src/main/resources/application-dev.yaml | 34 ++++++------- .../src/test/resources/application-test.yaml | 10 ++-- .../repository/InvoiceImportRepository.java | 2 +- .../lis/service/nav/mapper/InvoiceMapper.java | 12 +++-- .../workflow/invoice/DownloadInvoiceData.java | 48 +++++++++++-------- .../lis/workflow/invoice/ListNewInvoices.java | 2 +- 7 files changed, 61 insertions(+), 49 deletions(-) diff --git a/lis-app/pom.xml b/lis-app/pom.xml index 27b5c97..faa6779 100644 --- a/lis-app/pom.xml +++ b/lis-app/pom.xml @@ -3,7 +3,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 lis-app - 0.2.0-SNAPSHOT + 0.2.1-SNAPSHOT SLY-CRM hu.user diff --git a/lis-app/src/main/resources/application-dev.yaml b/lis-app/src/main/resources/application-dev.yaml index 3f67c17..214e130 100644 --- a/lis-app/src/main/resources/application-dev.yaml +++ b/lis-app/src/main/resources/application-dev.yaml @@ -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 diff --git a/lis-app/src/test/resources/application-test.yaml b/lis-app/src/test/resources/application-test.yaml index 76691f6..f026c48 100644 --- a/lis-app/src/test/resources/application-test.yaml +++ b/lis-app/src/test/resources/application-test.yaml @@ -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 diff --git a/lis-db/src/main/java/hu/user/lis/db/repository/InvoiceImportRepository.java b/lis-db/src/main/java/hu/user/lis/db/repository/InvoiceImportRepository.java index b6e73e2..d24ab9b 100644 --- a/lis-db/src/main/java/hu/user/lis/db/repository/InvoiceImportRepository.java +++ b/lis-db/src/main/java/hu/user/lis/db/repository/InvoiceImportRepository.java @@ -9,7 +9,7 @@ import java.util.Optional; public interface InvoiceImportRepository extends JpaRepository { // @Query("SELECT * FROM InvoiceImport i WHERE ") - Optional findTopByOrderByInvoiceCreateDate(); + Optional findTopByOrderByInvoiceCreateDateDesc(); Optional findByInvoice(Invoice selectedEntity); } diff --git a/lis-service/src/main/java/hu/user/lis/service/nav/mapper/InvoiceMapper.java b/lis-service/src/main/java/hu/user/lis/service/nav/mapper/InvoiceMapper.java index 2b23b11..6b6c218 100644 --- a/lis-service/src/main/java/hu/user/lis/service/nav/mapper/InvoiceMapper.java +++ b/lis-service/src/main/java/hu/user/lis/service/nav/mapper/InvoiceMapper.java @@ -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 diff --git a/lis-workflow/src/main/java/hu/user/lis/workflow/invoice/DownloadInvoiceData.java b/lis-workflow/src/main/java/hu/user/lis/workflow/invoice/DownloadInvoiceData.java index b618df8..6ba5722 100644 --- a/lis-workflow/src/main/java/hu/user/lis/workflow/invoice/DownloadInvoiceData.java +++ b/lis-workflow/src/main/java/hu/user/lis/workflow/invoice/DownloadInvoiceData.java @@ -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 projectSuggestions = new ArrayList<>(); - IncomingInvoice invoice = incomingInvoiceFetcherService.getInvoiceDataOnline(invoiceXml, projectSuggestions); + IncomingInvoice invoice = incomingInvoiceFetcherService.getInvoiceDataOnline(invoiceDigestInfo, projectSuggestions); invoice.setStatus(InvoiceStatus.INACTIVE); - Optional 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) { diff --git a/lis-workflow/src/main/java/hu/user/lis/workflow/invoice/ListNewInvoices.java b/lis-workflow/src/main/java/hu/user/lis/workflow/invoice/ListNewInvoices.java index 00cc837..343da4d 100644 --- a/lis-workflow/src/main/java/hu/user/lis/workflow/invoice/ListNewInvoices.java +++ b/lis-workflow/src/main/java/hu/user/lis/workflow/invoice/ListNewInvoices.java @@ -47,7 +47,7 @@ public class ListNewInvoices implements JavaDelegate { private int getDaysRange() { int result = properties.getDaysRange(); - Optional opLastImported = invoiceImportRepository.findTopByOrderByInvoiceCreateDate(); + Optional opLastImported = invoiceImportRepository.findTopByOrderByInvoiceCreateDateDesc(); if (opLastImported.isPresent()) { LocalDateTime createDate = LocalDateTime.ofInstant(opLastImported.get().getInvoice().getCreateDate().toInstant(), ZoneId.systemDefault()); -- 2.54.0