Merge remote-tracking branch 'origin/develop' into develop

This commit is contained in:
2024-06-11 10:57:28 +02:00
2 changed files with 246 additions and 96 deletions

View File

@@ -0,0 +1,165 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20240611095629 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
createOrUpdateFunction("getListinoVendita", "CREATE FUNCTION [dbo].[getListinoVendita](@datavalidita DATETIME, @codvlis VARCHAR(5), @codmart VARCHAR(15))\n" +
" RETURNS TABLE AS\n" +
" RETURN\n" +
" SELECT vtb_list.cod_vlis,\n" +
" vtb_list.descrizione,\n" +
" CASE\n" +
" WHEN tmp_list.max_lisv IS NULL THEN NULL\n" +
" ELSE CONVERT(DATETIME, LEFT(tmp_list.max_lisv, 10)) END AS data_iniz,\n" +
" CASE\n" +
" WHEN tmp_list.max_lisv IS NULL THEN NULL\n" +
" ELSE CONVERT(INT, RIGHT(tmp_list.max_lisv, 4)) END AS versione,\n" +
" vtb_list.cod_divi,\n" +
" vtb_list.cambio,\n" +
" vtb_list.flag_arr_prz_iva,\n" +
" vtb_list.arr_ric,\n" +
" vtb_list.flag_list_iva_inclusa,\n" +
" vtb_list.flag_lisv_margine,\n" +
" vtb_list.flag_add_trasp,\n" +
" tmp_list.cod_mart AS 'cod_mart',\n" +
" mtb_lisv_data.unt_mis_ven AS unt_mis_ven,\n" +
" ISNULL(mtb_lisv_data.rap_conv, 1) AS rap_conv,\n" +
" ISNULL(mtb_lisv_data.prz_base, 0) AS prz_base,\n" +
" ISNULL(mtb_lisv_data.ricarica, 0) AS ricarico,\n" +
" CASE\n" +
" WHEN mtb_lisv_data.prz_vend IS NOT NULL AND mtb_lisv_data.prz_vend <> 0 THEN\n" +
" ROUND((ISNULL(mtb_lisv_data.prz_vend, 0) -\n" +
" (ISNULL(mtb_lisv_data.prz_base, 0) / (1 - mtb_aart.perc_sfrido / 100))) /\n" +
" ISNULL(mtb_lisv_data.prz_vend, 0) * 100, 2)\n" +
" ELSE 0 END AS margine_eff,\n" +
" --dbo.f_calcMargineEffettivo(IsNull(mtb_lisv_data.prz_base, 0), IsNull(mtb_lisv_data.prz_vend, 0), mtb_aart.perc_sfrido) as margine_eff,\n" +
" --dbo.f_calcRicaricoEffettivo(IsNull(mtb_lisv_data.prz_base, 0), IsNull(mtb_lisv_data.prz_vend, 0), mtb_aart.perc_sfrido) ricarico_eff, \n" +
" CASE\n" +
" WHEN mtb_lisv_data.prz_base IS NOT NULL AND mtb_lisv_data.prz_base <> 0 THEN\n" +
" ROUND((ISNULL(mtb_lisv_data.prz_vend, 0) -\n" +
" (ISNULL(mtb_lisv_data.prz_base, 0) / (1 - mtb_aart.perc_sfrido / 100))) /\n" +
" (ISNULL(mtb_lisv_data.prz_base, 0) / (1 - mtb_aart.perc_sfrido / 100)) * 100, 2)\n" +
" ELSE 0 END AS ricarico_eff,\n" +
"\n" +
" ISNULL(mtb_lisv_data.magg_prz_vend, 0) AS magg_prz_vend,\n" +
" ISNULL(mtb_lisv_data.prz_vend, 0) AS prz_vend,\n" +
" ISNULL(mtb_lisv_data.prz_vend_iva, 0) AS prz_vend_iva,\n" +
" ISNULL(mtb_lisv_data.perc_sco1, 0) AS perc_sco1,\n" +
" ISNULL(mtb_lisv_data.perc_sco2, 0) AS perc_sco2,\n" +
" ISNULL(mtb_lisv_data.perc_sco3, 0) AS perc_sco3,\n" +
" ISNULL(mtb_lisv_data.perc_sco4, 0) AS perc_sco4,\n" +
" ISNULL(mtb_lisv_data.perc_prov, 0) AS perc_prov,\n" +
" ISNULL(mtb_lisv_data.fisso_prov, 0) AS fisso_prov,\n" +
" ISNULL(mtb_lisv_data.posizione, '') AS posizione,\n" +
" ISNULL(mtb_lisv_data.perc_gest, 0) AS perc_gest,\n" +
" ISNULL(mtb_lisv_data.val_gest, 0) AS val_gest,\n" +
" mtb_lisv_data.data_agg_prz AS data_agg_prz,\n" +
" ISNULL(mtb_lisv_data.perc_ispe, 0) AS perc_ispe,\n" +
" ISNULL(mtb_lisv_data.val_ispe, 0) AS val_ispe,\n" +
" ISNULL(mtb_lisv_data.perc_promo, 0) AS perc_promo,\n" +
" ISNULL(mtb_lisv_data.val_promo, 0) AS val_promo,\n" +
" ISNULL(mtb_lisv_data.perc_oneri, 0) AS perc_oneri,\n" +
" ISNULL(mtb_lisv_data.val_oneri, 0) AS val_oneri,\n" +
" mtb_lisv_data.tipo_variazione AS tipo_variazione,\n" +
" mtb_lisv_data.note AS note,\n" +
" mtb_lisv_data.aggiornato_da AS aggiornato_da,\n" +
" mtb_lisv_data.prz_vend * (1 - mtb_lisv_data.perc_sco1 / 100) * (1 - mtb_lisv_data.perc_sco2 / 100) *\n" +
" (1 - mtb_lisv_data.perc_sco3 / 100) *\n" +
" (1 - mtb_lisv_data.perc_sco4 / 100) AS prz_vend_netto,\n" +
" CASE\n" +
" WHEN ISNULL(mtb_lisv_data.colli_pedana, 0) <> 0 THEN mtb_lisv_data.colli_pedana\n" +
" ELSE mtb_aart.colli_pedana END AS colli_pedana,\n" +
" mtb_lisv_data.cod_tcol_ul AS cod_tcol_ul,\n" +
" mtb_lisv_data.cod_tcol_ui AS cod_tcol_ui,\n" +
" ISNULL(mtb_lisv_data.prz_vend_sug, 0) AS prz_vend_sug,\n" +
" CASE\n" +
" WHEN ISNULL(mtb_lisv_data.qta_cnf, 0) <> 0\n" +
" AND dbo.getGestSetup('VTB_LIST', 'SETUP', 'QTA_CNF_LISTINO') = 'S' \n" +
" THEN mtb_lisv_data.qta_cnf\n" +
" ELSE mtb_aart.qta_cnf END AS qta_cnf,\n" +
" CASE\n" +
" WHEN ISNULL(mtb_lisv_data.colli_strato, 0) <> 0 THEN mtb_lisv_data.colli_strato\n" +
" ELSE mtb_aart.colli_strato END AS colli_strato,\n" +
" mtb_lisv_data.descrizione_html AS descrizione_html,\n" +
" mtb_lisv_data.colli_pedana AS colli_pedana_lisv,\n" +
" mtb_lisv_data.qta_cnf AS qta_cnf_lisv,\n" +
" mtb_lisv_data.colli_strato AS colli_strato_lisv,\n" +
" mtb_lisv_data.sconto_cartoni,\n" +
" mtb_lisv_data.sconto_strato,\n" +
" mtb_lisv_data.sconto_pedane,\n" +
" vtb_list.flag_attivo,\n" +
" vtb_list_data.note AS note_testata,\n" +
" ISNULL(mtb_lisv_data.flag_prz_bloccato, 'N') AS flag_prz_bloccato,\n" +
" vtb_list_data.porto AS porto,\n" +
" mtb_lisv_data.system_note,\n" +
" mtb_lisv.add_val_spese,\n" +
" mtb_lisv.add_ric_spese,\n" +
" mtb_lisv.add_sco_spese,\n" +
" mtb_aart.flag_incl_listino\n" +
" FROM (SELECT vtb_list.cod_vlis AS cod_vlis,\n" +
" mtb_lisv_data.cod_mart,\n" +
" MAX(CASE\n" +
" WHEN vtb_list_data.versione IS NULL THEN NULL\n" +
" ELSE CONVERT(VARCHAR(10), vtb_list_data.data_iniz, 111) + ' ' +\n" +
" REPLICATE('0', 5 - LEN(vtb_list_data.versione)) +\n" +
" CONVERT(VARCHAR(5), vtb_list_data.versione) END) AS max_lisv,\n" +
" vtb_list.cod_vlis AS 'cod_vlis_rif'\n" +
" FROM vtb_list\n" +
" INNER JOIN mtb_lisv_data ON vtb_list.cod_vlis = mtb_lisv_data.cod_vlis\n" +
" LEFT OUTER JOIN vtb_list_data ON mtb_lisv_data.cod_vlis = vtb_list_data.cod_vlis AND\n" +
" mtb_lisv_data.versione = vtb_list_data.versione AND\n" +
" vtb_list_data.cod_promo IS NULL AND\n" +
" vtb_list_data.data_iniz <= ISNULL(@datavalidita, GETDATE())\n" +
" WHERE vtb_list.cod_vlis_rif IS NULL\n" +
" GROUP BY vtb_list.cod_vlis,\n" +
" mtb_lisv_data.cod_mart\n" +
" UNION\n" +
" SELECT vtb_list.cod_vlis AS cod_vlis,\n" +
" mtb_lisv_data.cod_mart,\n" +
" MAX(CASE\n" +
" WHEN vtb_list_data.versione IS NULL THEN NULL\n" +
" ELSE CONVERT(VARCHAR(10), vtb_list_data.data_iniz, 111) + ' ' +\n" +
" REPLICATE('0', 5 - LEN(vtb_list_data.versione_rif)) +\n" +
" CONVERT(VARCHAR(5), vtb_list_data.versione_rif) END) AS max_lisv,\n" +
" vtb_list.cod_vlis_rif AS 'cod_vlis_rif'\n" +
" FROM vtb_list\n" +
" INNER JOIN vtb_list_data ON vtb_list.cod_vlis = vtb_list_data.cod_vlis\n" +
" INNER JOIN vtb_list_data vtb_list_data_rif\n" +
" ON vtb_list_data.versione_rif = vtb_list_data_rif.versione AND\n" +
" vtb_list_data.cod_vlis_rif = vtb_list_data_rif.cod_vlis\n" +
" INNER JOIN mtb_lisv_data ON vtb_list_data_rif.cod_vlis = mtb_lisv_data.cod_vlis AND\n" +
" vtb_list_data_rif.versione = mtb_lisv_data.versione\n" +
"\n" +
" WHERE vtb_list_data.data_iniz <= ISNULL(@datavalidita, GETDATE())\n" +
" AND vtb_list.cod_vlis_rif IS NOT NULL\n" +
" GROUP BY vtb_list.cod_vlis,\n" +
" mtb_lisv_data.cod_mart,\n" +
" vtb_list.cod_vlis_rif) tmp_list\n" +
" INNER JOIN vtb_list ON vtb_list.cod_vlis = tmp_list.cod_vlis\n" +
" INNER JOIN mtb_lisv\n" +
" ON tmp_list.cod_vlis_rif = mtb_lisv.cod_vlis AND tmp_list.cod_mart = mtb_lisv.cod_mart\n" +
" INNER JOIN mtb_aart ON tmp_list.cod_mart = mtb_aart.cod_mart\n" +
" LEFT OUTER JOIN mtb_lisv_data ON tmp_list.cod_vlis_rif = mtb_lisv_data.cod_vlis AND\n" +
" tmp_list.cod_mart = mtb_lisv_data.cod_mart AND\n" +
" CONVERT(INT, RIGHT(tmp_list.max_lisv, 5)) = mtb_lisv_data.versione\n" +
" LEFT OUTER JOIN vtb_list_data ON tmp_list.cod_vlis = vtb_list_data.cod_vlis AND\n" +
" CONVERT(INT, RIGHT(tmp_list.max_lisv, 5)) = vtb_list_data.versione\n" +
"\n" +
" WHERE (@codmart IS NULL OR tmp_list.cod_mart = @codmart)\n" +
" AND (@codvlis IS NULL OR tmp_list.cod_vlis = @codvlis)");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -1,6 +1,7 @@
package it.integry.ems.product.service;
import com.annimon.stream.Stream;
import io.swagger.models.auth.In;
import it.integry.common.var.CommonConstants;
import it.integry.ems.exception.MissingDataException;
import it.integry.ems.javabeans.RequestDataDTO;
@@ -393,26 +394,10 @@ public class ListiniVenditaServices {
public List<EntityBase> updateLisv(List<MtbLisvData> listini) throws Exception {
//QUESTA PROCEDURA VIENE CHIAMATA DALLA GESTIONE A GRIGLIA PER SALVARE I LISTINI.
List<Map.Entry<VtbListData, List<MtbLisvData>>> elencoVariazioni = Stream.of(listini).groupBy(x -> {
VtbListData vtbListData =
new VtbListData()
.setCodVlis(x.getCodVlis())
.setCodPromo(x.getCodPromo())
.setDataIniz(x.getDataIniz())
.setDataFine(x.getDataFine())
.setDescrPromo(x.getDescrPromo())
.setNote(x.getNoteLisv());
return vtbListData;
}
).toList();
List<EntityBase> entities = new ArrayList<>();
for (Map.Entry<VtbListData, List<MtbLisvData>> var : elencoVariazioni) {
VtbListData vtbListData = var.getKey();
vtbListData.setCheckDataIniz(false);//In questo caso inibiamo il controllo sulla data inizio
Integer versione = null;
for (MtbLisvData mtbLisvData : var.getValue()) {
if (!UtilityString.isNullOrEmpty(vtbListData.getCodPromo())) {
Integer versione;
List<MtbLisvData> listiniDel = new ArrayList<>();
for (MtbLisvData mtbLisvData : listini) {
if (!UtilityString.isNullOrEmpty(mtbLisvData.getCodPromo())) {
String sql =
Query.format(
"SELECT vtb_list_data.versione, vtb_list_data.data_fine " +
@@ -423,10 +408,10 @@ public class ListiniVenditaServices {
"vtb_list_data.data_iniz = %s AND " +
"mtb_lisv_data.cod_mart = %s AND " +
"vtb_list_data.cod_promo = %s ",
vtbListData.getCodVlis(),
vtbListData.getDataIniz(),
mtbLisvData.getCodVlis(),
mtbLisvData.getDataIniz(),
mtbLisvData.getCodMart(),
vtbListData.getCodPromo());
mtbLisvData.getCodPromo());
HashMap<String, Object> datiPromo = UtilityDB.executeSimpleQueryOnlyFirstRow(
multiDBTransactionManager.getPrimaryConnection(), sql);
@@ -460,7 +445,7 @@ public class ListiniVenditaServices {
" WHERE cod_vlis = %s AND " +
" versione = %s AND " +
" cod_mart <> %s",
vtbListData.getCodVlis(),
mtbLisvData.getCodVlis(),
versione,
mtbLisvData.getCodMart());
@@ -468,44 +453,44 @@ public class ListiniVenditaServices {
if (countArt > 0) {
//Cancelliamo l'articolo dalla vecchia promozione
VtbListData finalVtbListData = vtbListData;
com.annimon.stream.Optional<EntityBase> firstLisv = Stream.of(entities)
.filter(x -> x instanceof VtbListData &&
((VtbListData) x).getCodVlis().equalsIgnoreCase(finalVtbListData.getCodVlis()) &&
((VtbListData) x).getCodPromo().equalsIgnoreCase(finalVtbListData.getCodPromo()) &&
UtilityString.equalsIgnoreCase(((VtbListData) x).getNote(), finalVtbListData.getNote()) &&
Objects.equals(((VtbListData) x).getDataIniz(), finalVtbListData.getDataIniz()) &&
Objects.equals(((VtbListData) x).getDataFine(), dataFine)
).findFirst();
VtbListData vtbListDataOld = null;
if (firstLisv.isPresent()) {
vtbListDataOld = (VtbListData) firstLisv.get();
} else {
vtbListDataOld = (VtbListData) vtbListData.clone();
vtbListDataOld.setMtbLisvData(new ArrayList<>());
vtbListDataOld.setDataFine(dataFine)
.setVersione(versione);
vtbListDataOld.setOperation(OperationType.UPDATE);
entities.add(vtbListDataOld);
}
MtbLisvData mtbLisvDataDeleted = (MtbLisvData) mtbLisvData.clone();
mtbLisvDataDeleted.setOperation(OperationType.DELETE);
vtbListDataOld.getMtbLisvData().add(mtbLisvDataDeleted);
mtbLisvDataDeleted.setDataFine(dataFine);
mtbLisvDataDeleted.setVersione(versione);
listiniDel.add(mtbLisvDataDeleted);
versione = null;
}
}
mtbLisvData.setVersione(versione);
if (versione != null)
mtbLisvData.setOperation(OperationType.UPDATE);
else
mtbLisvData.setOperation(OperationType.INSERT);
}
vtbListData.getMtbLisvData().add(mtbLisvData);
}
if (versione != null) {
vtbListData.setVersione(versione);
vtbListData.setOperation(OperationType.UPDATE);
} else {
vtbListData.setOperation(OperationType.INSERT);
vtbListData.setVersione(null);
}
listini.addAll(listiniDel);
List<Map.Entry<VtbListData, List<MtbLisvData>>> elencoVariazioni = Stream.of(listini).groupBy(x -> {
VtbListData vtbListData =
new VtbListData()
.setCodVlis(x.getCodVlis())
.setCodPromo(x.getCodPromo())
.setDataIniz(x.getDataIniz())
.setDataFine(x.getDataFine())
.setVersione(x.getVersione())
.setDescrPromo(x.getDescrPromo())
.setNote(x.getNoteLisv());
return vtbListData;
}
).toList();
List<EntityBase> entities = new ArrayList<>();
for (Map.Entry<VtbListData, List<MtbLisvData>> var : elencoVariazioni) {
VtbListData vtbListData = var.getKey();
vtbListData.setOperation(OperationType.INSERT_OR_UPDATE);
vtbListData.setCheckDataIniz(false);//In questo caso inibiamo il controllo sulla data inizio
vtbListData.setMtbLisvData(var.getValue());
entities.add(vtbListData);
}