diff --git a/ems-core/src/main/java/it/integry/ems/rules/completing/DocOrdCalTotaliRules.java b/ems-core/src/main/java/it/integry/ems/rules/completing/DocOrdCalTotaliRules.java index 6fba5194fa..3570fdf3ac 100644 --- a/ems-core/src/main/java/it/integry/ems/rules/completing/DocOrdCalTotaliRules.java +++ b/ems-core/src/main/java/it/integry/ems/rules/completing/DocOrdCalTotaliRules.java @@ -612,7 +612,7 @@ public class DocOrdCalTotaliRules extends QueryRules { if (qta.compareTo(BigDecimal.ZERO) != 0) { boolean ventilazione = false; if ( row instanceof DtbDocr) ventilazione = ((DtbDocr) row).getVentilazione(); - addCastellettoIva(flagIvaInclusa?impRigaIva:importoRiga, codAliq, ventilazione, castelletto); + addCastellettoIva(flagIvaInclusa?impRigaIva:importoRiga, codAliq, ventilazione, castelletto, flagIvaInclusa); } /************************** @@ -736,7 +736,7 @@ public class DocOrdCalTotaliRules extends QueryRules { setNumColliPeso(testata, calcColli, datiTrasp, colli, colliFromDB); //CALCOLO TOTALI E CASTELLETTO IVA - calcTotImponib(testata, conn, flagIvaInclusa, castelletto, cifreDec); + calcTotImponib(testata, conn, castelletto, cifreDec); //Prima di calcolare l'acconto estrerre l'elenco delle bolle agganciate alla fatture differita if (testata instanceof DtbDoct && ((DtbDoct) testata).getDtbTipi().getTipoEmissioneEnum() == TipoEmissione.DIFFERITA) { @@ -823,7 +823,7 @@ public class DocOrdCalTotaliRules extends QueryRules { } totSpese = totSpese.add(importoRiga); if (addCastelletto) { - addCastellettoIva(importoRiga, codAliq, ventilazione, castelletto); + addCastellettoIva(importoRiga, codAliq, ventilazione, castelletto, flagIvaInclusa); } } } @@ -831,7 +831,7 @@ public class DocOrdCalTotaliRules extends QueryRules { return totSpese; } - private static void calcTotImponib(DtbDocOrdT testata, Connection conn, boolean flagIvaInclusa, + private static void calcTotImponib(DtbDocOrdT testata, Connection conn, List castellettoIva, Integer cifreDec) throws Exception { BigDecimal totImponib = BigDecimal.ZERO; BigDecimal totImposta = BigDecimal.ZERO; @@ -849,17 +849,23 @@ public class DocOrdCalTotaliRules extends QueryRules { Boolean ventilazioneIva = iva.getVentilazione(); BigDecimal totImpostaAliq; if (!UtilityString.isNullOrEmpty(codAliq)) { - String sql = "SELECT tipo_iva, flag_marca_da_bollo, perc_aliq, flag_iva_acq_merci FROM gtb_aliq WHERE cod_aliq = " + UtilityDB.valueToString(codAliq); + String sql = "SELECT tipo_iva, " + + "flag_marca_da_bollo, " + + "perc_aliq, " + + "flag_iva_acq_merci " + + "FROM gtb_aliq " + + "WHERE cod_aliq = " + UtilityDB.valueToString(codAliq); HashMap dati = UtilityDB.executeSimpleQueryOnlyFirstRow(conn, sql); String tipoIva = (String) dati.get("tipo_iva"); String flagAddMarcaBollo = (String) dati.get("flag_marca_da_bollo"); BigDecimal percAliq = (BigDecimal) dati.get("perc_aliq"); boolean flagIvaAcqMerci = UtilityHashMap.getValueIfExists(dati, "flag_iva_acq_merci").equalsIgnoreCase("S"); - if (flagIvaInclusa) { + if (iva.getFlagIvaInclusa()) { BigDecimal totImpScorporo = IntegerUtility.round(CommonRules.scorporoIva(conn, totImponibAliq, codAliq), 2); totImpostaAliq = totImponibAliq.subtract(totImpScorporo); totImponibAliq = totImponibAliq.subtract(totImpostaAliq); + iva.setFlagIvaInclusa(false); } else { totImpostaAliq = calcImposta(conn, totImponibAliq, percAliq, tipoIva, cifreDec); } @@ -890,8 +896,12 @@ public class DocOrdCalTotaliRules extends QueryRules { testata.setTotImponib(totImponib).setTotIva(totImposta); } - private static void addCastellettoIva(BigDecimal importoRiga, String codAliq, Boolean ventilazione, List castelletto) { - java.util.Optional first = castelletto.stream().filter(x -> UtilityString.equalsIgnoreCase(x.getCodAliq(), codAliq) && x.getVentilazione() == ventilazione).findFirst(); + private static void addCastellettoIva(BigDecimal importoRiga, String codAliq, Boolean ventilazione, List castelletto, Boolean flagIvaInclusa) { + java.util.Optional first = + castelletto.stream() + .filter(x -> UtilityString.equalsIgnoreCase(x.getCodAliq(), codAliq) && x.getVentilazione() == ventilazione && + x.getFlagIvaInclusa() == flagIvaInclusa) + .findFirst(); CtbMovi ctbMovi; if (first.isPresent()) { ctbMovi = first.get(); @@ -901,7 +911,8 @@ public class DocOrdCalTotaliRules extends QueryRules { ctbMovi = new CtbMovi() .setCodAliq(codAliq) .setVentilazione(ventilazione) - .setImponibile(importoRiga); + .setImponibile(importoRiga) + .setFlagIvaInclusa(flagIvaInclusa); } castelletto.add(ctbMovi); } @@ -1291,7 +1302,7 @@ public class DocOrdCalTotaliRules extends QueryRules { maxRigaSpesa = addAltreSpese(connection, testata, castelletto, speseCalc, maxRigaSpesa, whereCondExcSpese, cifreDec, ventilazione, flagPrzIva); if ( maxRigaSpesa > 0) - calcTotImponib(testata, connection, flagPrzIva, castelletto, cifreDec); + calcTotImponib(testata, connection, castelletto, cifreDec); } //Imposta di bollo @@ -1310,7 +1321,7 @@ public class DocOrdCalTotaliRules extends QueryRules { if (totDoc.compareTo(BigDecimal.ZERO) != 0) { maxRigaSpesa = addImpostaBollo(connection, testata, castelletto, speseCalc, maxRigaSpesa, whereCondExcSpese, totDoc, ventilazione); if (maxRigaSpesa > 0) - calcTotImponib(testata, connection, flagPrzIva, castelletto, cifreDec); + calcTotImponib(testata, connection, castelletto, cifreDec); } } } @@ -1365,7 +1376,7 @@ public class DocOrdCalTotaliRules extends QueryRules { dtbDocs.setRiga(maxRigaSpesa); dtbDocs.setOperation(OperationType.INSERT); if (castelletto != null) { - addCastellettoIva(dtbDocs.getImporto(), dtbDocs.getCodAliq(), ventilazione, castelletto); + addCastellettoIva(dtbDocs.getImporto(), dtbDocs.getCodAliq(), ventilazione, castelletto, false); } speseCalc.add(dtbDocs); @@ -1504,7 +1515,7 @@ public class DocOrdCalTotaliRules extends QueryRules { maxRigaSpesa = setDtbDocs(testata, castelletto, spesa, BigDecimal.ZERO, importo, speseCalc, maxRigaSpesa, ventilazione); } } - calcTotImponib(testata, connection, flagPrzIva, castelletto, cifreDec); + calcTotImponib(testata, connection, castelletto, cifreDec); } /* calcolo spese sul totale del documento diff --git a/ems-core/src/main/java/it/integry/ems_model/entity/CtbMovi.java b/ems-core/src/main/java/it/integry/ems_model/entity/CtbMovi.java index abc25c9156..1e53231824 100644 --- a/ems-core/src/main/java/it/integry/ems_model/entity/CtbMovi.java +++ b/ems-core/src/main/java/it/integry/ems_model/entity/CtbMovi.java @@ -69,6 +69,7 @@ public class CtbMovi extends EntityBase { private String flagMarcaDaBollo; private String tipoIva; + private Boolean flagIvaInclusa; public CtbMovi() { super(logger); @@ -217,4 +218,13 @@ public class CtbMovi extends EntityBase { this.tipoIva = tipoIva; return this; } + + public Boolean getFlagIvaInclusa() { + return flagIvaInclusa; + } + + public CtbMovi setFlagIvaInclusa(Boolean flagIvaInclusa) { + this.flagIvaInclusa = flagIvaInclusa; + return this; + } }