In rientro merce aggiunto dialog di rischiesta cambio posizione ul

This commit is contained in:
2025-11-13 14:49:45 +01:00
parent b2aea70516
commit 1c029242ac
3 changed files with 91 additions and 4 deletions

View File

@@ -37,8 +37,10 @@ import it.integry.integrywmsnative.core.exception.BluetoothConnectionException;
import it.integry.integrywmsnative.core.expansion.AtomicBigDecimal;
import it.integry.integrywmsnative.core.expansion.BaseFragment;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.expansion.RunnableArgss;
import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.MtbDepoPosizione;
import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
import it.integry.integrywmsnative.core.rest.model.VersamentoAutomaticoULResponseDTO;
@@ -47,11 +49,14 @@ import it.integry.integrywmsnative.databinding.FragmentProdRientroMerceOrderDeta
import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavorazioneDTO;
import it.integry.integrywmsnative.gest.settings.MainSettingsFragment;
import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration;
import it.integry.integrywmsnative.view.dialogs.DialogConsts;
import it.integry.integrywmsnative.view.dialogs.ask_position_of_lu.DialogAskPositionOfLUView;
import it.integry.integrywmsnative.view.dialogs.ask_should_versamento_automatico_ul.DialogAskShouldVersamentoAutomaticoULView;
import it.integry.integrywmsnative.view.dialogs.input_lu_prod.DialogInputLUProdDTO;
import it.integry.integrywmsnative.view.dialogs.input_lu_prod.DialogInputLUProdView;
import it.integry.integrywmsnative.view.dialogs.printSsccUl.DialogPrintUlSSCCView;
import it.integry.integrywmsnative.view.dialogs.versamento_automatico_ul_done.DialogVersamentoAutomaticoULDoneView;
import it.integry.integrywmsnative.view.dialogs.yes_no.DialogYesNoView;
/**
* A simple {@link Fragment} subclass.
@@ -313,12 +318,31 @@ public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements
}
@Override
public void onULVersata(VersamentoAutomaticoULResponseDTO versamentoAutomaticoULResponseDTO, Runnable onComplete) {
public void onLUPositionChangeRequest(RunnableArgss<Boolean, MtbDepoPosizione> onComplete) {
DialogYesNoView.newInstance(null, "Vuoi cambiare la posizione della UL corrente?", result -> {
switch (result) {
case YES:
DialogAskPositionOfLUView.newInstance(false, (status, mtbDepoPosizione) -> {
if (status == DialogConsts.Results.ABORT) {
onComplete.run(false, null);
} else {
onComplete.run(true, mtbDepoPosizione);
}
}).show(requireActivity().getSupportFragmentManager(), "tag");
break;
case NO:
onComplete.run(false, null);
break;
}
}).show(requireActivity().getSupportFragmentManager(), "tag");
}
@Override
public void onULVersata(VersamentoAutomaticoULResponseDTO versamentoAutomaticoULResponseDTO, Runnable onComplete) {
handler.post(() -> {
DialogVersamentoAutomaticoULDoneView.newInstance(versamentoAutomaticoULResponseDTO, onComplete).show(requireActivity().getSupportFragmentManager(), "tag");
});
}
public void addULButtonClick() {

View File

@@ -7,6 +7,7 @@ import dagger.Provides;
import it.integry.integrywmsnative.core.rest.RESTBuilder;
import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.PosizioniRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ProduzioneRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
@@ -29,8 +30,9 @@ public class ProdRientroMerceOrderDetailModule {
PrinterRESTConsumer printerRESTConsumer,
ArticoloRESTConsumer articoloRESTConsumer,
SystemRESTConsumer systemRESTConsumer,
PosizioniRESTConsumer posizioneRESTConsumer,
ProduzioneRESTConsumer produzioneRESTConsumer) {
return new ProdRientroMerceOrderDetailViewModel(executorService, prodRientroMerceOrderDetailRESTConsumer, colliMagazzinoRESTConsumer, printerRESTConsumer, articoloRESTConsumer, systemRESTConsumer, produzioneRESTConsumer);
return new ProdRientroMerceOrderDetailViewModel(executorService, prodRientroMerceOrderDetailRESTConsumer, colliMagazzinoRESTConsumer, printerRESTConsumer, articoloRESTConsumer, systemRESTConsumer, posizioneRESTConsumer, produzioneRESTConsumer);
}
}

View File

@@ -1,5 +1,7 @@
package it.integry.integrywmsnative.gest.prod_rientro_merce.order_detail;
import android.util.Pair;
import androidx.lifecycle.MutableLiveData;
import com.google.gson.reflect.TypeToken;
@@ -10,20 +12,27 @@ import java.util.HashMap;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.atomic.AtomicReference;
import javax.inject.Inject;
import it.integry.integrywmsnative.core.exception.NoLUFoundException;
import it.integry.integrywmsnative.core.exception.ScannedPositionNotExistException;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.expansion.RunnableArgss;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
import it.integry.integrywmsnative.core.model.CommonModelConsts;
import it.integry.integrywmsnative.core.model.DtbOrdSteps;
import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.MtbDepoPosizione;
import it.integry.integrywmsnative.core.report.ReportType;
import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.PosizioniRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ProduzioneRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
@@ -50,6 +59,7 @@ public class ProdRientroMerceOrderDetailViewModel {
private final ArticoloRESTConsumer articoloRESTConsumer;
private final SystemRESTConsumer systemRESTConsumer;
private final ProduzioneRESTConsumer produzioneRESTConsumer;
private final PosizioniRESTConsumer posizioneRESTConsumer;
private Listener mListener;
@@ -60,6 +70,7 @@ public class ProdRientroMerceOrderDetailViewModel {
PrinterRESTConsumer printerRESTConsumer,
ArticoloRESTConsumer articoloRESTConsumer,
SystemRESTConsumer systemRESTConsumer,
PosizioniRESTConsumer posizioneRESTConsumer,
ProduzioneRESTConsumer produzioneRESTConsumer) {
this.executorService = executorService;
this.prodRientroMerceOrderDetailRESTConsumer = prodRientroMerceOrderDetailRESTConsumer;
@@ -68,6 +79,7 @@ public class ProdRientroMerceOrderDetailViewModel {
this.articoloRESTConsumer = articoloRESTConsumer;
this.systemRESTConsumer = systemRESTConsumer;
this.produzioneRESTConsumer = produzioneRESTConsumer;
this.posizioneRESTConsumer = posizioneRESTConsumer;
}
public void setOrder(OrdineLavorazioneDTO order) throws Exception {
@@ -191,7 +203,9 @@ public class ProdRientroMerceOrderDetailViewModel {
if (response) {
versaAutomaticamenteUL(savedMtbColt, onVersamentoCompleted);
} else {
onVersamentoCompleted.run();
this.sendLUPositionChangeRequest((status, mtbDepoPosizione) -> {
changePosition(status, mtbDepoPosizione, savedMtbColt, onVersamentoCompleted);
});
}
});
}
@@ -203,6 +217,47 @@ public class ProdRientroMerceOrderDetailViewModel {
});
}
private void changePosition(Boolean status, MtbDepoPosizione mtbDepoPosizione, MtbColt mtbColtToMove, Runnable onComplete) {
if (status == null || !status) {
onComplete.run();
return;
}
try {
if (mtbDepoPosizione == null) throw new ScannedPositionNotExistException();
if (mtbDepoPosizione.isFlagMonoCollo()) {
var barcodeUlInPosizioneList = posizioneRESTConsumer.getBancaliInPosizioneSynchronized(mtbDepoPosizione);
if (barcodeUlInPosizioneList == null || barcodeUlInPosizioneList.size() != 1) {
//Nessuna UL trovata oppure più UL nella stessa posizione
throw new NoLUFoundException();
}
moveLUtoLU(mtbColtToMove, barcodeUlInPosizioneList.get(0));
} else {
updatePosizione(mtbColtToMove, mtbDepoPosizione);
}
onComplete.run();
} catch (Exception e) {
this.sendError(e);
}
}
private void moveLUtoLU(MtbColt mtbColtToMove, String destBarcodeUl) throws Exception {
colliMagazzinoRESTConsumer.spostaArtsTraULSynchronized(
mtbColtToMove, destBarcodeUl, false
);
}
private void updatePosizione(MtbColt mtbColtToMove, MtbDepoPosizione mtbDepoPosizione) throws Exception {
colliMagazzinoRESTConsumer.updatePosizioneULSynchronized(
mtbColtToMove.getBarcodeUl(), mtbDepoPosizione != null ?
mtbDepoPosizione.getPosizione() : CommonModelConsts.ENTITY_NULL_STRING
);
}
private void versaAutomaticamenteUL(MtbColt mtbColt, Runnable onComplete) {
if (mtbColt == null) return;
@@ -297,9 +352,15 @@ public class ProdRientroMerceOrderDetailViewModel {
if (this.mListener != null) this.mListener.onVersamentoAutomaticoULRequest(onComplete);
}
private void sendLUPositionChangeRequest(RunnableArgss<Boolean, MtbDepoPosizione> onComplete) {
if (this.mListener != null) this.mListener.onLUPositionChangeRequest(onComplete);
}
public interface Listener extends ILoadingListener {
void onVersamentoAutomaticoULRequest(RunnableArgs<Boolean> onComplete);
void onLUPositionChangeRequest(RunnableArgss<Boolean, MtbDepoPosizione> onComplete);
void onDataSaved(MtbColt mtbColt);
void onError(Exception ex);