Skip to content

Commit

Permalink
Issue #440
Browse files Browse the repository at this point in the history
Corretto problema nella gestione dello stato di una rendicontazione che viene acquisita prima della ricezione della RT.
  • Loading branch information
pintorig committed Dec 21, 2021
1 parent 208a728 commit c18541a
Show file tree
Hide file tree
Showing 8 changed files with 120 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -448,6 +448,10 @@ public static Rpt acquisisciRT(String codDominio, String iuv, PaSendRTReq ctRt,
ctx.getApplicationLogger().log("rt.acquisizionePagamento", pagamento.getIur(), pagamento.getImportoPagato().toString(), singoloVersamento.getCodSingoloVersamentoEnte(), singoloVersamento.getStatoSingoloVersamento().toString());
versamentiBD.updateStatoSingoloVersamento(singoloVersamento.getId(), singoloVersamento.getStatoSingoloVersamento());
pagamentiBD.insertPagamento(pagamento);

if(!irregolare) {
RtUtils.checkEsistenzaRendicontazioneAnomalaPerIlPagamento(pagamentiBD, pagamento);
}
}
else {
ctx.getApplicationLogger().log("rt.aggiornamentoPagamento", pagamento.getIur(), pagamento.getImportoPagato().toString(), singoloVersamento.getCodSingoloVersamentoEnte());
Expand Down
31 changes: 31 additions & 0 deletions jars/core/src/main/java/it/govpay/core/utils/RtUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -50,13 +50,15 @@
import it.govpay.bd.model.NotificaAppIo;
import it.govpay.bd.model.Pagamento;
import it.govpay.bd.model.Promemoria;
import it.govpay.bd.model.Rendicontazione;
import it.govpay.bd.model.Rpt;
import it.govpay.bd.model.SingoloVersamento;
import it.govpay.bd.model.TipoVersamentoDominio;
import it.govpay.bd.model.Versamento;
import it.govpay.bd.pagamento.NotificheAppIoBD;
import it.govpay.bd.pagamento.PagamentiBD;
import it.govpay.bd.pagamento.PromemoriaBD;
import it.govpay.bd.pagamento.RendicontazioniBD;
import it.govpay.bd.pagamento.RptBD;
import it.govpay.bd.pagamento.VersamentiBD;
import it.govpay.bd.pagamento.filters.RptFilter;
Expand All @@ -69,6 +71,7 @@
import it.govpay.model.Notifica.TipoNotifica;
import it.govpay.model.Pagamento.Stato;
import it.govpay.model.Pagamento.TipoPagamento;
import it.govpay.model.Rendicontazione.StatoRendicontazione;
import it.govpay.model.Rpt.StatoRpt;
import it.govpay.model.Rpt.TipoIdentificativoAttestante;
import it.govpay.model.Rpt.Versione;
Expand Down Expand Up @@ -558,6 +561,10 @@ public static Rpt acquisisciRT(String codDominio, String iuv, String ccp, byte[]
ctx.getApplicationLogger().log("rt.acquisizionePagamento", pagamento.getIur(), pagamento.getImportoPagato().toString(), singoloVersamento.getCodSingoloVersamentoEnte(), singoloVersamento.getStatoSingoloVersamento().toString());
versamentiBD.updateStatoSingoloVersamento(singoloVersamento.getId(), singoloVersamento.getStatoSingoloVersamento());
pagamentiBD.insertPagamento(pagamento);

if(!irregolare) {
checkEsistenzaRendicontazioneAnomalaPerIlPagamento(pagamentiBD, pagamento);
}
}
else {
ctx.getApplicationLogger().log("rt.aggiornamentoPagamento", pagamento.getIur(), pagamento.getImportoPagato().toString(), singoloVersamento.getCodSingoloVersamentoEnte());
Expand Down Expand Up @@ -718,6 +725,30 @@ public static Rpt acquisisciRT(String codDominio, String iuv, String ccp, byte[]
rptBD.closeConnection();
}
}

public static void checkEsistenzaRendicontazioneAnomalaPerIlPagamento(PagamentiBD pagamentiBD, Pagamento pagamento) throws ServiceException {
RendicontazioniBD rendicontazioniBD = new RendicontazioniBD(pagamentiBD);
rendicontazioniBD.setAtomica(false);

try {
// cerco una eventuale rendicontazione per gli estremi del pagamento, in stato anomala ma non collegata a nessun pagamento
// rendicontazioniBD.enableSelectForUpdate();

Rendicontazione rendicontazioneAnomala = rendicontazioniBD.getRendicontazione(pagamento.getCodDominio(), pagamento.getIuv(), pagamento.getIur(), pagamento.getIndiceDati(), StatoRendicontazione.ANOMALA, true);

// aggiorno la rendicontazione e la metto in stato OK
rendicontazioneAnomala.setStato(StatoRendicontazione.OK);
rendicontazioneAnomala.setAnomalie(new ArrayList<>());
rendicontazioneAnomala.setIdPagamento(pagamento.getId());

rendicontazioniBD.updateRendicontazione(rendicontazioneAnomala);

} catch (NotFoundException e) {
// se non esiste una rendicontazione in stato anomala con i riferimenti del pagamento non faccio niente.
} finally {
// rendicontazioniBD.disableSelectForUpdate();
}
}

public static void validaCausaleVersamento(String causaleAttesa, String causaleRicevuta, EsitoValidazione esito, String errore, boolean fatal) {
if(causaleAttesa==null && causaleRicevuta==null)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
import org.openspcoop2.generic_project.exception.NotFoundException;
import org.openspcoop2.generic_project.exception.NotImplementedException;
import org.openspcoop2.generic_project.exception.ServiceException;
import org.openspcoop2.generic_project.expression.IExpression;
import org.openspcoop2.generic_project.expression.IPaginatedExpression;
import org.openspcoop2.utils.sql.ISQLQueryObject;
import org.openspcoop2.utils.sql.SQLQueryObjectException;
Expand All @@ -40,6 +41,7 @@
import it.govpay.bd.model.Rendicontazione;
import it.govpay.bd.model.converter.RendicontazioneConverter;
import it.govpay.bd.pagamento.filters.RendicontazioneFilter;
import it.govpay.model.Rendicontazione.StatoRendicontazione;
import it.govpay.orm.IdRendicontazione;
import it.govpay.orm.dao.jdbc.JDBCRendicontazioneServiceSearch;
import it.govpay.orm.dao.jdbc.converter.RendicontazioneFieldConverter;
Expand Down Expand Up @@ -271,4 +273,42 @@ public List<Rendicontazione> getRendicontazioniBySingoloVersamento(long idSingol
}
}


public Rendicontazione getRendicontazione(String codDominio, String iuv, String iur, Integer indiceDati, StatoRendicontazione stato, boolean pagamentoNull) throws ServiceException, NotFoundException {
try {
if(this.isAtomica()) {
this.setupConnection(this.getIdTransaction());
}

IExpression exp = this.getRendicontazioneService().newExpression();

RendicontazioneFieldConverter fieldConverter = new RendicontazioneFieldConverter(this.getJdbcProperties().getDatabaseType());
RendicontazioneModel model = it.govpay.orm.Rendicontazione.model();

exp.equals(model.ID_FR.COD_DOMINIO, codDominio);
exp.and();
exp.equals(model.IUV, iuv);
exp.equals(model.IUR, iur);
exp.equals(model.INDICE_DATI, indiceDati);
exp.equals(model.STATO, stato.toString());

CustomField cf = new CustomField("id_pagamento", Long.class, "id_pagamento",fieldConverter.toTable(it.govpay.orm.Rendicontazione.model()));
if(pagamentoNull) {
exp.isNull(cf);
} else {
exp.isNotNull(cf);
}

it.govpay.orm.Rendicontazione rendicontazione = this.getRendicontazioneService().find(exp);
return RendicontazioneConverter.toDTO(rendicontazione);
} catch (NotImplementedException e) {
throw new ServiceException(e);
} catch (MultipleResultException | ExpressionNotImplementedException | ExpressionException e) {
throw new ServiceException(e);
} finally {
if(this.isAtomica()) {
this.closeConnection();
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -445,6 +445,7 @@ public List<it.govpay.bd.viste.model.Rendicontazione> ricercaRiscossioniDominio(
VistaRendicontazioneModel model = it.govpay.orm.VistaRendicontazione.model();
IExpression exp = this.getVistaRendicontazioneServiceSearch().newExpression();
exp.equals(model.FR_COD_DOMINIO, codDominio).and();
exp.equals(model.FR_OBSOLETO, false).and();
if(dataRtDa != null) {
exp.greaterEquals(model.RND_DATA, dataRtDa);
}
Expand Down Expand Up @@ -491,6 +492,7 @@ public long countRiscossioniDominio(String codDominio, Date dataRtDa, Date dataR
VistaRendicontazioneModel model = it.govpay.orm.VistaRendicontazione.model();
IExpression exp = this.getVistaRendicontazioneServiceSearch().newExpression();
exp.equals(model.FR_COD_DOMINIO, codDominio).and();
exp.equals(model.FR_OBSOLETO, false).and();
if(dataRtDa != null) {
exp.greaterEquals(model.RND_DATA, dataRtDa);
}
Expand Down
10 changes: 10 additions & 0 deletions src/main/resources/db/sql/mysql/patch/3.5.sql
Original file line number Diff line number Diff line change
Expand Up @@ -491,3 +491,13 @@ CREATE VIEW v_vrs_non_rnd AS
UPDATE rendicontazioni SET stato='ANOMALA', anomalie='007111#Il versamento risulta sconosciuto' WHERE stato='OK' AND id_singolo_versamento IS null;


-- 21/12/2021 Patch per la gestione del riferimento al pagamento di una rendicontazione che arriva prima della ricevuta.
UPDATE rendicontazioni SET id_pagamento = pagamenti.id
FROM fr, pagamenti
WHERE fr.id=rendicontazioni.id_fr
AND pagamenti.cod_dominio=fr.cod_dominio
AND rendicontazioni.iuv=pagamenti.iuv
AND rendicontazioni.iur=pagamenti.iur
AND rendicontazioni.id_pagamento IS NULL;


13 changes: 12 additions & 1 deletion src/main/resources/db/sql/oracle/patch/3.5.sql
Original file line number Diff line number Diff line change
Expand Up @@ -582,5 +582,16 @@ CREATE VIEW v_vrs_non_rnd AS

-- 20/12/2021 Patch per gestione delle rendicontazioni che non venivano messe in stato anomala quando non viene trovato il versamento corrispondente.
UPDATE rendicontazioni SET stato='ANOMALA', anomalie='007111#Il versamento risulta sconosciuto' WHERE stato='OK' AND id_singolo_versamento IS null;



-- 21/12/2021 Patch per la gestione del riferimento al pagamento di una rendicontazione che arriva prima della ricevuta.
UPDATE rendicontazioni SET id_pagamento = pagamenti.id
FROM fr, pagamenti
WHERE fr.id=rendicontazioni.id_fr
AND pagamenti.cod_dominio=fr.cod_dominio
AND rendicontazioni.iuv=pagamenti.iuv
AND rendicontazioni.iur=pagamenti.iur
AND rendicontazioni.id_pagamento IS NULL;



13 changes: 11 additions & 2 deletions src/main/resources/db/sql/postgresql/patch/3.5.sql
Original file line number Diff line number Diff line change
Expand Up @@ -584,5 +584,14 @@ CREATE VIEW v_vrs_non_rnd AS
UPDATE rendicontazioni SET stato='ANOMALA', anomalie='007111#Il versamento risulta sconosciuto' WHERE stato='OK' AND id_singolo_versamento IS null;




-- 21/12/2021 Patch per la gestione del riferimento al pagamento di una rendicontazione che arriva prima della ricevuta.
UPDATE rendicontazioni SET id_pagamento = pagamenti.id
FROM fr, pagamenti
WHERE fr.id=rendicontazioni.id_fr
AND pagamenti.cod_dominio=fr.cod_dominio
AND rendicontazioni.iuv=pagamenti.iuv
AND rendicontazioni.iur=pagamenti.iur
AND rendicontazioni.id_pagamento IS NULL;



10 changes: 10 additions & 0 deletions src/main/resources/db/sql/sqlserver/patch/3.5.sql
Original file line number Diff line number Diff line change
Expand Up @@ -584,3 +584,13 @@ CREATE VIEW v_vrs_non_rnd AS
UPDATE rendicontazioni SET stato='ANOMALA', anomalie='007111#Il versamento risulta sconosciuto' WHERE stato='OK' AND id_singolo_versamento IS null;


-- 21/12/2021 Patch per la gestione del riferimento al pagamento di una rendicontazione che arriva prima della ricevuta.
UPDATE rendicontazioni SET id_pagamento = pagamenti.id
FROM fr, pagamenti
WHERE fr.id=rendicontazioni.id_fr
AND pagamenti.cod_dominio=fr.cod_dominio
AND rendicontazioni.iuv=pagamenti.iuv
AND rendicontazioni.iur=pagamenti.iur
AND rendicontazioni.id_pagamento IS NULL;


0 comments on commit c18541a

Please sign in to comment.