From d7d74b140fd91590f2aa65aee92d34e76eb9a8db Mon Sep 17 00:00:00 2001 From: Andrea De Rinaldis <117269497+andrea-deri@users.noreply.github.com> Date: Thu, 4 Jul 2024 13:00:32 +0200 Subject: [PATCH] [PAGOPA-1921] fix: resolved bug on paaInviaRT duplicated send (#46) * [PAGOPA-1921] fix: add iuv-domainId filter for paaInviaRT send * [PAGOPA-1921] fix: resolved bug on null metadata --- .../wispconverter/service/ReceiptService.java | 15 +++++++++++---- .../wispconverter/service/mapper/RTMapper.java | 2 +- .../wispconverter/endpoint/ReceiptTest.java | 6 +++--- .../gov/pagopa/wispconverter/utils/TestUtils.java | 8 +++++++- src/test/resources/requests/paSendRTV2.xml | 2 +- src/test/resources/requests/rpt.xml | 2 +- 6 files changed, 24 insertions(+), 11 deletions(-) diff --git a/src/main/java/it/gov/pagopa/wispconverter/service/ReceiptService.java b/src/main/java/it/gov/pagopa/wispconverter/service/ReceiptService.java index 426b5527..c0374335 100644 --- a/src/main/java/it/gov/pagopa/wispconverter/service/ReceiptService.java +++ b/src/main/java/it/gov/pagopa/wispconverter/service/ReceiptService.java @@ -131,10 +131,11 @@ public void sendKoPaaInviaRtToCreditorInstitution(String payload) { commonFields.getStationId()); /* - For each RPT extracted from session data, is necessary to generate a single paaInviaRT SOAP request. + For each RPT extracted from session data that is required by paSendRTV2, is necessary to generate a single paaInviaRT SOAP request. Each paaInviaRT generated will be autonomously sent to creditor institution in order to track each RPT. */ - for (RPTContentDTO rpt : sessionData.getAllRPTs()) { + List rpts = extractRequiredRPTs(sessionData, cachedMapping.getIuv(), cachedMapping.getFiscalCode()); + for (RPTContentDTO rpt : rpts) { // Generating the paaInviaRT payload from the RPT String paymentOutcome = "Annullato da WISP"; // TODO change this with one of the following -> https://pagopa.atlassian.net/wiki/spaces/PN5/pages/913244345/WISP-Converter?focusedCommentId=1002078407 @@ -206,10 +207,11 @@ public void sendOkPaaInviaRtToCreditorInstitution(String payload) { } else { /* - For each RPT extracted from session data, is necessary to generate a single paaInviaRT SOAP request. + For each RPT extracted from session data that is required by paSendRTV2, is necessary to generate a single paaInviaRT SOAP request. Each paaInviaRT generated will be autonomously sent to creditor institution in order to track each RPT. */ - for (RPTContentDTO rpt : sessionData.getAllRPTs()) { + List rpts = extractRequiredRPTs(sessionData, receipt.getCreditorReferenceId(), receipt.getFiscalCode()); + for (RPTContentDTO rpt : rpts) { // generate the header for the paaInviaRT SOAP request. This object is different for each generated request IntestazionePPT intestazionePPT = generateHeader( @@ -326,6 +328,11 @@ From station identifier (the common one defined, not the payment reference), ret return isSuccessful; } + private List extractRequiredRPTs(SessionDataDTO sessionData, String iuv, String creditorInstiutionId) { + return sessionData.getAllRPTs().stream() + .filter(rpt -> rpt.getIuv().equals(iuv) && rpt.getRpt().getDomain().getDomainId().equals(creditorInstiutionId)) + .toList(); + } private CtRicevutaTelematica generateRTContentForKoReceipt(RPTContentDTO rpt, Map configurations, Instant now, String paymentOutcome) { diff --git a/src/main/java/it/gov/pagopa/wispconverter/service/mapper/RTMapper.java b/src/main/java/it/gov/pagopa/wispconverter/service/mapper/RTMapper.java index a4495d07..62b3f5f5 100644 --- a/src/main/java/it/gov/pagopa/wispconverter/service/mapper/RTMapper.java +++ b/src/main/java/it/gov/pagopa/wispconverter/service/mapper/RTMapper.java @@ -183,7 +183,7 @@ public List toCtDatiSingoloPagamentoRTListForOkRT(CtRe @Mapping(source = "ctReceiptV2.paymentDateTime", target = "dataEsitoSingoloPagamento") @Mapping(source = "ctReceiptV2.receiptId", target = "identificativoUnivocoRiscossione") @Mapping(source = "ctTransferPAReceiptV2.remittanceInformation", target = "causaleVersamento") - @Mapping(target = "datiSpecificiRiscossione", expression = "java(extractMetadata(ctTransferPAReceiptV2.getMetadata().getMapEntry()))") + @Mapping(target = "datiSpecificiRiscossione", expression = "java(ctTransferPAReceiptV2.getMetadata() != null ? extractMetadata(ctTransferPAReceiptV2.getMetadata().getMapEntry()) : \"\")") @Mapping(source = "ctReceiptV2.fee", target = "commissioniApplicatePSP") public abstract CtDatiSingoloPagamentoRT toCtDatiSingoloPagamentoRTForOkRT(CtTransferPAReceiptV2 ctTransferPAReceiptV2, CtReceiptV2 ctReceiptV2); diff --git a/src/test/java/it/gov/pagopa/wispconverter/endpoint/ReceiptTest.java b/src/test/java/it/gov/pagopa/wispconverter/endpoint/ReceiptTest.java index 8e5ebad7..f7d29de2 100644 --- a/src/test/java/it/gov/pagopa/wispconverter/endpoint/ReceiptTest.java +++ b/src/test/java/it/gov/pagopa/wispconverter/endpoint/ReceiptTest.java @@ -207,7 +207,7 @@ void sendOkReceipt_notSent() throws Exception { // mocking RPT retrieve RPTRequestEntity rptRequestEntity = RPTRequestEntity.builder() .primitive("nodoInviaRPT") - .payload(TestUtils.zipAndEncode(TestUtils.getRptPayload(false, STATION_ID, "100.00", "datispec"))) + .payload(TestUtils.zipAndEncode(TestUtils.getRptPayload(false, STATION_ID, "77777777777", "48111111112222222", "100.00", "datispec"))) .build(); when(rptRequestRepository.findById(anyString())).thenReturn(Optional.of(rptRequestEntity)); @@ -406,12 +406,12 @@ void sendKoReceipt_notSent() throws Exception { setConfigCacheStoredData("/creditorinstitution/station", 2); // mocking decoupler cached keys - when(cacheRepository.read(anyString(), any())).thenReturn("wisp_nav2iuv_123456IUVMOCK1"); + when(cacheRepository.read(anyString(), any())).thenReturn("wisp_{pa}_48111111112222222"); // mocking RPT retrieve RPTRequestEntity rptRequestEntity = RPTRequestEntity.builder() .primitive("nodoInviaRPT") - .payload(TestUtils.zipAndEncode(TestUtils.getRptPayload(false, STATION_ID, "100.00", "datispec"))) + .payload(TestUtils.zipAndEncode(TestUtils.getRptPayload(false, STATION_ID, "{pa}", "48111111112222222", "100.00", "datispec"))) .build(); when(rptRequestRepository.findById(anyString())).thenReturn(Optional.of(rptRequestEntity)); diff --git a/src/test/java/it/gov/pagopa/wispconverter/utils/TestUtils.java b/src/test/java/it/gov/pagopa/wispconverter/utils/TestUtils.java index 44bd130d..925e28f9 100644 --- a/src/test/java/it/gov/pagopa/wispconverter/utils/TestUtils.java +++ b/src/test/java/it/gov/pagopa/wispconverter/utils/TestUtils.java @@ -200,13 +200,15 @@ public static String getInnerRptPayload(boolean bollo, String amount, String dat .replaceAll("\\{amount}", amount); } - public static String getRptPayload(boolean bollo, String station, String amount, String datiSpecificiRiscossione) { + public static String getRptPayload(boolean bollo, String station, String pa, String iuv, String amount, String datiSpecificiRiscossione) { if (datiSpecificiRiscossione == null) { datiSpecificiRiscossione = "9/tipodovuto_7/datospecifico"; } String rpt = TestUtils.loadFileContent(bollo ? "/requests/rptBollo.xml" : "/requests/rpt.xml"); String rptreplace = rpt .replace("{datiSpecificiRiscossione}", datiSpecificiRiscossione) + .replace("{pa}", pa) + .replace("{iuv}", iuv) .replaceAll("\\{amount}", amount); String nodoInviaRPT = TestUtils.loadFileContent("/requests/nodoInviaRPT.xml"); return nodoInviaRPT @@ -214,6 +216,10 @@ public static String getRptPayload(boolean bollo, String station, String amount, .replace("{rpt}", Base64.getEncoder().encodeToString(rptreplace.getBytes(StandardCharsets.UTF_8))); } + public static String getRptPayload(boolean bollo, String station, String amount, String datiSpecificiRiscossione) { + return getRptPayload(bollo, station, "{pa}", "123456IUVMOCK1", amount, datiSpecificiRiscossione); + } + public static String getRptNullIbanPayload(String station, String amount, String datiSpecificiRiscossione) { if (datiSpecificiRiscossione == null) { datiSpecificiRiscossione = "9/tipodovuto_7/datospecifico"; diff --git a/src/test/resources/requests/paSendRTV2.xml b/src/test/resources/requests/paSendRTV2.xml index e3caf0ef..f47e34f3 100644 --- a/src/test/resources/requests/paSendRTV2.xml +++ b/src/test/resources/requests/paSendRTV2.xml @@ -39,7 +39,7 @@ 0101100IM - keytest + datiSpecificiRiscossione 1 diff --git a/src/test/resources/requests/rpt.xml b/src/test/resources/requests/rpt.xml index 22857c6d..b1a5bce5 100644 --- a/src/test/resources/requests/rpt.xml +++ b/src/test/resources/requests/rpt.xml @@ -24,7 +24,7 @@ {dataEsecuzionePagamento} {amount} {tipoVersamento} - 123456IUVMOCK1 + {iuv} {ccp} 0