Skip to content

Commit 0bc6c62

Browse files
committed
Issue #668
Disabilitato il controllo di consistenza sulla configurazione di dominio e applicazione sul numero avviso in fase di aggiornamento di una pendenza.
1 parent 187504a commit 0bc6c62

File tree

3 files changed

+102
-28
lines changed

3 files changed

+102
-28
lines changed

integration-test/src/test/java/test/api/backoffice/v1/pendenze/put/pendenza-put-aggiornamento.feature

+60
Original file line numberDiff line numberDiff line change
@@ -181,3 +181,63 @@ And headers idA2ABasicAutenticationHeader
181181
When method get
182182
Then status 200
183183
And match response == pendenzaGetResponse
184+
185+
@test-update-dominio
186+
Scenario: Aggiornamento pendenza non pagata ma e' stato modificato il dominio
187+
188+
* def pendenzaGet = read('msg/pendenza-get.json')
189+
190+
* def idPendenza = getCurrentTimeMillis()
191+
* def pendenzaPut = read('classpath:test/api/pendenza/v1/pendenze/put/msg/pendenza-put_monovoce_riferimento.json')
192+
* def numeroAvviso = buildNumeroAvviso(dominio, applicazione)
193+
* set pendenzaPut.numeroAvviso = numeroAvviso
194+
195+
Given url pendenzeBaseurl
196+
And path '/pendenze', idA2A, idPendenza
197+
And headers idA2ABasicAutenticationHeader
198+
And request pendenzaPut
199+
When method put
200+
Then status 201
201+
202+
* def pendenzaPutResponse = response
203+
204+
Given url pendenzeBaseurl
205+
And path '/pendenze', idA2A, idPendenza
206+
And headers idA2ABasicAutenticationHeader
207+
When method get
208+
Then status 200
209+
And match response == pendenzaGet
210+
211+
* def pendenzaGetResponse = response
212+
213+
# Modifica l'auxdigits del dominio
214+
* def dominio = read('classpath:configurazione/v1/msg/dominio.json')
215+
* set dominio.auxDigit = '3'
216+
217+
Given url backofficeBaseurl
218+
And path 'domini', idDominio
219+
And headers gpAdminBasicAutenticationHeader
220+
And request dominio
221+
When method put
222+
Then assert responseStatus == 200 || responseStatus == 201
223+
224+
#### resetCache
225+
* call read('classpath:configurazione/v1/operazioni-resetCache.feature')
226+
227+
# Aggiornamento pendenza
228+
Given url pendenzeBaseurl
229+
And path '/pendenze', idA2A, idPendenza
230+
And headers idA2ABasicAutenticationHeader
231+
And request pendenzaPut
232+
When method put
233+
Then status 200
234+
And match response == pendenzaPutResponse
235+
236+
Given url pendenzeBaseurl
237+
And path '/pendenze', idA2A, idPendenza
238+
And headers idA2ABasicAutenticationHeader
239+
When method get
240+
Then status 200
241+
And match response.numeroAvviso == pendenzaGetResponse.numeroAvviso
242+
243+

jars/core/src/main/java/it/govpay/core/business/Versamento.java

+23-18
Original file line numberDiff line numberDiff line change
@@ -92,9 +92,11 @@ public it.govpay.bd.model.Versamento caricaVersamento(it.govpay.bd.model.Versame
9292
BDConfigWrapper configWrapper = new BDConfigWrapper(ContextThreadLocal.get().getTransactionId(), true);
9393
VersamentiBD versamentiBD = null;
9494
try {
95-
ctx.getApplicationLogger().log("versamento.validazioneSemantica", versamento.getApplicazione(configWrapper).getCodApplicazione(), versamento.getCodVersamentoEnte());
95+
Dominio dominio = versamento.getDominio(configWrapper);
96+
Applicazione applicazione = versamento.getApplicazione(configWrapper);
97+
ctx.getApplicationLogger().log("versamento.validazioneSemantica", applicazione.getCodApplicazione(), versamento.getCodVersamentoEnte());
9698
VersamentoUtils.validazioneSemantica(versamento);
97-
ctx.getApplicationLogger().log("versamento.validazioneSemanticaOk", versamento.getApplicazione(configWrapper).getCodApplicazione(), versamento.getCodVersamentoEnte());
99+
ctx.getApplicationLogger().log("versamento.validazioneSemanticaOk", applicazione.getCodApplicazione(), versamento.getCodVersamentoEnte());
98100

99101
if(bd == null) {
100102
versamentiBD = new VersamentiBD(configWrapper);
@@ -104,12 +106,11 @@ public it.govpay.bd.model.Versamento caricaVersamento(it.govpay.bd.model.Versame
104106
}
105107

106108
appContext.getPagamentoCtx().loadVersamentoContext(versamento);
107-
108109
try {
109110
it.govpay.bd.model.Versamento versamentoLetto = versamentiBD.getVersamento(versamento.getIdApplicazione(), versamento.getCodVersamentoEnte(), true);
110111

111112
if(!aggiornaSeEsiste)
112-
throw new GovPayException(EsitoOperazione.VER_015, versamento.getApplicazione(configWrapper).getCodApplicazione(), versamento.getCodVersamentoEnte());
113+
throw new GovPayException(EsitoOperazione.VER_015, applicazione.getCodApplicazione(), versamento.getCodVersamentoEnte());
113114

114115
// Versamento presente.
115116
versamento.setCreated(false);
@@ -118,19 +119,19 @@ public it.govpay.bd.model.Versamento caricaVersamento(it.govpay.bd.model.Versame
118119
// se non erano stati assegnati o proposti iuv e numero avviso e ne e' richiesta l'assegnazione, li assegno
119120
if(versamento.getIuvVersamento() == null && generaIuv) {
120121
Iuv iuvBusiness = new Iuv();
121-
String iuv = iuvBusiness.generaIUV(versamento.getApplicazione(configWrapper), versamento.getDominio(configWrapper), versamento.getCodVersamentoEnte(), TipoIUV.NUMERICO, bd);
122+
String iuv = iuvBusiness.generaIUV(applicazione, dominio, versamento.getCodVersamentoEnte(), TipoIUV.NUMERICO, bd);
122123
// imposto iuv calcolato
123124
versamento.setIuvVersamento(iuv);
124125
// calcolo il numero avviso
125-
it.govpay.core.business.model.Iuv iuvModel = IuvUtils.toIuv(versamento, versamento.getApplicazione(configWrapper), versamento.getDominio(configWrapper));
126+
it.govpay.core.business.model.Iuv iuvModel = IuvUtils.toIuv(versamento, applicazione, dominio);
126127
versamento.setNumeroAvviso(iuvModel.getNumeroAvviso());
127128
}
128129

129130
// if(versamento.checkEsecuzioneUpdate(versamentoLetto)) { }
130131

131-
ctx.getApplicationLogger().log("versamento.validazioneSemanticaAggiornamento", versamento.getApplicazione(configWrapper).getCodApplicazione(), versamento.getCodVersamentoEnte());
132+
ctx.getApplicationLogger().log("versamento.validazioneSemanticaAggiornamento", applicazione.getCodApplicazione(), versamento.getCodVersamentoEnte());
132133
VersamentoUtils.validazioneSemanticaAggiornamento(versamentoLetto, versamento, log);
133-
ctx.getApplicationLogger().log("versamento.validazioneSemanticaAggiornamentoOk", versamento.getApplicazione(configWrapper).getCodApplicazione(), versamento.getCodVersamentoEnte());
134+
ctx.getApplicationLogger().log("versamento.validazioneSemanticaAggiornamentoOk", applicazione.getCodApplicazione(), versamento.getCodVersamentoEnte());
134135

135136
if(bd == null) {
136137
// creo connessione
@@ -149,24 +150,28 @@ public it.govpay.bd.model.Versamento caricaVersamento(it.govpay.bd.model.Versame
149150
if(versamento.getId()==null)
150151
versamento.setId(versamentoLetto.getId());
151152

152-
ctx.getApplicationLogger().log("versamento.aggioramentoOk", versamento.getApplicazione(configWrapper).getCodApplicazione(), versamento.getCodVersamentoEnte());
153+
ctx.getApplicationLogger().log("versamento.aggioramentoOk", applicazione.getCodApplicazione(), versamento.getCodVersamentoEnte());
153154

154-
log.info("Versamento (" + versamento.getCodVersamentoEnte() + ") dell'applicazione (" + versamento.getApplicazione(configWrapper).getCodApplicazione() + ") aggiornato");
155+
log.info("Versamento (" + versamento.getCodVersamentoEnte() + ") dell'applicazione (" + applicazione.getCodApplicazione() + ") aggiornato");
155156
} else {
156157
if(versamento.getId()==null)
157158
versamento.setId(versamentoLetto.getId());
158159

159-
log.info("Versamento (" + versamento.getCodVersamentoEnte() + ") dell'applicazione (" + versamento.getApplicazione(configWrapper).getCodApplicazione() + ") aggiornato in memoria.");
160+
log.info("Versamento (" + versamento.getCodVersamentoEnte() + ") dell'applicazione (" + applicazione.getCodApplicazione() + ") aggiornato in memoria.");
160161
}
161162
} catch (NotFoundException e) {
162163
if(versamento.getNumeroAvviso()!=null) {
164+
// validazione del numero avviso in funzione della configurazione di dominio e applicazione
165+
VersamentoUtils.checkNumeroAvvisoConformeAConfigurazioneDominioEStazione(versamento, applicazione, dominio);
166+
167+
163168
try {
164169
// verifica univocita dell'avviso pagamento prima di inserire il nuovo versamento
165-
it.govpay.bd.model.Versamento versamentoFromDominioNumeroAvviso = versamentiBD.getVersamentoByDominioIuv(versamento.getDominio(configWrapper).getId(), IuvUtils.toIuv(versamento.getNumeroAvviso()));
170+
it.govpay.bd.model.Versamento versamentoFromDominioNumeroAvviso = versamentiBD.getVersamentoByDominioIuv(dominio.getId(), IuvUtils.toIuv(versamento.getNumeroAvviso()));
166171

167172
// due pendenze non possono avere lo stesso numero avviso
168173
//if(!versamentoFromDominioNumeroAvviso.getCodVersamentoEnte().equals(versamento.getCodVersamentoEnte()))
169-
throw new GovPayException(EsitoOperazione.VER_025, versamento.getApplicazione(configWrapper).getCodApplicazione(), versamento.getCodVersamentoEnte(),
174+
throw new GovPayException(EsitoOperazione.VER_025, applicazione.getCodApplicazione(), versamento.getCodVersamentoEnte(),
170175
versamentoFromDominioNumeroAvviso.getApplicazione(configWrapper).getCodApplicazione(), versamentoFromDominioNumeroAvviso.getCodVersamentoEnte(),versamento.getNumeroAvviso());
171176

172177
}catch(NotFoundException e2) {
@@ -175,11 +180,11 @@ public it.govpay.bd.model.Versamento caricaVersamento(it.govpay.bd.model.Versame
175180
} else if(generaIuv) {
176181
// Non ha numero avviso, ma e' richiesto che lo abbia
177182
Iuv iuvBusiness = new Iuv();
178-
String iuv = iuvBusiness.generaIUV(versamento.getApplicazione(configWrapper), versamento.getDominio(configWrapper), versamento.getCodVersamentoEnte(), TipoIUV.NUMERICO, bd);
183+
String iuv = iuvBusiness.generaIUV(applicazione, dominio, versamento.getCodVersamentoEnte(), TipoIUV.NUMERICO, bd);
179184
// imposto iuv calcolato
180185
versamento.setIuvVersamento(iuv);
181186
// calcolo il numero avviso
182-
it.govpay.core.business.model.Iuv iuvModel = IuvUtils.toIuv(versamento, versamento.getApplicazione(configWrapper), versamento.getDominio(configWrapper));
187+
it.govpay.core.business.model.Iuv iuvModel = IuvUtils.toIuv(versamento, applicazione, dominio);
183188
versamento.setNumeroAvviso(iuvModel.getNumeroAvviso());
184189
}
185190

@@ -279,13 +284,13 @@ public it.govpay.bd.model.Versamento caricaVersamento(it.govpay.bd.model.Versame
279284

280285
if(salvataggioSuDB) {
281286
versamentiBD.insertVersamento(versamento);
282-
ctx.getApplicationLogger().log("versamento.inserimentoOk", versamento.getApplicazione(configWrapper).getCodApplicazione(), versamento.getCodVersamentoEnte());
283-
log.info(MessageFormat.format("Versamento ({0}) dell''applicazione ({1}) inserito", versamento.getCodVersamentoEnte(), versamento.getApplicazione(configWrapper).getCodApplicazione()));
287+
ctx.getApplicationLogger().log("versamento.inserimentoOk", applicazione.getCodApplicazione(), versamento.getCodVersamentoEnte());
288+
log.info(MessageFormat.format("Versamento ({0}) dell''applicazione ({1}) inserito", versamento.getCodVersamentoEnte(), applicazione.getCodApplicazione()));
284289

285290
// avvio il batch di gestione dei promemoria
286291
Operazioni.setEseguiGestionePromemoria();
287292
} else {
288-
log.info(MessageFormat.format("Versamento ({0}) dell''applicazione ({1}) inserito in memoria", versamento.getCodVersamentoEnte(), versamento.getApplicazione(configWrapper).getCodApplicazione()));
293+
log.info(MessageFormat.format("Versamento ({0}) dell''applicazione ({1}) inserito in memoria", versamento.getCodVersamentoEnte(), applicazione.getCodApplicazione()));
289294
}
290295
}
291296
if(doCommit) versamentiBD.commit();

jars/core/src/main/java/it/govpay/core/utils/VersamentoUtils.java

+19-10
Original file line numberDiff line numberDiff line change
@@ -389,7 +389,7 @@ public static Versamento acquisisciVersamento(Applicazione applicazione, String
389389
it.govpay.core.beans.commons.Versamento versamentoCommons = verificaClient.verificaPendenza(codVersamentoEnte, bundlekey, debitore, dominio, iuv);
390390

391391
try {
392-
versamento = VersamentoUtils.toVersamentoModel(versamentoCommons, false);
392+
versamento = VersamentoUtils.toVersamentoModel(versamentoCommons);
393393
ctx.getApplicationLogger().log(MSG_DIAGNOSTICO_VERIFICA_OK_KEY, applicazione.getCodApplicazione(), codVersamentoEnteD, bundlekeyD, debitoreD, dominioD, iuvD);
394394
verificaClient.getEventoCtx().setEsito(Esito.OK);
395395
} catch (GovPayException e) {
@@ -622,11 +622,7 @@ public static void verifyNumeroAvviso(String numeroAvviso,String codDominio, Str
622622
}
623623
}
624624

625-
public static Versamento toVersamentoModel(it.govpay.core.beans.commons.Versamento versamento) throws ServiceException, GovPayException, ValidationException {
626-
return toVersamentoModel(versamento, true);
627-
}
628-
629-
public static Versamento toVersamentoModel(it.govpay.core.beans.commons.Versamento versamento, boolean controlloNumeroAvvisoDominioApplicazione) throws ServiceException, GovPayException, ValidationException {
625+
public static Versamento toVersamentoModel(it.govpay.core.beans.commons.Versamento versamento) throws ServiceException, GovPayException, ValidationException {
630626

631627
BDConfigWrapper configWrapper = new BDConfigWrapper(ContextThreadLocal.get().getTransactionId(), true);
632628
Versamento model = new Versamento();
@@ -714,10 +710,9 @@ public static Versamento toVersamentoModel(it.govpay.core.beans.commons.Versamen
714710
if(versamento.getNumeroAvviso() != null) {
715711
String iuvFromNumeroAvviso = it.govpay.core.utils.VersamentoUtils.getIuvFromNumeroAvviso(versamento.getNumeroAvviso());
716712

717-
if(controlloNumeroAvvisoDominioApplicazione) {
718-
it.govpay.core.utils.VersamentoUtils.verifyNumeroAvviso(versamento.getNumeroAvviso(),dominio.getCodDominio(),dominio.getStazione().getCodStazione(),
719-
dominio.getStazione().getApplicationCode(), dominio.getSegregationCode(), dominio.getAuxDigit(), applicazione.getCodApplicazione(), versamento.getCodVersamentoEnte());
720-
}
713+
// Il controllo di consistenza del numero avviso su dominio e stazione e' stato spostato tra i controlli da fare solo in caso di creazione della pendenza
714+
// checkNumeroAvvisoConformeAConfigurazioneDominioEStazione(versamento, applicazione, dominio);
715+
721716
// check sulla validita' dello iuv
722717
Iuv iuvBD = new Iuv();
723718
TipoIUV tipo = iuvBD.getTipoIUV(iuvFromNumeroAvviso);
@@ -837,6 +832,20 @@ public static Versamento toVersamentoModel(it.govpay.core.beans.commons.Versamen
837832

838833
return model;
839834
}
835+
836+
/**
837+
* Controllo che il numero avviso ricevuto come parametro dal sia conforme alla configurazione prevista per il dominio e l'applicazione
838+
*
839+
* @param versamento
840+
* @param applicazione
841+
* @param dominio
842+
* @throws GovPayException
843+
*/
844+
public static void checkNumeroAvvisoConformeAConfigurazioneDominioEStazione(Versamento versamento, Applicazione applicazione, Dominio dominio)
845+
throws GovPayException {
846+
it.govpay.core.utils.VersamentoUtils.verifyNumeroAvviso(versamento.getNumeroAvviso(),dominio.getCodDominio(),dominio.getStazione().getCodStazione(),
847+
dominio.getStazione().getApplicationCode(), dominio.getSegregationCode(), dominio.getAuxDigit(), applicazione.getCodApplicazione(), versamento.getCodVersamentoEnte());
848+
}
840849

841850
private static List<Allegato> toAllegatiModel(List<AllegatoPendenza> allegati) {
842851
List<Allegato> allegatiModel = null;

0 commit comments

Comments
 (0)