Merge branch 'develop' into feature/JDK11
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good

This commit is contained in:
jenkins
2025-08-06 17:37:14 +02:00
3 changed files with 418 additions and 230 deletions

View File

@@ -0,0 +1,138 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250806163114 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
createOrUpdateProcedure("UpdProgOrdini", "CREATE PROCEDURE [dbo].[UpdProgOrdini](\n" +
" @codAnag varchar(5),\n" +
" @codDtip varchar(5),\n" +
" @dataDoc dateTime,\n" +
" @serDoc varchar(2),\n" +
" @numDoc integer,\n" +
" @segno integer,\n" +
" @Operation varchar(1))\n" +
" /***DESCRIZIONE: Questa storedProcedure aggiorna la quantitÃÆÃ†â€™Ãƒâ€šÃ  evasa degli ordini e anche il \n" +
" numero di pezzi, non contiene una serie di logiche particolarti tipo la \n" +
" sostuzione dell'articolo nell'ordine\n" +
" \n" +
" */\n" +
"AS\n" +
"BEGIN\n" +
" SET NOCOUNT ON;\n" +
" \n" +
"\n" +
" UPDATE dtb_ordr\n" +
" SET dtb_ordr.qta_evasa = CASE WHEN (SELECT application_name from azienda ) = 'WINGEST' THEN dtb_ordr.qta_evasa + CASE dtb_ordr.unt_ord\n" +
" when doc.unt_doc then doc.qta_doc\n" +
" when doc.unt_doc2 then doc.qta_doc2\n" +
" when doc.unt_doc3 then doc.qta_doc3\n" +
" else \n" +
"Round((@segno * (doc.qta_doc_no_um / dtb_ordr.rap_conv)),mtb_unt_mis.cifre_dec) end \n" +
" ELSE dtb_ordr.qta_evasa END, \n" +
" dtb_ordr.num_cnf_evasa = dtb_ordr.num_cnf_evasa + (@segno * doc.num_cnf),\n" +
" dtb_ordr.flag_evaso_forzato = CASE WHEN @Operation = 'D' THEN 'N' ELSE doc.flag_evaso_forzato END,\n" +
" dtb_ordr.flag_evaso = CASE WHEN @Operation = 'D' THEN 'I'\n" +
" WHEN doc.flag_evaso_forzato = 'S' THEN 'E' ELSE dtb_ordr.flag_evaso END \n" +
" FROM dtb_ordr INNER JOIN mtb_unt_mis ON dtb_ordr.unt_ord = mtb_unt_mis.unt_mis\n" +
" INNER JOIN \n" +
" (SELECT dtb_doct.gestione,\n" +
" dtb_docr.data_ord,\n" +
" dtb_docr.num_ord,\n" +
" dtb_docr.riga_ord,\n" +
" sum(dtb_docr.qta_doc * dtb_docr.rap_conv) as qta_doc_no_um,\n" +
" \n" +
" dtb_docr.unt_doc,\n" +
" sum(dtb_docr.qta_doc) as qta_doc,\n" +
" \n" +
" dtb_docr.unt_doc2,\n" +
" sum(dtb_docr.qta_doc2) as qta_doc2,\n" +
" \n" +
" dtb_docr.unt_doc3,\n" +
" sum(dtb_docr.qta_doc3) as qta_doc3,\n" +
" sum(dtb_docr.num_cnf) as num_cnf,\n" +
" max(dtb_docr.flag_evaso_forzato) as flag_evaso_forzato\n" +
" FROM dtb_doct inner join dtb_tipi on dtb_doct.cod_dtip = dtb_tipi.cod_dtip\n" +
" inner join dtb_docr on dtb_doct.cod_dtip = dtb_docr.cod_dtip and\n" +
" dtb_doct.cod_anag = dtb_docr.cod_anag and\n" +
" dtb_doct.data_doc = dtb_docr.data_doc and\n" +
" dtb_doct.ser_doc = dtb_docr.ser_doc and\n" +
" dtb_doct.num_doc = dtb_docr.num_doc \n" +
" WHERE dtb_doct.cod_dtip = @codDtip AND\n" +
" dtb_doct.cod_anag = @codAnag AND\n" +
" dtb_doct.data_doc = @dataDoc AND\n" +
" dtb_doct.ser_doc = @serDoc AND\n" +
" dtb_doct.num_doc = @numDoc AND\n" +
" dtb_docr.data_ord is not null AND\n" +
" ( dtb_doct.gestione <> 'L' AND (dtb_tipi.segno_qta_car = 1 OR dtb_tipi.segno_qta_scar = 1 ) OR \n" +
" ( dtb_doct.gestione = 'L' AND dtb_tipi.segno_qta_scar = 1 ))\n" +
" GROUP BY dtb_doct.gestione,\n" +
" dtb_docr.data_ord,\n" +
" dtb_docr.num_ord,\n" +
" dtb_docr.riga_ord, \n" +
" dtb_docr.unt_doc, \n" +
" dtb_docr.unt_doc2, \n" +
" dtb_docr.unt_doc3 \n" +
" UNION ALL\n" +
" SELECT dtb_ordt.gestione_rif,\n" +
" dtb_ordt.data_ord_rif, \n" +
" dtb_ordt.num_ord_rif, \n" +
" dtb_ordt.riga_ord_rif,\n" +
" sum(dtb_docr.qta_doc * dtb_docr.rap_conv) as qta_doc_no_um,\n" +
" \n" +
" dtb_docr.unt_doc,\n" +
" sum(dtb_docr.qta_doc) as qta_doc,\n" +
" \n" +
" dtb_docr.unt_doc2,\n" +
" sum(dtb_docr.qta_doc2) as qta_doc2,\n" +
" \n" +
" dtb_docr.unt_doc3,\n" +
" sum(dtb_docr.qta_doc3) as qta_doc3,\n" +
" sum(dtb_docr.num_cnf) as num_cnf,\n" +
" max(dtb_docr.flag_evaso_forzato) as flag_evaso_forzato\n" +
" FROM dtb_doct inner join dtb_tipi on dtb_doct.cod_dtip = dtb_tipi.cod_dtip\n" +
" inner join dtb_docr on dtb_doct.cod_dtip = dtb_docr.cod_dtip and\n" +
" dtb_doct.cod_anag = dtb_docr.cod_anag and\n" +
" dtb_doct.data_doc = dtb_docr.data_doc and\n" +
" dtb_doct.ser_doc = dtb_docr.ser_doc and\n" +
" dtb_doct.num_doc = dtb_docr.num_doc\n" +
" left outer join dtb_ordt ON dtb_tipi.gestione = dtb_ordt.gestione and\n" +
" dtb_docr.data_ord = dtb_ordt.data_ord and\n" +
" dtb_docr.num_ord = dtb_ordt.num_ord\n" +
" WHERE dtb_doct.cod_dtip = @codDtip AND\n" +
" dtb_doct.cod_anag = @codAnag AND\n" +
" dtb_doct.data_doc = @dataDoc AND\n" +
" dtb_doct.ser_doc = @serDoc AND\n" +
" dtb_doct.num_doc = @numDoc AND\n" +
" dtb_docr.data_ord is not null AND\n" +
" dtb_doct.gestione = 'L' AND dtb_tipi.segno_qta_car = 1 AND\n" +
" (SELECT application_name from azienda ) = 'WINGEST'\n" +
" GROUP BY dtb_ordt.gestione_rif,\n" +
" dtb_ordt.data_ord_rif,\n" +
" dtb_ordt.num_ord_rif,\n" +
" dtb_ordt.riga_ord_rif, \n" +
" dtb_docr.unt_doc, \n" +
" dtb_docr.unt_doc2, \n" +
" dtb_docr.unt_doc3 ) doc ON\n" +
" dtb_ordr.gestione = doc.gestione AND\n" +
" dtb_ordr.data_ord = doc.data_ord AND\n" +
" dtb_ordr.num_ord = doc.num_ord AND\n" +
" dtb_ordr.riga_ord = doc.riga_ord;\n" +
" \n" +
" \n" +
"END");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -18,6 +18,7 @@ public class Lisv4LisaDTO {
private BigDecimal percMaggPrezzo;
private BigDecimal percMaggPrezzoAcquisto;
private Boolean aggArtCommerciali;
private Boolean disattivaArticoliDisattivati;
public LocalDate getDataValidita() {
return dataValidita;
@@ -144,4 +145,13 @@ public class Lisv4LisaDTO {
this.aggArtCommerciali = aggArtCommerciali;
return this;
}
public Boolean getDisattivaArticoliDisattivati() {
return disattivaArticoliDisattivati==null ? false : disattivaArticoliDisattivati;
}
public Lisv4LisaDTO setDisattivaArticoliDisattivati(Boolean disattivaArticoliDisattivati) {
this.disattivaArticoliDisattivati = disattivaArticoliDisattivati;
return this;
}
}

View File

@@ -12,10 +12,7 @@ import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
import it.integry.ems.utility.UtilityEntity;
import it.integry.ems_model.base.EntityBase;
import it.integry.ems_model.db.ResultSetMapper;
import it.integry.ems_model.entity.MtbLisvData;
import it.integry.ems_model.entity.VtbArti;
import it.integry.ems_model.entity.VtbArtiAcc;
import it.integry.ems_model.entity.VtbListData;
import it.integry.ems_model.entity.*;
import it.integry.ems_model.service.SetupGest;
import it.integry.ems_model.types.OperationType;
import it.integry.ems_model.utility.*;
@@ -31,6 +28,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;
@Service
@Scope("request")
@@ -70,8 +68,8 @@ public class Lisv4LisaService {
if (versione == null)
throw new Exception(String.format("Nondba sql ci sono variazione del listino %s in data %s", lisv4LisaDTO.getCodAlis(), today));
LocalDate dataValidita =null;
if ( !UtilityString.isNullOrEmpty(setupSection.get("DATA_VALIDITA"))) {
LocalDate dataValidita = null;
if (!UtilityString.isNullOrEmpty(setupSection.get("DATA_VALIDITA"))) {
List<Lisv4LisaDataValiditaDTO> setupDataValidita = Arrays.asList(new ObjectMapper().readValue(setupSection.get("DATA_VALIDITA"), Lisv4LisaDataValiditaDTO[].class));
DayOfWeek dayOfWeek = setupDataValidita.stream()
@@ -89,7 +87,7 @@ public class Lisv4LisaService {
int gg = Integer.parseInt(setupSection.get("GG_DA_AGGIUNGERE"));
dataValidita = today.plus(gg, java.time.temporal.ChronoUnit.DAYS);
}
if (dataValidita == null) dataValidita= today;
if (dataValidita == null) dataValidita = today;
lisv4LisaDTO
.setVersione(versione)
@@ -209,7 +207,8 @@ public class Lisv4LisaService {
String whereCondLisv = UtilityString.replaceSubString(lisv4LisaDTO.getWhereCondLisv(), "vtb_list", "lisv");
queryRigheLisv = UtilityDB.addwhereCond(queryRigheLisv, whereCondLisv, false);
List<MtbLisvData> mtbLisvDataList = getRigheLisv(setupSection, lisv4LisaDTO, queryRigheLisv, false);
List<EntityBase> entityList = getRigheLisv(setupSection, lisv4LisaDTO, queryRigheLisv, false);
//Aggiornamento promozione.
String queryPromo =
@@ -233,246 +232,287 @@ public class Lisv4LisaService {
+ " null, null, null ) P "
+ " WHERE p.flag_tipo_promo = 'A' ";
List<MtbLisvData> mtbLisvPromo = getRigheLisv(setupSection, lisv4LisaDTO, queryPromo, true);
List<EntityBase> mtbLisvPromo = getRigheLisv(setupSection, lisv4LisaDTO, queryPromo, true);
if (mtbLisvDataList != null && !mtbLisvDataList.isEmpty()) {
mtbLisvDataList.addAll(mtbLisvPromo);
if (entityList != null && !entityList.isEmpty()) {
entityList.addAll(mtbLisvPromo);
}
if (mtbLisvDataList == null || mtbLisvDataList.isEmpty()) {
if (entityList == null || entityList.isEmpty()) {
throw new Exception("Nessuna variazione da salvare.");
}
List<EntityBase> entityList = new ArrayList<EntityBase>();
for (MtbLisvData mtbLisvData : mtbLisvDataList) {
entityList.add(mtbLisvData);
}
return entityList;
}
private List<MtbLisvData> getRigheLisv(HashMap<String, String> setupSection, Lisv4LisaDTO lisv4LisaDTO, String queryRigheLisv, boolean isPromo) throws Exception {
private List<EntityBase> getRigheLisv(HashMap<String, String> setupSection, Lisv4LisaDTO lisv4LisaDTO, String queryRigheLisv, boolean isPromo) throws Exception {
String whereCond = "";
if (lisv4LisaDTO.getAggSoloArtLisv()) {
whereCond = " AND lisv.cod_mart is not null";
List<EntityBase> entityList = new ArrayList<>();
if (!lisv4LisaDTO.getCalcPrzBase().equalsIgnoreCase("7")) {
String whereCond = "";
if (lisv4LisaDTO.getAggSoloArtLisv()) {
whereCond = " AND lisv.cod_mart is not null";
}
String maggiorazionePrzAcq = "";
if (!UtilityBigDecimal.isNullOrZero(lisv4LisaDTO.getPercMaggPrezzoAcquisto())) {
maggiorazionePrzAcq = " * ( 1 + CAST(" + lisv4LisaDTO.getPercMaggPrezzoAcquisto() + " as numeric(20,5))/100) ";
}
String queryLisa =
"SELECT atb_list_data.cod_promo,\n" +
" atb_list_data.note AS descr_promo,\n" +
" atb_list_data.data_iniz_sell_out,\n" +
" atb_list_data.data_fine_sell_out,\n" +
" mtb_lisa.cod_mart,\n" +
" ROUND(ISNULL(mtb_lisa_data.prz_acq, mtb_lisa.prz_acq) / mtb_lisa.rap_conv [MAGG_PRZ_ACQ], 5) AS prz_acq,\n" +
" ROUND(dbo.f_calcprznettoacq(atb_list.cod_alis, atb_list.expression_costo,\n" +
" ISNULL(mtb_lisa_data.perc_1, mtb_lisa.perc_1),\n" +
" ISNULL(mtb_lisa_data.perc_2, mtb_lisa.perc_2),\n" +
" ISNULL(mtb_lisa_data.perc_3, mtb_lisa.perc_3),\n" +
" ISNULL(mtb_lisa_data.perc_4, mtb_lisa.perc_4),\n" +
" ISNULL(mtb_lisa_promo.perc_promo_1, 0), ISNULL(mtb_lisa_promo.perc_promo_2, 0),\n" +
" ISNULL(mtb_lisa_promo.perc_promo_3, 0), ISNULL(mtb_lisa_promo.perc_promo_4, 0),\n" +
" ISNULL(mtb_lisa_data.perc_promo, mtb_lisa.perc_promo),\n" +
" ISNULL(mtb_lisa_data.val_promo, mtb_lisa.val_promo),\n" +
" ISNULL(mtb_lisa_data.perc_oneri, mtb_lisa.perc_oneri),\n" +
" ISNULL(mtb_lisa_data.val_oneri, mtb_lisa.val_oneri),\n" +
" ISNULL(mtb_lisa_data.prz_acq, mtb_lisa.prz_acq)) / mtb_lisa.rap_conv [MAGG_PRZ_ACQ], 5) AS prz_acq_netto,\n" +
" ISNULL(mtb_lisa_data.prz_ven_sug, mtb_lisa.prz_ven_sug) AS prz_vend_sugg,\n" +
" atb_list_data.cod_alis,\n" +
" atb_list_data.versione\n" +
"FROM mtb_lisa\n" +
" INNER JOIN atb_list ON atb_list.cod_alis = mtb_lisa.cod_alis\n" +
" INNER JOIN mtb_aart ON mtb_lisa.cod_mart = mtb_aart.cod_mart\n" +
" INNER JOIN mtb_lisa_data ON mtb_lisa.cod_alis = mtb_lisa_data.cod_alis AND\n" +
" mtb_lisa.cod_art_for = mtb_lisa_data.cod_art_for AND " +
" mtb_lisa_data.versione = [VERSIONE]\n" +
" LEFT OUTER JOIN mtb_lisa_promo ON mtb_lisa_data.cod_alis = mtb_lisa_promo.cod_alis AND\n" +
" mtb_lisa_data.versione = mtb_lisa_promo.versione AND\n" +
" mtb_lisa_data.cod_art_for = mtb_lisa_promo.cod_art_for\n" +
" LEFT OUTER JOIN atb_list_data ON mtb_lisa_data.cod_alis = atb_list_data.cod_alis AND\n" +
" mtb_lisa_data.versione = atb_list_data.versione\n" +
"WHERE (mtb_lisa_data.tipo_variazione IS NULL OR mtb_lisa_data.tipo_variazione <> 'D')\n" +
" AND mtb_lisa.cod_alis = [COD_ALIS]\n" +
" AND (([VERSIONE] <> 0 AND mtb_lisa_data.versione IS NOT NULL) OR ([VERSIONE] = 0))\n" +
" AND mtb_lisa.flag_attivo = 'S'\n " +
" AND ISNULL(mtb_lisa_data.prz_acq, mtb_lisa.prz_acq) > 0 ";
queryLisa = queryLisa
.replace("[COD_ALIS]", UtilityDB.valueToString(lisv4LisaDTO.getCodAlis()))
.replace("[VERSIONE]", UtilityDB.valueToString(lisv4LisaDTO.getVersione()))
.replace("[MAGG_PRZ_ACQ]", maggiorazionePrzAcq);
String queryLisv =
"SELECT vtb_list.cod_vlis, "
+ " vtb_list.flag_lisv_margine, "
+ " case " +
" when " + UtilityDB.valueToString(lisv4LisaDTO.getCalcPrzBase()) + " = '4' AND IsNull("
+ UtilityDB.valueToString(lisv4LisaDTO.getRicaricoTestataLisv()) + " , 0) <> 0 " +
" THEN " + UtilityDB.valueToString(lisv4LisaDTO.getRicaricoTestataLisv()) +
" ELSE IsNull("
+ "(SELECT TOP 1 ricarica "
+ " FROM vtb_list_data "
+ " WHERE vtb_list_data.cod_vlis = vtb_list.cod_vlis AND "
+ " vtb_list_data.cod_promo is null AND "
+ " vtb_list_data.data_iniz <= " + UtilityDB.valueToString(lisv4LisaDTO.getDataValidita())
+ "ORDER BY vtb_list_data.data_iniz desc, vtb_list_data.versione desc), vtb_list.ricarica) END AS ricarico_testata, "
+ " vtb_list.flag_list_iva_inclusa "
+ " FROM vtb_list "
+ "WHERE 1 = 1 ";
queryLisv = UtilityDB.addwhereCond(queryLisv, lisv4LisaDTO.getWhereCondLisv(), true);
String queryGriglia =
"SELECT STUFF( (SELECT ',''' + vtb_list.cod_vlis + '''' AS [text()] "
+ " FROM mtb_depo cross apply "
+ " dbo.getGrigliaAcquisto(" + UtilityDB.valueToString(lisv4LisaDTO.getDataValidita()) + ","
+ UtilityDB.valueToString(lisv4LisaDTO.getCodAlis()) + ", mtb_depo.cod_mdep, null, lisa.cod_mart) griglia, "
+ " vtb_list "
+ " WHERE mtb_depo.cod_vlis = vtb_list.cod_vlis and "
+ "IsNull(vtb_list.cod_vlis_rif, vtb_list.cod_vlis) = lisv.cod_vlis and "
+ "griglia.tipo_variazione <> 'D'FOR XML PATH('')), 1, 1, '' ) as elenco_lisv ";
String calcPrzVendIva = "dbo.f_calcPrzVendIva(tmp.cod_vlis, tmp.cod_mart, tmp.prz_vend) ";
if (!UtilityString.isNullOrEmpty(lisv4LisaDTO.getTipoArrotondamento())) {
calcPrzVendIva = "dbo.f_roundFromUnit( " + calcPrzVendIva + ", " + UtilityDB.valueToString(lisv4LisaDTO.getTipoArrotondamento()) + " , " + UtilityDB.valueToString(lisv4LisaDTO.getMultiplo()) + ") ";
}
String queryAssortimento =
"SELECT testata_lisv.cod_vlis, "
+ " Convert(datetime, case when lisv.is_promo = 1 then lisv.data_iniz when lisa.cod_promo is null then " + UtilityDB.valueToString(lisv4LisaDTO.getDataValidita()) + " else lisa.data_iniz_sell_out end) as data_iniz, "
+ " case when lisv.is_promo = 1 then lisv.data_fine when lisa.cod_promo is null then null else lisa.data_fine_sell_out end as data_fine, "
+ " case when lisv.is_promo = 1 then lisv.cod_promo else lisa.cod_promo end as cod_promo, "
+ " case when lisv.is_promo = 1 then lisv.versione else null end as versione, "
+ " lisa.descr_promo, "
+ " lisa.cod_mart, "
+ " IsNull(lisv.unt_mis_ven, mtb_aart.unt_mis) as unt_mis_ven, "
+ " IsNull(lisv.rap_conv, 1) as rap_conv, "
+ " lisa.prz_acq_netto * IsNull(lisv.rap_conv, 1) as prz_base, " //TO-DO Mina
+ " case when lisv.cod_mart is null THEN "
+ "CASE " + UtilityDB.valueToString(setupSection.get("RICARICO_ART_NUOVI"))
+ " WHEN 'T' THEN testata_lisv.ricarico_testata "
+ " ELSE 0 END "
+ " ELSE lisv.ricarico END as ricarico, "
+ " testata_lisv.flag_lisv_margine, "
+ " lisv.prz_vend, "
+ " mtb_aart.perc_sfrido, "
+ " testata_lisv.ricarico_testata, "
+ " lisv.magg_prz_vend, "
+ " lisa.prz_acq * IsNull(lisv.rap_conv, 1) as prz_lisa_lordo, "
+ " lisa.prz_vend_sugg as prz_vend_sugg_lisa_iva, "
+ " lisa.prz_vend_sugg / (1+ gtb_aliq.perc_aliq/100) as prz_vend_sugg_lisa, "
+ " CASE WHEN " + UtilityDB.valueToString(lisv4LisaDTO.getFiltraGriglia()) + " = 1 THEN griglie.elenco_lisv ELSE null END as elenco_lisv_rif, "
+ " testata_lisv.flag_list_iva_inclusa, "
+ " CASE " + UtilityDB.valueToString(setupSection.get("NOTE_LISV_4_LISA"))
+ " WHEN 'A' THEN lisa.cod_alis + '_' + Cast( lisa.versione as varchar) "
+ " ELSE NULL END AS note_lisv "
+ " FROM (" + queryLisa + ") lisa "
+ " CROSS APPLY ( " + queryLisv + " ) testata_lisv "
+ " LEFT OUTER JOIN ( " + queryRigheLisv + ") lisv on lisa.cod_mart = lisv.cod_mart AND testata_lisv.cod_vlis = lisv.cod_vlis "
+ " OUTER APPLY ( " + queryGriglia + " ) griglie "
+ " INNER JOIN mtb_aart ON lisa.cod_mart = mtb_aart.cod_mart "
+ " INNER JOIN gtb_aliq ON mtb_aart.cod_aliq = gtb_aliq.cod_aliq "
+ " WHERE isnull(lisv.flag_prz_bloccato,'N') = 'N' AND "
+ " ((" + UtilityDB.valueToString(lisv4LisaDTO.getFiltraGriglia()) + " = 0) OR "
+ " (" + UtilityDB.valueToString(lisv4LisaDTO.getFiltraGriglia()) + " = 1 and griglie.elenco_lisv is not null)) AND "
+ " ( (" + UtilityDB.valueToString(isPromo ? "S" : "N") + " = 'S' AND lisv.cod_mart is not null ) OR ( " + UtilityDB.valueToString(isPromo ? "S" : "N") + " = 'N' )) "
+ whereCond;
/*
* NEL PREZZO DI VENDITA E' STATO INSERITO IL VALORE [NULL] PERCHE' IL PREZZO DI VENDITA DEVE ESSERE
* RICALCOLATO E NON PRESO DAL DATABASE
*/
String query =
"SELECT tmp.cod_vlis, "
+ " tmp.data_iniz, "
+ " tmp.data_fine, "
+ " tmp.versione, "
+ " tmp.cod_promo, "
+ " tmp.descr_promo, "
+ " tmp.cod_mart, "
+ " tmp.unt_mis_ven, "
+ " tmp.rap_conv, "
+ " tmp.prz_base, "
+ " CASE WHEN tmp.ricarica > 999.99 THEN 999.99 ELSE tmp.ricarica END as ricarica, "
+ " tmp.magg_prz_vend, "
+ " CASE WHEN tmp.flag_list_iva_inclusa = 'N' "
+ " THEN dbo.f_roundFromUnit( tmp.prz_vend, " + UtilityDB.valueToString(lisv4LisaDTO.getTipoArrotondamento()) + " , " + UtilityDB.valueToString(lisv4LisaDTO.getMultiplo()) + ") "
+ " ELSE null END as prz_vend, "
+ " CASE WHEN tmp.flag_list_iva_inclusa = 'S' AND tmp.prz_vend_iva is null "
+ " THEN " + calcPrzVendIva
+ " ELSE tmp.prz_vend_iva END AS prz_vend_iva, "
+ " tmp.elenco_lisv_rif, "
+ UtilityDB.valueToString(requestDataDTO.getUsername()) + " + ' AGG. DA LISTINO DI ACQUISTO "
+ lisv4LisaDTO.getCodAlis() + " VERSIONE " + lisv4LisaDTO.getVersione() + "' AS 'aggiornato_da' "
+ " FROM ( "
+ "SELECT dati.cod_vlis, "
+ " dati.data_iniz, "
+ " dati.data_fine, "
+ " dati.cod_promo, "
+ " dati.versione, "
+ " dati.descr_promo, "
+ " dati.cod_mart, "
+ " dati.unt_mis_ven, "
+ " dati.rap_conv, "
+ " dati.prz_base, "
+ " case " + UtilityDB.valueToString(lisv4LisaDTO.getCalcPrzBase())
+ " when '1' then dati.ricarico "
+ " when '2' then "
+ "CASE WHEN dati.flag_lisv_margine = 'S' "
+ " THEN dbo.f_calcMargineEffettivo(dati.prz_base, dati.prz_vend, dati.perc_sfrido) "
+ " ELSE dbo.f_calcRicaricoEffettivo(dati.prz_base , dati.prz_vend, dati.perc_sfrido) END "
+ " when '3' then dati.ricarico "
+ " when '4' then dati.ricarico_testata "
+ " when '5' then dati.ricarico "
+ " when '6' then dati.ricarico end as ricarica, "
+ " dati.magg_prz_vend, "
+ " case " + UtilityDB.valueToString(lisv4LisaDTO.getCalcPrzBase())
+ " when '1' then dbo.f_calcPrzVendNoRec(dati.cod_vlis, dati.cod_mart, dati.prz_base, dati.ricarico, dati.perc_sfrido, dati.magg_prz_vend) "
+ " when '2' then dati.prz_vend "
+ " when '3' then dati.prz_lisa_lordo "
+ " when '4' then dbo.f_calcPrzVendNoRec(dati.cod_vlis, dati.cod_mart, dati.prz_base, dati.ricarico_testata, dati.perc_sfrido, dati.magg_prz_vend) "
+ " when '5' then dati.prz_vend "
+ " when '6' then dati.prz_vend_sugg_lisa end * "
+ "( CASE "
+ " WHEN " + UtilityDB.valueToString(lisv4LisaDTO.getPercMaggPrezzo()) + " IS NOT NULL AND "
+ UtilityDB.valueToString(lisv4LisaDTO.getPercMaggPrezzo()) + " <> 0 THEN ( 1 + ( " + UtilityDB.valueToString(lisv4LisaDTO.getPercMaggPrezzo()) + " /100 )) ELSE 1 END ) as prz_vend, "
+ " CASE WHEN " + UtilityDB.valueToString(lisv4LisaDTO.getCalcPrzBase()) + " = '6' THEN dati.prz_vend_sugg_lisa_iva else null END as prz_vend_iva, "
+ " dati.elenco_lisv_rif, "
+ " dati.flag_list_iva_inclusa, "
+ " dati.note_lisv "
+ " FROM ( " + queryAssortimento + " ) dati ) tmp "
+ " ORDER BY tmp.cod_vlis, tmp.cod_mart ";
OperationType operationType = OperationType.INSERT_OR_UPDATE;
if (isPromo) {
operationType = OperationType.UPDATE;
}
List<MtbLisvData> mtbLisvDataList = new ResultSetMapper()
.mapQuerySetToList(multiDBTransactionManager.getPrimaryConnection(), query, MtbLisvData.class, operationType);
if (mtbLisvDataList != null && !mtbLisvDataList.isEmpty()) {
entityList.addAll(mtbLisvDataList);
}
}
String maggiorazionePrzAcq = "";
if (!UtilityBigDecimal.isNullOrZero(lisv4LisaDTO.getPercMaggPrezzoAcquisto())) {
maggiorazionePrzAcq = " * ( 1 + CAST(" + lisv4LisaDTO.getPercMaggPrezzoAcquisto() + " as numeric(20,5))/100) ";
}
String queryLisa =
"SELECT atb_list_data.cod_promo,\n" +
" atb_list_data.note AS descr_promo,\n" +
" atb_list_data.data_iniz_sell_out,\n" +
" atb_list_data.data_fine_sell_out,\n" +
" mtb_lisa.cod_mart,\n" +
" ROUND(ISNULL(mtb_lisa_data.prz_acq, mtb_lisa.prz_acq) / mtb_lisa.rap_conv [MAGG_PRZ_ACQ], 5) AS prz_acq,\n" +
" ROUND(dbo.f_calcprznettoacq(atb_list.cod_alis, atb_list.expression_costo,\n" +
" ISNULL(mtb_lisa_data.perc_1, mtb_lisa.perc_1),\n" +
" ISNULL(mtb_lisa_data.perc_2, mtb_lisa.perc_2),\n" +
" ISNULL(mtb_lisa_data.perc_3, mtb_lisa.perc_3),\n" +
" ISNULL(mtb_lisa_data.perc_4, mtb_lisa.perc_4),\n" +
" ISNULL(mtb_lisa_promo.perc_promo_1, 0), ISNULL(mtb_lisa_promo.perc_promo_2, 0),\n" +
" ISNULL(mtb_lisa_promo.perc_promo_3, 0), ISNULL(mtb_lisa_promo.perc_promo_4, 0),\n" +
" ISNULL(mtb_lisa_data.perc_promo, mtb_lisa.perc_promo),\n" +
" ISNULL(mtb_lisa_data.val_promo, mtb_lisa.val_promo),\n" +
" ISNULL(mtb_lisa_data.perc_oneri, mtb_lisa.perc_oneri),\n" +
" ISNULL(mtb_lisa_data.val_oneri, mtb_lisa.val_oneri),\n" +
" ISNULL(mtb_lisa_data.prz_acq, mtb_lisa.prz_acq)) / mtb_lisa.rap_conv [MAGG_PRZ_ACQ], 5) AS prz_acq_netto,\n" +
" ISNULL(mtb_lisa_data.prz_ven_sug, mtb_lisa.prz_ven_sug) AS prz_vend_sugg,\n" +
" atb_list_data.cod_alis,\n" +
" atb_list_data.versione\n" +
"FROM mtb_lisa\n" +
" INNER JOIN atb_list ON atb_list.cod_alis = mtb_lisa.cod_alis\n" +
" INNER JOIN mtb_aart ON mtb_lisa.cod_mart = mtb_aart.cod_mart\n" +
" INNER JOIN mtb_lisa_data ON mtb_lisa.cod_alis = mtb_lisa_data.cod_alis AND\n" +
" mtb_lisa.cod_art_for = mtb_lisa_data.cod_art_for AND " +
" mtb_lisa_data.versione = [VERSIONE]\n" +
" LEFT OUTER JOIN mtb_lisa_promo ON mtb_lisa_data.cod_alis = mtb_lisa_promo.cod_alis AND\n" +
" mtb_lisa_data.versione = mtb_lisa_promo.versione AND\n" +
" mtb_lisa_data.cod_art_for = mtb_lisa_promo.cod_art_for\n" +
" LEFT OUTER JOIN atb_list_data ON mtb_lisa_data.cod_alis = atb_list_data.cod_alis AND\n" +
" mtb_lisa_data.versione = atb_list_data.versione\n" +
"WHERE (mtb_lisa_data.tipo_variazione IS NULL OR mtb_lisa_data.tipo_variazione <> 'D')\n" +
" AND mtb_lisa.cod_alis = [COD_ALIS]\n" +
" AND (([VERSIONE] <> 0 AND mtb_lisa_data.versione IS NOT NULL) OR ([VERSIONE] = 0))\n" +
" AND mtb_lisa.flag_attivo = 'S'\n "+
" AND ISNULL(mtb_lisa_data.prz_acq, mtb_lisa.prz_acq) > 0 ";
queryLisa = queryLisa
.replace("[COD_ALIS]", UtilityDB.valueToString(lisv4LisaDTO.getCodAlis()))
.replace("[VERSIONE]", UtilityDB.valueToString(lisv4LisaDTO.getVersione()))
.replace("[MAGG_PRZ_ACQ]", maggiorazionePrzAcq);
String queryLisv =
"SELECT vtb_list.cod_vlis, "
+ " vtb_list.flag_lisv_margine, "
+ " case " +
" when " + UtilityDB.valueToString(lisv4LisaDTO.getCalcPrzBase()) + " = '4' AND IsNull("
+ UtilityDB.valueToString(lisv4LisaDTO.getRicaricoTestataLisv()) + " , 0) <> 0 " +
" THEN " + UtilityDB.valueToString(lisv4LisaDTO.getRicaricoTestataLisv()) +
" ELSE IsNull("
+ "(SELECT TOP 1 ricarica "
+ " FROM vtb_list_data "
+ " WHERE vtb_list_data.cod_vlis = vtb_list.cod_vlis AND "
+ " vtb_list_data.cod_promo is null AND "
+ " vtb_list_data.data_iniz <= " + UtilityDB.valueToString(lisv4LisaDTO.getDataValidita())
+ "ORDER BY vtb_list_data.data_iniz desc, vtb_list_data.versione desc), vtb_list.ricarica) END AS ricarico_testata, "
+ " vtb_list.flag_list_iva_inclusa "
+ " FROM vtb_list "
+ "WHERE 1 = 1 ";
queryLisv = UtilityDB.addwhereCond(queryLisv, lisv4LisaDTO.getWhereCondLisv(), true);
String queryGriglia =
"SELECT STUFF( (SELECT ',''' + vtb_list.cod_vlis + '''' AS [text()] "
+ " FROM mtb_depo cross apply "
+ " dbo.getGrigliaAcquisto(" + UtilityDB.valueToString(lisv4LisaDTO.getDataValidita()) + ","
+ UtilityDB.valueToString(lisv4LisaDTO.getCodAlis()) + ", mtb_depo.cod_mdep, null, lisa.cod_mart) griglia, "
+ " vtb_list "
+ " WHERE mtb_depo.cod_vlis = vtb_list.cod_vlis and "
+ "IsNull(vtb_list.cod_vlis_rif, vtb_list.cod_vlis) = lisv.cod_vlis and "
+ "griglia.tipo_variazione <> 'D'FOR XML PATH('')), 1, 1, '' ) as elenco_lisv ";
String calcPrzVendIva = "dbo.f_calcPrzVendIva(tmp.cod_vlis, tmp.cod_mart, tmp.prz_vend) ";
if (!UtilityString.isNullOrEmpty(lisv4LisaDTO.getTipoArrotondamento())) {
calcPrzVendIva = "dbo.f_roundFromUnit( " + calcPrzVendIva + ", " + UtilityDB.valueToString(lisv4LisaDTO.getTipoArrotondamento()) + " , " + UtilityDB.valueToString(lisv4LisaDTO.getMultiplo()) + ") ";
}
String queryAssortimento =
"SELECT testata_lisv.cod_vlis, "
+ " Convert(datetime, case when lisv.is_promo = 1 then lisv.data_iniz when lisa.cod_promo is null then " + UtilityDB.valueToString(lisv4LisaDTO.getDataValidita()) + " else lisa.data_iniz_sell_out end) as data_iniz, "
+ " case when lisv.is_promo = 1 then lisv.data_fine when lisa.cod_promo is null then null else lisa.data_fine_sell_out end as data_fine, "
+ " case when lisv.is_promo = 1 then lisv.cod_promo else lisa.cod_promo end as cod_promo, "
+ " case when lisv.is_promo = 1 then lisv.versione else null end as versione, "
+ " lisa.descr_promo, "
+ " lisa.cod_mart, "
+ " IsNull(lisv.unt_mis_ven, mtb_aart.unt_mis) as unt_mis_ven, "
+ " IsNull(lisv.rap_conv, 1) as rap_conv, "
+ " lisa.prz_acq_netto * IsNull(lisv.rap_conv, 1) as prz_base, " //TO-DO Mina
+ " case when lisv.cod_mart is null THEN "
+ "CASE " + UtilityDB.valueToString(setupSection.get("RICARICO_ART_NUOVI"))
+ " WHEN 'T' THEN testata_lisv.ricarico_testata "
+ " ELSE 0 END "
+ " ELSE lisv.ricarico END as ricarico, "
+ " testata_lisv.flag_lisv_margine, "
+ " lisv.prz_vend, "
+ " mtb_aart.perc_sfrido, "
+ " testata_lisv.ricarico_testata, "
+ " lisv.magg_prz_vend, "
+ " lisa.prz_acq * IsNull(lisv.rap_conv, 1) as prz_lisa_lordo, "
+ " lisa.prz_vend_sugg as prz_vend_sugg_lisa_iva, "
+ " lisa.prz_vend_sugg / (1+ gtb_aliq.perc_aliq/100) as prz_vend_sugg_lisa, "
+ " CASE WHEN " + UtilityDB.valueToString(lisv4LisaDTO.getFiltraGriglia()) + " = 1 THEN griglie.elenco_lisv ELSE null END as elenco_lisv_rif, "
+ " testata_lisv.flag_list_iva_inclusa, "
+ " CASE " + UtilityDB.valueToString(setupSection.get("NOTE_LISV_4_LISA"))
+ " WHEN 'A' THEN lisa.cod_alis + '_' + Cast( lisa.versione as varchar) "
+ " ELSE NULL END AS note_lisv "
+ " FROM (" + queryLisa + ") lisa "
+ " CROSS APPLY ( " + queryLisv + " ) testata_lisv "
+ " LEFT OUTER JOIN ( " + queryRigheLisv + ") lisv on lisa.cod_mart = lisv.cod_mart AND testata_lisv.cod_vlis = lisv.cod_vlis "
+ " OUTER APPLY ( " + queryGriglia + " ) griglie "
+ " INNER JOIN mtb_aart ON lisa.cod_mart = mtb_aart.cod_mart "
+ " INNER JOIN gtb_aliq ON mtb_aart.cod_aliq = gtb_aliq.cod_aliq "
+ " WHERE isnull(lisv.flag_prz_bloccato,'N') = 'N' AND "
+ " ((" + UtilityDB.valueToString(lisv4LisaDTO.getFiltraGriglia()) + " = 0) OR "
+ " (" + UtilityDB.valueToString(lisv4LisaDTO.getFiltraGriglia()) + " = 1 and griglie.elenco_lisv is not null)) AND "
+ " ( (" + UtilityDB.valueToString(isPromo ? "S" : "N") + " = 'S' AND lisv.cod_mart is not null ) OR ( " + UtilityDB.valueToString(isPromo ? "S" : "N") + " = 'N' )) "
+ whereCond;
/*
* NEL PREZZO DI VENDITA E' STATO INSERITO IL VALORE [NULL] PERCHE' IL PREZZO DI VENDITA DEVE ESSERE
* RICALCOLATO E NON PRESO DAL DATABASE
*/
String query =
"SELECT tmp.cod_vlis, "
+ " tmp.data_iniz, "
+ " tmp.data_fine, "
+ " tmp.versione, "
+ " tmp.cod_promo, "
+ " tmp.descr_promo, "
+ " tmp.cod_mart, "
+ " tmp.unt_mis_ven, "
+ " tmp.rap_conv, "
+ " tmp.prz_base, "
+ " CASE WHEN tmp.ricarica > 999.99 THEN 999.99 ELSE tmp.ricarica END as ricarica, "
+ " tmp.magg_prz_vend, "
+ " CASE WHEN tmp.flag_list_iva_inclusa = 'N' "
+ " THEN dbo.f_roundFromUnit( tmp.prz_vend, " + UtilityDB.valueToString(lisv4LisaDTO.getTipoArrotondamento()) + " , " + UtilityDB.valueToString(lisv4LisaDTO.getMultiplo()) + ") "
+ " ELSE null END as prz_vend, "
+ " CASE WHEN tmp.flag_list_iva_inclusa = 'S' AND tmp.prz_vend_iva is null "
+ " THEN " + calcPrzVendIva
+ " ELSE tmp.prz_vend_iva END AS prz_vend_iva, "
+ " tmp.elenco_lisv_rif, "
+ UtilityDB.valueToString(requestDataDTO.getUsername()) + " + ' AGG. DA LISTINO DI ACQUISTO "
+ lisv4LisaDTO.getCodAlis() + " VERSIONE " + lisv4LisaDTO.getVersione() + "' AS 'aggiornato_da' "
+ " FROM ( "
+ "SELECT dati.cod_vlis, "
+ " dati.data_iniz, "
+ " dati.data_fine, "
+ " dati.cod_promo, "
+ " dati.versione, "
+ " dati.descr_promo, "
+ " dati.cod_mart, "
+ " dati.unt_mis_ven, "
+ " dati.rap_conv, "
+ " dati.prz_base, "
+ " case " + UtilityDB.valueToString(lisv4LisaDTO.getCalcPrzBase())
+ " when '1' then dati.ricarico "
+ " when '2' then "
+ "CASE WHEN dati.flag_lisv_margine = 'S' "
+ " THEN dbo.f_calcMargineEffettivo(dati.prz_base, dati.prz_vend, dati.perc_sfrido) "
+ " ELSE dbo.f_calcRicaricoEffettivo(dati.prz_base , dati.prz_vend, dati.perc_sfrido) END "
+ " when '3' then dati.ricarico "
+ " when '4' then dati.ricarico_testata "
+ " when '5' then dati.ricarico "
+ " when '6' then dati.ricarico end as ricarica, "
+ " dati.magg_prz_vend, "
+ " case " + UtilityDB.valueToString(lisv4LisaDTO.getCalcPrzBase())
+ " when '1' then dbo.f_calcPrzVendNoRec(dati.cod_vlis, dati.cod_mart, dati.prz_base, dati.ricarico, dati.perc_sfrido, dati.magg_prz_vend) "
+ " when '2' then dati.prz_vend "
+ " when '3' then dati.prz_lisa_lordo "
+ " when '4' then dbo.f_calcPrzVendNoRec(dati.cod_vlis, dati.cod_mart, dati.prz_base, dati.ricarico_testata, dati.perc_sfrido, dati.magg_prz_vend) "
+ " when '5' then dati.prz_vend "
+ " when '6' then dati.prz_vend_sugg_lisa end * "
+ "( CASE "
+ " WHEN " + UtilityDB.valueToString(lisv4LisaDTO.getPercMaggPrezzo()) + " IS NOT NULL AND "
+ UtilityDB.valueToString(lisv4LisaDTO.getPercMaggPrezzo()) + " <> 0 THEN ( 1 + ( " + UtilityDB.valueToString(lisv4LisaDTO.getPercMaggPrezzo()) + " /100 )) ELSE 1 END ) as prz_vend, "
+ " CASE WHEN " + UtilityDB.valueToString(lisv4LisaDTO.getCalcPrzBase()) + " = '6' THEN dati.prz_vend_sugg_lisa_iva else null END as prz_vend_iva, "
+ " dati.elenco_lisv_rif, "
+ " dati.flag_list_iva_inclusa, "
+ " dati.note_lisv "
+ " FROM ( " + queryAssortimento + " ) dati ) tmp "
+ " ORDER BY tmp.cod_vlis, tmp.cod_mart ";
OperationType operationType = OperationType.INSERT_OR_UPDATE;
if (isPromo) {
operationType = OperationType.UPDATE;
}
List<MtbLisvData> mtbLisvDataList = new ResultSetMapper()
.mapQuerySetToList(multiDBTransactionManager.getPrimaryConnection(), query, MtbLisvData.class, operationType);
if (!isPromo && lisv4LisaDTO.getDisattivaLisv()) {
query =
"SELECT lisv.cod_vlis, "
+ " lisv.cod_mart, "
+ " Convert(datetime, " + UtilityDB.valueToString(lisv4LisaDTO.getDataValidita()) + ") AS data_iniz, "
+ " 'D' as tipo_variazione "
+ " FROM ( " + queryRigheLisv + ") lisv left outer join ( " + queryLisa + ") lisa on lisv.cod_mart = lisa.cod_mart "
+ " WHERE lisa.cod_mart is null ";
if (!isPromo && lisv4LisaDTO.getDisattivaArticoliDisattivati()) {
String query =
Query.format(
"SELECT lisv.cod_vlis, "
+ " lisv.cod_mart, "
+ " Convert(datetime, " + UtilityDB.valueToString(lisv4LisaDTO.getDataValidita()) + ") AS data_iniz, "
+ " 'D' as tipo_variazione "
+ " FROM ( " + queryRigheLisv + ") lisv "
+ "WHERE EXISTS(SELECT *\n"
+ " FROM mtb_lisa\n"
+ " INNER JOIN mtb_lisa_data\n"
+ " ON mtb_lisa.cod_alis = mtb_lisa_data.cod_alis AND\n"
+ " mtb_lisa.cod_art_for = mtb_lisa_data.cod_art_for\n"
+ " WHERE mtb_lisa.cod_alis = %S\n"
+ " AND mtb_lisa_data.versione = %S\n"
+ " AND mtb_lisa_data.tipo_variazione = 'D'\n"
+ " AND mtb_lisa.cod_mart = lisv.cod_mart)",
lisv4LisaDTO.getCodAlis(), lisv4LisaDTO.getVersione());
List<MtbLisvData> mtbLisvDataListDel = new ResultSetMapper()
.mapQuerySetToList(multiDBTransactionManager.getPrimaryConnection(), query, MtbLisvData.class, OperationType.INSERT_OR_UPDATE);
if (!mtbLisvDataListDel.isEmpty()) {
mtbLisvDataList.addAll(mtbLisvDataListDel);
entityList.addAll(mtbLisvDataListDel);
List<MtbAart> arts = mtbLisvDataListDel.stream().map(x -> {
MtbAart mtbAart = new MtbAart()
.setCodMart(x.getCodMart())
.setFlagStato("I");
mtbAart.setOperation(OperationType.UPDATE);
return mtbAart;
}).collect(Collectors.toList());
if (!arts.isEmpty()) {
entityList.addAll(arts);
}
}
}
return mtbLisvDataList;
if (!isPromo && lisv4LisaDTO.getDisattivaLisv()) {
String query =
Query.format(
"SELECT lisv.cod_vlis, "
+ " lisv.cod_mart, "
+ " Convert(datetime, " + UtilityDB.valueToString(lisv4LisaDTO.getDataValidita()) + ") AS data_iniz, "
+ " 'D' as tipo_variazione "
+ " FROM ( " + queryRigheLisv + ") lisv "
+ "WHERE NOT EXISTS(SELECT *\n"
+ " FROM dbo.getListinoAcquisto(%s, %s, null, null 'N', null) lisa\n"
+ " WHERE mtb_lisa.cod_mart = lisv.cod_mart AND (lisa.tipo_variazione is null OR lisa.tipo_variazione <> 'D')) ",
lisv4LisaDTO.getDataValidita(), lisv4LisaDTO.getCodAlis());
List<MtbLisvData> mtbLisvDataListDel = new ResultSetMapper()
.mapQuerySetToList(multiDBTransactionManager.getPrimaryConnection(), query, MtbLisvData.class, OperationType.INSERT_OR_UPDATE);
if (!mtbLisvDataListDel.isEmpty()) {
entityList.addAll(mtbLisvDataListDel);
}
}
return entityList;
}
private List<VtbArti> getVtbArti(List<VtbArtiAcc> entityList) {