diff --git a/ems-core/src/main/java/it/integry/ems/dbms_change_tracker/component/DbmsChangeTrackerComponent.java b/ems-core/src/main/java/it/integry/ems/dbms_change_tracker/component/DbmsChangeTrackerComponent.java index 3700b53773..c0e03cf4b5 100644 --- a/ems-core/src/main/java/it/integry/ems/dbms_change_tracker/component/DbmsChangeTrackerComponent.java +++ b/ems-core/src/main/java/it/integry/ems/dbms_change_tracker/component/DbmsChangeTrackerComponent.java @@ -32,6 +32,7 @@ public class DbmsChangeTrackerComponent { add(MtbAartBarCode.ENTITY); add(MtbUntMis.ENTITY); add(MtbDepo.ENTITY); + add(MtbDepoPosizioni.ENTITY); add(StbEditLimit.ENTITY); add(StbGestSetup.ENTITY); add(StbGestSetupDepo.ENTITY); diff --git a/ems-core/src/main/java/it/integry/ems/dynamic_cache/EntityCacheComponent.java b/ems-core/src/main/java/it/integry/ems/dynamic_cache/EntityCacheComponent.java index 52aea4bba4..fa743a2700 100644 --- a/ems-core/src/main/java/it/integry/ems/dynamic_cache/EntityCacheComponent.java +++ b/ems-core/src/main/java/it/integry/ems/dynamic_cache/EntityCacheComponent.java @@ -57,6 +57,7 @@ public class EntityCacheComponent implements ApplicationListener { put(MtbAartBarCode.ENTITY, MtbAartBarCode.class); put(MtbUntMis.ENTITY, MtbUntMis.class); put(MtbDepo.ENTITY, MtbDepo.class); + put(MtbDepoPosizioni.ENTITY, MtbDepoPosizioni.class); put(StbEditLimit.ENTITY, StbEditLimit.class); put(StbGestSetup.ENTITY, StbGestSetup.class); put(StbGestSetupDepo.ENTITY, StbGestSetupDepo.class); diff --git a/ems-core/src/main/java/it/integry/ems/utility/entity/MtbDepoPosizioniUtils.java b/ems-core/src/main/java/it/integry/ems/utility/entity/MtbDepoPosizioniUtils.java new file mode 100644 index 0000000000..a5d1f3a9c8 --- /dev/null +++ b/ems-core/src/main/java/it/integry/ems/utility/entity/MtbDepoPosizioniUtils.java @@ -0,0 +1,20 @@ +package it.integry.ems.utility.entity; + +import it.integry.ems._context.ApplicationContextProvider; +import it.integry.ems.dynamic_cache.EntityCacheComponent; +import it.integry.ems.migration._base.IntegryCustomerDB; +import it.integry.ems_model.entity.MtbDepoPosizioni; + +import java.util.List; + +public class MtbDepoPosizioniUtils { + + + public static final List getAllMonoUlPositions(IntegryCustomerDB customerDB) { + final EntityCacheComponent entityCacheComponent = ApplicationContextProvider.getApplicationContext().getBean(EntityCacheComponent.class); + + return entityCacheComponent.getCachedEntitiesList(customerDB, MtbDepoPosizioni.ENTITY, + x -> x.isFlagMonoCollo()); + } + +} diff --git a/ems-engine/src/main/java/it/integry/ems/retail/wms/generic/controller/WMSGenericController.java b/ems-engine/src/main/java/it/integry/ems/retail/wms/generic/controller/WMSGenericController.java index 4da946aff0..7c16ddcc2f 100644 --- a/ems-engine/src/main/java/it/integry/ems/retail/wms/generic/controller/WMSGenericController.java +++ b/ems-engine/src/main/java/it/integry/ems/retail/wms/generic/controller/WMSGenericController.java @@ -733,4 +733,11 @@ public class WMSGenericController { ) throws Exception { return ServiceRestResponse.createPositiveResponse(WMSUtility.retrieveBarcodesByBarcodeAndCodJfas(multiDBTransactionManager.getPrimaryConnection(),barcodeUl,codJfas, maxResults)); } + + @GetMapping("wms/resetta-posizioni-mono-ul") + ServiceRestResponse resettaPosizioniMonoUl() throws Exception { + wmsGenericService.resettaPosizioniMonoUL(multiDBTransactionManager, entityProcessor); + + return ServiceRestResponse.createPositiveResponse(); + } } \ No newline at end of file diff --git a/ems-engine/src/main/java/it/integry/ems/retail/wms/generic/service/WMSGenericService.java b/ems-engine/src/main/java/it/integry/ems/retail/wms/generic/service/WMSGenericService.java index a32a9389c2..940278a65e 100644 --- a/ems-engine/src/main/java/it/integry/ems/retail/wms/generic/service/WMSGenericService.java +++ b/ems-engine/src/main/java/it/integry/ems/retail/wms/generic/service/WMSGenericService.java @@ -42,6 +42,7 @@ import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager; import it.integry.ems.user.UserSession; import it.integry.ems.utility.UtilityEntity; import it.integry.ems.utility.entity.MtbAartUtils; +import it.integry.ems.utility.entity.MtbDepoPosizioniUtils; import it.integry.ems_model.base.EntityBase; import it.integry.ems_model.db.ResultSetMapper; import it.integry.ems_model.entity.*; @@ -3208,4 +3209,59 @@ public class WMSGenericService { return UtilityDB.executeSimpleQueryDTO(connection, sql, MtbColr.class); } + + + public void resettaPosizioniMonoUL(MultiDBTransactionManager multiDBTransactionManager, EntityProcessor entityProcessor) throws Exception { + List posizioniMonoUL = MtbDepoPosizioniUtils.getAllMonoUlPositions(multiDBTransactionManager.getPrimaryConnection().getIntegryCustomerDB()); + + try { + for (MtbDepoPosizioni posizione : posizioniMonoUL) { + final List oldUdcs = getULInPosizione(posizione, false); + + if (oldUdcs == null) + continue; + + oldUdcs.removeIf(ul -> ul.getSegno() != 1); //consider only Lavorazione UDCs + + + if (oldUdcs.isEmpty()) { + //skip position + continue; + } else if (oldUdcs.size() > 1) { + throw new Exception("Posizione " + posizione.getPosizione() + " contiene più di una UDC in una posizione mono UL"); + } + final MtbColt newUdc = wmsLavorazioneService.createUDC(new CreateUDCRequestDTO() + .setCodMdep(posizione.getCodMdep()) + .setPosizione(posizione.getPosizione())); + + final MtbColt oldUdc = oldUdcs.get(0); + + final List giacenzaItems = wmsGiacenzaULService.retrieveArtsInGiacenzaByPosition(multiDBTransactionManager.getPrimaryConnection(), posizione.getPosizione()); + + if (giacenzaItems != null) { + oldUdc.setMtbColr(WMSUtility.convertMvwItemsToMtbColrs(giacenzaItems)); + + WMSUtility.spostaArtsTraUL(multiDBTransactionManager.getPrimaryConnection(), + oldUdc, newUdc.getBarcodeUl(), false, entityProcessor, RequestDataDTO.systemMockupData()); + + } + + //remove position from old UL + UtilityDB.executeStatement(multiDBTransactionManager.getPrimaryConnection(), + "UPDATE mtb_colt SET posizione = NULL " + + "WHERE gestione = " + UtilityDB.valueToString(oldUdc.getGestione()) + " " + + "AND data_collo = " + UtilityDB.valueToString(oldUdc.getDataCollo()) + " " + + "AND ser_collo = " + UtilityDB.valueToString(oldUdc.getSerCollo()) + " " + + "AND num_collo = " + UtilityDB.valueToString(oldUdc.getNumCollo()) + ); + + //save all + } + + } catch (Exception ex) { + multiDBTransactionManager.rollbackAll(); + throw ex; + } + } + }