gestione documenti di trasferimento in emissione documenti di vendita
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:
@@ -11,6 +11,8 @@ import it.integry.ems.retail.wms.accettazione.service.WMSAccettazioneService;
|
||||
import it.integry.ems.retail.wms.dto.*;
|
||||
import it.integry.ems.retail.wms.generic.dto.MvwSitArtUdcDetInventarioDTO;
|
||||
import it.integry.ems.retail.wms.generic.dto.RetrieveArtsInGiacenzaByArtRequestDTO;
|
||||
import it.integry.ems.retail.wms.generic.dto.SpostaUlRequestDTO;
|
||||
import it.integry.ems.retail.wms.generic.service.WMSGenericService;
|
||||
import it.integry.ems.retail.wms.generic.service.WMSGiacenzaULService;
|
||||
import it.integry.ems.retail.wms.vendita.service.WMSSpedizioneService;
|
||||
import it.integry.ems.rules.businessLogic.enums.TipoEmissione;
|
||||
@@ -55,6 +57,8 @@ public class DocumentiDirettiService {
|
||||
private WMSSpedizioneService wmsSpedizioneService;
|
||||
@Autowired
|
||||
private WMSGiacenzaULService wmsGiacenzaULService;
|
||||
@Autowired
|
||||
private WMSGenericService wmsGenericService;
|
||||
|
||||
public List<EntityBase> save(DtbDoct dtbDoct, boolean isInsert) throws Exception {
|
||||
List<EntityBase> entityList = new ArrayList<>();
|
||||
@@ -79,7 +83,7 @@ public class DocumentiDirettiService {
|
||||
|
||||
}
|
||||
//controllo packingList documento per eventuali trasferimenti
|
||||
checkUDSForTransfer(dtbDoct, entityList, isInsert);
|
||||
List<MtbColt> ulTrasferiete = checkUDSForTransfer(dtbDoct, entityList, isInsert);
|
||||
|
||||
if (UtilityString.equalsIgnoreCase((String) datiTipoDoc.get("gestione"), "A")) {
|
||||
if (!isInsert && dtbDoct.getOldPk() != null) {
|
||||
@@ -130,12 +134,9 @@ public class DocumentiDirettiService {
|
||||
|
||||
}
|
||||
|
||||
private DtbDoct checkUDSForTransfer(DtbDoct dtbDoct, List<EntityBase> entityList, boolean isNewDoc) throws Exception {
|
||||
private List<MtbColt> checkUDSForTransfer(DtbDoct dtbDoct, List<EntityBase> entityList, boolean isNewDoc) throws Exception {
|
||||
if (dtbDoct.getMtbColt().isEmpty() && isNewDoc)
|
||||
return null;
|
||||
String codDtipTrasf = setupGest.getSetupDepo(multiDBTransactionManager.getPrimaryConnection(), "PICKING", "LOGISTICA", "COD_DTIP_DOC_TRASF_INTERNI", dtbDoct.getCodMdep());
|
||||
if (UtilityString.isNullOrEmpty(codDtipTrasf))
|
||||
return null;
|
||||
//<editor-fold desc="Prendo tutti i colli, con le quantità associate che devono essere trasferite">
|
||||
String whereCondColli = StringUtils.join(dtbDoct.getMtbColt().stream().filter(x -> x.getOperation() == null || !x.getOperation().equals(OperationType.DELETE)).map(ul -> {
|
||||
try {
|
||||
@@ -144,160 +145,32 @@ public class DocumentiDirettiService {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}).collect(Collectors.toList()), " OR ");
|
||||
List<UlVenditaDTO> artsToTransfer;
|
||||
|
||||
List<MtbColt> ulsToTransfer;
|
||||
if (UtilityString.isNullOrEmpty(whereCondColli)) {
|
||||
artsToTransfer = new ArrayList<>();
|
||||
} else {
|
||||
artsToTransfer = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), Query.format("WITH uds AS (SELECT *\n" +
|
||||
" FROM mtb_colt\n" +
|
||||
" WHERE cod_mdep <> {}\n" +
|
||||
" AND (" + whereCondColli + "))\n" +
|
||||
"\n" +
|
||||
"SELECT mtb_colt.data_collo,\n" +
|
||||
" mtb_colt.ser_collo,\n" +
|
||||
" mtb_colt.gestione,\n" +
|
||||
" mtb_colt.num_collo,\n" +
|
||||
" cod_mdep,\n" +
|
||||
" cod_mart,\n" +
|
||||
" partita_mag,\n" +
|
||||
" mtb_colt.cod_tcol,\n" +
|
||||
" SUM(qta_col) AS qta_col,\n" +
|
||||
" SUM(num_cnf) AS num_cnf\n" +
|
||||
"FROM uds mtb_colt\n" +
|
||||
" 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" +
|
||||
"GROUP BY mtb_colt.data_collo, mtb_colt.ser_collo, mtb_colt.gestione, mtb_colt.num_collo, cod_mdep, partita_mag,cod_mart, mtb_colt.cod_tcol\n", dtbDoct.getCodMdep(), whereCondColli)
|
||||
, UlVenditaDTO.class);
|
||||
if (artsToTransfer == null) artsToTransfer = new ArrayList<>();
|
||||
return null;
|
||||
}
|
||||
ulsToTransfer = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), Query.format(
|
||||
"SELECT gestione,data_collo,ser_collo,num_collo,barcode_ul,cod_mdep from mvw_sitart_udc_det_inventario where cod_mdep <> {} and (" + whereCondColli + ")",dtbDoct.getCodMdep()
|
||||
), MtbColt.class);
|
||||
|
||||
if (UtilityList.isNullOrEmpty(ulsToTransfer)) return null;
|
||||
|
||||
|
||||
//</editor-fold>
|
||||
//<editor-fold desc="raccolgo le info basi del nuovo documento">
|
||||
MtbDepo mtbDepo = new MtbDepo();
|
||||
mtbDepo.setCodMdep(dtbDoct.getCodMdep())
|
||||
.setOperation(OperationType.SELECT_OBJECT);
|
||||
entityProcessor.processEntity(mtbDepo, multiDBTransactionManager);
|
||||
final String gestName = "DTB_DOCT";
|
||||
final String sectionVendita = "VENDITA";
|
||||
final String keySectionTipoAttivita = "TIPO_ATTIVITA";
|
||||
String activityTypeId = setupGest.getSetup(multiDBTransactionManager.getPrimaryConnection(), gestName, sectionVendita, keySectionTipoAttivita);
|
||||
if (UtilityString.isNullOrEmpty(activityTypeId))
|
||||
throw new Exception(String.format("Tipo attività non configurato %s -> %s -> %s", gestName, sectionVendita, keySectionTipoAttivita));
|
||||
//</editor-fold>
|
||||
//<editor-fold desc="controllo se esiste già una attività con la quale raggruppare i documenti generati">
|
||||
String activityId = dtbDoct.getActivityId();
|
||||
if (!isNewDoc) {
|
||||
if (UtilityString.isNullOrEmpty(activityId)) {
|
||||
String sql = Query.format("SELECT activity_id FROM dtb_doct WHERE cod_anag = %s AND cod_dtip = %s AND data_doc = %s AND ser_doc = %s AND num_doc = %s",
|
||||
dtbDoct.getCodAnag(),
|
||||
dtbDoct.getCodDtip(),
|
||||
dtbDoct.getDataDoc(),
|
||||
dtbDoct.getSerDoc(),
|
||||
dtbDoct.getNumDoc());
|
||||
activityId = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
|
||||
}
|
||||
}
|
||||
|
||||
if (UtilityString.isNullOrEmpty(activityId)) {
|
||||
StbActivity activity = createStbActivity(activityTypeId);
|
||||
entityList.add(0, activity);
|
||||
activityId = activity.getActivityId();
|
||||
dtbDoct.setActivityId(activityId);
|
||||
}
|
||||
//</editor-fold>
|
||||
|
||||
List<DtbDoct> docTrasfList = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), Query.format("SELECT cod_anag,data_doc,ser_doc,num_doc,cod_dtip,cod_mdep from dtb_doct where activity_id = {} and cod_dtip = {} ", activityId, codDtipTrasf), DtbDoct.class);
|
||||
if (docTrasfList == null) docTrasfList = new ArrayList<>();
|
||||
docTrasfList = docTrasfList.stream().peek(x -> x.setOperation(OperationType.DELETE)).collect(Collectors.toList());
|
||||
|
||||
List<String> depositiPartenza = artsToTransfer.stream().map(UlVenditaDTO::getCodMdep).distinct().collect(Collectors.toList());
|
||||
List<String> depositiPartenza = ulsToTransfer.stream().map(MtbColt::getCodMdep).distinct().collect(Collectors.toList());
|
||||
for (String codMdep : depositiPartenza) {
|
||||
//<editor-fold desc="Controllo se esiste già un documento di trasferimento">
|
||||
DtbDoct docTrasf = null;
|
||||
|
||||
if (!isNewDoc) {
|
||||
docTrasf = docTrasfList.stream().filter(x -> x.getCodMdep().equals(codMdep)).findFirst().orElse(null);
|
||||
if (docTrasf != null) {
|
||||
docTrasf.setOperation(OperationType.UPDATE);
|
||||
List<DtbDocr> oldDocRows = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), "SELECT * from dtb_docr where " + docTrasf.getPkWhereCond(), DtbDocr.class);
|
||||
|
||||
if (!UtilityList.isNullOrEmpty(oldDocRows)) {
|
||||
docTrasf.getDtbDocr().addAll(oldDocRows.stream().peek(row -> row.setQtaDoc(BigDecimal.ZERO).setOperation(OperationType.UPDATE)).collect(Collectors.toList()));
|
||||
}
|
||||
}
|
||||
}
|
||||
if (docTrasf == null) {
|
||||
docTrasf = new DtbDoct();
|
||||
docTrasf
|
||||
.setCodMdep(codMdep)
|
||||
.setCodVdes(mtbDepo.getCodVdes())
|
||||
.setCodAnag(mtbDepo.getCodAnag())
|
||||
.setCodDtip(codDtipTrasf)
|
||||
.setActivityId(activityId);
|
||||
docTrasf.setOperation(OperationType.INSERT);
|
||||
docTrasfList.add(docTrasf);
|
||||
}
|
||||
//</editor-fold>
|
||||
//<editor-fold desc="Raggruppo le quantità da trasferire per deposito/articolo/partita">
|
||||
Map<ArticoloPartitaDTO, List<UlVenditaDTO>> ulToTransf = artsToTransfer.stream()
|
||||
.filter(ul -> ul.getCodMdep().equalsIgnoreCase(codMdep))
|
||||
.collect(groupingBy(UlVenditaDTO::getArticoloPartita));
|
||||
//</editor-fold>
|
||||
//<editor-fold desc="per ogni coppia di articolo / partita sommo le quantità e aggiungo al documento">
|
||||
|
||||
for (ArticoloPartitaDTO articoloPartitaDTO : ulToTransf.keySet()) {
|
||||
DtbDocr row = docTrasf.getDtbDocr().stream().filter(docR -> docR.getCodMart().equalsIgnoreCase(articoloPartitaDTO.getCodMart()) && docR.getPartitaMag().equalsIgnoreCase(articoloPartitaDTO.getPartitaMag())).findFirst().orElse(null);
|
||||
if (row == null) {
|
||||
row = new DtbDocr();
|
||||
row.setCodMart(articoloPartitaDTO.getCodMart())
|
||||
.setPartitaMag(articoloPartitaDTO.getPartitaMag())
|
||||
.setQtaDoc(BigDecimal.ZERO)
|
||||
.setNumCnf(BigDecimal.ZERO)
|
||||
.setOperation(OperationType.INSERT);
|
||||
docTrasf.getDtbDocr().add(row);
|
||||
}
|
||||
|
||||
row
|
||||
.setQtaDoc(ulToTransf.get(articoloPartitaDTO).stream().map(UlVenditaDTO::getQtaCol).reduce(BigDecimal.ZERO, BigDecimal::add))
|
||||
.setNumCnf(ulToTransf.get(articoloPartitaDTO).stream().map(UlVenditaDTO::getNumCnf).reduce(BigDecimal.ZERO, BigDecimal::add));
|
||||
}
|
||||
|
||||
//<editor-fold desc="Aggiungo pedane da trasferire al documento">
|
||||
Map<String, List<UlVenditaDTO>> ulForCodTcol = artsToTransfer.stream().filter(x -> !UtilityString.isNullOrEmpty(x.getCodTcol())).collect(groupingBy(UlVenditaDTO::getCodTcol));
|
||||
for (String codTcol : ulForCodTcol.keySet()) {
|
||||
MtbAart mtbAart = UtilityDB.executeSimpleQueryOnlyFirstRowDTO(multiDBTransactionManager.getPrimaryConnection(), Query.format("SELECT * from mtb_tcol where cod_tcol = {}", codTcol), MtbAart.class);
|
||||
if (mtbAart == null || UtilityString.isNullOrEmpty(mtbAart.getCodMart()))
|
||||
continue;
|
||||
DtbDocr row = docTrasf.getDtbDocr().stream().filter(docR -> docR.getCodMart().equalsIgnoreCase(mtbAart.getCodMart())).findFirst().orElse(null);
|
||||
if (row == null) {
|
||||
row = new DtbDocr();
|
||||
row.setCodMart(mtbAart.getCodMart())
|
||||
.setQtaDoc(BigDecimal.ZERO)
|
||||
.setQtaCnf(mtbAart.getQtaCnf())
|
||||
.setOperation(OperationType.INSERT);
|
||||
docTrasf.getDtbDocr().add(row);
|
||||
}
|
||||
row.setQtaDoc(BigDecimal.valueOf(ulForCodTcol.get(codTcol).size()));
|
||||
}
|
||||
|
||||
//</editor-fold>
|
||||
|
||||
|
||||
//</editor-fold>
|
||||
//<editor-fold desc="Se qualche riga del documento resta con qta = 0 vuol dire che è una coppia di articolo/partita non più necessaria e se le righe sono tutte a 0 elimino il documento">
|
||||
for (DtbDocr docR : docTrasf.getDtbDocr()) {
|
||||
if (UtilityBigDecimal.equalsTo(docR.getQtaDoc(), BigDecimal.ZERO))
|
||||
docR.setOperation(OperationType.DELETE);
|
||||
}
|
||||
if (docTrasf.getDtbDocr().stream().allMatch(row -> row.getOperation().equals(OperationType.DELETE)))
|
||||
docTrasf.setOperation(OperationType.DELETE);
|
||||
//</editor-fold>
|
||||
|
||||
SpostaUlRequestDTO transferRequest = new SpostaUlRequestDTO();
|
||||
transferRequest
|
||||
.setCodMdep(dtbDoct.getCodMdep())
|
||||
.setCreateDocAutomatically(true)
|
||||
.setAnnotazioni(String.format("Trasferimento per ordine di vendita n.%d del %s",dtbDoct.getNumOrd(),UtilityDate.formatDate(dtbDoct.getDataOrd(),CommonConstants.DATE_FORMAT_DMY)))
|
||||
.setMtbColtsToMove(ulsToTransfer.stream().filter(u -> u.getCodMdep().equals(codMdep)).collect(Collectors.toList()));
|
||||
wmsGenericService.spostaUL(transferRequest);
|
||||
}
|
||||
entityList.addAll(docTrasfList);
|
||||
|
||||
|
||||
return dtbDoct;
|
||||
return dtbDoct.getMtbColt();
|
||||
}
|
||||
|
||||
private HashMap<String, Object> getOldPkDoc(DtbDoct dtbDoct) throws IOException {
|
||||
@@ -688,7 +561,7 @@ public class DocumentiDirettiService {
|
||||
|
||||
List<CreateUDSRequestOrderDTO> createUDSRequestOrderDTO = Collections.emptyList();
|
||||
|
||||
if (createUDSFromDocuments.isMonoUl()){
|
||||
if (createUDSFromDocuments.isMonoUl()) {
|
||||
createUDSRequestOrderDTO = createUDSFromDocuments.getUlRows().stream()
|
||||
.map(
|
||||
x -> {
|
||||
|
||||
@@ -155,7 +155,7 @@ public class WMSUtility {
|
||||
WMSGiacenzaULService wmsGiacenzaULService = ApplicationContextProvider.getApplicationContext().getBean(WMSGiacenzaULService.class);
|
||||
|
||||
final List<MvwSitArtUdcDetInventarioDTO> mvwSitArtUdcDetInventarioDTOS =
|
||||
wmsGiacenzaULService.retrieveArtsInGiacenzaByBarcodeUls(connection, ssccList);
|
||||
wmsGiacenzaULService.retrieveArtsInGiacenzaByBarcodeUls(connection, ssccList,true);
|
||||
|
||||
if (mvwSitArtUdcDetInventarioDTOS.isEmpty())
|
||||
throw new Exception("Nessun articolo trovato per il barcode: " + ssccList);
|
||||
|
||||
@@ -2025,13 +2025,15 @@ public class WMSGenericService {
|
||||
|
||||
final List<MvwSitArtUdcDetInventarioDTO> currentItemSituationList =
|
||||
wmsGiacenzaULService.retrieveArtsInGiacenzaByBarcodeUls(multiDBTransactionManager.getPrimaryConnection(),
|
||||
ulToMove);
|
||||
ulToMove,true);
|
||||
|
||||
List<String> codMdeps = currentItemSituationList.stream()
|
||||
.map(MvwSitArtUdcDetInventarioDTO::getCodMdep)
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
|
||||
if (UtilityList.isNullOrEmpty(currentItemSituationList)){
|
||||
throw new Exception("Nessuna UL trovata in giacenza");
|
||||
}
|
||||
if (codMdeps.isEmpty()) {
|
||||
throw new Exception("Nessun deposito di partenza selezionato!");
|
||||
}
|
||||
@@ -2060,7 +2062,7 @@ public class WMSGenericService {
|
||||
}
|
||||
}
|
||||
String codMdepPartenza = codMdeps.get(0);
|
||||
// List<EntityBase> entitiesToSave = new ArrayList<>();
|
||||
String codMdepDoc = codMdepPartenza;
|
||||
LoadColliDTO docTrasfRequest = null;
|
||||
//</editor-fold>
|
||||
|
||||
@@ -2074,7 +2076,6 @@ public class WMSGenericService {
|
||||
|
||||
String codAnag = mtbDepoArrivo.getCodAnag();
|
||||
String codVdes = mtbDepoArrivo.getCodVdes();
|
||||
String codMdepDoc = codMdepPartenza;
|
||||
|
||||
String sql = Query.format(
|
||||
"SELECT segno_qta_car - segno_qta_scar FROM dtb_tipi WHERE cod_dtip = %s",
|
||||
@@ -2113,7 +2114,7 @@ public class WMSGenericService {
|
||||
|
||||
//<editor-fold desc="Creazione movimento di magazzino">
|
||||
if (gestisciColli) {
|
||||
movimento = WMSUtility.createInternalMovement(codMdepPartenza);
|
||||
movimento = WMSUtility.createInternalMovement(codMdepDoc);
|
||||
// entitiesToSave.add(movimento);
|
||||
final List<MtbColr> cambiaPosizioneUlMovements =
|
||||
WMSUtility.createCambiaPosizioneUlMovements(multiDBTransactionManager.getPrimaryConnection(),
|
||||
|
||||
@@ -22,6 +22,9 @@ import java.util.stream.Collectors;
|
||||
public class WMSGiacenzaULService {
|
||||
|
||||
private String createBaseQuery(boolean withTestataCollo) {
|
||||
return createBaseQuery(withTestataCollo,false);
|
||||
}
|
||||
private String createBaseQuery(boolean withTestataCollo, boolean withUscite) {
|
||||
return "SELECT sit_art.gestione,\n" +
|
||||
" sit_art.data_collo,\n" +
|
||||
" sit_art.ser_collo,\n" +
|
||||
@@ -59,7 +62,7 @@ public class WMSGiacenzaULService {
|
||||
" sit_art.num_collo = mtb_colt.num_collo AND\n" +
|
||||
" sit_art.gestione = mtb_colt.gestione AND\n" +
|
||||
" sit_art.ser_collo = mtb_colt.ser_collo\n" : "") +
|
||||
" WHERE sit_art.segno = 1\n";
|
||||
" WHERE "+(withUscite?"1=1":"sit_art.segno = 1\n");
|
||||
}
|
||||
|
||||
public List<MvwSitArtUdcDetInventarioDTO> retrieveArtsInGiacenzaByPosition(Connection connection, String position) throws Exception {
|
||||
@@ -262,9 +265,9 @@ public class WMSGiacenzaULService {
|
||||
return UtilityDB.executeSimpleQueryDTO(connection, sql, MvwSitArtUdcDetInventarioDTO.class);
|
||||
}
|
||||
|
||||
public List<MvwSitArtUdcDetInventarioDTO> retrieveArtsInGiacenzaByBarcodeUls(Connection connection, List<String> barcodeUls) throws Exception {
|
||||
public List<MvwSitArtUdcDetInventarioDTO> retrieveArtsInGiacenzaByBarcodeUls(Connection connection, List<String> barcodeUls, boolean includeUscite) throws Exception {
|
||||
|
||||
String sql = createBaseQuery(true) +
|
||||
String sql = createBaseQuery(true,includeUscite) +
|
||||
" AND sit_art.barcode_ul IN (" + UtilityQuery.concatStringFieldsWithSeparator(barcodeUls, ", ") + ")";
|
||||
|
||||
return UtilityDB.executeSimpleQueryDTO(connection, sql, MvwSitArtUdcDetInventarioDTO.class);
|
||||
|
||||
Reference in New Issue
Block a user