level:
org.hibernate.engine.jdbc.spi.SqlExceptionHelper: ERROR
org.springframework.web.clientRestTemplate: DEBUG
- logging.level.org.apache.http: TRACE
- logging.level.httpclient.wire: TRACE
+ org.apache.http: TRACE
+ httpclient.wire: TRACE
application:
ui:
user-name: user
store.password: password
api:
url: https://api.onlineszamla.nav.gov.hu/invoiceService/v3
- 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
+ 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
-# 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
+ days-range: 34
\ No newline at end of file
-keytool -importcert -keystore lis-keystore.jks -file nav-test.cer -alias nav-test -storepass password
\ No newline at end of file
+keytool -importcert -keystore lis-keystore.jks -file onlineszamla.nav.gov.hu.cer -alias nav -storepass password
+++ /dev/null
------BEGIN CERTIFICATE-----
-MIIJ3DCCCMSgAwIBAgIOBB4Br1BMT/4xbP+llwowDQYJKoZIhvcNAQELBQAweDEL
-MAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRYwFAYDVQQKDA1NaWNyb3Nl
-YyBMdGQuMR0wGwYDVQQDDBRlLVN6aWdubyBTU0wgQ0EgMjAxNDEfMB0GCSqGSIb3
-DQEJARYQaW5mb0BlLXN6aWduby5odTAeFw0yMjEyMjIxNDExNDZaFw0yNDAxMjIx
-NDExNDZaMIGTMQswCQYDVQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxJjAkBgNV
-BAoMHU5lbXpldGkgQWTDsy0gw6lzIFbDoW1oaXZhdGFsMSIwIAYDVQQDDBkqLm9u
-bGluZXN6YW1sYS5uYXYuZ292Lmh1MSUwIwYDVQQFExwxLjMuNi4xLjQuMS4yMTUy
-OC4yLjMuMi43MTY4MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAi/fJ
-9quCAtFbb0ykMeVjmoHeJHUSuxRvL5LRoYteZd0MOqhXken+UAOA7asgrve/2trE
-Xyyl72ryMcXjMYTRR31Rub6ZdUDYI9IacBqtVevy2U70kCPBeGlzYJNNohPt/tly
-k6x+5kUC/Yz67h7j/vS9NIjsBmURs9d5WErFlbbky+HLDQQeTSRu/rQGTtrc+XiR
-QLr19AapjLusLpwe5DvKIqWf/C5FlEtZE9dxYAjw87Bz/hMzhfVLvrZ9ee8nZHnG
-rqsEoGLVSZqq6P5jXbIQTiza+Wt3TjvnZIKSfb007jrx8P3kEUD4OOIy7B/xqIH4
-C9S7V7Ec4NH6ENvOkwIDAQABo4IGRjCCBkIwDgYDVR0PAQH/BAQDAgWgMIIBfQYK
-KwYBBAHWeQIEAgSCAW0EggFpAWcAdQBVgdTCFpA2AUrqC5tXPFPwwOQ4eHAlCBcv
-o6odBxPTDAAAAYU6LQcIAAAEAwBGMEQCIG/WPlXr27NgIMAFrEcR+TJbMGMSE8iL
-yVg4EiivCWk+AiAFL+F8NpaZkSIyfH4Fed3udGo4QGTJRLiCeCV+wPe7YgB2ANq2
-v2s/tbYin5vCu1xr6HCRcWy7UYSFNL2kPTBI1/urAAABhTotCaUAAAQDAEcwRQIh
-AKzVCT+R488swExZ7D5afML0qZFbr4M2Iuwb02jGCZ2HAiBbSXf5IlLZFw4Zqx2W
-/Qmt4XmRjpkllZ7RN4hALuTx5wB2ADtTd3U+LbmAToswWwb+QDtn2E/D9Me9AA0t
-cm/h+tQXAAABhTotDwMAAAQDAEcwRQIhAI4gSbNbiP5Y2Xg95R1GpDViYsUBa/Ml
-/+y+X0HM3Y/OAiBkNBDS9I/iU49FaDg8kMpm6/0Rl6jwPD+rHHB5cDkdnzAdBgNV
-HSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwggICBgNVHSAEggH5MIIB9TCCAd0G
-DSsGAQQBgagYAgEBgR8wggHKMCYGCCsGAQUFBwIBFhpodHRwOi8vY3AuZS1zemln
-bm8uaHUvYWNwczCBkAYIKwYBBQUHAgIwgYMMgYBPcmdhbml6YXRpb25hbCB2YWxp
-ZGF0aW9uIGNlcnRpZmljYXRlIGZvciB3ZWJzaXRlIGF1dGhlbnRpY2F0aW9uLiBJ
-c3N1ZWQgb24gdGhlIGJhc2lzIG9mIGVJREFTIEFydGljbGUgMjQgcGVyc29uIGlk
-ZW50aWZpY2F0aW9uLjBBBggrBgEFBQcCAjA1DDNUaGUgY2VydGlmaWNhdGUgaXMg
-YXNzb2NpYXRlZCB3aXRoIGFuIG9yZ2FuaXphdGlvbi4wgY4GCCsGAQUFBwICMIGB
-DH9TemVydmV6ZXQtZWxsZW7FkXJ6w7Z0dCB3ZWJvbGRhbC1oaXRlbGVzw610xZEg
-dGFuw7pzw610dsOhbnkuIEtpYWR2YSBheiBlSURBUyAyNC4gY2lrayBzemVyaW50
-aSBzemVtw6lseSBhem9ub3PDrXTDoXMgYWxhcGrDoW4uMDkGCCsGAQUFBwICMC0M
-K0EgdGFuw7pzw610dsOhbnkgc3plcnZlemV0aGV6IGthcGNzb2zDs2Rpay4wCAYG
-BACPegEHMAgGBmeBDAECAjAdBgNVHQ4EFgQUz0iVdI5qKqx+ZglvQ6qqP9D3jU8w
-HwYDVR0jBBgwFoAU3mqwTkOqCEFHdL+lioFUTCDFdSgwPQYDVR0RBDYwNIIXb25s
-aW5lc3phbWxhLm5hdi5nb3YuaHWCGSoub25saW5lc3phbWxhLm5hdi5nb3YuaHUw
-gbAGA1UdHwSBqDCBpTA1oDOgMYYvaHR0cDovL3NzbGNhMjAxNC1jcmwxLmUtc3pp
-Z25vLmh1L3NzbGNhMjAxNC5jcmwwNaAzoDGGL2h0dHA6Ly9zc2xjYTIwMTQtY3Js
-Mi5lLXN6aWduby5odS9zc2xjYTIwMTQuY3JsMDWgM6Axhi9odHRwOi8vc3NsY2Ey
-MDE0LWNybDMuZS1zemlnbm8uaHUvc3NsY2EyMDE0LmNybDCCAVYGCCsGAQUFBwEB
-BIIBSDCCAUQwLgYIKwYBBQUHMAGGImh0dHA6Ly9zc2xjYTIwMTQtb2NzcDEuZS1z
-emlnbm8uaHUwLgYIKwYBBQUHMAGGImh0dHA6Ly9zc2xjYTIwMTQtb2NzcDIuZS1z
-emlnbm8uaHUwLgYIKwYBBQUHMAGGImh0dHA6Ly9zc2xjYTIwMTQtb2NzcDMuZS1z
-emlnbm8uaHUwOgYIKwYBBQUHMAKGLmh0dHA6Ly9zc2xjYTIwMTQtY2ExLmUtc3pp
-Z25vLmh1L3NzbGNhMjAxNC5jcnQwOgYIKwYBBQUHMAKGLmh0dHA6Ly9zc2xjYTIw
-MTQtY2EyLmUtc3ppZ25vLmh1L3NzbGNhMjAxNC5jcnQwOgYIKwYBBQUHMAKGLmh0
-dHA6Ly9zc2xjYTIwMTQtY2EzLmUtc3ppZ25vLmh1L3NzbGNhMjAxNC5jcnQwDQYJ
-KoZIhvcNAQELBQADggEBADr7ees75fBVO36urAOY7MywTpqv0KfASWXQDyiogDmW
-w6hfF1zq8Hw0oSjFm2WkGY78Uyj+upGsa0V7g6O55IaJdBPm6GRtmcp32K4mMqMw
-Pd5ZyTTtOdtN+SeWjyIgGcDxb3gbsQo7kf8Ytn18byXbec7SyBIinbkFdgRd+6En
-hcGOqJpi4Ha8l2udhK7FAcmYncuCis7rl1vn6/XtrknKX8E7SQUm/J9geD9vIeCp
-rQlmIVRnN8cj5Lq1ExOcuQFiJL+bxhu6HfwsMcOoAyswSYejzsiURjHycY7RKY++
-sF+H/QdVf8oBOtgJgyzBHmGs7bIKc0vjRbG9m9I/Nxk=
------END CERTIFICATE-----
--- /dev/null
+/*
+ * Copyright (c) $today.year-$today.month-24.
+ * By elGekko
+ */
+
+package hu.user.lis.workflow;
+
+import hu.user.lis.db.InvoiceImport;
+import hu.user.lis.db.repository.InvoiceImportRepository;
+import hu.user.lis.workflow.invoice.service.WorkflowManagerService;
+import lombok.extern.log4j.Log4j2;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.test.context.ActiveProfiles;
+import org.springframework.test.context.TestPropertySource;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.util.List;
+
+
+@Log4j2
+@SpringBootTest
+@RunWith(SpringRunner.class)
+@ActiveProfiles("dev")
+@ComponentScan("hu.user.lis")
+@TestPropertySource("classpath:application-dev.yaml")
+public class RecreateAssignProcessesIT {
+ @Autowired
+ private InvoiceImportRepository invoiceImportRepository;
+
+ @Autowired
+ private WorkflowManagerService workflowManagerService;
+
+ @Test
+ public void recreateAllAssigns() throws InterruptedException {
+ List<InvoiceImport> invoiceImports = invoiceImportRepository.findAll();
+ invoiceImports.forEach(invoiceImport -> {
+ String processInstanceId = workflowManagerService.startAssignIncomingInvoiceProcess(invoiceImport);
+ log.info("Assign process created for invoice: {} -> {}", invoiceImport.getInvoice().getHumanId(), processInstanceId);
+ try {
+ Thread.sleep(1000);
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+ });
+ }
+}
\ No newline at end of file
if (invoiceList.isPresent()) {
for (InvoiceDigestType invoiceDigest : invoiceList.get()) {
String invoiceNumber = invoiceDigest.getInvoiceNumber();
+ log.info("Invoice found: {}", invoiceNumber);
String supplierTaxNumber = invoiceDigest.getSupplierTaxNumber();
String invoiceXML = taxOfficeInvoiceService.queryInboundInvoiceDataAsString(invoiceNumber, supplierTaxNumber);
Optional<InvoiceData> invoiceData = taxOfficeXmlConverter.fromXml(invoiceXML, InvoiceData.class);
- invoiceData.ifPresent(invoice -> log.info("Found invoice: {}", invoiceXML));
+ //invoiceData.ifPresent(invoice -> log.info("Found invoice: {}", invoiceXML));
}
}
}
level:
org.hibernate.engine.jdbc.spi.SqlExceptionHelper: ERROR
org.springframework.web.clientRestTemplate: DEBUG
- logging.level.org.apache.http: TRACE
- logging.level.httpclient.wire: TRACE
application:
ui:
user-name: user
# sender-country: HU
# sender-contact: Kovács Géza
# days-range: 34
+# 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: 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
import javax.net.ssl.SSLContext;
import java.io.IOException;
-import java.net.MalformedURLException;
import java.security.KeyManagementException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
@Bean
public RestTemplate restTemplate() throws KeyManagementException, NoSuchAlgorithmException, KeyStoreException,
- CertificateException, MalformedURLException, IOException {
+ CertificateException, IOException {
SSLContext sslContext = new SSLContextBuilder()
.loadTrustMaterial(trustStore.getURL(), trustStorePassword.toCharArray()).build();
+
+// TrustStrategy acceptingTrustStrategy = (X509Certificate[] chain, String authType) -> true;
+// SSLContext sslContext = org.apache.http.ssl.SSLContexts.custom()
+// .loadTrustMaterial(null, acceptingTrustStrategy)
+// .build();
+
+// SSLConnectionSocketFactory sslConFactory = new SSLConnectionSocketFactory(sslContext,
+// new String[]{"TLSv1.2", "TLSv1.1"}, null,
+// (hostname, session) -> true);
SSLConnectionSocketFactory sslConFactory = new SSLConnectionSocketFactory(sslContext);
CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(sslConFactory).build();
import lombok.Getter;
import lombok.Setter;
import lombok.extern.log4j.Log4j2;
+import org.apache.commons.collections4.CollectionUtils;
import org.springframework.transaction.annotation.Transactional;
import org.zkoss.bind.BindUtils;
import org.zkoss.bind.annotation.*;
private void updateInvoiceFileChanges(Invoice invoice) {
List<EntityDocumentAction> actions = invoiceDocumentActions.get(invoice.getTechnicalId());
- //TODO nem letezo technikai ID miatt itt null jon, pedig nem johetne. File feltoltes bug lehet belole.
- if (actions != null && !actions.isEmpty()) {
+ if (CollectionUtils.isNotEmpty(actions)) {
entityDocumentService.executeActions(invoice.getId(), actions);
}
}
private void updateTreasuryFileChanges(Treasury treasury) {
List<EntityDocumentAction> actions = treasuryDocumentActions.get(treasury.getTechnicalId());
- if (!actions.isEmpty()) {
+ if (CollectionUtils.isNotEmpty(actions)) {
entityDocumentService.executeActions(treasury.getId(), actions);
}
}
@Command
public void onEditIncoming() {
IncomingInvoice entity = invoiceDataModel.clone(selectedIncomingInvoice);
- Map<String, Object> extraArg = ImmutableMap.of("actions", invoiceDocumentActions.get(selectedIncomingInvoice.getTechnicalId()));
+ Map<String, Object> extraArg = getDocumentExtraArg(invoiceDocumentActions, selectedIncomingInvoice.getTechnicalId());
Editors.doEdit(Editors.INCOMING_INVOICE, entity, selectedIncomingInvoice, extraArg, this::incomingModified);
}
+ private Map<String, Object> getDocumentExtraArg(Map<String, List<EntityDocumentAction>> actions, String technicalId) {
+ Map<String, Object> extraArg = new HashMap<>();
+ if (actions.containsKey(technicalId)) {
+ extraArg = ImmutableMap.of("actions", actions.get(technicalId));
+ }
+ return extraArg;
+ }
private void incomingAdded(SaveEntityEvent<IncomingInvoice> event) {
if (event.isSave()) {
@Command
public void onEditOutgoing() {
OutgoingInvoice entity = invoiceDataModel.clone(selectedOutgoingInvoice);
- if (invoiceDocumentActions.containsKey(selectedOutgoingInvoice.getTechnicalId())) {
- Map<String, Object> extraArg = ImmutableMap.of("actions", invoiceDocumentActions.get(selectedOutgoingInvoice.getTechnicalId()));
- Editors.doEdit(Editors.OUTGOING_INVOICE, entity, selectedOutgoingInvoice, extraArg, this::outgoingModified);
- } else {
- Editors.doEdit(Editors.OUTGOING_INVOICE, entity, selectedOutgoingInvoice, this::outgoingModified);
- }
+ Map<String, Object> extraArg = getDocumentExtraArg(invoiceDocumentActions, selectedOutgoingInvoice.getTechnicalId());
+ Editors.doEdit(Editors.OUTGOING_INVOICE, entity, selectedOutgoingInvoice, extraArg, this::outgoingModified);
}
private void outgoingAdded(SaveEntityEvent<OutgoingInvoice> event) {
@Command
public void onEditTreasury() {
Treasury entity = treasuryDataModel.clone(selectedTreasury);
- Editors.doEdit(Editors.TREASURY, entity, selectedTreasury, this::treasuryModified);
+ Map<String, Object> extraArg = getDocumentExtraArg(treasuryDocumentActions, selectedTreasury.getTechnicalId());
+ Editors.doEdit(Editors.TREASURY, entity, selectedTreasury, extraArg, this::treasuryModified);
}
private void treasuryAdded(SaveEntityEvent<Treasury> event) {
Treasury modifiedEntity = event.getData();
getFormDocument().getTreasuries().add(modifiedEntity);
selectedTreasury = modifiedEntity;
+ treasuryDocumentActions.put(modifiedEntity.getTechnicalId(), event.withAttachment().getActions());
validate();
BindUtils.postNotifyChange(this, "selectedTreasury");
BindUtils.postNotifyChange(getFormDocument(), "treasuries");
@Command
public void onOpenFormPanel(@BindingParam("parentPanel") Component parentPanel) {
parentPanel.invalidate();
+ parentPanel.getParent().invalidate();
}
@Command
@Component
public class PartnerFormValidator extends FormValidator<Partner> {
private static final String VAT_NR_PATTERN = "^\\d{8}-[1-5]-(0[2-9]|[1,3]\\d|20|2[2-9]|4[0-4]|51)$";
+ private static final String SIMPLE_VAT_NR_PATTERN = "^\\d{8}$";
private Pattern vatNrPattern;
+ private Pattern simpleVatNrPattern;
@PostConstruct
public void postConstruct() {
vatNrPattern = Pattern.compile(VAT_NR_PATTERN);
+ simpleVatNrPattern = Pattern.compile(SIMPLE_VAT_NR_PATTERN);
}
@Override
return new FieldValidation[]{
validator(entity.getName(), this::validateString, "A 'Név' kitöltése kötelező."),
validator(entity.getShortName(), this::validateString, "A 'Rövid név' kitöltése kötelező."),
- validator(entity.getVatNr(), this::validateVatNumber, "Az 'Adószám' kitöltése kötelező, formátuma: 12345678-1-01.")
+ validator(entity.getVatNr(), this::validateVatNumber, "Az 'Adószám' kitöltése kötelező, formátuma: 12345678-1-01 vagy 12345678.")
//validator(entity.getAddress(), this::validateString, "A 'Cím' kitöltése kötelező."),
};
}
private boolean validateVatNumber(Object data) {
if (data instanceof String) {
- return vatNrPattern.matcher(String.valueOf(data)).matches();
+ return vatNrPattern.matcher(String.valueOf(data)).matches() ||
+ simpleVatNrPattern.matcher(String.valueOf(data)).matches();
}
return false;
}
runtimeService.startProcessInstanceByKey(IMPORT_INCOMING_INVOICES);
}
- public void startAssignIncomingInvoiceProcess(InvoiceImport invoiceImport) {
+ public String startAssignIncomingInvoiceProcess(InvoiceImport invoiceImport) {
Map<String, Object> params = ImmutableMap.of(
"invoiceImportId", invoiceImport.getId(),
"invoiceId", invoiceImport.getInvoice().getId(),
"partnerName", invoiceImport.getInvoice().getPartner().getName(),
"projectSuggestions", invoiceImport.getSuggestedProjects()
);
- runtimeService.startProcessInstanceByKey(ASSIGN_INCOMING_INVOICES, params);
+ ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(ASSIGN_INCOMING_INVOICES, params);
+ return processInstance.getProcessInstanceId();
}
public Map<String, Object> getVariables(String id) {
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="server-dev" type="Application" factoryName="Application">
<option name="ALTERNATIVE_JRE_PATH" value="1.8" />
- <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="true" />
<envs>
<env name="spring.profiles.active" value="dev" />
</envs>