sistemata registazione distinte effetti con scadenze in divisa diversa da euro

This commit is contained in:
2024-02-27 09:56:23 +01:00
parent bbf199f6c7
commit d702d208ab
3 changed files with 83 additions and 35 deletions

View File

@@ -12,6 +12,7 @@ import it.integry.ems_model.types.OperationType;
import it.integry.ems_model.utility.*;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.sql.*;
import java.text.SimpleDateFormat;
import java.util.Date;
@@ -467,23 +468,28 @@ public class AccountingRules extends QueryRules {
elencoPartite.remove(ctbParrFirst.get());
ctbParr = ctbParrFirst.get();
if (ctbParr.getTipoPartitaEnum() == TipoPartita.PASSIVA) {
ctbParr.setImpDare(ctbParr.getImpDare().add(ctbScad.getImpDare()));
ctbParr.setImpDare(ctbParr.getImpDare().add(ctbScad.getImpDare().divide(ctbParr.getCambioDiviScad()).setScale(5, RoundingMode.HALF_UP)));
} else {
ctbParr.setImpAvere(ctbParr.getImpAvere().add(ctbScad.getImpAvere()));
ctbParr.setImpAvere(ctbParr.getImpAvere().add(ctbScad.getImpAvere().divide(ctbParr.getCambioDiviScad()).setScale(5, RoundingMode.HALF_UP)));
}
} else {
Integer tipoPartita = ctbMovr.getTipoPartita();
if (tipoPartita == null) {
String sql =
"SELECT Cast(tipo_partita as integer) as tipo_partita " +
" FROM ctb_part " +
" WHERE cod_anag = " + UtilityDB.valueToString(ctbScad.getCodAnag()) + " AND " +
"tipo_anag = " + UtilityDB.valueToString(ctbScad.getTipoAnag()) + " AND " +
"anno_part = " + UtilityDB.valueToString(ctbScad.getAnnoPart()) + " AND " +
"ser_doc = " + UtilityDB.valueToString(ctbScad.getSerDoc()) + " AND " +
"num_doc = " + UtilityDB.valueToString(ctbScad.getNumDoc());
tipoPartita = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(conn, sql);
BigDecimal cambioScad = BigDecimal.ONE;
Integer tipoPartita = ctbMovr.getTipoPartita();
String sql =
"SELECT Cast(tipo_partita as integer) as tipo_partita, cambio " +
" FROM ctb_part " +
" WHERE cod_anag = " + UtilityDB.valueToString(ctbScad.getCodAnag()) + " AND " +
"tipo_anag = " + UtilityDB.valueToString(ctbScad.getTipoAnag()) + " AND " +
"anno_part = " + UtilityDB.valueToString(ctbScad.getAnnoPart()) + " AND " +
"ser_doc = " + UtilityDB.valueToString(ctbScad.getSerDoc()) + " AND " +
"num_doc = " + UtilityDB.valueToString(ctbScad.getNumDoc());
HashMap<String, Object> datiCtbPart = UtilityDB.executeSimpleQueryOnlyFirstRow(conn, sql);
if ( UtilityHashMap.isPresent(datiCtbPart)) {
if ( tipoPartita == null ) tipoPartita = UtilityHashMap.getValueIfExists(datiCtbPart, "tipo_partita");
cambioScad = UtilityHashMap.getValueIfExists(datiCtbPart, "cambio", BigDecimal.ONE);
}
ctbScad.setTipoAnag(UtilityString.isNullOrEmpty(ctbScad.getTipoAnag()) ? ctbMovr.getTipoAnag() : ctbScad.getTipoAnag())
@@ -492,7 +498,6 @@ public class AccountingRules extends QueryRules {
.setSerDoc(UtilityString.isNullOrEmpty(ctbScad.getSerDoc()) ? ctbMovr.getSerDoc() : ctbScad.getSerDoc())
.setNumDoc(UtilityString.isNullOrEmpty(ctbScad.getNumDoc()) ? ctbMovr.getNumDoc() : ctbScad.getNumDoc());
ctbParr =
new CtbParr()
.setCodCcon(ctbMovr.getCodCcon())
@@ -503,12 +508,13 @@ public class AccountingRules extends QueryRules {
.setNumDoc(ctbScad.getNumDoc())
.setDataCmov(ctbMovr.getDataCmov())
.setIdRiga(ctbMovr.getIdRiga())
.setImpDare(TipoPartita.fromValue(tipoPartita) == TipoPartita.PASSIVA ? ctbScad.getImpDare() : BigDecimal.ZERO)
.setImpAvere(TipoPartita.fromValue(tipoPartita) == TipoPartita.ATTIVA ? ctbScad.getImpAvere() : BigDecimal.ZERO)
.setImpDare(TipoPartita.fromValue(tipoPartita) == TipoPartita.PASSIVA ? ctbScad.getImpDare().divide(cambioScad).setScale(5, RoundingMode.HALF_UP) : BigDecimal.ZERO)
.setImpAvere(TipoPartita.fromValue(tipoPartita) == TipoPartita.ATTIVA ? ctbScad.getImpAvere().divide(cambioScad).setScale(5, RoundingMode.HALF_UP) : BigDecimal.ZERO)
.setCodCcau(ctbMovr.getCodCcau())
.setDesAgg(finalDesAgg)
.setTipoPartita(tipoPartita)
.setChiudiScad(ctbMovr.getChiudiScad());
.setChiudiScad(ctbMovr.getChiudiScad())
.setCambioDiviScad(cambioScad);
ctbParr.setOperation(OperationType.INSERT_OR_UPDATE);
}
@@ -533,23 +539,39 @@ public class AccountingRules extends QueryRules {
}
ctbMovr.setCtbScad(elencoScadenzeNew);
} else {
CtbParr ctbParr =
new CtbParr()
.setCodCcon(ctbMovr.getCodCcon())
.setTipoAnag(ctbMovr.getTipoAnag())
.setCodAnag(ctbMovr.getCodAnag())
.setAnnoPart(ctbMovr.getAnnoPart())
.setSerDoc(ctbMovr.getSerDoc())
.setNumDoc(ctbMovr.getNumDoc())
.setDataCmov(ctbMovr.getDataCmov())
.setIdRiga(ctbMovr.getIdRiga())
.setImpDare(ctbMovr.getImpDare())
.setImpAvere(ctbMovr.getImpAvere())
.setCodCcau(ctbMovr.getCodCcau())
.setDesAgg(desAgg)
.setChiudiScad(ctbMovr.getChiudiScad());
ctbParr.setOperation(OperationType.INSERT_OR_UPDATE);
elencoPartite.add(ctbParr);
String sql =
Query.format(
"SELECT cast(case when count(*) > 1 THEN 1 ELSE 0 eND as bit)" +
" FROM ctb_parr " +
" WHERE cod_anag = %s AND " +
"tipo_anag = %s AND " +
"anno_part = %s AND " +
"ser_doc = %s AND " +
"num_doc = %s AND " +
"id_riga = %s ",
ctbMovr.getCodAnag(), ctbMovr.getTipoAnag(), ctbMovr.getAnnoPart(), ctbMovr.getSerDoc(), ctbMovr.getNumDoc(), ctbMovr.getIdRiga());
boolean existRow = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(conn, sql);
if (!existRow) {
CtbParr ctbParr =
new CtbParr()
.setCodCcon(ctbMovr.getCodCcon())
.setTipoAnag(ctbMovr.getTipoAnag())
.setCodAnag(ctbMovr.getCodAnag())
.setAnnoPart(ctbMovr.getAnnoPart())
.setSerDoc(ctbMovr.getSerDoc())
.setNumDoc(ctbMovr.getNumDoc())
.setDataCmov(ctbMovr.getDataCmov())
.setIdRiga(ctbMovr.getIdRiga())
.setImpDare(ctbMovr.getImpDare())
.setImpAvere(ctbMovr.getImpAvere())
.setCodCcau(ctbMovr.getCodCcau())
.setDesAgg(desAgg)
.setChiudiScad(ctbMovr.getChiudiScad());
ctbParr.setOperation(OperationType.INSERT_OR_UPDATE);
elencoPartite.add(ctbParr);
}
}
return elencoPartite;
}

View File

@@ -86,6 +86,8 @@ public class CtbParr extends EntityBase {
private Integer tipoPartita;
private BigDecimal cambioDiviScad;
@Priority(value = 101, copyPk = false)
private List<CtbScad> ctbScad;
@@ -258,6 +260,16 @@ public class CtbParr extends EntityBase {
this.tipoPartita = tipoPartita;
return this;
}
public BigDecimal getCambioDiviScad() {
return cambioDiviScad;
}
public CtbParr setCambioDiviScad(BigDecimal cambioDiviScad) {
this.cambioDiviScad = cambioDiviScad;
return this;
}
public List<CtbScad> getCtbScad() {
return ctbScad;
}

View File

@@ -1368,15 +1368,29 @@ public class ContabilService {
BigDecimal importoCP = BigDecimal.ZERO;
for (VtbRiba riga : listRiba) {
query =
Query.format(
"SELECT cambio\n" +
"FROM ctb_part\n" +
"WHERE tipo_anag = %s\n" +
" AND cod_anag = %s\n" +
" AND data_doc = %s\n" +
" AND ser_doc = %s\n" +
" AND num_doc = %s ",
tipoAnag, codAnag, riga.getDataDoc(), riga.getSerDoc(), riga.getNumDoc());
BigDecimal cambioPart = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), query);
BigDecimal impScad = riga.getImpScad().divide(distinta.getCambioDiviCont()).setScale(5, RoundingMode.HALF_UP);
List<CtbScad> elencoScadenze = null;
if (chiudiPartita ) {
BigDecimal impScadDivisa = impScad.multiply(cambioPart);
elencoScadenze = AccountingBusinessLogic.loadScadenze(multiDBTransactionManager.getPrimaryConnection(), riga.getTipoAnag(), codAnag, UtilityDate.getYear(riga.getDataDoc()), riga.getSerDoc(), riga.getNumDoc());
if (elencoScadenze != null && elencoScadenze.size() > 0) {
elencoScadenze = Stream.of(elencoScadenze).filter(s -> s.getIdRiga().equals(riga.getNumScad())).toList();
AccountingBusinessLogic.pagaScadenze(datiMov.getDataReg(), impScad.abs(), elencoScadenze, nextIdRiga);
AccountingBusinessLogic.pagaScadenze(datiMov.getDataReg(), impScadDivisa.abs(), elencoScadenze, nextIdRiga);
}
}