Merge remote-tracking branch 'origin/develop' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
This commit is contained in:
@@ -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'
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -60,7 +60,6 @@ public class MenuConfigurationService {
|
||||
|
||||
try {
|
||||
//LocalDateTime startTime = UtilityLocalDate.getNowTime();
|
||||
if (advancedDataSource.getDataSource().getDbName().equalsIgnoreCase("menu")) return;
|
||||
internalRefresh(advancedDataSource.getConnection(), menuConfig);
|
||||
//logger.debug("Menu refresh time: " + ChronoUnit.SECONDS.between(startTime, UtilityLocalDate.getNowTime()));
|
||||
} catch (Exception ex) {
|
||||
|
||||
@@ -221,8 +221,7 @@ public class CommonRules extends QueryRules {
|
||||
return finalList;
|
||||
}
|
||||
|
||||
public static void updateDescrDistintaBase(Connection conn, EntityBase entityBase) throws Exception {
|
||||
MtbAart mtbAart = (MtbAart) entityBase;
|
||||
public static void updateDescrDistintaBase(Connection conn, MtbAart mtbAart) throws Exception {
|
||||
String sql =
|
||||
"SELECT descrizione, descrizione_estesa " +
|
||||
" FROM mtb_aart " +
|
||||
@@ -995,7 +994,11 @@ public class CommonRules extends QueryRules {
|
||||
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<>();
|
||||
data.put("cod_mgrp", entity.getCodMgrp());
|
||||
data.put("cod_msgr", entity.getCodMsgr());
|
||||
@@ -1008,7 +1011,7 @@ public class CommonRules extends QueryRules {
|
||||
// Convertire in JSON
|
||||
ObjectMapper objectMapper = new ObjectMapper();
|
||||
String jsonParm = objectMapper.writeValueAsString(data);
|
||||
String sql =
|
||||
sql =
|
||||
String.format(
|
||||
"SELECT * FROM dbo.suggestMtbArtEqui('%s') " ,
|
||||
jsonParm);
|
||||
@@ -1021,10 +1024,8 @@ public class CommonRules extends QueryRules {
|
||||
.setFlagEquiPrezzo("T");
|
||||
mtbAartEqui.setOperation(OperationType.INSERT_OR_UPDATE);
|
||||
}
|
||||
return idArtEqui;
|
||||
entity.setIdArtEqui(idArtEqui);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public static MtbAartEqui insEqui(Connection conn, MtbAart entity) throws Exception {
|
||||
|
||||
@@ -303,8 +303,6 @@ public class MtbAart extends EntityBase implements EquatableEntityInterface<MtbA
|
||||
@SqlField(value = "tipo_codice_imballo", maxLength = 10)
|
||||
private String tipoCodiceImballo;
|
||||
|
||||
private Boolean setIdArtEqui;
|
||||
|
||||
@Priority(1)
|
||||
private MtbAartMarchio mtbAartMarchio;
|
||||
|
||||
@@ -1170,13 +1168,6 @@ public class MtbAart extends EntityBase implements EquatableEntityInterface<MtbA
|
||||
this.classificazioneAbc = classificazioneAbc;
|
||||
}
|
||||
|
||||
/*public List<MtbPart> getMtbPart() {
|
||||
return mtbPart;
|
||||
}
|
||||
|
||||
public void setMtbPart(List<MtbPart> mtbPart) {
|
||||
this.mtbPart = mtbPart;
|
||||
}*/
|
||||
public String getTipoCodiceImballo() {
|
||||
return tipoCodiceImballo;
|
||||
}
|
||||
@@ -1186,15 +1177,6 @@ public class MtbAart extends EntityBase implements EquatableEntityInterface<MtbA
|
||||
return this;
|
||||
}
|
||||
|
||||
public Boolean getSetIdArtEqui() {
|
||||
return setIdArtEqui;
|
||||
}
|
||||
|
||||
public MtbAart setSetIdArtEqui(Boolean setIdArtEqui) {
|
||||
this.setIdArtEqui = setIdArtEqui;
|
||||
return this;
|
||||
}
|
||||
|
||||
public List<MtbAartAnag> getMtbAartAnag() {
|
||||
return mtbAartAnag;
|
||||
}
|
||||
|
||||
@@ -127,18 +127,6 @@ then
|
||||
}
|
||||
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"
|
||||
no-loop
|
||||
when
|
||||
@@ -203,17 +191,6 @@ then
|
||||
modify ( $entity ) { setArticoloComposto("N") }
|
||||
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"
|
||||
when
|
||||
eval(completeRulesEnabled)
|
||||
|
||||
@@ -105,10 +105,9 @@ no-loop
|
||||
when
|
||||
eval(postRulesEnabled)
|
||||
$mtbAart: MtbAart()
|
||||
$entity : EntityBase() from $mtbAart
|
||||
then
|
||||
|
||||
CommonRules.updateDescrDistintaBase(conn, $entity);
|
||||
CommonRules.setIdArtEqui(conn, $mtbAart);
|
||||
CommonRules.updateDescrDistintaBase(conn, $mtbAart);
|
||||
end
|
||||
|
||||
rule "completeIdRigaCtbScad"
|
||||
|
||||
@@ -303,11 +303,13 @@ public class Slim2kLogisticService {
|
||||
|
||||
String sql =
|
||||
Query.format(
|
||||
"SELECT track_number\n" +
|
||||
"SELECT system_note\n" +
|
||||
"FROM mtb_colt\n" +
|
||||
"WHERE cod_mdep = %s\n" +
|
||||
" AND data_collo = %s\n" +
|
||||
" AND track_number IS NOT NULL",
|
||||
" INNER JOIN mtb_colr ON mtb_colt.gestione = mtb_colr.gestione AND mtb_colt.data_collo = mtb_colr.data_collo AND\n" +
|
||||
" mtb_colt.ser_collo = mtb_colr.ser_collo AND mtb_colt.num_collo = mtb_colr.num_collo\n" +
|
||||
"WHERE mtb_colt.cod_mdep = %s\n" +
|
||||
" AND mtb_colt.data_collo = %s\n" +
|
||||
" AND mtb_colr.system_note IS NOT NULL",
|
||||
codMdep, today);
|
||||
|
||||
List<Integer> listTrackNumber = UtilityDB.executeSimpleQueryOnlyFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
|
||||
@@ -319,7 +321,7 @@ public class Slim2kLogisticService {
|
||||
" movements_export.item AS cod_mart,\n" +
|
||||
" movements_export.workorder AS lotto,\n" +
|
||||
" ABS(movements_export.qtymove) AS qta_collo,\n" +
|
||||
" movements_export.unum as track_number\n"+
|
||||
" movements_export.unum\n"+
|
||||
"FROM movements_export\n" +
|
||||
" INNER JOIN movements_export e ON movements_export.item = e.item\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);
|
||||
|
||||
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 -> {
|
||||
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_dest", x.get("cod_dest"));
|
||||
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();
|
||||
List<HashMap<String, Object>> righe = entry.getValue();
|
||||
|
||||
@@ -371,7 +372,6 @@ public class Slim2kLogisticService {
|
||||
.setCodVdes((String) datiDepo.get("cod_vdes"))
|
||||
.setGestione("L")
|
||||
.setSegno(-1)
|
||||
.setTrackNumber(keyMap.get("track_number").toString())
|
||||
.setCodDtipProvv(codDtip);
|
||||
mtbColt.setOperation(OperationType.INSERT);
|
||||
mtbColt.setMtbColr(new ArrayList<>());
|
||||
@@ -383,7 +383,8 @@ public class Slim2kLogisticService {
|
||||
new MtbColr()
|
||||
.setCodMart(((String) r.get("cod_mart")).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);
|
||||
}
|
||||
|
||||
|
||||
@@ -53,6 +53,8 @@ public class PvmController {
|
||||
@Autowired
|
||||
private PvmService pvmService;
|
||||
@Autowired
|
||||
private PvmServiceSave pvmServiceSave;
|
||||
@Autowired
|
||||
private PvmRapportiniFgService pvmRapportiniFgService;
|
||||
@Autowired
|
||||
private PvmAccettazioneService pvmAccettazioneService;
|
||||
@@ -210,7 +212,7 @@ public class PvmController {
|
||||
}
|
||||
|
||||
|
||||
response = pvmService.saveTerminalino(inputValue);
|
||||
response = pvmServiceSave.saveTerminalino(inputValue);
|
||||
} catch (Exception e) {
|
||||
logger.error(request.getRequestURI(), 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) {
|
||||
logger.error(request.getRequestURI(), e);
|
||||
response.add(new ServiceRestResponse(EsitoType.KO, configuration, e));
|
||||
@@ -250,7 +252,7 @@ public class PvmController {
|
||||
if (!requestDataDTO.isValidUsername() || !requestDataDTO.isValidPassword()) {
|
||||
throw new UsernameNotFoundException("Utente " + requestDataDTO.getUsername() + " non riconoscuto!");
|
||||
}
|
||||
pvmService.SM2Save(saveDTO);
|
||||
pvmServiceSave.SM2Save(saveDTO);
|
||||
response = ServiceRestResponse.createPositiveResponse();
|
||||
} catch (Exception e) {
|
||||
logger.error(request.getRequestURI(), e);
|
||||
@@ -394,7 +396,7 @@ public class PvmController {
|
||||
try {
|
||||
List<AnomalieResiDTO> anomalieResiDTOS = pvmService.checkDocReso(docFromPickingDTO);
|
||||
if (anomalieResiDTOS == null || anomalieResiDTOS.size() == 0)
|
||||
return ServiceRestResponse.createEntityPositiveResponse(pvmService.saveDocFromPicking(docFromPickingDTO));
|
||||
return ServiceRestResponse.createEntityPositiveResponse(pvmServiceSave.saveDocFromPicking(docFromPickingDTO));
|
||||
else {
|
||||
ServiceRestResponse serviceRestResponse = ServiceRestResponse.createNegativeResponse();
|
||||
serviceRestResponse.setJsonObject(anomalieResiDTOS);
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -7,6 +7,7 @@ import it.integry.ems.javabeans.RequestDataDTO;
|
||||
import it.integry.ems.production.service.MrpSetupHandlerService;
|
||||
import it.integry.ems.retail.dto.GiacenzaDTO;
|
||||
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.sync.MultiDBTransaction.Connection;
|
||||
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
|
||||
@@ -39,11 +40,12 @@ public class GiacenzaService {
|
||||
@Autowired
|
||||
SetupGest setupGest;
|
||||
@Autowired
|
||||
PvmService pvmService;
|
||||
WMSInventarioService wmsInventarioService;
|
||||
@Autowired
|
||||
EntityProcessor entityProcessor;
|
||||
|
||||
@Autowired
|
||||
private GiacenzaPvHandlerService giacenzaPvHandlerService;
|
||||
PvmService pvmService;
|
||||
|
||||
private final Logger logger = LogManager.getLogger();
|
||||
|
||||
@@ -318,7 +320,7 @@ public class GiacenzaService {
|
||||
entityBases.addAll(giacDaInv);
|
||||
|
||||
if (flagStato.equalsIgnoreCase("0") && !UtilityString.isNullOrEmpty(filtroInv)) {
|
||||
String whereCondFiltro = pvmService.getWhereCondFiltro(filtroInv);
|
||||
String whereCondFiltro = pvmService.getWhereCondFiltroInventario(filtroInv);
|
||||
|
||||
List<String> elencoArt;
|
||||
if (!giacDaInv.isEmpty())
|
||||
@@ -512,6 +514,282 @@ public class GiacenzaService {
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@ import it.integry.ems_model.entity.MtbInvenr;
|
||||
import it.integry.ems_model.entity.MtbInvent;
|
||||
import it.integry.ems_model.entity.MtbUntMis;
|
||||
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.types.OperationType;
|
||||
import it.integry.ems_model.utility.Query;
|
||||
@@ -185,5 +186,4 @@ public class WMSInventarioService {
|
||||
entityProcessor.processEntity(inventarioToInsert, true, multiDBTransactionManager);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ import it.integry.ems.logistic.dto.sm2.FiltroDistribuzioneColloDTO;
|
||||
import it.integry.ems.product.importaz.service.ProductServices;
|
||||
import it.integry.ems.retail.pvmRetail.dto.save.DocFromPickingDTO;
|
||||
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.dto.*;
|
||||
import it.integry.ems.retail.wms.exceptions.InvalidArticoloException;
|
||||
@@ -76,6 +77,8 @@ public class WMSSpedizioneService {
|
||||
|
||||
@Autowired
|
||||
private UserSession userSession;
|
||||
@Autowired
|
||||
private PvmServiceSave pvmServiceSave;
|
||||
|
||||
public MtbColt createUDS(CreateUDSRequestDTO createUDSRequestDTO) throws Exception {
|
||||
|
||||
@@ -227,7 +230,7 @@ public class WMSSpedizioneService {
|
||||
docFromPickingDTO
|
||||
.setDataDoc(new Date())
|
||||
.setColli(colli);
|
||||
List<EntityBase> entityRet = pvmService.saveDocFromPicking(docFromPickingDTO);
|
||||
List<EntityBase> entityRet = pvmServiceSave.saveDocFromPicking(docFromPickingDTO);
|
||||
UtilityEntity.throwEntitiesException(entityRet);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user