sistemata registazione distinte effetti con scadenze in divisa diversa da euro
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user