Finish Insert_promo
This commit is contained in:
@@ -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");
|
||||
|
||||
@@ -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.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());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
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));
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user