workflow:
import-invoice:
input-path: /temp/invoice-import
+ project-id-pattern: \d{4}-\d{4}
service:
nav:
trust:
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));
}
}
}
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;
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);
} else {
invoiceData = new String(invoiceBytes);
}
- return taxOfficeXmlConverter.fromXml(invoiceData, InvoiceData.class);
+ return invoiceData;
}
}
+++ /dev/null
-<?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
boolean canEditPartner;
@Init
+ @Override
public void init() {
super.init();
canEditPartner = Objects.isNull(getFormDocument().getPartner().getId());
&& Objects.nonNull(entity.getFile());
}
+ @Override
@AfterCompose
public void onAfterCompose(@ContextParam(ContextType.VIEW) Component view) {
getEntitySelectorRouter().configureSelector(Project.class, getFormDocument(), "project");
@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));
}
}
private boolean vatCalculated;
@Init
+ @Override
public void init() {
-
super.init();
}
}
@Init
+ @Override
public void init() {
super.init();
eventBus.registerForProcessEvent(this);
<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>
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
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);
}
}
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;
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;
@Autowired
private TaxOfficeXmlConverter taxOfficeXmlConverter;
+
+ @Autowired
+ private WorkflowProperties workflowProperties;
+
public List<String> getNewInvoices() {
return Arrays.asList("Invoice-test-1", "Invoice-test-2", "Invoice-test-3");
}
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);
}
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;
+ }
}
@Setter
public static class ImportInvoice {
private String inputPath;
+
+ private String projectIdPattern;
}
}