Merge branch 'develop' into feature/JDK11
Some checks failed
IntegryManagementSystem_Multi/pipeline/head There was a failure building this commit

This commit is contained in:
jenkins
2025-06-09 19:01:14 +02:00
4 changed files with 124 additions and 18 deletions

View File

@@ -0,0 +1,22 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
import it.integry.ems_model.utility.Query;
public class Migration_20250609185006 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
String descrizione = "Questa setup indica i giorni di scadenza da controllore, è configurabile per tipo documento. Può contenere un numero oppure un json con questa struttura [{\"codMgrp\":\"02\",\"gg\":5}] per differenziare la setup per gruppo merceologico.";
executeStatement(Query.format("update stb_gest_setup SET description = %S where gest_name = %S AND section = %S AND KEY_SECTION = %S",
descrizione, "PVM","DOC_INTERNI","DAYS_TO_EXP"));
}
@Override
public void down() throws Exception {
}
}

View File

@@ -38,6 +38,8 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@@ -394,7 +396,7 @@ public class PvmController {
}
try {
List<AnomalieResiDTO> anomalieResiDTOS = pvmService.checkDocReso(docFromPickingDTO);
List<AnomalieResiDTO> anomalieResiDTOS = pvmService.checkDocumentiInterni(docFromPickingDTO);
if (anomalieResiDTOS == null || anomalieResiDTOS.isEmpty())
return ServiceRestResponse.createEntityPositiveResponse(pvmServiceSave.saveDocFromPicking(docFromPickingDTO));
else {
@@ -418,7 +420,7 @@ public class PvmController {
}
try {
List<AnomalieResiDTO> anomalieResiDTOS = pvmService.checkDocReso(docFromPickingDTO);
List<AnomalieResiDTO> anomalieResiDTOS = pvmService.checkDocumentiInterni(docFromPickingDTO);
if (anomalieResiDTOS == null || anomalieResiDTOS.isEmpty())
return ServiceRestResponse.createPositiveResponse();
else {
@@ -809,4 +811,17 @@ public class PvmController {
}
@RequestMapping(value = "pvm/updateDataCons", method = RequestMethod.POST)
public @ResponseBody
ServiceRestResponse updateDataCons(
@RequestParam(CommonConstants.PROFILE_DB) String profileDB,
@RequestParam String gestione,
@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date dataOrd ,
@RequestParam Integer numOrd,
@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date dataCons) throws Exception {
return ServiceRestResponse.createPositiveResponse(pvmService.updateDataCons(gestione, dataOrd, numOrd, dataCons));
}
}

View File

@@ -0,0 +1,24 @@
package it.integry.ems.retail.pvmRetail.dto;
public class CheckDocInterniShelfLifeDTO {
private String codMgrp;
private Integer gg;
public String getCodMgrp() {
return codMgrp;
}
public CheckDocInterniShelfLifeDTO setCodMgrp(String codMgrp) {
this.codMgrp = codMgrp;
return this;
}
public Integer getGg() {
return gg;
}
public CheckDocInterniShelfLifeDTO setGg(Integer gg) {
this.gg = gg;
return this;
}
}

View File

@@ -36,7 +36,6 @@ import it.integry.ems.sync.MultiDBTransaction.Connection;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
import it.integry.ems.system.service.SystemService;
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.coollection.Coollection;
@@ -166,7 +165,7 @@ public class PvmService {
" WHERE STB_GEST_SETUP_DEPO.citta_cons like '%" + citta + "%' " +
" GROUP BY num_range, dstart, dEnd, num_cons_max, CITTA_CONS ";
List<OrdChkConsDTO> ordChkConsDTO = UtilityDB.executeSimpleQueryDTO(conn,sql, OrdChkConsDTO.class);
List<OrdChkConsDTO> ordChkConsDTO = UtilityDB.executeSimpleQueryDTO(conn, sql, OrdChkConsDTO.class);
return ordChkConsDTO;
@@ -1675,8 +1674,8 @@ public class PvmService {
row.setOperation(OperationType.SELECT_OBJECT);
row.setOnlyPkMaster(false);
rows.add(row);
}
rows.add(row);
}
rsRows.close();
psRows.close();
@@ -1910,7 +1909,7 @@ public class PvmService {
return mtbColtsToReturn;
}
public List<AnomalieResiDTO> checkDocReso(DocFromPickingDTO docFromPickingDTO) throws Exception {
public List<AnomalieResiDTO> checkDocumentiInterni(DocFromPickingDTO docFromPickingDTO) throws Exception {
List<AnomalieResiDTO> anomalieResiDTO = new ArrayList<>();
String codMdep = getCodMdep(requestDataDTO.getUsername());
@@ -1958,12 +1957,21 @@ public class PvmService {
if (chkTracciabilita) {
List<HashMap<String, Object>> setupSectionDet = setupGest.getSetupSectionDet(multiDBTransactionManager.getPrimaryConnection(), "PVM", "DOC_INTERNI", "DAYS_TO_EXP", "dtb_tipi");
String gg ="";
List<CheckDocInterniShelfLifeDTO> checkDocInterniShelfLifeDTOS = new ArrayList<>();
Integer gg = null;
if (setupSectionDet != null && !setupSectionDet.isEmpty()) {
gg = setupSectionDet
String ret = setupSectionDet
.stream()
.filter(x -> x.get("val_col_rif") != null && ((String) x.get("val_col_rif")).equalsIgnoreCase(codDtip))
.findFirst().map(x -> (String) x.get("value")).orElse(null);
.findFirst().map(x -> (String) x.get("value")).orElse(null);
if (!UtilityString.isNullOrEmpty(ret) ) {
try {
gg = Integer.parseInt(ret);
} catch (NumberFormatException ex) {
checkDocInterniShelfLifeDTOS = Arrays.asList(jsonObjectMapper.readValue(ret, CheckDocInterniShelfLifeDTO[].class));
}
}
}
sql =
Query.format(
@@ -2067,7 +2075,8 @@ public class PvmService {
" movi.data_scad AS data_scad_acq,\n" +
" movi.suddivisione,\n" +
" mtb_aart.gg_scad_partita,\n" +
" movi.data_doc\n" +
" movi.data_doc,\n" +
" mtb_aart.cod_mgrp\n " +
"FROM colli\n" +
" INNER JOIN mtb_aart ON colli.cod_mart = mtb_aart.cod_mart\n" +
" LEFT OUTER JOIN setup ON mtb_aart.cod_mgrp = setup.cod_mgrp\n" +
@@ -2081,6 +2090,14 @@ public class PvmService {
for (HashMap<String, Object> lotto : partiteErrate) {
String codMart = UtilityHashMap.getValueIfExists(lotto, "cod_mart");
Date dataScad = UtilityHashMap.getValueIfExists(lotto, "data_scad");
String codMgrp = UtilityHashMap.getValueIfExists(lotto, "cod_mgrp");
if (checkDocInterniShelfLifeDTOS != null && !checkDocInterniShelfLifeDTOS.isEmpty()) {
gg = checkDocInterniShelfLifeDTOS
.stream()
.filter(x -> x.getCodMgrp().equalsIgnoreCase(codMgrp))
.map(x -> x.getGg()).findFirst().orElse(null);
}
if (dataScad == null) {
anomalieResiDTO.add(setAnomalia(anomalieResiDTO, codMart, dataScad, "Inserire la data scadenza."));
continue;
@@ -2097,7 +2114,7 @@ public class PvmService {
continue;
}
if (!UtilityString.isNullOrEmpty(gg) && UtilityDate.DaysAfter(dataScad, UtilityDate.dateAdd(Calendar.DATE, Integer.parseInt(gg), UtilityDate.getTodayWithoutTime())) > 0) {
if (gg != null && UtilityDate.DaysAfter(dataScad, UtilityDate.dateAdd(Calendar.DATE, gg, UtilityDate.getTodayWithoutTime())) > 0) {
anomalieResiDTO.add(setAnomalia(anomalieResiDTO, codMart, dataScad, "Impossibile effetture un reso di un articolo sotto scadenza."));
continue;
}
@@ -2120,8 +2137,8 @@ public class PvmService {
if (qtaAcq != null && UtilityBigDecimal.greaterThan(UtilityHashMap.getValueIfExists(lotto, "qta_col"), qtaAcq)) {
anomalieResiDTO.add(setAnomalia(anomalieResiDTO, codMart, dataScad, String.format("Quantità resa maggiore di quantità acquistata %s", qtaAcq)));
}
} else if (!UtilityString.isNullOrEmpty(gg)) {
if (UtilityDate.DaysAfter(UtilityDate.getTodayWithoutTime(), dataScad) > Integer.parseInt(gg)) {
} else if (gg != null && !gestioneDoc.equalsIgnoreCase("A")) {
if (UtilityDate.DaysAfter(UtilityDate.getTodayWithoutTime(), dataScad) > gg) {
anomalieResiDTO.add(setAnomalia(anomalieResiDTO, codMart, dataScad, String.format("Impossibile effetture un %S di un articolo con scadenza %s.", codDtip, UtilityDate.formatDate(dataScad, CommonConstants.DATE_FORMAT_DMY))));
continue;
}
@@ -2317,7 +2334,7 @@ public class PvmService {
Integer numOrd = inputValue.get("numOrd").asInt() != 0 ? inputValue.get("numOrd").asInt() : null;
if (numOrd == null) {
dataOrd = new SimpleDateFormat(CommonConstants.DATE_FORMAT_YMD).format(new Date());
dataOrd = new SimpleDateFormat(DATE_FORMAT_YMD).format(new Date());
}
String query = "SELECT mtb_depo.cod_anag, mtb_depo.cod_vdes " +
@@ -2339,7 +2356,7 @@ public class PvmService {
info.close();
wdtbOrdt.setGestione(gestione);
wdtbOrdt.setDataOrd(new SimpleDateFormat(CommonConstants.DATE_FORMAT_YMD).parse(dataOrd));
wdtbOrdt.setDataOrd(new SimpleDateFormat(DATE_FORMAT_YMD).parse(dataOrd));
wdtbOrdt.setNumOrd(numOrd);
wdtbOrdt.setSerie(serie);
wdtbOrdt.setCodAnag(codAnag);
@@ -2363,7 +2380,7 @@ public class PvmService {
//Letta la riga ord direttamente dal db.
query = "SELECT riga_ord "
+ "FROM wdtb_ordr "
+ "WHERE data_ord = " + UtilityDB.valueDateToString(new SimpleDateFormat(CommonConstants.DATE_FORMAT_YMD).parse(dataOrd), CommonConstants.DATE_FORMAT_YMD) + " AND "
+ "WHERE data_ord = " + UtilityDB.valueDateToString(new SimpleDateFormat(DATE_FORMAT_YMD).parse(dataOrd), DATE_FORMAT_YMD) + " AND "
+ " num_ord = " + numOrd + " AND "
+ " cod_mart = " + UtilityDB.valueToString(codStyle) + " AND "
+ " cod_col = " + UtilityDB.valueToString(codCol) + " AND "
@@ -2384,7 +2401,7 @@ public class PvmService {
if (rigaOrd != null) {
wdtbOrdr.setOperation(OperationType.DELETE);
wdtbOrdr.setDataOrd(new SimpleDateFormat(CommonConstants.DATE_FORMAT_YMD).parse(dataOrd));
wdtbOrdr.setDataOrd(new SimpleDateFormat(DATE_FORMAT_YMD).parse(dataOrd));
wdtbOrdr.setNumOrd(numOrd);
wdtbOrdr.setGestione(gestione);
wdtbOrdr.setSerie(serie);
@@ -2735,4 +2752,32 @@ public class PvmService {
return null;
return permessi.stream().collect(Collectors.groupingBy(PvmAuthorizationDTO::getUsername));
}
public DtbOrdt updateDataCons(String gestione, Date dataOrd, Integer numOrd, Date dataCons) throws Exception {
if (dataCons == null) {
throw new Exception("Data di consegna non valida");
}
String sql = Query.format("SELECT * FROM dtb_ordr WHERE gestione = %s AND data_ord = %s AND num_ord = %s",
gestione, dataOrd, numOrd);
List<DtbOrdr> dtbOrdrList = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sql, DtbOrdr.class);
dtbOrdrList.stream().forEach(x -> {
x.setDataCons(dataCons);
x.setOperation(OperationType.UPDATE);
}
);
DtbOrdt dtbOrdt = new DtbOrdt()
.setGestione(gestione)
.setDataOrd(dataOrd)
.setNumOrd(numOrd)
.setDtbOrdr(dtbOrdrList);
dtbOrdt.setOperation(OperationType.NO_OP);
entityProcessor.processEntity(dtbOrdt, multiDBTransactionManager);
return dtbOrdt;
}
}