Finish Insert_promo

This commit is contained in:
2025-05-02 17:58:23 +02:00
16 changed files with 772 additions and 116 deletions

View File

@@ -3,6 +3,7 @@ package it.integry.ems.controller;
import com.fasterxml.jackson.databind.JsonNode;
import it.integry.common.var.CommonConstants;
import it.integry.ems.Import.base.EntityImportResponse;
import it.integry.ems.Import.dto.AnomalieDTO;
import it.integry.ems.Import.dto.ImportRequestDTO;
import it.integry.ems.download.DownloadFileHandlerService;
import it.integry.ems.download.dto.DownloadFileDto;
@@ -544,40 +545,27 @@ public class EmsController {
}
@RequestMapping(value = EmsRestConstants.PATH_EXPORT, method = RequestMethod.POST)
public @ResponseBody ServiceRestResponse export(
HttpServletRequest request,
@RequestParam(CommonConstants.PROFILE_DB) String configuration,
@RequestParam(value = EmsRestConstants.TYPE) String typeExport,
@RequestParam(value = EmsRestConstants.FORMAT) String formatExport,
@RequestParam(required = false, defaultValue = "false") Boolean binaryDownload,
@RequestParam(required = false, defaultValue = "true") boolean headless,
@RequestBody(required = false) JsonNode body) throws Exception {
public @ResponseBody ServiceRestResponse export(HttpServletRequest request,
@RequestParam(CommonConstants.PROFILE_DB) String configuration,
@RequestParam(value = EmsRestConstants.TYPE) String typeExport,
@RequestParam(value = EmsRestConstants.FORMAT) String formatExport,
@RequestParam(required = false, defaultValue = "false") Boolean binaryDownload,
@RequestParam(required = false, defaultValue = "true") boolean headless,
@RequestBody(required = false) JsonNode body) throws Exception {
EntityExportResponse<?> entityExportResponse = emsServices.export(typeExport, formatExport, body, headless);
List<MessageDTO> messages = new ArrayList<>();
List<AnomalieDTO> anomalie = new ArrayList<>();
if (entityExportResponse != null && entityExportResponse.getAnomalie() != null && !entityExportResponse.getAnomalie().isEmpty()) {
messages = entityExportResponse.getAnomalie().stream()
.filter(x -> x.getTipo() != null)
.map(x -> {
switch (x.getTipo()) {
case ERROR:
return MessageDTO.error(x.getMessage());
case WARNING:
default:
return MessageDTO.warning(x.getMessage());
}
})
.collect(Collectors.toList());
}
if (entityExportResponse != null && entityExportResponse.getAnomalie() != null && !entityExportResponse.getAnomalie().isEmpty())
anomalie = entityExportResponse.getAnomalie();
ServiceRestResponse sr;
if (!messages.isEmpty() && messages.stream().anyMatch(x->x.getLevel()==(MessageDTO.Level.ERROR))) {
if (!anomalie.isEmpty() && anomalie.stream().anyMatch(x -> x.getTipo() == (AnomalieDTO.Type.ERROR))) {
sr = ServiceRestResponse.createNegativeResponse();
} else {
sr = ServiceRestResponse.createPositiveResponse();
}
sr.setMessages(messages);
sr.setMessagesFromAnomalie(anomalie);
if (entityExportResponse != null) {
if (binaryDownload) {
@@ -632,48 +620,23 @@ public class EmsController {
.map(x -> MessageDTO.error(x.getException().getMessage()))
.collect(Collectors.toList());
List<MessageDTO> messages = importResponse.getAnomalie().stream()
.filter(x -> x.getTipo() != null)
.map(x -> {
switch (x.getTipo()) {
case ERROR:
return MessageDTO.error(x.getMessage());
case WARNING:
default:
return MessageDTO.warning(x.getMessage());
}
})
.collect(Collectors.toList());
List<AnomalieDTO> anomalie = importResponse.getAnomalie();
errorMessages.addAll(messages);
if (!errorMessages.isEmpty()) {
if (!errorMessages.isEmpty() || (anomalie != null && !anomalie.isEmpty())) {
response = ServiceRestResponse.createNegativeResponse();
} else {
response = ServiceRestResponse.createPositiveResponse();
}
response.setMessages(errorMessages);
response.setMessages(errorMessages, importResponse.getAnomalie());
response.setEntityList(entities.stream().filter(x -> x.getException() == null).collect(Collectors.toList()));
} else {
if (importResponse.getAnomalie() != null) {
if (!importResponse.getAnomalie().isEmpty()) {
List<MessageDTO> messages = importResponse.getAnomalie().stream()
.map(x -> {
switch (x.getTipo()) {
case ERROR:
return MessageDTO.error(x.getMessage());
case WARNING:
default:
return MessageDTO.warning(x.getMessage());
}
})
.collect(Collectors.toList());
response = ServiceRestResponse.createNegativeResponse()
.setMessagesFromAnomalie(importResponse.getAnomalie());
response = ServiceRestResponse.createNegativeResponse();
response.setMessages(messages);
} else response = ServiceRestResponse.createPositiveResponse();
} else throw new Exception("Non ci sono dati da importare");

View File

@@ -0,0 +1,223 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.IntegryCustomer;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250417112613 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
executeStatement("ALTER TABLE vtb_promo ADD flag_volantino BIT NOT NULL DEFAULT 0 ");
executeStatement("ALTER TABLE mtb_lisv_data ADD inserito_da VARCHAR(40)");
createOrUpdateFunction("[getPromozioneVendita]", "CREATE FUNCTION [dbo].[getPromozioneVendita](@dataIniz DATETIME, @dataFine DATETIME, @codVlis VARCHAR(5),\n" +
" @codPromo VARCHAR(10), @codMart VARCHAR(15))\n" +
" RETURNS TABLE AS\n" +
" RETURN\n" +
" SELECT vtb_list.cod_vlis,\n" +
" vtb_list.descrizione,\n" +
" vtb_list_data.data_iniz,\n" +
" vtb_list_data.data_fine,\n" +
" vtb_list_data.cod_promo,\n" +
" vtb_list_data.versione,\n" +
" vtb_list.cod_divi,\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" +
" mtb_lisv_data.cod_mart AS cod_mart,\n" +
" mtb_lisv_data.unt_mis_ven AS unt_mis_ven,\n" +
" mtb_lisv_data.rap_conv AS rap_conv,\n" +
" mtb_lisv_data.prz_base AS prz_base,\n" +
" mtb_lisv_data.ricarica AS ricarico,\n" +
" --dbo.f_calcMargineEffettivo(mtb_lisv_data.prz_base, mtb_lisv_data.prz_vend, mtb_aart.perc_sfrido) as margine_eff,\n" +
" --dbo.f_calcRicaricoEffettivo(mtb_lisv_data.prz_base, mtb_lisv_data.prz_vend, mtb_aart.perc_sfrido) as ricarico_eff, \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" +
" 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" +
" mtb_lisv_data.prz_vend AS prz_vend,\n" +
" mtb_lisv_data.prz_vend_iva AS prz_vend_iva,\n" +
" mtb_lisv_data.perc_sco1 AS perc_sco1,\n" +
" mtb_lisv_data.perc_sco2 AS perc_sco2,\n" +
" mtb_lisv_data.perc_sco3 AS perc_sco3,\n" +
" mtb_lisv_data.perc_sco4 AS perc_sco4,\n" +
" mtb_lisv_data.perc_prov AS perc_prov,\n" +
" mtb_lisv_data.fisso_prov AS fisso_prov,\n" +
" mtb_lisv_data.posizione AS posizione,\n" +
" mtb_lisv_data.perc_gest AS perc_gest,\n" +
" mtb_lisv_data.val_gest AS val_gest,\n" +
" mtb_lisv_data.data_agg_prz AS data_agg_prz,\n" +
" mtb_lisv_data.perc_ispe AS perc_ispe,\n" +
" mtb_lisv_data.val_ispe AS val_ispe,\n" +
" mtb_lisv_data.perc_promo AS perc_promo,\n" +
" mtb_lisv_data.val_promo AS val_promo,\n" +
" mtb_lisv_data.perc_oneri AS perc_oneri,\n" +
" mtb_lisv_data.val_oneri 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) * (1 - mtb_lisv_data.perc_sco4 / 100) AS prz_vend_netto,\n" +
" vtb_promo.descrizione AS 'descr_promo',\n" +
" vtb_promo.data_iniz_sell_out,\n" +
" vtb_promo.data_fine_sell_out,\n" +
" vtb_promo.flag_tipo_promo,\n" +
" mtb_lisv_data.sconto_cartoni,\n" +
" mtb_lisv_data.sconto_strato,\n" +
" mtb_lisv_data.sconto_pedane,\n" +
" mtb_lisv_data.giacenza,\n" +
" mtb_lisv_data.magg_prz_vend,\n" +
" vtb_promo.flag_sconto_contrattuale,\n" +
" vtb_promo.intercode_xml_variazioni,\n" +
" vtb_list_data.note AS note_testata,\n" +
" vtb_promo.flag_tipologia,\n" +
" vtb_promo.flag_volantino,\n" +
" mtb_lisv_data.inserito_da\n" +
" FROM vtb_list\n" +
" INNER JOIN vtb_list_data ON vtb_list.cod_vlis = vtb_list_data.cod_vlis\n" +
" INNER JOIN mtb_lisv_data ON vtb_list_data.cod_vlis = mtb_lisv_data.cod_vlis AND\n" +
" vtb_list_data.versione = mtb_lisv_data.versione\n" +
" INNER JOIN mtb_aart ON mtb_lisv_data.cod_mart = mtb_aart.cod_mart\n" +
" INNER JOIN vtb_promo ON vtb_list_data.cod_promo = vtb_promo.cod_promo\n" +
" OUTER APPLY (SELECT COUNT(*) AS conta\n" +
" FROM vtb_list_data rif\n" +
" WHERE vtb_list_data.cod_vlis = rif.cod_vlis_rif\n" +
" AND vtb_list_data.versione = rif.versione) list_rif\n" +
" WHERE (@codMart IS NULL OR mtb_lisv_data.cod_mart = @codMart)\n" +
" AND (@codvlis IS NULL OR vtb_list_data.cod_vlis = @codVlis)\n" +
" AND vtb_list.cod_vlis_rif IS NULL\n" +
" AND (@codPromo IS NULL OR vtb_list_data.cod_promo = @codPromo)\n" +
" AND (((@dataFine IS NULL OR ISNULL(@dataIniz, CAST(GETDATE() AS DATE)) = @dataFine) AND\n" +
" ISNULL(@dataIniz, CAST(GETDATE() AS DATE)) BETWEEN vtb_list_data.data_iniz AND vtb_list_data.data_fine) OR\n" +
" (@dataFine IS NOT NULL AND ISNULL(@dataIniz, CAST(GETDATE() AS DATE)) <> @dataFine AND\n" +
" (vtb_list_data.data_iniz BETWEEN ISNULL(@dataIniz, CAST(GETDATE() AS DATE)) AND @dataFine OR\n" +
" vtb_list_data.data_fine BETWEEN ISNULL(@dataIniz, CAST(GETDATE() AS DATE)) AND @dataFine OR\n" +
" ISNULL(@dataIniz, CAST(GETDATE() AS DATE)) BETWEEN vtb_list_data.data_iniz AND vtb_list_data.data_fine OR\n" +
" @dataFine BETWEEN vtb_list_data.data_iniz AND vtb_list_data.data_fine)))\n" +
" AND (vtb_promo.flag_sconto_contrattuale = 'N' OR\n" +
" (vtb_promo.flag_sconto_contrattuale = 'S' AND list_rif.conta = 0))\n" +
" UNION\n" +
" SELECT vtb_list.cod_vlis,\n" +
" vtb_list.descrizione,\n" +
" vtb_list_data.data_iniz,\n" +
" vtb_list_data.data_fine,\n" +
" vtb_list_data.cod_promo,\n" +
" vtb_list_data.versione,\n" +
" vtb_list.cod_divi,\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" +
" mtb_lisv_data.cod_mart AS cod_mart,\n" +
" mtb_lisv_data.unt_mis_ven AS unt_mis_ven,\n" +
" mtb_lisv_data.rap_conv AS rap_conv,\n" +
" mtb_lisv_data.prz_base AS prz_base,\n" +
" mtb_lisv_data.ricarica AS ricarico,\n" +
" --dbo.f_calcMargineEffettivo(mtb_lisv_data.prz_base, mtb_lisv_data.prz_vend, mtb_aart.perc_sfrido) as margine_eff,\n" +
" --dbo.f_calcRicaricoEffettivo(mtb_lisv_data.prz_base, mtb_lisv_data.prz_vend, mtb_aart.perc_sfrido) as ricarico_eff, \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" +
" 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" +
" mtb_lisv_data.prz_vend AS prz_vend,\n" +
" mtb_lisv_data.prz_vend_iva AS prz_vend_iva,\n" +
" mtb_lisv_data.perc_sco1 AS perc_sco1,\n" +
" mtb_lisv_data.perc_sco2 AS perc_sco2,\n" +
" mtb_lisv_data.perc_sco3 AS perc_sco3,\n" +
" mtb_lisv_data.perc_sco4 AS perc_sco4,\n" +
" mtb_lisv_data.perc_prov AS perc_prov,\n" +
" mtb_lisv_data.fisso_prov AS fisso_prov,\n" +
" mtb_lisv_data.posizione AS posizione,\n" +
" mtb_lisv_data.perc_gest AS perc_gest,\n" +
" mtb_lisv_data.val_gest AS val_gest,\n" +
" mtb_lisv_data.data_agg_prz AS data_agg_prz,\n" +
" mtb_lisv_data.perc_ispe AS perc_ispe,\n" +
" mtb_lisv_data.val_ispe AS val_ispe,\n" +
" mtb_lisv_data.perc_promo AS perc_promo,\n" +
" mtb_lisv_data.val_promo AS val_promo,\n" +
" mtb_lisv_data.perc_oneri AS perc_oneri,\n" +
" mtb_lisv_data.val_oneri 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) * (1 - mtb_lisv_data.perc_sco4 / 100) AS prz_vend_netto,\n" +
" vtb_promo.descrizione AS 'descr_promo',\n" +
" vtb_promo.data_iniz_sell_out,\n" +
" vtb_promo.data_fine_sell_out,\n" +
" vtb_promo.flag_tipo_promo,\n" +
" mtb_lisv_data.sconto_cartoni,\n" +
" mtb_lisv_data.sconto_strato,\n" +
" mtb_lisv_data.sconto_pedane,\n" +
" mtb_lisv_data.giacenza,\n" +
" mtb_lisv_data.magg_prz_vend,\n" +
" vtb_promo.flag_sconto_contrattuale,\n" +
" vtb_promo.intercode_xml_variazioni,\n" +
" vtb_list_data.note AS note_testata,\n" +
" vtb_promo.flag_tipologia,\n" +
" vtb_promo.flag_volantino,\n" +
" mtb_lisv_data.inserito_da\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.cod_vlis_rif = vtb_list_data_rif.cod_vlis AND\n" +
" vtb_list_data.versione_rif = vtb_list_data_rif.versione\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" +
" INNER JOIN mtb_aart ON mtb_lisv_data.cod_mart = mtb_aart.cod_mart\n" +
" INNER JOIN vtb_promo ON vtb_list_data_rif.cod_promo = vtb_promo.cod_promo\n" +
" WHERE (@codMart IS NULL OR mtb_lisv_data.cod_mart = @codMart)\n" +
" AND (@codvlis IS NULL OR vtb_list_data.cod_vlis = @codVlis)\n" +
" AND (@codPromo IS NULL OR vtb_list_data.cod_promo = @codPromo)\n" +
" AND (((@dataFine IS NULL OR ISNULL(@dataIniz, CAST(GETDATE() AS DATE)) = @dataFine) AND\n" +
" ISNULL(@dataIniz, CAST(GETDATE() AS DATE)) BETWEEN vtb_list_data.data_iniz AND vtb_list_data.data_fine) OR\n" +
" (@dataFine IS NOT NULL AND ISNULL(@dataIniz, CAST(GETDATE() AS DATE)) <> @dataFine AND\n" +
" (vtb_list_data.data_iniz BETWEEN ISNULL(@dataIniz, CAST(GETDATE() AS DATE)) AND @dataFine OR\n" +
" vtb_list_data.data_fine BETWEEN ISNULL(@dataIniz, CAST(GETDATE() AS DATE)) AND @dataFine OR\n" +
" ISNULL(@dataIniz, CAST(GETDATE() AS DATE)) BETWEEN vtb_list_data.data_iniz AND vtb_list_data.data_fine OR\n" +
" @dataFine BETWEEN vtb_list_data.data_iniz AND vtb_list_data.data_fine)))");
if (isCustomer(IntegryCustomer.Carelli)){
executeStatement("UPDATE vtb_promo\n" +
"SET flag_volantino = 1\n" +
"WHERE ISDATE(cod_promo) = 1");
executeStatement("UPDATE mtb_lisv_data\n" +
"SET mtb_lisv_data.inserito_da = SUBSTRING(aggiornato_da, 1,\n" +
" IIF(CHARINDEX(' ', aggiornato_da) > 0, CHARINDEX(' ', aggiornato_da),\n" +
" LEN(aggiornato_da)))\n" +
"WHERE EXISTS(SELECT *\n" +
" FROM vtb_list_data\n" +
" WHERE vtb_list_data.cod_vlis = mtb_lisv_data.cod_vlis\n" +
" AND vtb_list_data.versione = mtb_lisv_data.versione\n" +
" AND vtb_list_data.data_iniz > '2025/01/01'\n" +
" AND vtb_list_data.data_fine >= CAST(GETDATE() AS DATE)\n" +
" AND vtb_list_data.cod_promo IS NOT NULL)");
}
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,23 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250417150347 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
createSetup("PVM", "LISTINI_VENDITA", "DEFAULT_EMAIL", null,
"Durante l''inserimento delle promo, questo indirizzo email viene utilizzato se l''utente non ha un''email configurata.", false, null, false, false,
false, false, false, null, false, null);
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,24 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250502130105 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
createSetupQuery("SI_NO", "SI_NO", "SELECT 'S' UNION ALL SELECT 'N'");
createSetup("W_VINS_PROMO_DLG", "SETUP", "SOLO_LISV_DEPO", "S",
"visualizza come default solo i listini agganciat ad un deposito", false, "SI_NO", false, false,
false, false, false, null, false, "SELECT 'S' UNION ALL SELECT 'N'");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -6,6 +6,7 @@ import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import it.integry.ems.Import.dto.AnomalieDTO;
import it.integry.ems._context.ApplicationContextProvider;
import it.integry.ems.adapter.EsitoDeserialize;
import it.integry.ems.adapter.ExecDateSerializer;
@@ -27,6 +28,7 @@ import java.io.StringWriter;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
@JsonInclude(value = JsonInclude.Include.NON_DEFAULT)
public class ServiceRestResponse {
@@ -310,4 +312,32 @@ public class ServiceRestResponse {
this.messages = messages;
return this;
}
public ServiceRestResponse setMessages(List<MessageDTO> messages, List<AnomalieDTO> anomalie) {
this.messages = messages;
this.messages.addAll(extractMessagesFromAnomalie(anomalie));
return this;
}
public ServiceRestResponse setMessagesFromAnomalie(List<AnomalieDTO> anomalie) {
this.messages = extractMessagesFromAnomalie(anomalie);
return this;
}
private List<MessageDTO> extractMessagesFromAnomalie(List<AnomalieDTO> anomalie) {
if (anomalie == null || anomalie.isEmpty())
return new ArrayList<>();
return anomalie.stream()
.map(x -> {
switch (x.getTipo()) {
case ERROR:
return MessageDTO.error(x.getMessage());
case WARNING:
default:
return MessageDTO.warning(x.getMessage());
}
})
.collect(Collectors.toList());
}
}

View File

@@ -101,23 +101,26 @@ public class SalesRules extends QueryRules {
return true;
}
if (vtbListData.getDataFine().before(vtbListData.getDataIniz()))
LocalDate dataIniz = UtilityLocalDate.localDateFromDate(vtbListData.getDataIniz());
LocalDate dataFine = UtilityLocalDate.localDateFromDate(vtbListData.getDataFine());
if (dataFine.isBefore(dataIniz))
throw new Exception(String.format("Impossibile inserire//modificare una promozione con data fine (%s) antecedente a data inizio ( %s )",
new SimpleDateFormat(CommonConstants.DATE_FORMAT_DMY).format(vtbListData.getDataFine()),
new SimpleDateFormat(CommonConstants.DATE_FORMAT_DMY).format(vtbListData.getDataIniz())));
if (vtbListData.getCheckDataFine() != null && vtbListData.getCheckDataFine()) {
if (vtbListData.getDataFine().before(UtilityDate.getTodayWithoutTime()))
if (UtilityLocalDate.isBeforeToday(dataFine))
throw new Exception(String.format("Impossibile inserire//modificare una promozione con data fine (%s) antecedente ad oggi",
new SimpleDateFormat(CommonConstants.DATE_FORMAT_DMY).format(vtbListData.getDataFine())));
}
if (vtbListData.getCheckDataFine() != null && vtbListData.getCheckDataFine()) {
Date dataFineOld = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(
LocalDate dataFineOld = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(
conn,
Query.format("SELECT data_fine FROM vtb_list_data WHERE cod_vlis = %s AND versione = %S", vtbListData.getCodVlis(), vtbListData.getVersione()));
if (dataFineOld != null && vtbListData.getDataFine().after(dataFineOld))
if (dataFineOld != null && dataFine.isAfter(dataFineOld))
throw new Exception("Impossibile posticipare la data fine di una promozione.");
}
return true;

View File

@@ -312,6 +312,10 @@ public class MailService {
return sendMailPrimary(null, null, to, cc, null, subject, msg, false, false, null, null, null);
}
public Message sendMail(String to, String cc, String subject, String msg, boolean isHtml) throws Exception {
return sendMailPrimary(null, null, to, cc, null, subject, msg, isHtml, false, null, null, null);
}
public void sendTicketNotificationMail(final MultiDBTransactionManager multiDBTransactionManager, final String to, final String cc, final String ccn, final String subject, final TicketNotificationMailTemplateDataDTO mailData) throws Exception {
String htmlMailContent = mailTemplateService.getTicketNotificationEmailTemplate(mailData);

View File

@@ -156,6 +156,9 @@ public class MtbLisvData extends EntityBase {
@SqlField(value = "flag_prz_bloccato", maxLength = 1, nullable = false, defaultObjectValue = "N")
private String flagPrzBloccato;
@SqlField(value = "inserito_da", maxLength = 40)
private String inseritoDa;
private String tagliaMin;
private String tagliaMax;
@@ -681,6 +684,15 @@ public class MtbLisvData extends EntityBase {
return this;
}
public String getInseritoDa() {
return inseritoDa;
}
public MtbLisvData setInseritoDa(String inseritoDa) {
this.inseritoDa = inseritoDa;
return this;
}
public List<TtbLisvTaglieData> getTtbLisvTaglieData() {
return ttbLisvTaglieData;
}

View File

@@ -98,6 +98,9 @@ public class VtbPromo extends EntityBase {
@SqlField(value = "intercode_xml_variazioni", maxLength = 1)
private String intercodeXmlVariazioni;
@SqlField(value = "flag_volantino")
private Boolean flagVolantino;
public VtbPromo() {
super(logger);
}
@@ -317,4 +320,13 @@ public class VtbPromo extends EntityBase {
this.intercodeXmlVariazioni = intercodeXmlVariazioni;
return this;
}
public Boolean getFlagVolantino() {
return flagVolantino;
}
public VtbPromo setFlagVolantino(Boolean flagVolantino) {
this.flagVolantino = flagVolantino;
return this;
}
}

View File

@@ -36,12 +36,12 @@ public class UtilityLocalDate {
} else return null;
}
public static boolean isBeforeToday(LocalDateTime inputDate) {
return inputDate != null && inputDate.toLocalDate().isBefore(getNow());
public static boolean isBeforeToday(LocalDate inputDate) {
return inputDate != null && inputDate.isBefore(getNow());
}
public static boolean isAfterToday(LocalDateTime inputDate) {
return inputDate != null && inputDate.toLocalDate().isAfter(getNow());
public static boolean isAfterToday(LocalDate inputDate) {
return inputDate != null && inputDate.isAfter(getNow());
}
public static boolean isSameDay(LocalDateTime date1, LocalDateTime date2) {

View File

@@ -583,6 +583,17 @@ then
}
end
rule "completeInseritoDaLisv"
no-loop
when
eval(completeRulesEnabled)
$entity : MtbLisvData(inseritoDa == null && username != null)
then
modify ( $entity ) {
setInseritoDa(username)
}
end
rule "completeInsertVtbOfft"
when
eval(completeRulesEnabled)

View File

@@ -2,6 +2,8 @@ package it.integry.ems.product.controller;
import it.integry.common.var.CommonConstants;
import it.integry.ems.product.dto.DuplicaListinoDTO;
import it.integry.ems.product.dto.InsertPromoRequestDTO;
import it.integry.ems.product.dto.InsertPromoResponseDTO;
import it.integry.ems.product.service.ListiniVenditaServices;
import it.integry.ems.response.EsitoType;
import it.integry.ems.response.ServiceRestResponse;
@@ -19,7 +21,6 @@ import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@@ -45,56 +46,53 @@ public class ListiniVenditaController {
@RequestMapping(value = "duplica-promozioni", method = RequestMethod.POST)
public @ResponseBody
ServiceRestResponse duplicaPromoVend(
HttpServletRequest request,
@RequestParam(CommonConstants.PROFILE_DB) String configuration,
@RequestParam("codVlis") String codVlis,
@RequestParam("versione") Integer versione,
@RequestParam("whereCond") String whereCondLisv) throws Exception {
ServiceRestResponse duplicaPromoVend(HttpServletRequest request,
@RequestParam(CommonConstants.PROFILE_DB) String configuration,
@RequestParam("codVlis") String codVlis,
@RequestParam("versione") Integer versione,
@RequestParam("whereCond") String whereCondLisv) throws Exception {
return ServiceRestResponse.createEntityPositiveResponse(listiniVenditaServices.duplicaPromozione(codVlis, versione, whereCondLisv));
}
@RequestMapping(value = "consolida-variazioni", method = RequestMethod.POST)
public @ResponseBody
ServiceRestResponse consolidaListinoVend(
HttpServletRequest request,
@RequestParam(CommonConstants.PROFILE_DB) String configuration,
@RequestParam("dataVar") String dataVar,
@RequestParam(value = "whereCond", required = false) String whereCondLisv) {
ServiceRestResponse consolidaListinoVend(HttpServletRequest request,
@RequestParam(CommonConstants.PROFILE_DB) String configuration,
@RequestParam("dataVar") String dataVar,
@RequestParam(value = "whereCond", required = false) String whereCondLisv) throws Exception {
try {
Date dataValidita = UtilityDate.RecognizeDate(dataVar);
listiniVenditaServices.consolidaListinoVend(dataValidita, whereCondLisv);
return ServiceRestResponse.createPositiveResponse();
} catch (Exception e) {
logger.error(request.getRequestURI(), e);
return new ServiceRestResponse(EsitoType.KO, configuration, e);
}
Date dataValidita = UtilityDate.RecognizeDate(dataVar);
listiniVenditaServices.consolidaListinoVend(dataValidita, whereCondLisv);
return ServiceRestResponse.createPositiveResponse();
}
@RequestMapping(value = "update", method = RequestMethod.POST)
public @ResponseBody
ServiceRestResponse updateLisv(
HttpServletRequest request,
@RequestParam(CommonConstants.PROFILE_DB) String configuration,
@RequestBody List<MtbLisvData> entityList) {
ServiceRestResponse updateLisv(HttpServletRequest request,
@RequestParam(CommonConstants.PROFILE_DB) String configuration,
@RequestBody List<MtbLisvData> entityList) throws Exception {
try {
return ServiceRestResponse.createEntityPositiveResponse(listiniVenditaServices.updateLisv(entityList));
} catch (Exception e) {
logger.error(request.getRequestURI(), e);
return ServiceRestResponse.createNegativeResponse(e);
}
return ServiceRestResponse.createEntityPositiveResponse(listiniVenditaServices.updateLisv(entityList));
}
@RequestMapping(value = "duplica", method = RequestMethod.POST)
public @ResponseBody
List<ServiceRestResponse> duplicaListino(
@RequestBody DuplicaListinoDTO duplicaListinoDTO) throws Exception {
List<EntityBase> entities = listiniVenditaServices.duplicaListinoVendita(duplicaListinoDTO);
List<ServiceRestResponse> duplicaListino(@RequestBody DuplicaListinoDTO duplicaListinoDTO) throws Exception {
List<EntityBase> entities = listiniVenditaServices.duplicaListinoVendita(duplicaListinoDTO);
return UtilityEntity.toServiceRestResponse(entities);
}
@RequestMapping(value = "insertPromo", method = RequestMethod.POST)
public ServiceRestResponse insertPromo(@RequestParam(CommonConstants.PROFILE_DB) String config,
@RequestBody InsertPromoRequestDTO insertPromoRequest) throws Exception {
InsertPromoResponseDTO response = listiniVenditaServices.InsertPromo(insertPromoRequest);
return ServiceRestResponse.createPositiveResponse(
response.getEntityBases()
).setMessagesFromAnomalie(response.getAnomalie());
}
}

View File

@@ -0,0 +1,119 @@
package it.integry.ems.product.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.List;
public class InsertPromoRequestDTO {
private String codPromo;
private String descrizione;
private LocalDate dataInizio;
private LocalDate dataFine;
private boolean volantino;
private boolean sovrascrivi;
private List<String> listini;
private List<Articolo> articoli;
public String getCodPromo() {
return codPromo;
}
public InsertPromoRequestDTO setCodPromo(String codPromo) {
this.codPromo = codPromo;
return this;
}
public String getDescrizione() {
return descrizione;
}
public InsertPromoRequestDTO setDescrizione(String descrizione) {
this.descrizione = descrizione;
return this;
}
public LocalDate getDataInizio() {
return dataInizio;
}
public InsertPromoRequestDTO setDataInizio(LocalDate dataInizio) {
this.dataInizio = dataInizio;
return this;
}
public LocalDate getDataFine() {
return dataFine;
}
public InsertPromoRequestDTO setDataFine(LocalDate dataFine) {
this.dataFine = dataFine;
return this;
}
public boolean isVolantino() {
return volantino;
}
public InsertPromoRequestDTO setVolantino(boolean volantino) {
this.volantino = volantino;
return this;
}
public boolean isSovrascrivi() {
return sovrascrivi;
}
public InsertPromoRequestDTO setSovrascrivi(boolean sovrascrivi) {
this.sovrascrivi = sovrascrivi;
return this;
}
public List<String> getListini() {
return listini;
}
public InsertPromoRequestDTO setListini(List<String> listini) {
this.listini = listini;
return this;
}
public List<Articolo> getArticoli() {
return articoli;
}
public InsertPromoRequestDTO setArticoli(List<Articolo> articoli) {
this.articoli = articoli;
return this;
}
public static class Articolo{
@JsonProperty("codmart")
private String codMart;
@JsonProperty("przvendiva")
private BigDecimal przVendIva;
public String getCodMart() {
return codMart;
}
public Articolo setCodMart(String codMart) {
this.codMart = codMart;
return this;
}
public BigDecimal getPrzVendIva() {
return przVendIva;
}
public Articolo setPrzVendIva(BigDecimal przVendIva) {
this.przVendIva = przVendIva;
return this;
}
}
}

View File

@@ -0,0 +1,31 @@
package it.integry.ems.product.dto;
import it.integry.ems.Import.dto.AnomalieDTO;
import it.integry.ems.order.phpApp.dto.PromoDTO;
import it.integry.ems_model.base.EntityBase;
import java.util.List;
public class InsertPromoResponseDTO {
private List<AnomalieDTO> anomalie;
private List<EntityBase> entityBases;
public List<AnomalieDTO> getAnomalie() {
return anomalie;
}
public InsertPromoResponseDTO setAnomalie(List<AnomalieDTO> anomalie) {
this.anomalie = anomalie;
return this;
}
public List<EntityBase> getEntityBases() {
return entityBases;
}
public InsertPromoResponseDTO setEntityBases(List<EntityBase> entityBases) {
this.entityBases = entityBases;
return this;
}
}

View File

@@ -197,7 +197,7 @@ public class ImportListiniAcquistoApuliaCarrefourService {
for (Map.Entry<AtbListData, List<MtbLisaData>> listino : listini) {
AtbListData atbListData = listino.getKey();
if (UtilityLocalDate.isAfterToday(UtilityLocalDate.localDateTimeFromDate(atbListData.getDataIniz()))) {
if (UtilityLocalDate.isAfterToday(UtilityLocalDate.localDateFromDate(atbListData.getDataIniz()))) {
atbListData.setOperation(OperationType.INSERT_OR_UPDATE);
listino.getValue().stream().forEach(x -> x.setOperation(OperationType.INSERT_OR_UPDATE));
}

View File

@@ -2,28 +2,28 @@ package it.integry.ems.product.service;
import com.annimon.stream.Stream;
import it.integry.common.var.CommonConstants;
import it.integry.ems.customizations.sales.dto.ToscaOrdineVenditaDTO;
import it.integry.ems.Import.dto.AnomalieDTO;
import it.integry.ems.exception.MissingDataException;
import it.integry.ems.expansion.RunnableThrowable;
import it.integry.ems.javabeans.RequestDataDTO;
import it.integry.ems.menu.dto.StbMenuDTO;
import it.integry.ems.product.dto.DuplicaListinoDTO;
import it.integry.ems.product.dto.InsertPromoRequestDTO;
import it.integry.ems.product.dto.InsertPromoResponseDTO;
import it.integry.ems.product.dto.ListiniVenditaAllinePrezziDTO;
import it.integry.ems.product.importaz.service.ImportAnagListiniService;
import it.integry.ems.response.EsitoType;
import it.integry.ems.response.ServiceRestResponse;
import it.integry.ems.retail.service.GiacenzaService;
import it.integry.ems.service.EntityProcessor;
import it.integry.ems.service.MailService;
import it.integry.ems.sync.MultiDBTransaction.Connection;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
import it.integry.ems.user.UserSession;
import it.integry.ems.utility.UtilityDebug;
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.*;
import it.integry.ems_model.types.OperationType;
import it.integry.ems_model.utility.Query;
import it.integry.ems_model.utility.UtilityDB;
import it.integry.ems_model.utility.UtilityHashMap;
import it.integry.ems_model.utility.UtilityString;
import it.integry.ems_model.utility.*;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
@@ -33,7 +33,11 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.web.bind.annotation.RestController;
import java.io.IOException;
import java.sql.SQLException;
import java.time.LocalDate;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
@RestController
@@ -47,12 +51,16 @@ public class ListiniVenditaServices {
@Autowired
private MailService mailService;
@Autowired
private ImportAnagListiniService importAnagListiniService;
@Autowired
private RequestDataDTO requestDataDTO;
@Autowired
private UserSession userSession;
private final Logger logger = LogManager.getLogger();
public void allinemanetoPrezziArtEqui(Date dataValidita, ListiniVenditaAllinePrezziDTO datiInput) throws Exception {
@@ -267,7 +275,7 @@ public class ListiniVenditaServices {
Map<String, List<MtbLisvData>> listaListini = mtbLisvData.stream().sorted(Comparator.comparing(MtbLisvData::getCodVlis))
.collect(Collectors.groupingBy(MtbLisvData::getCodVlis));
List<Exception> listException = new ArrayList<>();
for (String l: listaListini.keySet()) {
for (String l : listaListini.keySet()) {
try {
entityRet.addAll(importAnagListiniService.importAnagListinoAcq(UtilityEntity.toEntityBaseList(listaListini.get(l)), "V", null, null));
} catch (Exception e) {
@@ -280,17 +288,17 @@ public class ListiniVenditaServices {
if (entityRet.size() > 0) {
elencoListini =
entityRet.stream()
.filter(x->x instanceof VtbListData)
.map(x->((VtbListData)x).getCodVlis() + " - Versione: " + ((VtbListData) x).getVersione())
.collect(Collectors.toList());
.filter(x -> x instanceof VtbListData)
.map(x -> ((VtbListData) x).getCodVlis() + " - Versione: " + ((VtbListData) x).getVersione())
.collect(Collectors.toList());
}
throw new Exception(
String.format("Sono stati salvati %s listini:\n%sCi sono stati i seguenti errori:\n%s",
elencoListini.size(),
StringUtils.join(elencoListini, ", ") + "\n\n",
StringUtils.join(listException.stream().map(Throwable::getMessage).collect(Collectors.toList()), "\n")
));
String.format("Sono stati salvati %s listini:\n%sCi sono stati i seguenti errori:\n%s",
elencoListini.size(),
StringUtils.join(elencoListini, ", ") + "\n\n",
StringUtils.join(listException.stream().map(Throwable::getMessage).collect(Collectors.toList()), "\n")
));
}
return entityRet;
@@ -423,7 +431,7 @@ public class ListiniVenditaServices {
//QUESTA PROCEDURA VIENE CHIAMATA DALLA GESTIONE A GRIGLIA PER SALVARE I LISTINI.
Integer versione;
List<MtbLisvData> listiniDel = new ArrayList<>();
List<MtbLisvData> listiniDel = new ArrayList<>();
for (MtbLisvData mtbLisvData : listini) {
if (!UtilityString.isNullOrEmpty(mtbLisvData.getCodPromo())) {
String sql =
@@ -500,7 +508,7 @@ public class ListiniVenditaServices {
List<EntityBase> entities = new ArrayList<>();
//fatta in due momenti diversi per far partire la cancellazione prima dell'inserimento
if (listiniDel != null && !listiniDel.isEmpty()){
if (listiniDel != null && !listiniDel.isEmpty()) {
entities = getVtbListData(listiniDel);
}
entities.addAll(getVtbListData(listini));
@@ -650,4 +658,199 @@ public class ListiniVenditaServices {
return importAnagListiniService.importAnagListinoAcq(entitiesToSave, "V", null, null);
}
public InsertPromoResponseDTO InsertPromo(InsertPromoRequestDTO insertPromoRequest) throws Exception {
List<AnomalieDTO> anomalie = new ArrayList<>();
InsertPromoResponseDTO InsertPromoResponse = new InsertPromoResponseDTO()
.setAnomalie(anomalie);
Connection conn = multiDBTransactionManager.getPrimaryConnection();
List<String> listCodMart = insertPromoRequest.getArticoli()
.stream().map(InsertPromoRequestDTO.Articolo::getCodMart)
.collect(Collectors.toList());
String sql = Query.format(
"SELECT cod_promo,\n" +
" cod_mart,\n" +
" cod_vlis,\n" +
" versione,\n" +
" data_iniz,\n" +
" data_fine,\n" +
" flag_volantino,\n" +
" inserito_da\n" +
"FROM getPromozioneVendita(%s, %s, NULL, NULL, NULL)\n" +
"WHERE cod_vlis IN (" + UtilityDB.listValueToString(insertPromoRequest.getListini()) + ")\n" +
" AND cod_mart IN (" + UtilityDB.listValueToString(listCodMart) + ")",
insertPromoRequest.getDataInizio(), insertPromoRequest.getDataFine()
);
List<HashMap<String, Object>> promoAttive = UtilityDB.executeSimpleQuery(conn, sql);
if (insertPromoRequest.isSovrascrivi() || insertPromoRequest.isVolantino()) {
//Prendere le promo attive e se ci sono volantini bloccare anche se sovrascrivi == true
if (!promoAttive.isEmpty()) {
boolean volantinoIsPresent = promoAttive.stream().anyMatch(x -> (boolean) x.get("flag_volantino"));
if (volantinoIsPresent) {
for (HashMap<String, Object> x : promoAttive) {
if ((boolean) x.get("flag_volantino")) {
String message =
String.format(
"Impossibile inserire più promozioni sullo stesso articolo (%s)." + CommonConstants.A_CAPO +
"Cod. Promozione: %s" + CommonConstants.A_CAPO +
"Data inizio: %s" + CommonConstants.A_CAPO +
"Data fine: %s",
x.get("cod_mart"), x.get("cod_promo"), x.get("data_iniz"), x.get("data_fine")
);
anomalie.add(AnomalieDTO.error(message));
}
}
return InsertPromoResponse;
}
}
} else {
//Se sovrascrivi == false bloccare se ci sono promo attive
if (!promoAttive.isEmpty()) {
for (HashMap<String, Object> x : promoAttive) {
String message =
String.format(
"Impossibile inserire più promozioni sullo stesso articolo (%s)." + CommonConstants.A_CAPO +
"Cod. Promozione: %s" + CommonConstants.A_CAPO +
"Data inizio: %s" + CommonConstants.A_CAPO +
"Data fine: %s",
x.get("cod_mart"), x.get("cod_promo"), x.get("data_iniz"), x.get("data_fine")
);
anomalie.add(AnomalieDTO.error(message));
}
return InsertPromoResponse;
}
}
sql = Query.format(
"WITH Listini AS (SELECT value_string AS listino\n" +
" FROM dbo.ParseStringIntoArray(%s, '|')),\n" +
" articoli AS (SELECT value_string AS articolo\n" +
" FROM dbo.ParseStringIntoArray(%s, '|'))\n" +
"\n" +
"SELECT *\n" +
"FROM Listini,\n" +
" articoli\n" +
"WHERE NOT EXISTS (SELECT *\n" +
" FROM dbo.getListinoVendita(NULL, NULL, NULL) lisv\n" +
" WHERE lisv.cod_vlis = listino\n" +
" AND articolo = lisv.cod_mart\n" +
" AND lisv.tipo_variazione <> 'D')",
String.join("|", insertPromoRequest.getListini()), String.join("|", listCodMart)
);
List<HashMap<String, Object>> resultQuery = UtilityDB.executeSimpleQuery(conn, sql);
if (!resultQuery.isEmpty()) {
for (HashMap<String, Object> x : resultQuery) {
String listino = x.get("listino").toString();
String articolo = x.get("articolo").toString();
anomalie.add(AnomalieDTO.error(String.format("Articolo (%s) non presente sul listino (%s)", articolo, listino)));
}
return InsertPromoResponse;
}
if (insertPromoRequest.isVolantino() || insertPromoRequest.isSovrascrivi()) {
LocalDate dataInizio = insertPromoRequest.getDataInizio();
LocalDate dataFine = insertPromoRequest.getDataFine();
for (HashMap<String, Object> x : promoAttive) {
LocalDate dataInizioPromo = UtilityLocalDate.localDateFromDate((Date) x.get("data_iniz"));
LocalDate dataFinePromo = UtilityLocalDate.localDateFromDate((Date) x.get("data_fine"));
dataInizioPromo = dataFine.isAfter(dataInizioPromo) ? dataInizioPromo : dataFine.plusDays(1);
dataFinePromo = dataInizio.isBefore(dataFinePromo) ? dataInizio.minusDays(1) : dataFinePromo;
VtbListData vtbListData = new VtbListData()
.setCodVlis(x.get("cod_vlis").toString())
.setVersione((Integer) x.get("versione"))
.setDataIniz(UtilityLocalDate.localDateToDate(dataInizioPromo))
.setDataFine(UtilityLocalDate.localDateToDate(dataFinePromo));
vtbListData.setOperation(OperationType.UPDATE);
entityProcessor.processEntity(vtbListData, multiDBTransactionManager);
sql = Query.format(
"SELECT IIF(e_mail IS NULL, value, e_mail) AS email\n" +
"FROM stb_user\n" +
" LEFT OUTER JOIN stb_gest_setup\n" +
" ON gest_name = 'PVM' AND section = 'LISTINI_VENDITA' AND key_section = 'DEFAULT_EMAIL'\n" +
"WHERE user_name = %s",
x.get("inserito_da").toString()
);
String email = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(conn, sql);
String subject = "Chiusura promozione";
String message = "La promozione: " + x.get("cod_promo") + " è stata chiusa";
mailService.sendMail(email, null, subject, message, true);
}
}
List<EntityBase> entityToProcess = new ArrayList<>();
sql = Query.format(
"SELECT CAST(COUNT(*) AS BIT)\n" +
"FROM vtb_promo\n" +
"WHERE cod_promo = %s",
insertPromoRequest.getCodPromo()
);
boolean vtbPromoExists = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(conn, sql);
if (!vtbPromoExists) {
String descrizione = insertPromoRequest.getDescrizione();
if (UtilityString.isNullOrEmpty(descrizione)) {
if (insertPromoRequest.isVolantino())
descrizione = String.format("Volantino dal %s al %s",
UtilityLocalDate.formatDate(insertPromoRequest.getDataInizio(), CommonConstants.DATE_FORMAT_DMY),
UtilityLocalDate.formatDate(insertPromoRequest.getDataFine(), CommonConstants.DATE_FORMAT_DMY)
);
else
descrizione = insertPromoRequest.getCodPromo();
}
VtbPromo vtbPromo = new VtbPromo()
.setCodPromo(insertPromoRequest.getCodPromo())
.setDescrizione(descrizione)
.setDataInizSellIn(UtilityLocalDate.localDateToDate(insertPromoRequest.getDataInizio()))
.setDataFineSellIn(UtilityLocalDate.localDateToDate(insertPromoRequest.getDataFine()))
.setFlagVolantino(insertPromoRequest.isVolantino());
vtbPromo.setOperation(OperationType.INSERT);
entityToProcess.add(vtbPromo);
}
for (String codVlis : insertPromoRequest.getListini()) {
VtbListData vtbListData = new VtbListData()
.setCodVlis(codVlis)
.setCodPromo(insertPromoRequest.getCodPromo())
.setDataIniz(UtilityLocalDate.localDateToDate(insertPromoRequest.getDataInizio()))
.setDataFine(UtilityLocalDate.localDateToDate(insertPromoRequest.getDataFine()))
.setMtbLisvData(new ArrayList<>());
vtbListData.setOperation(OperationType.INSERT);
for (InsertPromoRequestDTO.Articolo articolo : insertPromoRequest.getArticoli()) {
MtbLisvData mtbLisvData = new MtbLisvData();
mtbLisvData.setCodMart(articolo.getCodMart());
mtbLisvData.setPrzVendIva(articolo.getPrzVendIva());
mtbLisvData.setOperation(OperationType.INSERT);
vtbListData.getMtbLisvData().add(mtbLisvData);
}
entityToProcess.add(vtbListData);
}
List<EntityBase> entityRet = entityProcessor.processEntityList(entityToProcess, multiDBTransactionManager, true);
UtilityEntity.throwEntitiesException(entityRet);
InsertPromoResponse.setEntityBases(entityRet);
return InsertPromoResponse;
}
}