Merge remote-tracking branch 'origin/develop' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good

This commit is contained in:
2024-11-22 09:17:45 +01:00
14 changed files with 1572 additions and 1537 deletions

View File

@@ -99,4 +99,16 @@ sleep 10''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaul
} }
} }
post {
success {
office365ConnectorSend adaptiveCards: true, color: '#008000', message: '[${GIT_BRANCH}] EMS-API è stato compilato con successo', status: 'SUCCESS', webhookUrl: 'https://prod-197.westeurope.logic.azure.com:443/workflows/69a7b8ee3c284175bd6da7127c7eb3cf/triggers/manual/paths/invoke?api-version=2016-06-01&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=_-eMfvsQGkIidHWzzlhGFgiZG28ujHZ41QqzuqD9YGw'
}
unstable {
office365ConnectorSend adaptiveCards: true, color: '#FFDE21', message: '[${GIT_BRANCH}] EMS-API è INSTABILE', status: 'UNSTABLE', webhookUrl: 'https://prod-197.westeurope.logic.azure.com:443/workflows/69a7b8ee3c284175bd6da7127c7eb3cf/triggers/manual/paths/invoke?api-version=2016-06-01&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=_-eMfvsQGkIidHWzzlhGFgiZG28ujHZ41QqzuqD9YGw'
}
failure {
office365ConnectorSend adaptiveCards: true, color: '#FF2C2C', message: '[${GIT_BRANCH}] Errore di compilazione su EMS-API', status: 'FAILURE', webhookUrl: 'https://prod-197.westeurope.logic.azure.com:443/workflows/69a7b8ee3c284175bd6da7127c7eb3cf/triggers/manual/paths/invoke?api-version=2016-06-01&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=_-eMfvsQGkIidHWzzlhGFgiZG28ujHZ41QqzuqD9YGw'
}
}
} }

View File

@@ -60,7 +60,6 @@ public class MenuConfigurationService {
try { try {
//LocalDateTime startTime = UtilityLocalDate.getNowTime(); //LocalDateTime startTime = UtilityLocalDate.getNowTime();
if (advancedDataSource.getDataSource().getDbName().equalsIgnoreCase("menu")) return;
internalRefresh(advancedDataSource.getConnection(), menuConfig); internalRefresh(advancedDataSource.getConnection(), menuConfig);
//logger.debug("Menu refresh time: " + ChronoUnit.SECONDS.between(startTime, UtilityLocalDate.getNowTime())); //logger.debug("Menu refresh time: " + ChronoUnit.SECONDS.between(startTime, UtilityLocalDate.getNowTime()));
} catch (Exception ex) { } catch (Exception ex) {

View File

@@ -221,8 +221,7 @@ public class CommonRules extends QueryRules {
return finalList; return finalList;
} }
public static void updateDescrDistintaBase(Connection conn, EntityBase entityBase) throws Exception { public static void updateDescrDistintaBase(Connection conn, MtbAart mtbAart) throws Exception {
MtbAart mtbAart = (MtbAart) entityBase;
String sql = String sql =
"SELECT descrizione, descrizione_estesa " + "SELECT descrizione, descrizione_estesa " +
" FROM mtb_aart " + " FROM mtb_aart " +
@@ -995,7 +994,11 @@ public class CommonRules extends QueryRules {
return mtbAartMarchio; return mtbAartMarchio;
} }
public static String getIdArtEqui(Connection conn, MtbAart entity) throws Exception { public static void setIdArtEqui(Connection conn, MtbAart entity) throws Exception {
String sql = "select CAst( case when dbo.getGestSetup( 'MTB_AART', 'ID_ART_EQUI', 'INSERT_AUTO') = 'N' THEN 0 ELSE 1 END as BIT)";
Boolean setSetIdArtEqui = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(conn, sql);
if ( !setSetIdArtEqui ) return;
Map<String, Object> data = new HashMap<>(); Map<String, Object> data = new HashMap<>();
data.put("cod_mgrp", entity.getCodMgrp()); data.put("cod_mgrp", entity.getCodMgrp());
data.put("cod_msgr", entity.getCodMsgr()); data.put("cod_msgr", entity.getCodMsgr());
@@ -1008,7 +1011,7 @@ public class CommonRules extends QueryRules {
// Convertire in JSON // Convertire in JSON
ObjectMapper objectMapper = new ObjectMapper(); ObjectMapper objectMapper = new ObjectMapper();
String jsonParm = objectMapper.writeValueAsString(data); String jsonParm = objectMapper.writeValueAsString(data);
String sql = sql =
String.format( String.format(
"SELECT * FROM dbo.suggestMtbArtEqui('%s') " , "SELECT * FROM dbo.suggestMtbArtEqui('%s') " ,
jsonParm); jsonParm);
@@ -1021,10 +1024,8 @@ public class CommonRules extends QueryRules {
.setFlagEquiPrezzo("T"); .setFlagEquiPrezzo("T");
mtbAartEqui.setOperation(OperationType.INSERT_OR_UPDATE); mtbAartEqui.setOperation(OperationType.INSERT_OR_UPDATE);
} }
return idArtEqui; entity.setIdArtEqui(idArtEqui);
} }
return null;
} }
public static MtbAartEqui insEqui(Connection conn, MtbAart entity) throws Exception { public static MtbAartEqui insEqui(Connection conn, MtbAart entity) throws Exception {

View File

@@ -303,8 +303,6 @@ public class MtbAart extends EntityBase implements EquatableEntityInterface<MtbA
@SqlField(value = "tipo_codice_imballo", maxLength = 10) @SqlField(value = "tipo_codice_imballo", maxLength = 10)
private String tipoCodiceImballo; private String tipoCodiceImballo;
private Boolean setIdArtEqui;
@Priority(1) @Priority(1)
private MtbAartMarchio mtbAartMarchio; private MtbAartMarchio mtbAartMarchio;
@@ -1170,13 +1168,6 @@ public class MtbAart extends EntityBase implements EquatableEntityInterface<MtbA
this.classificazioneAbc = classificazioneAbc; this.classificazioneAbc = classificazioneAbc;
} }
/*public List<MtbPart> getMtbPart() {
return mtbPart;
}
public void setMtbPart(List<MtbPart> mtbPart) {
this.mtbPart = mtbPart;
}*/
public String getTipoCodiceImballo() { public String getTipoCodiceImballo() {
return tipoCodiceImballo; return tipoCodiceImballo;
} }
@@ -1186,15 +1177,6 @@ public class MtbAart extends EntityBase implements EquatableEntityInterface<MtbA
return this; return this;
} }
public Boolean getSetIdArtEqui() {
return setIdArtEqui;
}
public MtbAart setSetIdArtEqui(Boolean setIdArtEqui) {
this.setIdArtEqui = setIdArtEqui;
return this;
}
public List<MtbAartAnag> getMtbAartAnag() { public List<MtbAartAnag> getMtbAartAnag() {
return mtbAartAnag; return mtbAartAnag;
} }

View File

@@ -127,18 +127,6 @@ then
} }
end end
rule "completeSetIdArtEquiAuto"
no-loop
when
eval(completeRulesEnabled)
$entity : MtbAart(idArtEqui == null && setIdArtEqui != null && setIdArtEqui && operation != OperationType.DELETE)
then
String idArtEqui = CommonRules.getIdArtEqui(conn, $entity);
modify($entity){
setIdArtEqui(idArtEqui)}
end
rule "completeInsEqui" rule "completeInsEqui"
no-loop no-loop
when when
@@ -203,17 +191,6 @@ then
modify ( $entity ) { setArticoloComposto("N") } modify ( $entity ) { setArticoloComposto("N") }
end end
rule "completeSetIdArtEqui"
no-loop
when
eval(completeRulesEnabled)
$entity : MtbAart(setIdArtEqui == null)
then
String sql = "select CAst( case when dbo.getGestSetup( 'MTB_AART', 'ID_ART_EQUI', 'INSERT_AUTO') = 'N' THEN 0 ELSE 1 END as BIT)";
Boolean setSetIdArtEqui = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(conn, sql);
modify ( $entity ) { setSetIdArtEqui(setSetIdArtEqui) }
end
rule "completeDescrEstesaArt" rule "completeDescrEstesaArt"
when when
eval(completeRulesEnabled) eval(completeRulesEnabled)

View File

@@ -105,10 +105,9 @@ no-loop
when when
eval(postRulesEnabled) eval(postRulesEnabled)
$mtbAart: MtbAart() $mtbAart: MtbAart()
$entity : EntityBase() from $mtbAart then
then CommonRules.setIdArtEqui(conn, $mtbAart);
CommonRules.updateDescrDistintaBase(conn, $mtbAart);
CommonRules.updateDescrDistintaBase(conn, $entity);
end end
rule "completeIdRigaCtbScad" rule "completeIdRigaCtbScad"

View File

@@ -303,11 +303,13 @@ public class Slim2kLogisticService {
String sql = String sql =
Query.format( Query.format(
"SELECT track_number\n" + "SELECT system_note\n" +
"FROM mtb_colt\n" + "FROM mtb_colt\n" +
"WHERE cod_mdep = %s\n" + " INNER JOIN mtb_colr ON mtb_colt.gestione = mtb_colr.gestione AND mtb_colt.data_collo = mtb_colr.data_collo AND\n" +
" AND data_collo = %s\n" + " mtb_colt.ser_collo = mtb_colr.ser_collo AND mtb_colt.num_collo = mtb_colr.num_collo\n" +
" AND track_number IS NOT NULL", "WHERE mtb_colt.cod_mdep = %s\n" +
" AND mtb_colt.data_collo = %s\n" +
" AND mtb_colr.system_note IS NOT NULL",
codMdep, today); codMdep, today);
List<Integer> listTrackNumber = UtilityDB.executeSimpleQueryOnlyFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql); List<Integer> listTrackNumber = UtilityDB.executeSimpleQueryOnlyFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
@@ -319,7 +321,7 @@ public class Slim2kLogisticService {
" movements_export.item AS cod_mart,\n" + " movements_export.item AS cod_mart,\n" +
" movements_export.workorder AS lotto,\n" + " movements_export.workorder AS lotto,\n" +
" ABS(movements_export.qtymove) AS qta_collo,\n" + " ABS(movements_export.qtymove) AS qta_collo,\n" +
" movements_export.unum as track_number\n"+ " movements_export.unum\n"+
"FROM movements_export\n" + "FROM movements_export\n" +
" INNER JOIN movements_export e ON movements_export.item = e.item\n" + " INNER JOIN movements_export e ON movements_export.item = e.item\n" +
" AND movements_export.trtype = e.trtype\n" + " AND movements_export.trtype = e.trtype\n" +
@@ -339,16 +341,15 @@ public class Slim2kLogisticService {
List<HashMap<String, Object>> listaColli = UtilityDB.executeSimpleQuery(dsSlim2k.getConnection(), sql); List<HashMap<String, Object>> listaColli = UtilityDB.executeSimpleQuery(dsSlim2k.getConnection(), sql);
Map<HashMap<String, Object>, List<HashMap<String, Object>>> trackNumber = listaColli.stream() Map<HashMap<String, Object>, List<HashMap<String, Object>>> testataColli = listaColli.stream()
.collect(groupingBy(x -> { .collect(groupingBy(x -> {
HashMap<String, Object> map = new HashMap<>(); HashMap<String, Object> map = new HashMap<>();
map.put("track_number", x.get("track_number"));
map.put("cod_mdep", x.get("cod_mdep")); map.put("cod_mdep", x.get("cod_mdep"));
map.put("cod_dest", x.get("cod_dest")); map.put("cod_dest", x.get("cod_dest"));
return map; return map;
})); }));
for (Map.Entry<HashMap<String, Object>, List<HashMap<String, Object>>> entry : trackNumber.entrySet()) { for (Map.Entry<HashMap<String, Object>, List<HashMap<String, Object>>> entry : testataColli.entrySet()) {
HashMap<String, Object> keyMap = entry.getKey(); HashMap<String, Object> keyMap = entry.getKey();
List<HashMap<String, Object>> righe = entry.getValue(); List<HashMap<String, Object>> righe = entry.getValue();
@@ -371,7 +372,6 @@ public class Slim2kLogisticService {
.setCodVdes((String) datiDepo.get("cod_vdes")) .setCodVdes((String) datiDepo.get("cod_vdes"))
.setGestione("L") .setGestione("L")
.setSegno(-1) .setSegno(-1)
.setTrackNumber(keyMap.get("track_number").toString())
.setCodDtipProvv(codDtip); .setCodDtipProvv(codDtip);
mtbColt.setOperation(OperationType.INSERT); mtbColt.setOperation(OperationType.INSERT);
mtbColt.setMtbColr(new ArrayList<>()); mtbColt.setMtbColr(new ArrayList<>());
@@ -383,7 +383,8 @@ public class Slim2kLogisticService {
new MtbColr() new MtbColr()
.setCodMart(((String) r.get("cod_mart")).trim()) .setCodMart(((String) r.get("cod_mart")).trim())
.setPartitaMag(((String) r.get("lotto")).trim()) .setPartitaMag(((String) r.get("lotto")).trim())
.setQtaCol((BigDecimal) r.get("qta_collo")); .setQtaCol((BigDecimal) r.get("qta_collo"))
.setSystemNote(r.get("unum").toString().trim());
mtbColt.getMtbColr().add(mtbColr); mtbColt.getMtbColr().add(mtbColr);
} }

View File

@@ -53,6 +53,8 @@ public class PvmController {
@Autowired @Autowired
private PvmService pvmService; private PvmService pvmService;
@Autowired @Autowired
private PvmServiceSave pvmServiceSave;
@Autowired
private PvmRapportiniFgService pvmRapportiniFgService; private PvmRapportiniFgService pvmRapportiniFgService;
@Autowired @Autowired
private PvmAccettazioneService pvmAccettazioneService; private PvmAccettazioneService pvmAccettazioneService;
@@ -210,7 +212,7 @@ public class PvmController {
} }
response = pvmService.saveTerminalino(inputValue); response = pvmServiceSave.saveTerminalino(inputValue);
} catch (Exception e) { } catch (Exception e) {
logger.error(request.getRequestURI(), e); logger.error(request.getRequestURI(), e);
response.add(new ServiceRestResponse(EsitoType.KO, configuration, e)); response.add(new ServiceRestResponse(EsitoType.KO, configuration, e));
@@ -231,7 +233,7 @@ public class PvmController {
} }
response = pvmService.SM2Save(saveDTO); response = pvmServiceSave.SM2Save(saveDTO);
} catch (Exception e) { } catch (Exception e) {
logger.error(request.getRequestURI(), e); logger.error(request.getRequestURI(), e);
response.add(new ServiceRestResponse(EsitoType.KO, configuration, e)); response.add(new ServiceRestResponse(EsitoType.KO, configuration, e));
@@ -250,7 +252,7 @@ public class PvmController {
if (!requestDataDTO.isValidUsername() || !requestDataDTO.isValidPassword()) { if (!requestDataDTO.isValidUsername() || !requestDataDTO.isValidPassword()) {
throw new UsernameNotFoundException("Utente " + requestDataDTO.getUsername() + " non riconoscuto!"); throw new UsernameNotFoundException("Utente " + requestDataDTO.getUsername() + " non riconoscuto!");
} }
pvmService.SM2Save(saveDTO); pvmServiceSave.SM2Save(saveDTO);
response = ServiceRestResponse.createPositiveResponse(); response = ServiceRestResponse.createPositiveResponse();
} catch (Exception e) { } catch (Exception e) {
logger.error(request.getRequestURI(), e); logger.error(request.getRequestURI(), e);
@@ -394,7 +396,7 @@ public class PvmController {
try { try {
List<AnomalieResiDTO> anomalieResiDTOS = pvmService.checkDocReso(docFromPickingDTO); List<AnomalieResiDTO> anomalieResiDTOS = pvmService.checkDocReso(docFromPickingDTO);
if (anomalieResiDTOS == null || anomalieResiDTOS.size() == 0) if (anomalieResiDTOS == null || anomalieResiDTOS.size() == 0)
return ServiceRestResponse.createEntityPositiveResponse(pvmService.saveDocFromPicking(docFromPickingDTO)); return ServiceRestResponse.createEntityPositiveResponse(pvmServiceSave.saveDocFromPicking(docFromPickingDTO));
else { else {
ServiceRestResponse serviceRestResponse = ServiceRestResponse.createNegativeResponse(); ServiceRestResponse serviceRestResponse = ServiceRestResponse.createNegativeResponse();
serviceRestResponse.setJsonObject(anomalieResiDTOS); serviceRestResponse.setJsonObject(anomalieResiDTOS);

View File

@@ -1,350 +0,0 @@
package it.integry.ems.retail.service;
import it.integry.ems.retail.dto.GiacenzaDTO;
import it.integry.ems.sync.MultiDBTransaction.Connection;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
import it.integry.ems_model.service.SetupGest;
import it.integry.ems_model.utility.Query;
import it.integry.ems_model.utility.UtilityDB;
import org.springframework.stereotype.Component;
import org.springframework.web.context.ContextLoader;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
@Component
public class GiacenzaPvHandlerService {
private final HashMap<String, HashMap<String, List<GiacenzaDTO>>> listGiacenzaPv = new HashMap<>();
public void setGiacenzaPv(String profileDb, String codMdep, List<GiacenzaDTO> giacenzaDTOS) {
if ( !listGiacenzaPv.containsKey(profileDb.toUpperCase()) ) {
listGiacenzaPv.put(profileDb.toUpperCase(), new HashMap<>());
}
HashMap<String, List<GiacenzaDTO>> giacenzeMap = listGiacenzaPv.get(profileDb.toUpperCase());
if (!giacenzeMap.containsKey(codMdep.toUpperCase())) {
giacenzeMap.put(codMdep.toUpperCase(), new ArrayList<>());
}
giacenzeMap.put(codMdep.toUpperCase(), giacenzaDTOS);
listGiacenzaPv.put(profileDb.toUpperCase(), giacenzeMap);
}
public GiacenzaDTO getGiacenzaPvArticolo(String dbName, Connection connection, String codMdep, String codMart) throws Exception {
HashMap<String, HashMap<String, List<GiacenzaDTO>>> inputMap = listGiacenzaPv;
List<GiacenzaDTO> giacenzaPv = getGiacenzaPvDBName(inputMap, dbName).get(codMdep);
if (giacenzaPv == null) {
GiacenzaService giacenzaService = new GiacenzaService();
giacenzaPv = retrieveGiacenza(dbName, connection, codMdep);
setGiacenzaPv(dbName, codMdep, giacenzaPv);
}
if (giacenzaPv != null)
return giacenzaPv.stream()
.filter(x-> x.getCodMart().equalsIgnoreCase(codMart))
.findFirst()
.orElse(null);
return null;
}
public List<GiacenzaDTO> retrieveGiacenza(String dbName, Connection connection, String codMdep) throws Exception {
String sql = Query.format(
"SELECT cod_mdep FROM stb_gest_setup_depo WHERE gest_name = %s AND section = %s AND key_section = %S AND value = %S",
"DATI_AZIENDA", "GIACENZA_DA_INV", "REPLACE_DEPO", codMdep);
String codMdepNew = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(connection, sql);
String whereCond = UtilityDB.valueToString(codMdep);
if (codMdepNew != null) {
whereCond += ", " + UtilityDB.valueToString(codMdepNew);
}
sql = "WITH art AS (SELECT mtb_aart.cod_mart AS cod_mart,\n" +
" IIF(mtb_aart.articolo_composto = 'S'\n" +
" AND mtb_comp.cod_comp IS NOT NULL, mtb_comp.cod_comp, mtb_aart.cod_mart) AS cod_mart_mov,\n" +
" ISNULL(mtb_comp.qta_std, 1) AS qta_std\n" +
" FROM mtb_aart\n" +
" LEFT OUTER JOIN mtb_comp\n" +
" ON mtb_aart.cod_mart = mtb_comp.cod_mart\n" +
" AND mtb_aart.articolo_composto = 'S'),\n" +
" movimenti AS (SELECT mtb_movi.cod_mart,\n" +
" mtb_movi.data_reg,\n" +
" mtb_movi.qta_car AS qta_car,\n" +
" mtb_movi.qta_scar AS qta_scar,\n" +
" dtb_doct.data_ins,\n" +
" 'D' AS tipo_car\n" +
" FROM mtb_movi\n" +
" INNER JOIN dtb_doct\n" +
" ON dtb_doct.cod_anag = mtb_movi.cod_anag\n" +
" AND dtb_doct.cod_dtip = mtb_movi.cod_dtip\n" +
" AND dtb_doct.data_doc = mtb_movi.data_doc\n" +
" AND dtb_doct.ser_doc = mtb_movi.ser_doc\n" +
" AND dtb_doct.num_doc = mtb_movi.num_doc\n" +
" WHERE mtb_movi.cod_mdep IN (" + whereCond + ") and dtb_doct.data_ins >= dateadd(day, - 7, cast(getdate() AS DATE))\n" +
" UNION ALL\n" +
" SELECT wdtb_docr.cod_mart,\n" +
" wdtb_doct.data_reg,\n" +
" wdtb_docr.qta_doc * wdtb_docr.rap_conv,\n" +
" 0,\n" +
" wdtb_doct.data_mod,\n" +
" 'W' AS tipo_car\n" +
" FROM wdtb_doct\n" +
" INNER JOIN wdtb_docr\n" +
" ON wdtb_doct.cod_anag = wdtb_docr.cod_anag\n" +
" AND wdtb_doct.cod_dtip = wdtb_docr.cod_dtip\n" +
" AND wdtb_doct.data_doc = wdtb_docr.data_doc\n" +
" AND wdtb_doct.ser_doc = wdtb_docr.ser_doc\n" +
" AND wdtb_doct.num_doc = wdtb_docr.num_doc\n" +
" WHERE wdtb_doct.flag_elaborato = 'N'\n" +
" AND wdtb_doct.cod_mdep IN (" + whereCond + ") and wdtb_doct.data_ins >= dateadd(day, - 7, cast(getdate() AS DATE))\n" +
" UNION ALL\n" +
" SELECT ntb_docr.cod_mart,\n" +
" ntb_doct.date_only_doc AS data_reg,\n" +
" 0,\n" +
" ntb_docr.qta_doc * ntb_docr.qta_cnf,\n" +
" ntb_doct.data_import,\n" +
" NULL AS tipo_car\n" +
" FROM ntb_doct\n" +
" INNER JOIN ntb_docr\n" +
" ON ntb_doct.cod_mdep = ntb_docr.cod_mdep\n" +
" AND ntb_doct.cod_cassa = ntb_docr.cod_cassa\n" +
" AND ntb_doct.data_doc = ntb_docr.data_doc\n" +
" LEFT OUTER JOIN dtb_tipi\n" +
" ON ntb_doct.cod_dtip_val = dtb_tipi.cod_dtip\n" +
" WHERE ntb_doct.cod_mdep IN (" + whereCond + ") and ntb_doct.data_import >= dateadd(day, - 7, cast(getdate() AS DATE))\n" +
" AND ntb_doct.causale = 'V'\n" +
" AND (\n" +
" ntb_doct.data_doc_val IS NULL\n" +
" OR dtb_tipi.segno_qta_scar = 0\n" +
" )\n" +
" AND NOT EXISTS (SELECT *\n" +
" FROM dtb_doct\n" +
" INNER JOIN mtb_depo ON dtb_doct.cod_mdep = mtb_depo.cod_mdep AND\n" +
" dtb_doct.cod_dtip = mtb_depo.cod_dtip\n" +
" WHERE date_only_doc = dtb_doct.data_doc\n" +
" AND ntb_doct.cod_mdep = dtb_doct.cod_mdep)),\n" +
" inventario_provvisorio AS (SELECT art.cod_mart_mov AS cod_mart,\n" +
" SUM(qta_col * art.qta_std) AS qta_col,\n" +
" data_ins,\n" +
" MAX(data_ins) OVER ( PARTITION BY art.cod_mart_mov) AS max_data_ins\n" +
" FROM mtb_colt\n" +
" INNER JOIN mtb_colr\n" +
" ON mtb_colt.gestione = mtb_colr.gestione\n" +
" AND mtb_colt.data_collo = mtb_colr.data_collo\n" +
" AND mtb_colt.ser_collo = mtb_colr.ser_collo\n" +
" AND mtb_colt.num_collo = mtb_colr.num_collo\n" +
" INNER JOIN (SELECT mtb_aart.cod_mart AS cod_mart,\n" +
" IIF(mtb_aart.articolo_composto = 'S'\n" +
" AND mtb_comp.cod_comp IS NOT NULL,\n" +
" mtb_comp.cod_comp, mtb_aart.cod_mart) AS cod_mart_mov,\n" +
" ISNULL(mtb_comp.qta_std, 1) AS qta_std\n" +
" FROM mtb_aart\n" +
" LEFT OUTER JOIN mtb_comp\n" +
" ON mtb_aart.cod_mart = mtb_comp.cod_mart) art\n" +
" ON mtb_colr.cod_mart = art.cod_mart\n" +
" WHERE mtb_colt.cod_dtip_provv = 'RGIAC'\n" +
" AND mtb_colt.data_distribuzione IS NULL\n" +
" AND mtb_colt.cod_mdep IN (" + whereCond + ")\n" +
" GROUP BY art.cod_mart_mov, mtb_colt.data_collo, data_ins),\n" +
" selezione_giacenza AS (SELECT ISNULL(ip.cod_mart, gp.cod_mart) AS cod_mart,\n" +
" ISNULL(ip.qta_col, gp.qta_car) AS qta_car,\n" +
" ISNULL(IIF(gp.data_ins < ip.data_ins, 0, gp.qta_scar), 0) AS qta_scar,\n" +
" ISNULL(ip.data_ins, gp.data_ins) AS data_ins,\n" +
" ISNULL(ip.data_ins, gp.data_reg) AS data_reg,\n" +
" IIF(ip.data_ins IS NULL, 0, 1) AS is_invent,\n" +
" ip.data_ins AS last_rgiac\n" +
" FROM carelli_giacenza_prog gp\n" +
" LEFT JOIN inventario_provvisorio ip\n" +
" ON ip.cod_mart = gp.cod_mart\n" +
" AND max_data_ins = ip.data_ins\n" +
" AND (gp.data_ins < ip.data_ins)\n" +
" WHERE gp.cod_mdep IN (" + whereCond + ")),\n" +
" mov AS (SELECT art.cod_mart_mov AS cod_mart,\n" +
" SUM(movimenti.qta_car * qta_std) + ISNULL(giac.qta_car, 0) AS qta_car,\n" +
" SUM(movimenti.qta_scar * qta_std) + ISNULL(giac.qta_scar, 0) AS qta_scar,\n" +
" GETDATE() AS data_ins\n" +
"\n" +
" FROM movimenti\n" +
" INNER JOIN art ON movimenti.cod_mart = art.cod_mart\n" +
" LEFT OUTER JOIN selezione_giacenza giac ON giac.cod_mart = art.cod_mart_mov\n" +
" WHERE (\n" +
" (movimenti.data_reg >= CAST(ISNULL(giac.data_reg, GETDATE()) AS DATE) AND\n" +
" (giac.data_ins IS NULL OR (movimenti.data_ins >= giac.data_ins))) OR\n" +
" (\n" +
" (movimenti.tipo_car = 'W') AND (\n" +
" (giac.data_ins IS NULL OR (movimenti.data_ins >= giac.data_ins)) OR\n" +
" (is_invent = 1 AND (movimenti.data_ins >= last_rgiac)) OR\n" +
" (is_invent = 0 AND movimenti.data_ins >= ISNULL(giac.data_reg, CAST(GETDATE() AS DATE)))\n" +
" )\n" +
" )\n" +
" )\n" +
"\n" +
" GROUP BY art.cod_mart_mov, giac.qta_car, giac.qta_scar),\n" +
" inv AS (SELECT ISNULL(r.cod_mart, k.cod_mart) AS cod_mart,\n" +
" ISNULL(r.qta_car, ISNULL(k.qta_car, 0)) - ISNULL(r.qta_scar, ISNULL(k.qta_scar, 0)) AS qta_inv,\n" +
" ISNULL(k.data_ins, CAST(GETDATE() AS DATE)) AS data_inventario\n" +
" FROM mov r\n" +
" FULL OUTER JOIN selezione_giacenza k\n" +
" ON k.cod_mart = r.cod_mart),\n" +
" final AS (SELECT cod_mart, qta_inv, data_inventario\n" +
" FROM inv\n" +
" UNION\n" +
" SELECT mtb_comp.cod_mart,\n" +
" ROUND(SUM(ISNULL(qta_inv, 0)) / SUM(qta_std), 2),\n" +
" MAX(data_inventario)\n" +
" FROM mtb_aart\n" +
" INNER JOIN mtb_comp ON mtb_aart.cod_mart = mtb_comp.cod_mart\n" +
" LEFT OUTER JOIN inv ON mtb_comp.cod_comp = inv.cod_mart\n" +
" WHERE mtb_aart.articolo_composto = 'S'\n" +
" AND mtb_aart.flag_stato = 'A'\n" +
" GROUP BY mtb_comp.cod_mart)\n" +
"SELECT final.cod_mart,\n" +
" descrizione,\n" +
" qta_inv,\n" +
" data_inventario,\n" +
" " + UtilityDB.valueToString(codMdep) + " AS cod_mdep\n" +
"FROM final\n" +
" INNER JOIN mtb_aart ON final.cod_mart = mtb_aart.cod_mart";
List<GiacenzaDTO> listGiacenza = UtilityDB.executeSimpleQueryDTO(connection, sql, GiacenzaDTO.class);
String listiniAcquisto = new SetupGest().getSetup(connection,"DATI_AZIENDA", "GIACENZA_DA_INV", "LISTINI_ACQUISTO");
List<String> listini = Arrays.asList(listiniAcquisto.split("\\|"));
sql = "WITH incoming_stock_documenti AS (\n" +
"/*\n" +
"Estrazione dei documenti (bolle web) di merce consegnata\n" +
"*/\n" +
"\n" +
" SELECT wdtb_doct.cod_mdep,\n" +
" wdtb_docr.cod_mart,\n" +
" wdtb_docr.data_ord,\n" +
" wdtb_docr.num_ord,\n" +
" riga_ord,\n" +
" wdtb_doct.cod_anag,\n" +
" wdtb_docr.qta_doc * wdtb_docr.rap_conv AS qta_doc,\n" +
" wdtb_doct.flag_elaborato\n" +
" FROM wdtb_doct\n" +
" INNER JOIN wdtb_docr\n" +
" ON wdtb_doct.cod_anag = wdtb_docr.cod_anag AND wdtb_doct.cod_dtip = wdtb_docr.cod_dtip AND\n" +
" wdtb_doct.data_doc = wdtb_docr.data_doc AND wdtb_doct.ser_doc = wdtb_docr.ser_doc AND\n" +
" wdtb_doct.num_doc = wdtb_docr.num_doc\n" +
" WHERE wdtb_doct.data_ins >= dateadd(DAY, - 21, CAST(getdate() AS DATE))\n" +
" AND wdtb_doct.cod_mdep = " + UtilityDB.valueToString(codMdep) + ")\n" +
" , incoming_stock_ordini AS (\n" +
"/*\n" +
"Estrazione degli ordini d'acquisto in consegna\n" +
"*/\n" +
" SELECT r.cod_mdep,\n" +
" r.cod_mart,\n" +
" CASE\n" +
" WHEN r.data_cons = r.data_ord\n" +
" THEN CAST(getdate() AS DATE)\n" +
" ELSE r.data_cons\n" +
" END AS data_cons,\n" +
" r.qta_ord,\n" +
" r.data_ord,\n" +
" r.riga_ord,\n" +
" r.num_ord,\n" +
" cod_anag\n" +
" FROM dtb_ordt t\n" +
" INNER JOIN dtb_ordr r\n" +
" ON t.gestione = r.gestione\n" +
" AND t.data_ord = r.data_ord\n" +
" AND t.num_ord = r.num_ord\n" +
" WHERE\n" +
" -- ordini acquisto\n" +
" t.gestione = 'A'\n" +
" -- ordini non annullati\n" +
" AND t.flag_annulla = 'N'\n" +
" -- ordii non sospesi\n" +
" AND t.flag_sospeso = 'N'\n" +
" AND (\n" +
" -- ordini futuri\n" +
" (r.data_cons >= CAST(getdate() AS DATE))\n" +
" OR\n" +
" -- ordini fuori piano logistico (r.data_cons = r.data_ord), inevasi e fatti negli ultimi 3 giorni\n" +
" (\n" +
" r.data_cons = r.data_ord\n" +
" AND flag_evaso = 'I'\n" +
" AND r.data_ord >= dateadd(DAY, - 3, CAST(getdate() AS DATE))\n" +
" )\n" +
" )\n" +
" -- prendiamo i soli ordini del SECCO, sarà da modificare quando inizieranno ad ordinare anche altri (es. APULD)\n" +
" AND t.listino IN (" + UtilityDB.listValueToString(listini) + ")\n" +
" -- ordine non ancora evaso\n" +
" AND flag_evaso <> 'E'\n" +
" -- filtro solamente un Pdv\n" +
" AND r.cod_mdep = " + UtilityDB.valueToString(codMdep) + ")\n" +
" , incoming_stock_doc_consegnati AS (\n" +
"/*\n" +
"Estrazione dei documenti consegnati\n" +
"*/\n" +
" SELECT DISTINCT wdtb_docr.num_ord, wdtb_docr.data_ord, wdtb_doct.cod_anag\n" +
" FROM wdtb_doct\n" +
" INNER JOIN wdtb_docr\n" +
" ON wdtb_doct.cod_anag = wdtb_docr.cod_anag AND wdtb_doct.cod_dtip = wdtb_docr.cod_dtip AND\n" +
" wdtb_doct.data_doc = wdtb_docr.data_doc AND wdtb_doct.ser_doc = wdtb_docr.ser_doc AND\n" +
" wdtb_doct.num_doc = wdtb_docr.num_doc\n" +
" WHERE wdtb_doct.data_ins >= dateadd(DAY, - 7, CAST(getdate() AS DATE))\n" +
" AND wdtb_doct.flag_elaborato = 'N')\n" +
"\n" +
"-- Step 4) Unione delle estrazioni precedenti [MySQL]\n" +
"\n" +
"SELECT ISNULL(d.cod_mdep, o.cod_mdep) AS store_code,\n" +
" ISNULL(d.cod_mart, o.cod_mart) AS art_code,\n" +
" data_cons,\n" +
" SUM(ISNULL(qta_doc, qta_ord)) AS incoming_stock\n" +
"FROM incoming_stock_ordini o\n" +
" FULL OUTER JOIN incoming_stock_documenti d\n" +
" ON o.cod_mdep = d.cod_mdep AND o.cod_mart = d.cod_mart AND o.data_ord = d.data_ord AND\n" +
" o.num_ord = d.num_ord AND o.cod_anag = d.cod_anag AND o.riga_ord = d.riga_ord\n" +
" LEFT JOIN incoming_stock_doc_consegnati k\n" +
" ON o.num_ord = k.num_ord AND o.cod_anag = k.cod_anag AND o.data_ord = k.data_ord\n" +
"WHERE (flag_elaborato = 'I' OR flag_elaborato IS NULL)\n" +
" AND ((d.cod_mart IS NOT NULL) OR (d.cod_mart IS NULL AND k.num_ord IS NULL))\n" +
"GROUP BY ISNULL(d.cod_mdep, o.cod_mdep), ISNULL(d.cod_mart, o.cod_mart), data_cons, k.num_ord\n";
List<HashMap<String, Object>> merceInArrivo = UtilityDB.executeSimpleQuery(connection, sql);
if (listGiacenza != null) {
merceInArrivo
.forEach(merce -> {
String storeCode = (String) merce.get("store_code");
String artCode = (String) merce.get("art_code");
BigDecimal incomingStock = (BigDecimal) merce.get("incoming_stock");
listGiacenza.stream()
.filter(x -> x.getCodMart().equals(artCode) && x.getCodMdep().equals(storeCode))
.findFirst()
.ifPresent(x -> {
x.setIncomingStock(incomingStock);
});
});
}
if ( listGiacenza != null && listGiacenza.size() > 0 ){
setGiacenzaPv(dbName,
codMdep,
listGiacenza);
}
return listGiacenza;
}
private HashMap<String, List<GiacenzaDTO>> getGiacenzaPvDBName(HashMap<String, HashMap<String, List<GiacenzaDTO>>> inputData, String profileDb) {
if (!inputData.containsKey(profileDb))
inputData.put(profileDb, new HashMap<>());
return inputData.get(profileDb);
}
}

View File

@@ -7,6 +7,7 @@ import it.integry.ems.javabeans.RequestDataDTO;
import it.integry.ems.production.service.MrpSetupHandlerService; import it.integry.ems.production.service.MrpSetupHandlerService;
import it.integry.ems.retail.dto.GiacenzaDTO; import it.integry.ems.retail.dto.GiacenzaDTO;
import it.integry.ems.retail.pvmRetail.service.PvmService; import it.integry.ems.retail.pvmRetail.service.PvmService;
import it.integry.ems.retail.wms.inventario.service.WMSInventarioService;
import it.integry.ems.service.EntityProcessor; import it.integry.ems.service.EntityProcessor;
import it.integry.ems.sync.MultiDBTransaction.Connection; import it.integry.ems.sync.MultiDBTransaction.Connection;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager; import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
@@ -39,11 +40,12 @@ public class GiacenzaService {
@Autowired @Autowired
SetupGest setupGest; SetupGest setupGest;
@Autowired @Autowired
PvmService pvmService; WMSInventarioService wmsInventarioService;
@Autowired @Autowired
EntityProcessor entityProcessor; EntityProcessor entityProcessor;
@Autowired @Autowired
private GiacenzaPvHandlerService giacenzaPvHandlerService; PvmService pvmService;
private final Logger logger = LogManager.getLogger(); private final Logger logger = LogManager.getLogger();
@@ -318,7 +320,7 @@ public class GiacenzaService {
entityBases.addAll(giacDaInv); entityBases.addAll(giacDaInv);
if (flagStato.equalsIgnoreCase("0") && !UtilityString.isNullOrEmpty(filtroInv)) { if (flagStato.equalsIgnoreCase("0") && !UtilityString.isNullOrEmpty(filtroInv)) {
String whereCondFiltro = pvmService.getWhereCondFiltro(filtroInv); String whereCondFiltro = pvmService.getWhereCondFiltroInventario(filtroInv);
List<String> elencoArt; List<String> elencoArt;
if (!giacDaInv.isEmpty()) if (!giacDaInv.isEmpty())
@@ -512,6 +514,282 @@ public class GiacenzaService {
} }
public List<GiacenzaDTO> retrieveGiacenza(String codMdep) throws Exception { public List<GiacenzaDTO> retrieveGiacenza(String codMdep) throws Exception {
return giacenzaPvHandlerService.retrieveGiacenza(multiDBTransactionManager.getPrimaryDatasource().getDbName(), multiDBTransactionManager.getPrimaryConnection(), codMdep);
String sql = Query.format(
"SELECT cod_mdep FROM stb_gest_setup_depo WHERE gest_name = %s AND section = %s AND key_section = %S AND value = %S",
"DATI_AZIENDA", "GIACENZA_DA_INV", "REPLACE_DEPO", codMdep);
String codMdepNew = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
String whereCond = UtilityDB.valueToString(codMdep);
if (codMdepNew != null) {
whereCond += ", " + UtilityDB.valueToString(codMdepNew);
}
sql = "WITH art AS (SELECT mtb_aart.cod_mart AS cod_mart,\n" +
" IIF(mtb_aart.articolo_composto = 'S'\n" +
" AND mtb_comp.cod_comp IS NOT NULL, mtb_comp.cod_comp, mtb_aart.cod_mart) AS cod_mart_mov,\n" +
" ISNULL(mtb_comp.qta_std, 1) AS qta_std\n" +
" FROM mtb_aart\n" +
" LEFT OUTER JOIN mtb_comp\n" +
" ON mtb_aart.cod_mart = mtb_comp.cod_mart\n" +
" AND mtb_aart.articolo_composto = 'S'),\n" +
" movimenti AS (SELECT mtb_movi.cod_mart,\n" +
" mtb_movi.data_reg,\n" +
" mtb_movi.qta_car AS qta_car,\n" +
" mtb_movi.qta_scar AS qta_scar,\n" +
" dtb_doct.data_ins,\n" +
" 'D' AS tipo_car\n" +
" FROM mtb_movi\n" +
" INNER JOIN dtb_doct\n" +
" ON dtb_doct.cod_anag = mtb_movi.cod_anag\n" +
" AND dtb_doct.cod_dtip = mtb_movi.cod_dtip\n" +
" AND dtb_doct.data_doc = mtb_movi.data_doc\n" +
" AND dtb_doct.ser_doc = mtb_movi.ser_doc\n" +
" AND dtb_doct.num_doc = mtb_movi.num_doc\n" +
" WHERE mtb_movi.cod_mdep IN (" + whereCond + ") and dtb_doct.data_ins >= dateadd(day, - 7, cast(getdate() AS DATE))\n" +
" UNION ALL\n" +
" SELECT wdtb_docr.cod_mart,\n" +
" wdtb_doct.data_reg,\n" +
" wdtb_docr.qta_doc * wdtb_docr.rap_conv,\n" +
" 0,\n" +
" wdtb_doct.data_mod,\n" +
" 'W' AS tipo_car\n" +
" FROM wdtb_doct\n" +
" INNER JOIN wdtb_docr\n" +
" ON wdtb_doct.cod_anag = wdtb_docr.cod_anag\n" +
" AND wdtb_doct.cod_dtip = wdtb_docr.cod_dtip\n" +
" AND wdtb_doct.data_doc = wdtb_docr.data_doc\n" +
" AND wdtb_doct.ser_doc = wdtb_docr.ser_doc\n" +
" AND wdtb_doct.num_doc = wdtb_docr.num_doc\n" +
" WHERE wdtb_doct.flag_elaborato = 'N'\n" +
" AND wdtb_doct.cod_mdep IN (" + whereCond + ") and wdtb_doct.data_ins >= dateadd(day, - 7, cast(getdate() AS DATE))\n" +
" UNION ALL\n" +
" SELECT ntb_docr.cod_mart,\n" +
" ntb_doct.date_only_doc AS data_reg,\n" +
" 0,\n" +
" ntb_docr.qta_doc * ntb_docr.qta_cnf,\n" +
" ntb_doct.data_import,\n" +
" NULL AS tipo_car\n" +
" FROM ntb_doct\n" +
" INNER JOIN ntb_docr\n" +
" ON ntb_doct.cod_mdep = ntb_docr.cod_mdep\n" +
" AND ntb_doct.cod_cassa = ntb_docr.cod_cassa\n" +
" AND ntb_doct.data_doc = ntb_docr.data_doc\n" +
" LEFT OUTER JOIN dtb_tipi\n" +
" ON ntb_doct.cod_dtip_val = dtb_tipi.cod_dtip\n" +
" WHERE ntb_doct.cod_mdep IN (" + whereCond + ") and ntb_doct.data_import >= dateadd(day, - 7, cast(getdate() AS DATE))\n" +
" AND ntb_doct.causale = 'V'\n" +
" AND (\n" +
" ntb_doct.data_doc_val IS NULL\n" +
" OR dtb_tipi.segno_qta_scar = 0\n" +
" )\n" +
" AND NOT EXISTS (SELECT *\n" +
" FROM dtb_doct\n" +
" INNER JOIN mtb_depo ON dtb_doct.cod_mdep = mtb_depo.cod_mdep AND\n" +
" dtb_doct.cod_dtip = mtb_depo.cod_dtip\n" +
" WHERE date_only_doc = dtb_doct.data_doc\n" +
" AND ntb_doct.cod_mdep = dtb_doct.cod_mdep)),\n" +
" inventario_provvisorio AS (SELECT art.cod_mart_mov AS cod_mart,\n" +
" SUM(qta_col * art.qta_std) AS qta_col,\n" +
" data_ins,\n" +
" MAX(data_ins) OVER ( PARTITION BY art.cod_mart_mov) AS max_data_ins\n" +
" FROM mtb_colt\n" +
" INNER JOIN mtb_colr\n" +
" ON mtb_colt.gestione = mtb_colr.gestione\n" +
" AND mtb_colt.data_collo = mtb_colr.data_collo\n" +
" AND mtb_colt.ser_collo = mtb_colr.ser_collo\n" +
" AND mtb_colt.num_collo = mtb_colr.num_collo\n" +
" INNER JOIN (SELECT mtb_aart.cod_mart AS cod_mart,\n" +
" IIF(mtb_aart.articolo_composto = 'S'\n" +
" AND mtb_comp.cod_comp IS NOT NULL,\n" +
" mtb_comp.cod_comp, mtb_aart.cod_mart) AS cod_mart_mov,\n" +
" ISNULL(mtb_comp.qta_std, 1) AS qta_std\n" +
" FROM mtb_aart\n" +
" LEFT OUTER JOIN mtb_comp\n" +
" ON mtb_aart.cod_mart = mtb_comp.cod_mart) art\n" +
" ON mtb_colr.cod_mart = art.cod_mart\n" +
" WHERE mtb_colt.cod_dtip_provv = 'RGIAC'\n" +
" AND mtb_colt.data_distribuzione IS NULL\n" +
" AND mtb_colt.cod_mdep IN (" + whereCond + ")\n" +
" GROUP BY art.cod_mart_mov, mtb_colt.data_collo, data_ins),\n" +
" selezione_giacenza AS (SELECT ISNULL(ip.cod_mart, gp.cod_mart) AS cod_mart,\n" +
" ISNULL(ip.qta_col, gp.qta_car) AS qta_car,\n" +
" ISNULL(IIF(gp.data_ins < ip.data_ins, 0, gp.qta_scar), 0) AS qta_scar,\n" +
" ISNULL(ip.data_ins, gp.data_ins) AS data_ins,\n" +
" ISNULL(ip.data_ins, gp.data_reg) AS data_reg,\n" +
" IIF(ip.data_ins IS NULL, 0, 1) AS is_invent,\n" +
" ip.data_ins AS last_rgiac\n" +
" FROM carelli_giacenza_prog gp\n" +
" LEFT JOIN inventario_provvisorio ip\n" +
" ON ip.cod_mart = gp.cod_mart\n" +
" AND max_data_ins = ip.data_ins\n" +
" AND (gp.data_ins < ip.data_ins)\n" +
" WHERE gp.cod_mdep IN (" + whereCond + ")),\n" +
" mov AS (SELECT art.cod_mart_mov AS cod_mart,\n" +
" SUM(movimenti.qta_car * qta_std) + ISNULL(giac.qta_car, 0) AS qta_car,\n" +
" SUM(movimenti.qta_scar * qta_std) + ISNULL(giac.qta_scar, 0) AS qta_scar,\n" +
" GETDATE() AS data_ins\n" +
"\n" +
" FROM movimenti\n" +
" INNER JOIN art ON movimenti.cod_mart = art.cod_mart\n" +
" LEFT OUTER JOIN selezione_giacenza giac ON giac.cod_mart = art.cod_mart_mov\n" +
" WHERE (\n" +
" (movimenti.data_reg >= CAST(ISNULL(giac.data_reg, GETDATE()) AS DATE) AND\n" +
" (giac.data_ins IS NULL OR (movimenti.data_ins >= giac.data_ins))) OR\n" +
" (\n" +
" (movimenti.tipo_car = 'W') AND (\n" +
" (giac.data_ins IS NULL OR (movimenti.data_ins >= giac.data_ins)) OR\n" +
" (is_invent = 1 AND (movimenti.data_ins >= last_rgiac)) OR\n" +
" (is_invent = 0 AND movimenti.data_ins >= ISNULL(giac.data_reg, CAST(GETDATE() AS DATE)))\n" +
" )\n" +
" )\n" +
" )\n" +
"\n" +
" GROUP BY art.cod_mart_mov, giac.qta_car, giac.qta_scar),\n" +
" inv AS (SELECT ISNULL(r.cod_mart, k.cod_mart) AS cod_mart,\n" +
" ISNULL(r.qta_car, ISNULL(k.qta_car, 0)) - ISNULL(r.qta_scar, ISNULL(k.qta_scar, 0)) AS qta_inv,\n" +
" ISNULL(k.data_ins, CAST(GETDATE() AS DATE)) AS data_inventario\n" +
" FROM mov r\n" +
" FULL OUTER JOIN selezione_giacenza k\n" +
" ON k.cod_mart = r.cod_mart),\n" +
" final AS (SELECT cod_mart, qta_inv, data_inventario\n" +
" FROM inv\n" +
" UNION\n" +
" SELECT mtb_comp.cod_mart,\n" +
" ROUND(SUM(ISNULL(qta_inv, 0)) / SUM(qta_std), 2),\n" +
" MAX(data_inventario)\n" +
" FROM mtb_aart\n" +
" INNER JOIN mtb_comp ON mtb_aart.cod_mart = mtb_comp.cod_mart\n" +
" LEFT OUTER JOIN inv ON mtb_comp.cod_comp = inv.cod_mart\n" +
" WHERE mtb_aart.articolo_composto = 'S'\n" +
" AND mtb_aart.flag_stato = 'A'\n" +
" GROUP BY mtb_comp.cod_mart)\n" +
"SELECT final.cod_mart,\n" +
" descrizione,\n" +
" qta_inv,\n" +
" data_inventario,\n" +
" " + UtilityDB.valueToString(codMdep) + " AS cod_mdep\n" +
"FROM final\n" +
" INNER JOIN mtb_aart ON final.cod_mart = mtb_aart.cod_mart";
List<GiacenzaDTO> listGiacenza = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sql, GiacenzaDTO.class);
String listiniAcquisto = setupGest.getSetup("DATI_AZIENDA", "GIACENZA_DA_INV", "LISTINI_ACQUISTO");
List<String> listini = Arrays.asList(listiniAcquisto.split("\\|"));
sql = "WITH incoming_stock_documenti AS (\n" +
"/*\n" +
"Estrazione dei documenti (bolle web) di merce consegnata\n" +
"*/\n" +
"\n" +
" SELECT wdtb_doct.cod_mdep,\n" +
" wdtb_docr.cod_mart,\n" +
" wdtb_docr.data_ord,\n" +
" wdtb_docr.num_ord,\n" +
" riga_ord,\n" +
" wdtb_doct.cod_anag,\n" +
" wdtb_docr.qta_doc * wdtb_docr.rap_conv AS qta_doc,\n" +
" wdtb_doct.flag_elaborato\n" +
" FROM wdtb_doct\n" +
" INNER JOIN wdtb_docr\n" +
" ON wdtb_doct.cod_anag = wdtb_docr.cod_anag AND wdtb_doct.cod_dtip = wdtb_docr.cod_dtip AND\n" +
" wdtb_doct.data_doc = wdtb_docr.data_doc AND wdtb_doct.ser_doc = wdtb_docr.ser_doc AND\n" +
" wdtb_doct.num_doc = wdtb_docr.num_doc\n" +
" WHERE wdtb_doct.data_ins >= dateadd(DAY, - 21, CAST(getdate() AS DATE))\n" +
" AND wdtb_doct.cod_mdep = " + UtilityDB.valueToString(codMdep) + ")\n" +
" , incoming_stock_ordini AS (\n" +
"/*\n" +
"Estrazione degli ordini d'acquisto in consegna\n" +
"*/\n" +
" SELECT r.cod_mdep,\n" +
" r.cod_mart,\n" +
" CASE\n" +
" WHEN r.data_cons = r.data_ord\n" +
" THEN CAST(getdate() AS DATE)\n" +
" ELSE r.data_cons\n" +
" END AS data_cons,\n" +
" r.qta_ord,\n" +
" r.data_ord,\n" +
" r.riga_ord,\n" +
" r.num_ord,\n" +
" cod_anag\n" +
" FROM dtb_ordt t\n" +
" INNER JOIN dtb_ordr r\n" +
" ON t.gestione = r.gestione\n" +
" AND t.data_ord = r.data_ord\n" +
" AND t.num_ord = r.num_ord\n" +
" WHERE\n" +
" -- ordini acquisto\n" +
" t.gestione = 'A'\n" +
" -- ordini non annullati\n" +
" AND t.flag_annulla = 'N'\n" +
" -- ordii non sospesi\n" +
" AND t.flag_sospeso = 'N'\n" +
" AND (\n" +
" -- ordini futuri\n" +
" (r.data_cons >= CAST(getdate() AS DATE))\n" +
" OR\n" +
" -- ordini fuori piano logistico (r.data_cons = r.data_ord), inevasi e fatti negli ultimi 3 giorni\n" +
" (\n" +
" r.data_cons = r.data_ord\n" +
" AND flag_evaso = 'I'\n" +
" AND r.data_ord >= dateadd(DAY, - 3, CAST(getdate() AS DATE))\n" +
" )\n" +
" )\n" +
" -- prendiamo i soli ordini del SECCO, sarà da modificare quando inizieranno ad ordinare anche altri (es. APULD)\n" +
" AND t.listino IN (" + UtilityDB.listValueToString(listini) + ")\n" +
" -- ordine non ancora evaso\n" +
" AND flag_evaso <> 'E'\n" +
" -- filtro solamente un Pdv\n" +
" AND r.cod_mdep = " + UtilityDB.valueToString(codMdep) + ")\n" +
" , incoming_stock_doc_consegnati AS (\n" +
"/*\n" +
"Estrazione dei documenti consegnati\n" +
"*/\n" +
" SELECT DISTINCT wdtb_docr.num_ord, wdtb_docr.data_ord, wdtb_doct.cod_anag\n" +
" FROM wdtb_doct\n" +
" INNER JOIN wdtb_docr\n" +
" ON wdtb_doct.cod_anag = wdtb_docr.cod_anag AND wdtb_doct.cod_dtip = wdtb_docr.cod_dtip AND\n" +
" wdtb_doct.data_doc = wdtb_docr.data_doc AND wdtb_doct.ser_doc = wdtb_docr.ser_doc AND\n" +
" wdtb_doct.num_doc = wdtb_docr.num_doc\n" +
" WHERE wdtb_doct.data_ins >= dateadd(DAY, - 7, CAST(getdate() AS DATE))\n" +
" AND wdtb_doct.flag_elaborato = 'N')\n" +
"\n" +
"-- Step 4) Unione delle estrazioni precedenti [MySQL]\n" +
"\n" +
"SELECT ISNULL(d.cod_mdep, o.cod_mdep) AS store_code,\n" +
" ISNULL(d.cod_mart, o.cod_mart) AS art_code,\n" +
" data_cons,\n" +
" SUM(ISNULL(qta_doc, qta_ord)) AS incoming_stock\n" +
"FROM incoming_stock_ordini o\n" +
" FULL OUTER JOIN incoming_stock_documenti d\n" +
" ON o.cod_mdep = d.cod_mdep AND o.cod_mart = d.cod_mart AND o.data_ord = d.data_ord AND\n" +
" o.num_ord = d.num_ord AND o.cod_anag = d.cod_anag AND o.riga_ord = d.riga_ord\n" +
" LEFT JOIN incoming_stock_doc_consegnati k\n" +
" ON o.num_ord = k.num_ord AND o.cod_anag = k.cod_anag AND o.data_ord = k.data_ord\n" +
"WHERE (flag_elaborato = 'I' OR flag_elaborato IS NULL)\n" +
" AND ((d.cod_mart IS NOT NULL) OR (d.cod_mart IS NULL AND k.num_ord IS NULL))\n" +
"GROUP BY ISNULL(d.cod_mdep, o.cod_mdep), ISNULL(d.cod_mart, o.cod_mart), data_cons, k.num_ord\n";
List<HashMap<String, Object>> merceInArrivo = UtilityDB.executeSimpleQuery(multiDBTransactionManager.getPrimaryConnection(), sql);
if (listGiacenza != null) {
merceInArrivo
.forEach(merce -> {
String storeCode = (String) merce.get("store_code");
String artCode = (String) merce.get("art_code");
BigDecimal incomingStock = (BigDecimal) merce.get("incoming_stock");
listGiacenza.stream()
.filter(x -> x.getCodMart().equals(artCode) && x.getCodMdep().equals(storeCode))
.findFirst()
.ifPresent(x -> {
x.setIncomingStock(incomingStock);
});
});
}
return listGiacenza;
} }
} }

View File

@@ -15,6 +15,7 @@ import it.integry.ems_model.entity.MtbInvenr;
import it.integry.ems_model.entity.MtbInvent; import it.integry.ems_model.entity.MtbInvent;
import it.integry.ems_model.entity.MtbUntMis; import it.integry.ems_model.entity.MtbUntMis;
import it.integry.ems_model.entity._enum.GestioneEnum; import it.integry.ems_model.entity._enum.GestioneEnum;
import it.integry.ems_model.resolver.SqlFieldHolder;
import it.integry.ems_model.service.SetupGest; import it.integry.ems_model.service.SetupGest;
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.Query;
@@ -185,5 +186,4 @@ public class WMSInventarioService {
entityProcessor.processEntity(inventarioToInsert, true, multiDBTransactionManager); entityProcessor.processEntity(inventarioToInsert, true, multiDBTransactionManager);
} }
} }

View File

@@ -6,6 +6,7 @@ import it.integry.ems.logistic.dto.sm2.FiltroDistribuzioneColloDTO;
import it.integry.ems.product.importaz.service.ProductServices; import it.integry.ems.product.importaz.service.ProductServices;
import it.integry.ems.retail.pvmRetail.dto.save.DocFromPickingDTO; import it.integry.ems.retail.pvmRetail.dto.save.DocFromPickingDTO;
import it.integry.ems.retail.pvmRetail.service.PvmService; import it.integry.ems.retail.pvmRetail.service.PvmService;
import it.integry.ems.retail.pvmRetail.service.PvmServiceSave;
import it.integry.ems.retail.wms.colli.service.WMSColliService; import it.integry.ems.retail.wms.colli.service.WMSColliService;
import it.integry.ems.retail.wms.dto.*; import it.integry.ems.retail.wms.dto.*;
import it.integry.ems.retail.wms.exceptions.InvalidArticoloException; import it.integry.ems.retail.wms.exceptions.InvalidArticoloException;
@@ -76,6 +77,8 @@ public class WMSSpedizioneService {
@Autowired @Autowired
private UserSession userSession; private UserSession userSession;
@Autowired
private PvmServiceSave pvmServiceSave;
public MtbColt createUDS(CreateUDSRequestDTO createUDSRequestDTO) throws Exception { public MtbColt createUDS(CreateUDSRequestDTO createUDSRequestDTO) throws Exception {
@@ -227,7 +230,7 @@ public class WMSSpedizioneService {
docFromPickingDTO docFromPickingDTO
.setDataDoc(new Date()) .setDataDoc(new Date())
.setColli(colli); .setColli(colli);
List<EntityBase> entityRet = pvmService.saveDocFromPicking(docFromPickingDTO); List<EntityBase> entityRet = pvmServiceSave.saveDocFromPicking(docFromPickingDTO);
UtilityEntity.throwEntitiesException(entityRet); UtilityEntity.throwEntitiesException(entityRet);
} }