Finish Insert_promo
This commit is contained in:
@@ -3,6 +3,7 @@ package it.integry.ems.controller;
|
|||||||
import com.fasterxml.jackson.databind.JsonNode;
|
import com.fasterxml.jackson.databind.JsonNode;
|
||||||
import it.integry.common.var.CommonConstants;
|
import it.integry.common.var.CommonConstants;
|
||||||
import it.integry.ems.Import.base.EntityImportResponse;
|
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.Import.dto.ImportRequestDTO;
|
||||||
import it.integry.ems.download.DownloadFileHandlerService;
|
import it.integry.ems.download.DownloadFileHandlerService;
|
||||||
import it.integry.ems.download.dto.DownloadFileDto;
|
import it.integry.ems.download.dto.DownloadFileDto;
|
||||||
@@ -544,40 +545,27 @@ public class EmsController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@RequestMapping(value = EmsRestConstants.PATH_EXPORT, method = RequestMethod.POST)
|
@RequestMapping(value = EmsRestConstants.PATH_EXPORT, method = RequestMethod.POST)
|
||||||
public @ResponseBody ServiceRestResponse export(
|
public @ResponseBody ServiceRestResponse export(HttpServletRequest request,
|
||||||
HttpServletRequest request,
|
@RequestParam(CommonConstants.PROFILE_DB) String configuration,
|
||||||
@RequestParam(CommonConstants.PROFILE_DB) String configuration,
|
@RequestParam(value = EmsRestConstants.TYPE) String typeExport,
|
||||||
@RequestParam(value = EmsRestConstants.TYPE) String typeExport,
|
@RequestParam(value = EmsRestConstants.FORMAT) String formatExport,
|
||||||
@RequestParam(value = EmsRestConstants.FORMAT) String formatExport,
|
@RequestParam(required = false, defaultValue = "false") Boolean binaryDownload,
|
||||||
@RequestParam(required = false, defaultValue = "false") Boolean binaryDownload,
|
@RequestParam(required = false, defaultValue = "true") boolean headless,
|
||||||
@RequestParam(required = false, defaultValue = "true") boolean headless,
|
@RequestBody(required = false) JsonNode body) throws Exception {
|
||||||
@RequestBody(required = false) JsonNode body) throws Exception {
|
|
||||||
|
|
||||||
EntityExportResponse<?> entityExportResponse = emsServices.export(typeExport, formatExport, body, headless);
|
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()) {
|
if (entityExportResponse != null && entityExportResponse.getAnomalie() != null && !entityExportResponse.getAnomalie().isEmpty())
|
||||||
messages = entityExportResponse.getAnomalie().stream()
|
anomalie = entityExportResponse.getAnomalie();
|
||||||
.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());
|
|
||||||
}
|
|
||||||
|
|
||||||
ServiceRestResponse sr;
|
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();
|
sr = ServiceRestResponse.createNegativeResponse();
|
||||||
} else {
|
} else {
|
||||||
sr = ServiceRestResponse.createPositiveResponse();
|
sr = ServiceRestResponse.createPositiveResponse();
|
||||||
}
|
}
|
||||||
sr.setMessages(messages);
|
sr.setMessagesFromAnomalie(anomalie);
|
||||||
|
|
||||||
if (entityExportResponse != null) {
|
if (entityExportResponse != null) {
|
||||||
if (binaryDownload) {
|
if (binaryDownload) {
|
||||||
@@ -632,48 +620,23 @@ public class EmsController {
|
|||||||
.map(x -> MessageDTO.error(x.getException().getMessage()))
|
.map(x -> MessageDTO.error(x.getException().getMessage()))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
List<MessageDTO> messages = importResponse.getAnomalie().stream()
|
List<AnomalieDTO> anomalie = importResponse.getAnomalie();
|
||||||
.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());
|
|
||||||
|
|
||||||
errorMessages.addAll(messages);
|
if (!errorMessages.isEmpty() || (anomalie != null && !anomalie.isEmpty())) {
|
||||||
|
|
||||||
if (!errorMessages.isEmpty()) {
|
|
||||||
response = ServiceRestResponse.createNegativeResponse();
|
response = ServiceRestResponse.createNegativeResponse();
|
||||||
} else {
|
} else {
|
||||||
response = ServiceRestResponse.createPositiveResponse();
|
response = ServiceRestResponse.createPositiveResponse();
|
||||||
}
|
}
|
||||||
response.setMessages(errorMessages);
|
response.setMessages(errorMessages, importResponse.getAnomalie());
|
||||||
response.setEntityList(entities.stream().filter(x -> x.getException() == null).collect(Collectors.toList()));
|
response.setEntityList(entities.stream().filter(x -> x.getException() == null).collect(Collectors.toList()));
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
if (importResponse.getAnomalie() != null) {
|
if (importResponse.getAnomalie() != null) {
|
||||||
|
|
||||||
if (!importResponse.getAnomalie().isEmpty()) {
|
if (!importResponse.getAnomalie().isEmpty()) {
|
||||||
|
|
||||||
List<MessageDTO> messages = importResponse.getAnomalie().stream()
|
response = ServiceRestResponse.createNegativeResponse()
|
||||||
.map(x -> {
|
.setMessagesFromAnomalie(importResponse.getAnomalie());
|
||||||
switch (x.getTipo()) {
|
|
||||||
case ERROR:
|
|
||||||
return MessageDTO.error(x.getMessage());
|
|
||||||
case WARNING:
|
|
||||||
default:
|
|
||||||
return MessageDTO.warning(x.getMessage());
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
|
|
||||||
response = ServiceRestResponse.createNegativeResponse();
|
|
||||||
response.setMessages(messages);
|
|
||||||
} else response = ServiceRestResponse.createPositiveResponse();
|
} else response = ServiceRestResponse.createPositiveResponse();
|
||||||
|
|
||||||
} else throw new Exception("Non ci sono dati da importare");
|
} else throw new Exception("Non ci sono dati da importare");
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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 {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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 {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -6,6 +6,7 @@ import com.fasterxml.jackson.annotation.JsonProperty;
|
|||||||
import com.fasterxml.jackson.core.type.TypeReference;
|
import com.fasterxml.jackson.core.type.TypeReference;
|
||||||
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
||||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||||
|
import it.integry.ems.Import.dto.AnomalieDTO;
|
||||||
import it.integry.ems._context.ApplicationContextProvider;
|
import it.integry.ems._context.ApplicationContextProvider;
|
||||||
import it.integry.ems.adapter.EsitoDeserialize;
|
import it.integry.ems.adapter.EsitoDeserialize;
|
||||||
import it.integry.ems.adapter.ExecDateSerializer;
|
import it.integry.ems.adapter.ExecDateSerializer;
|
||||||
@@ -27,6 +28,7 @@ import java.io.StringWriter;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@JsonInclude(value = JsonInclude.Include.NON_DEFAULT)
|
@JsonInclude(value = JsonInclude.Include.NON_DEFAULT)
|
||||||
public class ServiceRestResponse {
|
public class ServiceRestResponse {
|
||||||
@@ -310,4 +312,32 @@ public class ServiceRestResponse {
|
|||||||
this.messages = messages;
|
this.messages = messages;
|
||||||
return this;
|
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());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -101,23 +101,26 @@ public class SalesRules extends QueryRules {
|
|||||||
return true;
|
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 )",
|
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.getDataFine()),
|
||||||
new SimpleDateFormat(CommonConstants.DATE_FORMAT_DMY).format(vtbListData.getDataIniz())));
|
new SimpleDateFormat(CommonConstants.DATE_FORMAT_DMY).format(vtbListData.getDataIniz())));
|
||||||
|
|
||||||
if (vtbListData.getCheckDataFine() != null && vtbListData.getCheckDataFine()) {
|
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",
|
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())));
|
new SimpleDateFormat(CommonConstants.DATE_FORMAT_DMY).format(vtbListData.getDataFine())));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vtbListData.getCheckDataFine() != null && vtbListData.getCheckDataFine()) {
|
if (vtbListData.getCheckDataFine() != null && vtbListData.getCheckDataFine()) {
|
||||||
Date dataFineOld = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(
|
LocalDate dataFineOld = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(
|
||||||
conn,
|
conn,
|
||||||
Query.format("SELECT data_fine FROM vtb_list_data WHERE cod_vlis = %s AND versione = %S", vtbListData.getCodVlis(), vtbListData.getVersione()));
|
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.");
|
throw new Exception("Impossibile posticipare la data fine di una promozione.");
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -312,6 +312,10 @@ public class MailService {
|
|||||||
return sendMailPrimary(null, null, to, cc, null, subject, msg, false, false, null, null, null);
|
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 {
|
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);
|
String htmlMailContent = mailTemplateService.getTicketNotificationEmailTemplate(mailData);
|
||||||
|
|
||||||
|
|||||||
@@ -156,6 +156,9 @@ public class MtbLisvData extends EntityBase {
|
|||||||
@SqlField(value = "flag_prz_bloccato", maxLength = 1, nullable = false, defaultObjectValue = "N")
|
@SqlField(value = "flag_prz_bloccato", maxLength = 1, nullable = false, defaultObjectValue = "N")
|
||||||
private String flagPrzBloccato;
|
private String flagPrzBloccato;
|
||||||
|
|
||||||
|
@SqlField(value = "inserito_da", maxLength = 40)
|
||||||
|
private String inseritoDa;
|
||||||
|
|
||||||
private String tagliaMin;
|
private String tagliaMin;
|
||||||
|
|
||||||
private String tagliaMax;
|
private String tagliaMax;
|
||||||
@@ -681,6 +684,15 @@ public class MtbLisvData extends EntityBase {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getInseritoDa() {
|
||||||
|
return inseritoDa;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MtbLisvData setInseritoDa(String inseritoDa) {
|
||||||
|
this.inseritoDa = inseritoDa;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
public List<TtbLisvTaglieData> getTtbLisvTaglieData() {
|
public List<TtbLisvTaglieData> getTtbLisvTaglieData() {
|
||||||
return ttbLisvTaglieData;
|
return ttbLisvTaglieData;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -98,6 +98,9 @@ public class VtbPromo extends EntityBase {
|
|||||||
@SqlField(value = "intercode_xml_variazioni", maxLength = 1)
|
@SqlField(value = "intercode_xml_variazioni", maxLength = 1)
|
||||||
private String intercodeXmlVariazioni;
|
private String intercodeXmlVariazioni;
|
||||||
|
|
||||||
|
@SqlField(value = "flag_volantino")
|
||||||
|
private Boolean flagVolantino;
|
||||||
|
|
||||||
public VtbPromo() {
|
public VtbPromo() {
|
||||||
super(logger);
|
super(logger);
|
||||||
}
|
}
|
||||||
@@ -317,4 +320,13 @@ public class VtbPromo extends EntityBase {
|
|||||||
this.intercodeXmlVariazioni = intercodeXmlVariazioni;
|
this.intercodeXmlVariazioni = intercodeXmlVariazioni;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Boolean getFlagVolantino() {
|
||||||
|
return flagVolantino;
|
||||||
|
}
|
||||||
|
|
||||||
|
public VtbPromo setFlagVolantino(Boolean flagVolantino) {
|
||||||
|
this.flagVolantino = flagVolantino;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,12 +36,12 @@ public class UtilityLocalDate {
|
|||||||
} else return null;
|
} else return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isBeforeToday(LocalDateTime inputDate) {
|
public static boolean isBeforeToday(LocalDate inputDate) {
|
||||||
return inputDate != null && inputDate.toLocalDate().isBefore(getNow());
|
return inputDate != null && inputDate.isBefore(getNow());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isAfterToday(LocalDateTime inputDate) {
|
public static boolean isAfterToday(LocalDate inputDate) {
|
||||||
return inputDate != null && inputDate.toLocalDate().isAfter(getNow());
|
return inputDate != null && inputDate.isAfter(getNow());
|
||||||
}
|
}
|
||||||
public static boolean isSameDay(LocalDateTime date1, LocalDateTime date2) {
|
public static boolean isSameDay(LocalDateTime date1, LocalDateTime date2) {
|
||||||
|
|
||||||
|
|||||||
@@ -583,6 +583,17 @@ then
|
|||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
rule "completeInseritoDaLisv"
|
||||||
|
no-loop
|
||||||
|
when
|
||||||
|
eval(completeRulesEnabled)
|
||||||
|
$entity : MtbLisvData(inseritoDa == null && username != null)
|
||||||
|
then
|
||||||
|
modify ( $entity ) {
|
||||||
|
setInseritoDa(username)
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
rule "completeInsertVtbOfft"
|
rule "completeInsertVtbOfft"
|
||||||
when
|
when
|
||||||
eval(completeRulesEnabled)
|
eval(completeRulesEnabled)
|
||||||
|
|||||||
@@ -2,6 +2,8 @@ package it.integry.ems.product.controller;
|
|||||||
|
|
||||||
import it.integry.common.var.CommonConstants;
|
import it.integry.common.var.CommonConstants;
|
||||||
import it.integry.ems.product.dto.DuplicaListinoDTO;
|
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.product.service.ListiniVenditaServices;
|
||||||
import it.integry.ems.response.EsitoType;
|
import it.integry.ems.response.EsitoType;
|
||||||
import it.integry.ems.response.ServiceRestResponse;
|
import it.integry.ems.response.ServiceRestResponse;
|
||||||
@@ -19,7 +21,6 @@ import org.springframework.web.bind.annotation.*;
|
|||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -45,56 +46,53 @@ public class ListiniVenditaController {
|
|||||||
|
|
||||||
@RequestMapping(value = "duplica-promozioni", method = RequestMethod.POST)
|
@RequestMapping(value = "duplica-promozioni", method = RequestMethod.POST)
|
||||||
public @ResponseBody
|
public @ResponseBody
|
||||||
ServiceRestResponse duplicaPromoVend(
|
ServiceRestResponse duplicaPromoVend(HttpServletRequest request,
|
||||||
HttpServletRequest request,
|
@RequestParam(CommonConstants.PROFILE_DB) String configuration,
|
||||||
@RequestParam(CommonConstants.PROFILE_DB) String configuration,
|
@RequestParam("codVlis") String codVlis,
|
||||||
@RequestParam("codVlis") String codVlis,
|
@RequestParam("versione") Integer versione,
|
||||||
@RequestParam("versione") Integer versione,
|
@RequestParam("whereCond") String whereCondLisv) throws Exception {
|
||||||
@RequestParam("whereCond") String whereCondLisv) throws Exception {
|
|
||||||
|
|
||||||
return ServiceRestResponse.createEntityPositiveResponse(listiniVenditaServices.duplicaPromozione(codVlis, versione, whereCondLisv));
|
return ServiceRestResponse.createEntityPositiveResponse(listiniVenditaServices.duplicaPromozione(codVlis, versione, whereCondLisv));
|
||||||
}
|
}
|
||||||
|
|
||||||
@RequestMapping(value = "consolida-variazioni", method = RequestMethod.POST)
|
@RequestMapping(value = "consolida-variazioni", method = RequestMethod.POST)
|
||||||
public @ResponseBody
|
public @ResponseBody
|
||||||
ServiceRestResponse consolidaListinoVend(
|
ServiceRestResponse consolidaListinoVend(HttpServletRequest request,
|
||||||
HttpServletRequest request,
|
@RequestParam(CommonConstants.PROFILE_DB) String configuration,
|
||||||
@RequestParam(CommonConstants.PROFILE_DB) String configuration,
|
@RequestParam("dataVar") String dataVar,
|
||||||
@RequestParam("dataVar") String dataVar,
|
@RequestParam(value = "whereCond", required = false) String whereCondLisv) throws Exception {
|
||||||
@RequestParam(value = "whereCond", required = false) String whereCondLisv) {
|
|
||||||
|
|
||||||
try {
|
Date dataValidita = UtilityDate.RecognizeDate(dataVar);
|
||||||
Date dataValidita = UtilityDate.RecognizeDate(dataVar);
|
listiniVenditaServices.consolidaListinoVend(dataValidita, whereCondLisv);
|
||||||
listiniVenditaServices.consolidaListinoVend(dataValidita, whereCondLisv);
|
return ServiceRestResponse.createPositiveResponse();
|
||||||
return ServiceRestResponse.createPositiveResponse();
|
|
||||||
} catch (Exception e) {
|
|
||||||
logger.error(request.getRequestURI(), e);
|
|
||||||
return new ServiceRestResponse(EsitoType.KO, configuration, e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@RequestMapping(value = "update", method = RequestMethod.POST)
|
@RequestMapping(value = "update", method = RequestMethod.POST)
|
||||||
public @ResponseBody
|
public @ResponseBody
|
||||||
ServiceRestResponse updateLisv(
|
ServiceRestResponse updateLisv(HttpServletRequest request,
|
||||||
HttpServletRequest request,
|
@RequestParam(CommonConstants.PROFILE_DB) String configuration,
|
||||||
@RequestParam(CommonConstants.PROFILE_DB) String configuration,
|
@RequestBody List<MtbLisvData> entityList) throws Exception {
|
||||||
@RequestBody List<MtbLisvData> entityList) {
|
|
||||||
|
|
||||||
try {
|
return ServiceRestResponse.createEntityPositiveResponse(listiniVenditaServices.updateLisv(entityList));
|
||||||
return ServiceRestResponse.createEntityPositiveResponse(listiniVenditaServices.updateLisv(entityList));
|
|
||||||
} catch (Exception e) {
|
|
||||||
logger.error(request.getRequestURI(), e);
|
|
||||||
return ServiceRestResponse.createNegativeResponse(e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@RequestMapping(value = "duplica", method = RequestMethod.POST)
|
@RequestMapping(value = "duplica", method = RequestMethod.POST)
|
||||||
public @ResponseBody
|
public @ResponseBody
|
||||||
List<ServiceRestResponse> duplicaListino(
|
List<ServiceRestResponse> duplicaListino(@RequestBody DuplicaListinoDTO duplicaListinoDTO) throws Exception {
|
||||||
@RequestBody DuplicaListinoDTO duplicaListinoDTO) throws Exception {
|
|
||||||
List<EntityBase> entities = listiniVenditaServices.duplicaListinoVendita(duplicaListinoDTO);
|
|
||||||
|
|
||||||
|
List<EntityBase> entities = listiniVenditaServices.duplicaListinoVendita(duplicaListinoDTO);
|
||||||
return UtilityEntity.toServiceRestResponse(entities);
|
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());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -197,7 +197,7 @@ public class ImportListiniAcquistoApuliaCarrefourService {
|
|||||||
|
|
||||||
for (Map.Entry<AtbListData, List<MtbLisaData>> listino : listini) {
|
for (Map.Entry<AtbListData, List<MtbLisaData>> listino : listini) {
|
||||||
AtbListData atbListData = listino.getKey();
|
AtbListData atbListData = listino.getKey();
|
||||||
if (UtilityLocalDate.isAfterToday(UtilityLocalDate.localDateTimeFromDate(atbListData.getDataIniz()))) {
|
if (UtilityLocalDate.isAfterToday(UtilityLocalDate.localDateFromDate(atbListData.getDataIniz()))) {
|
||||||
atbListData.setOperation(OperationType.INSERT_OR_UPDATE);
|
atbListData.setOperation(OperationType.INSERT_OR_UPDATE);
|
||||||
listino.getValue().stream().forEach(x -> x.setOperation(OperationType.INSERT_OR_UPDATE));
|
listino.getValue().stream().forEach(x -> x.setOperation(OperationType.INSERT_OR_UPDATE));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,28 +2,28 @@ package it.integry.ems.product.service;
|
|||||||
|
|
||||||
import com.annimon.stream.Stream;
|
import com.annimon.stream.Stream;
|
||||||
import it.integry.common.var.CommonConstants;
|
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.exception.MissingDataException;
|
||||||
|
import it.integry.ems.expansion.RunnableThrowable;
|
||||||
import it.integry.ems.javabeans.RequestDataDTO;
|
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.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.dto.ListiniVenditaAllinePrezziDTO;
|
||||||
import it.integry.ems.product.importaz.service.ImportAnagListiniService;
|
import it.integry.ems.product.importaz.service.ImportAnagListiniService;
|
||||||
import it.integry.ems.response.EsitoType;
|
import it.integry.ems.retail.service.GiacenzaService;
|
||||||
import it.integry.ems.response.ServiceRestResponse;
|
|
||||||
import it.integry.ems.service.EntityProcessor;
|
import it.integry.ems.service.EntityProcessor;
|
||||||
import it.integry.ems.service.MailService;
|
import it.integry.ems.service.MailService;
|
||||||
|
import it.integry.ems.sync.MultiDBTransaction.Connection;
|
||||||
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
|
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
|
||||||
|
import it.integry.ems.user.UserSession;
|
||||||
import it.integry.ems.utility.UtilityDebug;
|
import it.integry.ems.utility.UtilityDebug;
|
||||||
import it.integry.ems.utility.UtilityEntity;
|
import it.integry.ems.utility.UtilityEntity;
|
||||||
import it.integry.ems_model.base.EntityBase;
|
import it.integry.ems_model.base.EntityBase;
|
||||||
import it.integry.ems_model.db.ResultSetMapper;
|
import it.integry.ems_model.db.ResultSetMapper;
|
||||||
import it.integry.ems_model.entity.*;
|
import it.integry.ems_model.entity.*;
|
||||||
import it.integry.ems_model.types.OperationType;
|
import it.integry.ems_model.types.OperationType;
|
||||||
import it.integry.ems_model.utility.Query;
|
import it.integry.ems_model.utility.*;
|
||||||
import it.integry.ems_model.utility.UtilityDB;
|
|
||||||
import it.integry.ems_model.utility.UtilityHashMap;
|
|
||||||
import it.integry.ems_model.utility.UtilityString;
|
|
||||||
import org.apache.commons.lang3.ObjectUtils;
|
import org.apache.commons.lang3.ObjectUtils;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.apache.logging.log4j.LogManager;
|
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.context.annotation.Scope;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
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.*;
|
||||||
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@@ -47,12 +51,16 @@ public class ListiniVenditaServices {
|
|||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private MailService mailService;
|
private MailService mailService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private ImportAnagListiniService importAnagListiniService;
|
private ImportAnagListiniService importAnagListiniService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private RequestDataDTO requestDataDTO;
|
private RequestDataDTO requestDataDTO;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private UserSession userSession;
|
||||||
|
|
||||||
private final Logger logger = LogManager.getLogger();
|
private final Logger logger = LogManager.getLogger();
|
||||||
|
|
||||||
public void allinemanetoPrezziArtEqui(Date dataValidita, ListiniVenditaAllinePrezziDTO datiInput) throws Exception {
|
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))
|
Map<String, List<MtbLisvData>> listaListini = mtbLisvData.stream().sorted(Comparator.comparing(MtbLisvData::getCodVlis))
|
||||||
.collect(Collectors.groupingBy(MtbLisvData::getCodVlis));
|
.collect(Collectors.groupingBy(MtbLisvData::getCodVlis));
|
||||||
List<Exception> listException = new ArrayList<>();
|
List<Exception> listException = new ArrayList<>();
|
||||||
for (String l: listaListini.keySet()) {
|
for (String l : listaListini.keySet()) {
|
||||||
try {
|
try {
|
||||||
entityRet.addAll(importAnagListiniService.importAnagListinoAcq(UtilityEntity.toEntityBaseList(listaListini.get(l)), "V", null, null));
|
entityRet.addAll(importAnagListiniService.importAnagListinoAcq(UtilityEntity.toEntityBaseList(listaListini.get(l)), "V", null, null));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@@ -280,17 +288,17 @@ public class ListiniVenditaServices {
|
|||||||
if (entityRet.size() > 0) {
|
if (entityRet.size() > 0) {
|
||||||
elencoListini =
|
elencoListini =
|
||||||
entityRet.stream()
|
entityRet.stream()
|
||||||
.filter(x->x instanceof VtbListData)
|
.filter(x -> x instanceof VtbListData)
|
||||||
.map(x->((VtbListData)x).getCodVlis() + " - Versione: " + ((VtbListData) x).getVersione())
|
.map(x -> ((VtbListData) x).getCodVlis() + " - Versione: " + ((VtbListData) x).getVersione())
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
throw new Exception(
|
throw new Exception(
|
||||||
String.format("Sono stati salvati %s listini:\n%sCi sono stati i seguenti errori:\n%s",
|
String.format("Sono stati salvati %s listini:\n%sCi sono stati i seguenti errori:\n%s",
|
||||||
elencoListini.size(),
|
elencoListini.size(),
|
||||||
StringUtils.join(elencoListini, ", ") + "\n\n",
|
StringUtils.join(elencoListini, ", ") + "\n\n",
|
||||||
StringUtils.join(listException.stream().map(Throwable::getMessage).collect(Collectors.toList()), "\n")
|
StringUtils.join(listException.stream().map(Throwable::getMessage).collect(Collectors.toList()), "\n")
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
return entityRet;
|
return entityRet;
|
||||||
@@ -423,7 +431,7 @@ public class ListiniVenditaServices {
|
|||||||
//QUESTA PROCEDURA VIENE CHIAMATA DALLA GESTIONE A GRIGLIA PER SALVARE I LISTINI.
|
//QUESTA PROCEDURA VIENE CHIAMATA DALLA GESTIONE A GRIGLIA PER SALVARE I LISTINI.
|
||||||
|
|
||||||
Integer versione;
|
Integer versione;
|
||||||
List<MtbLisvData> listiniDel = new ArrayList<>();
|
List<MtbLisvData> listiniDel = new ArrayList<>();
|
||||||
for (MtbLisvData mtbLisvData : listini) {
|
for (MtbLisvData mtbLisvData : listini) {
|
||||||
if (!UtilityString.isNullOrEmpty(mtbLisvData.getCodPromo())) {
|
if (!UtilityString.isNullOrEmpty(mtbLisvData.getCodPromo())) {
|
||||||
String sql =
|
String sql =
|
||||||
@@ -500,7 +508,7 @@ public class ListiniVenditaServices {
|
|||||||
List<EntityBase> entities = new ArrayList<>();
|
List<EntityBase> entities = new ArrayList<>();
|
||||||
|
|
||||||
//fatta in due momenti diversi per far partire la cancellazione prima dell'inserimento
|
//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 = getVtbListData(listiniDel);
|
||||||
}
|
}
|
||||||
entities.addAll(getVtbListData(listini));
|
entities.addAll(getVtbListData(listini));
|
||||||
@@ -650,4 +658,199 @@ public class ListiniVenditaServices {
|
|||||||
|
|
||||||
return importAnagListiniService.importAnagListinoAcq(entitiesToSave, "V", null, null);
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user