diff --git a/ems-core/src/main/java/it/integry/ems/rules/completing/SalesRules.java b/ems-core/src/main/java/it/integry/ems/rules/completing/SalesRules.java index fbae908180..116370c80b 100644 --- a/ems-core/src/main/java/it/integry/ems/rules/completing/SalesRules.java +++ b/ems-core/src/main/java/it/integry/ems/rules/completing/SalesRules.java @@ -742,8 +742,6 @@ public class SalesRules extends QueryRules { for (int i = 0; i < rsmd.getColumnCount(); i++) { String columnName = UtilityString.sqlToField(rsmd.getColumnName(i + 1)); Object columnValue = rs.getObject(i + 1); - // 06/09/2019 (FABIO) - //Object valueEntity = DroolsUtil.getFieldValue(entity, "sconto8"); Object valueEntity = DroolsUtil.getFieldValue(entity, columnName); if (valueEntity == null) { //if ("percSco4".equals(columnName)){ @@ -774,13 +772,61 @@ public class SalesRules extends QueryRules { rs.close(); ps.close(); - // Se si tratta di un fornitore in TD gli sconti vengono azzerati, ma viene comunque lasciato il codice promozione eventualmente associato - /* if ("S".equals(flagTD)){ - campi.put("sconto5", BigDecimal.ZERO); - campi.put("sconto6", BigDecimal.ZERO); - campi.put("sconto7", BigDecimal.ZERO); - campi.put("sconto8", BigDecimal.ZERO); - }*/ + // Verifica presenza sconto contrattuali, in tal caso lo sconto viene inserito + // // nell'ultimo sconto di riga e se presente un'altro sconto viene cumulato + query = + "select TOP 1 vtb_promo_sconti.perc_sco1 as sconto5, " + + "vtb_promo_sconti.perc_sco2 as sconto6, " + + "vtb_promo_sconti.perc_sco3 as sconto7 " + + " from vtb_promo, " + + " vtb_promo_clienti, " + + " vtb_promo_articoli, " + + " vtb_promo_sconti " + + "where vtb_promo.cod_promo = vtb_promo_clienti.cod_promo and " + + " vtb_promo.cod_promo = vtb_promo_sconti.cod_promo and " + + " vtb_promo.cod_promo = vtb_promo_articoli.cod_promo and " + + " vtb_promo.flag_sconto_contrattuale = 'S' and " + + " (flag_tipo_promo = 'E') and " + + " vtb_promo.flag_attivo = 'S' and " + + " vtb_promo.data_iniz_sell_in <= " + UtilityDB.valueDateToString(dataValidita, CommonConstants.DATE_FORMAT_YMD) + " and " + UtilityDB.valueDateToString(dataValidita, CommonConstants.DATE_FORMAT_YMD) + " <= vtb_promo.data_fine_sell_in and " + + " vtb_promo_articoli.cod_mart = " + UtilityDB.valueToString(codMart) + " and " + + " vtb_promo_clienti.cod_anag = " + UtilityDB.valueToString(codAnag) + " and " + + " ISNULL(vtb_promo_clienti.cod_vdes, '') = " + UtilityDB.valueToString(codVdes); + + ps = conn.prepareStatement(query); + rs = ps.executeQuery(); + if (rs.next()) { + ResultSetMetaData rsmd = rs.getMetaData(); + for (int i = 0; i < rsmd.getColumnCount(); i++) { + String columnName = UtilityString.sqlToField(rsmd.getColumnName(i + 1)); + Object valueEntity = DroolsUtil.getFieldValue(entity, columnName); + BigDecimal percScoContr = BigDecimal.ZERO; + if (valueEntity == null) { + if ("sconto5".equals(columnName)){ + percScoContr = rs.getBigDecimal(1); + } else if ("sconto6".equals(columnName)){ + percScoContr = rs.getBigDecimal(2); + } else { + percScoContr = rs.getBigDecimal(3); + } + + if (percScoContr.compareTo(BigDecimal.ZERO) != 0) { + BigDecimal sconto = BigDecimal.ZERO; + if (campi.containsValue(columnName)) { + BigDecimal scontoContr = (BigDecimal) campi.get(columnName); + sconto = BigDecimal.ONE.subtract(BigDecimal.ONE.subtract(scontoContr.divide(BigDecimal.valueOf(100))).multiply(BigDecimal.ONE.subtract(percScoContr.divide(BigDecimal.valueOf(100))))).setScale(2, RoundingMode.HALF_UP); + campi.remove(columnName); + } else { + sconto = percScoContr; + } + ; + campi.put(columnName, sconto); + } + } + } + } + rs.close(); + ps.close(); if (entity instanceof DtbDocr) { ((DtbDocr) entity).setSetDatiLisv(false);