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-test.onlineszamla.nav.gov.hu/invoiceService/v3
- user: vkvyibj5xgqpbp0
+ url: https://api.onlineszamla.nav.gov.hu/invoiceService/v3
+ user: ddoz0z29mmzw2kl
password: Salabakt3r
- sign-key: fe-9d8b-971c878376204BQEWTHH2HI6
- exchange-key: 3af24BQEWTHH4TSX
+ sign-key: 78-bfed-07fd8f1685104GC07C82GM3G
+ exchange-key: 1f414GC07C82IBNV
sender-tax-number: 13364937
- sender-company: User Rendszerház Kft.
+ 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
\ No newline at end of file
+ days-range: 34
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIIBjCCBu6gAwIBAgIOBIyN2pYlwYPS1fLPLgowDQYJKoZIhvcNAQELBQAweDEL
+MAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRYwFAYDVQQKDA1NaWNyb3Nl
+YyBMdGQuMR0wGwYDVQQDDBRlLVN6aWdubyBTU0wgQ0EgMjAxNDEfMB0GCSqGSIb3
+DQEJARYQaW5mb0BlLXN6aWduby5odTAeFw0yNDAxMDQxNDU1MDlaFw0yNTAyMDMx
+NDU1MDlaMIGTMQswCQYDVQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxJjAkBgNV
+BAoMHU5lbXpldGkgQWTDsy0gw6lzIFbDoW1oaXZhdGFsMSIwIAYDVQQDDBkqLm9u
+bGluZXN6YW1sYS5uYXYuZ292Lmh1MSUwIwYDVQQFExwxLjMuNi4xLjQuMS4yMTUy
+OC4yLjMuMi43MTY4MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAi/fJ
+9quCAtFbb0ykMeVjmoHeJHUSuxRvL5LRoYteZd0MOqhXken+UAOA7asgrve/2trE
+Xyyl72ryMcXjMYTRR31Rub6ZdUDYI9IacBqtVevy2U70kCPBeGlzYJNNohPt/tly
+k6x+5kUC/Yz67h7j/vS9NIjsBmURs9d5WErFlbbky+HLDQQeTSRu/rQGTtrc+XiR
+QLr19AapjLusLpwe5DvKIqWf/C5FlEtZE9dxYAjw87Bz/hMzhfVLvrZ9ee8nZHnG
+rqsEoGLVSZqq6P5jXbIQTiza+Wt3TjvnZIKSfb007jrx8P3kEUD4OOIy7B/xqIH4
+C9S7V7Ec4NH6ENvOkwIDAQABo4IEcDCCBGwwDgYDVR0PAQH/BAQDAgWgMIIBfQYK
+KwYBBAHWeQIEAgSCAW0EggFpAWcAdgBVgdTCFpA2AUrqC5tXPFPwwOQ4eHAlCBcv
+o6odBxPTDAAAAYzU+JSNAAAEAwBHMEUCIQC/PE7t2nBoNdhjltU9UqXjhPa/i6uU
+P1DtlSwlOcIIVAIgN/viUsGhpFK4HKJL8qI7uPJCstLD95JC6cUNvMGLiRMAdQDg
+krP8DB3I52g2H95huZZNClJ4GYpy1nLEsE2lbW9UBAAAAYzU+JouAAAEAwBGMEQC
+IH+wLzqGoiJ6riN//4qVyyU5zQlOzeX/RyMt15OkJkMOAiAV5DHvocQTdKwUfkmQ
+yUyiP0PifhET8RnhxQSoRBsyOwB2AE51oydcmhDDOFts1N8/Uusd8OCOG41pwLH6
+ZLFimjnfAAABjNT4pBwAAAQDAEcwRQIgZt/zGovN/nf1oMzDDcEo6Nh1kO+GAMXQ
+p757sijsrLYCIQCOxEjR+dm/dx3dbQcnLYWO3xorFxo3f2y8cKqBmRGJgjAdBgNV
+HSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwLgYDVR0gBCcwJTAPBg0rBgEEAYGo
+GAIBAYEfMAgGBgQAj3oBBzAIBgZngQwBAgIwHQYDVR0OBBYEFM9IlXSOaiqsfmYJ
+b0Oqqj/Q941PMB8GA1UdIwQYMBaAFN5qsE5DqghBR3S/pYqBVEwgxXUoMD0GA1Ud
+EQQ2MDSCF29ubGluZXN6YW1sYS5uYXYuZ292Lmh1ghkqLm9ubGluZXN6YW1sYS5u
+YXYuZ292Lmh1MIGwBgNVHR8EgagwgaUwNaAzoDGGL2h0dHA6Ly9zc2xjYTIwMTQt
+Y3JsMS5lLXN6aWduby5odS9zc2xjYTIwMTQuY3JsMDWgM6Axhi9odHRwOi8vc3Ns
+Y2EyMDE0LWNybDIuZS1zemlnbm8uaHUvc3NsY2EyMDE0LmNybDA1oDOgMYYvaHR0
+cDovL3NzbGNhMjAxNC1jcmwzLmUtc3ppZ25vLmh1L3NzbGNhMjAxNC5jcmwwggFW
+BggrBgEFBQcBAQSCAUgwggFEMC4GCCsGAQUFBzABhiJodHRwOi8vc3NsY2EyMDE0
+LW9jc3AxLmUtc3ppZ25vLmh1MC4GCCsGAQUFBzABhiJodHRwOi8vc3NsY2EyMDE0
+LW9jc3AyLmUtc3ppZ25vLmh1MC4GCCsGAQUFBzABhiJodHRwOi8vc3NsY2EyMDE0
+LW9jc3AzLmUtc3ppZ25vLmh1MDoGCCsGAQUFBzAChi5odHRwOi8vc3NsY2EyMDE0
+LWNhMS5lLXN6aWduby5odS9zc2xjYTIwMTQuY3J0MDoGCCsGAQUFBzAChi5odHRw
+Oi8vc3NsY2EyMDE0LWNhMi5lLXN6aWduby5odS9zc2xjYTIwMTQuY3J0MDoGCCsG
+AQUFBzAChi5odHRwOi8vc3NsY2EyMDE0LWNhMy5lLXN6aWduby5odS9zc2xjYTIw
+MTQuY3J0MA0GCSqGSIb3DQEBCwUAA4IBAQC/T+6xt7Cyggg4qcqW7tkzwMqFZeGt
+/g7h4u/wn0qthXpiWq60gAHENX+vGHDakSOiFPKJJb97DnrnEQocge08v7BuVr7Q
+ZVhgedQN0EBdu8rM13G8Csk6op1L5iUPHaev8hKsWb6uKQ/r5iewH2B8+2wxRhEr
+/43SQWPPWIoHFKZai31WJt9EFv7lrC6qoRkMmemw6DDreUwLz64KWw79PbTqbI9V
+hGdsztM3Tk6qb7CV4bIL0tWmk9x4DifwlQsSlGDjtNdYjW7ThrII5cbmYSArozuL
+lIXoRnKbwCKSUkpR6wpPZLb5QmZvXtZpj6Qyen9+BC2x2WJatRHFV5fX
+-----END CERTIFICATE-----
import org.springframework.test.context.TestPropertySource;
import org.springframework.test.context.junit4.SpringRunner;
-import java.nio.file.Paths;
-
@Log4j2
@RunWith(SpringRunner.class)
projectRepository.deleteAllInBatch();
partnerRepository.deleteAllInBatch();
- dataImportService.importData(Paths.get("c:/work/_spec/slycrm/2024/dataimport.xlsx"));
+// dataImportService.importData(Paths.get("c:/work/_spec/slycrm/2024/dataimport.xlsx"));
}
}
import hu.gov.nav.schemas.osa._3_0.api.*;
import hu.gov.nav.schemas.osa._3_0.data.InvoiceData;
import hu.user.lis.service.nav.TaxOfficeInvoiceService;
+import hu.user.lis.service.nav.TaxOfficeProperties;
import hu.user.lis.service.nav.TaxOfficeRequestBuilder;
import hu.user.lis.service.nav.TaxOfficeXmlConverter;
import io.netty.channel.ChannelOption;
import org.springframework.http.ResponseEntity;
import org.springframework.http.client.reactive.ReactorClientHttpConnector;
import org.springframework.test.context.ActiveProfiles;
-import org.springframework.test.context.TestPropertySource;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.reactive.function.client.WebClient;
@Log4j2
@SpringBootTest
@RunWith(SpringRunner.class)
-@ActiveProfiles("dev")
+@ActiveProfiles("test")
@ComponentScan("hu.user.lis")
-@TestPropertySource("classpath:application-dev.yaml")
+//@TestPropertySource("classpath:application-test.yaml")
public class TaxOfficeInvoiceApiIT {
- public static final String API_URL = "https://api-test.onlineszamla.nav.gov.hu/invoiceService/v3";
+ @Autowired
+ TaxOfficeProperties properties;
@Autowired
RestTemplate restTemplate;
HttpEntity<String> request = new HttpEntity<>(taxOfficeXmlConverter.toXml(queryRequest), headers);
try {
- ResponseEntity<String> response = restTemplate.postForEntity(API_URL + "/queryInvoiceDigest", request, String.class);
+ ResponseEntity<String> response = restTemplate.postForEntity(properties.getUrl() + "/queryInvoiceDigest", request, String.class);
System.out.println(taxOfficeXmlConverter.toXml(response));
} catch (Exception e) {
log.error(e);
queryRequest.setInvoiceDirection(InvoiceDirectionType.INBOUND);
queryRequest.setInvoiceQueryParams(taxOfficeRequestBuilder.params(34));
- WebClient client = WebClient.create(API_URL);
+ WebClient client = WebClient.create(properties.getUrl());
WebClient.UriSpec<WebClient.RequestBodySpec> uriSpec = client.post();
WebClient.RequestBodySpec bodySpec = uriSpec.uri("/queryInvoiceDigest");
WebClient.RequestHeadersSpec<?> headersSpec = bodySpec.bodyValue(taxOfficeXmlConverter.toXml(queryRequest));
WebClient client = webClientBuilder
.clientConnector(new ReactorClientHttpConnector(httpClient))
- .baseUrl(API_URL)
+ .baseUrl(properties.getUrl())
.defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_XML_VALUE)
.defaultHeader(HttpHeaders.ACCEPT, MediaType.APPLICATION_XML_VALUE)
.defaultHeader(HttpHeaders.ACCEPT_CHARSET, StandardCharsets.UTF_8.toString())
enabled: always
datasource:
type: com.zaxxer.hikari.HikariDataSource
- url: jdbc:db2://dvdev.in.useribm.hu:50000/lis
+ url: jdbc:db2://localhost:50000/slycrm
username: db2admin
password: password
camunda.bpm:
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
+ 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
- sender-company: User Rendszerház Kft.
+ 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
\ No newline at end of file
+ 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
--- /dev/null
+package hu.user.lis.service.nav;
+
+public class InvoiceDataConvertException extends NullPointerException {
+}
TaxOfficeXmlConverter taxOfficeXmlConverter;
public Partner getPartner(Path file) {
- InvoiceData invoiceData = taxOfficeXmlConverter.fromFile(file, InvoiceData.class).orElseThrow(NullPointerException::new);
+ InvoiceData invoiceData = taxOfficeXmlConverter.fromFile(file, InvoiceData.class).orElseThrow(InvoiceDataConvertException::new);
SupplierInfoType supplierInfo = invoiceData.getInvoiceMain().getInvoice().getInvoiceHead().getSupplierInfo();
return partnerMapper.toEntity(supplierInfo);
}
public Partner getPartner(String xml) {
- InvoiceData invoiceData = taxOfficeXmlConverter.fromXml(xml, InvoiceData.class).orElseThrow(NullPointerException::new);
+ InvoiceData invoiceData = taxOfficeXmlConverter.fromXml(xml, InvoiceData.class).orElseThrow(InvoiceDataConvertException::new);
SupplierInfoType supplierInfo = invoiceData.getInvoiceMain().getInvoice().getInvoiceHead().getSupplierInfo();
return partnerMapper.toEntity(supplierInfo);
}
public IncomingInvoice getIncomingInvoice(Path file) {
- InvoiceData invoiceData = taxOfficeXmlConverter.fromFile(file, InvoiceData.class).orElseThrow(NullPointerException::new);
+ InvoiceData invoiceData = taxOfficeXmlConverter.fromFile(file, InvoiceData.class).orElseThrow(InvoiceDataConvertException::new);
return invoiceMapper.toEntity(invoiceData);
}
public IncomingInvoice getIncomingInvoice(String xml) {
- InvoiceData invoiceData = taxOfficeXmlConverter.fromXml(xml, InvoiceData.class).orElseThrow(NullPointerException::new);
+ InvoiceData invoiceData = taxOfficeXmlConverter.fromXml(xml, InvoiceData.class).orElseThrow(InvoiceDataConvertException::new);
return invoiceMapper.toEntity(invoiceData);
}
@ConfigurationProperties(prefix = "service.nav.api")
public class TaxOfficeProperties {
+ private String url;
+
private String user;
private String password;
package hu.user.lis.service.nav.mapper;
import hu.gov.nav.schemas.osa._3_0.base.DetailedAddressType;
+import hu.gov.nav.schemas.osa._3_0.base.SimpleAddressType;
import hu.gov.nav.schemas.osa._3_0.base.TaxNumberType;
import hu.gov.nav.schemas.osa._3_0.data.SupplierInfoType;
import hu.user.lis.db.Partner;
import org.mapstruct.Mapping;
import org.mapstruct.MappingTarget;
+import java.util.Objects;
+
@Mapper(componentModel = "spring")
public interface PartnerMapper {
String ADDRESS_FORMAT = "%s %s, %s %s %s";
- String VAT_NR_FORMAT = "%s-%s-%s";
+ String SIMPLE_ADDRESS_FORMAT = "%s %s, %s";
@Mapping(target = "id", ignore = true)
@Mapping(target = "address", ignore = true)
@AfterMapping
default void setPartnerCompositeFields(@MappingTarget Partner.PartnerBuilder builder, SupplierInfoType source) {
+ TaxNumberType supplierTaxNumber = source.getSupplierTaxNumber();
+ if (Objects.nonNull(supplierTaxNumber)) {
+ String vatNr = supplierTaxNumber.getTaxpayerId();
+ if (Objects.nonNull(supplierTaxNumber.getVatCode())) {
+ vatNr += "-" + supplierTaxNumber.getVatCode();
+ }
+ if (Objects.nonNull(supplierTaxNumber.getCountyCode())) {
+ vatNr += "-" + supplierTaxNumber.getCountyCode();
+ }
+ builder.vatNr(vatNr);
+ }
+
DetailedAddressType detailedAddress = source.getSupplierAddress().getDetailedAddress();
- String address = String.format(ADDRESS_FORMAT, detailedAddress.getCity(), detailedAddress.getPostalCode(),
- detailedAddress.getStreetName(), detailedAddress.getPublicPlaceCategory(), detailedAddress.getNumber());
- builder.address(address);
- TaxNumberType supplierTaxNumber = source.getSupplierTaxNumber();
- String vatNr = String.format(VAT_NR_FORMAT, supplierTaxNumber.getTaxpayerId(), supplierTaxNumber.getVatCode(),
- supplierTaxNumber.getCountyCode());
- builder.vatNr(vatNr);
+ if (Objects.nonNull(detailedAddress)) {
+ String address = String.format(ADDRESS_FORMAT, detailedAddress.getCity(), detailedAddress.getPostalCode(),
+ detailedAddress.getStreetName(), detailedAddress.getPublicPlaceCategory(), detailedAddress.getNumber());
+ builder.address(address);
+ } else {
+ SimpleAddressType simpleAddress = source.getSupplierAddress().getSimpleAddress();
+ if (Objects.nonNull(simpleAddress)) {
+ String address = String.format(SIMPLE_ADDRESS_FORMAT, simpleAddress.getCity(), simpleAddress.getPostalCode(),
+ simpleAddress.getAdditionalAddressDetail());
+ builder.address(address);
+ }
+ }
}
}
\ No newline at end of file