Fix vari su Synchronized e MainThread

This commit is contained in:
Giuseppe Scorrano 2025-03-12 18:11:53 +01:00
parent eb5ae8443d
commit cd89ce917e
10 changed files with 276 additions and 174 deletions

View File

@ -10,7 +10,9 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.ExecutorService;
import java.util.stream.Collectors;
import javax.inject.Singleton;
@ -106,7 +108,7 @@ public class ArticoloRESTConsumer extends _BaseRESTConsumer {
});
}
public void findIfIsKit(MtbAart mtbAart, RunnableArgs<MtbAart> onComplete, RunnableArgs<Exception> onFailed){
public void findIfIsKit(MtbAart mtbAart, RunnableArgs<MtbAart> onComplete, RunnableArgs<Exception> onFailed) {
ArticoloRESTConsumerService articoloRESTConsumerService = restBuilder.getService(ArticoloRESTConsumerService.class);
articoloRESTConsumerService
@ -207,25 +209,26 @@ public class ArticoloRESTConsumer extends _BaseRESTConsumer {
}
public void getUntMisArts(List<String> inputUntMis, RunnableArgs<List<MtbUntMis>> onComplete, RunnableArgs<Exception> onFailed) {
List<HashMap<String, Object>> whereCondList = Stream.of(inputUntMis)
public List<MtbUntMis> getUntMisArtsSynchronized(List<String> inputUntMis) throws Exception {
List<HashMap<String, Object>> whereCondList = inputUntMis.parallelStream()
.distinct()
.withoutNulls()
.filter(Objects::nonNull)
.map(x -> {
HashMap<String, Object> data = new HashMap<>();
data.put("unt_mis", x);
return data;
})
.toList();
.collect(Collectors.toUnmodifiableList());
var whereCond = whereCondList.isEmpty() ? "" : " WHERE " + UtilityQuery.concatFieldListInWhereCond(whereCondList);
Type typeOfObjectsList = new TypeToken<ArrayList<MtbUntMis>>() {
}.getType();
this.systemRESTConsumer.processSql("SELECT * FROM mtb_unt_mis " + whereCond, typeOfObjectsList, onComplete, onFailed);
return this.systemRESTConsumer.processSqlSynchronized("SELECT * FROM mtb_unt_mis " + whereCond, typeOfObjectsList);
}
public void fillMtbAartsWithMtbUntMis(List<MtbAart> inputMtbAart, RunnableArgs<List<MtbAart>> onComplete, RunnableArgs<Exception> onFailed) {
public List<MtbAart> fillMtbAartsWithMtbUntMisSynchronized(List<MtbAart> inputMtbAart) throws Exception {
var inputUntMis = new ArrayList<String>();
if (inputMtbAart != null && !inputMtbAart.isEmpty()) {
@ -237,21 +240,23 @@ public class ArticoloRESTConsumer extends _BaseRESTConsumer {
}
if (inputUntMis.isEmpty()) {
onComplete.run(inputMtbAart);
return;
return inputMtbAart;
}
getUntMisArts(inputUntMis, mtbUntMiss -> {
for (var item : inputMtbAart) {
var mtbUntMis = Stream.of(mtbUntMiss).filter(x -> x.getUntMis().equalsIgnoreCase(item.getUntMis()))
.findFirstOrElse(null);
var mtbUntMiss = getUntMisArtsSynchronized(inputUntMis);
if (mtbUntMis != null)
item.setMtbUntMis(Collections.singletonList(mtbUntMis));
}
for (var item : inputMtbAart) {
var mtbUntMis = mtbUntMiss.stream()
.filter(x -> x.getUntMis().equalsIgnoreCase(item.getUntMis()))
.findFirst()
.orElse(null);
if (mtbUntMis != null)
item.setMtbUntMis(Collections.singletonList(mtbUntMis));
}
return inputMtbAart;
onComplete.run(inputMtbAart);
}, onFailed);
}

View File

@ -169,27 +169,28 @@ public class GiacenzaRESTConsumer extends _BaseRESTConsumer {
}
public void getInstantItemSituation(String codMdep, String codMart, String partitaMag, String codJcom, RunnableArgs<InstantItemSituationResponseDto> onComplete, RunnableArgs<Exception> onFailed) {
public InstantItemSituationResponseDto getInstantItemSituationSynchronized(String codMdep, String codMart, String partitaMag, String codJcom) throws Exception {
GiacenzaRESTConsumerService giacenzaRESTConsumerService = restBuilder.getService(GiacenzaRESTConsumerService.class);
giacenzaRESTConsumerService.retrieveInstantItemSituation(codMdep, codMart, partitaMag, codJcom)
.enqueue(new ManagedErrorCallback<>() {
@Override
public void onResponse(Call<ServiceRESTResponse<InstantItemSituationResponseDto>> call, Response<ServiceRESTResponse<InstantItemSituationResponseDto>> response) {
analyzeAnswer(response, "getInstantItemSituation", data -> {
var response = giacenzaRESTConsumerService.retrieveInstantItemSituation(codMdep, codMart, partitaMag, codJcom)
.execute();
fillInstantItemSituationWithMtbAarts(data, onComplete, onFailed);
}, onFailed);
}
@Override
public void onFailure(Call<ServiceRESTResponse<InstantItemSituationResponseDto>> call, @NonNull final Exception e) {
onFailed.run(e);
}
});
var data = analyzeAnswer(response, "getInstantItemSituation");
return fillInstantItemSituationWithMtbAartsSynchronized(data);
}
private void fillInstantItemSituationWithMtbAarts(InstantItemSituationResponseDto data, RunnableArgs<InstantItemSituationResponseDto> onComplete, RunnableArgs<Exception> onFailed) {
public void getInstantItemSituation(String codMdep, String codMart, String partitaMag, String codJcom, RunnableArgs<InstantItemSituationResponseDto> onComplete, RunnableArgs<Exception> onFailed) {
executorService.execute(() -> {
try {
var response = getInstantItemSituationSynchronized(codMdep, codMart, partitaMag, codJcom);
if (onComplete != null) onComplete.run(response);
} catch (Exception ex) {
if (onFailed != null) onFailed.run(ex);
}
});
}
private InstantItemSituationResponseDto fillInstantItemSituationWithMtbAartsSynchronized(InstantItemSituationResponseDto data) throws Exception {
var inputCodMarts = new ArrayList<String>();
if (data.getIncomingItems() != null && !data.getIncomingItems().isEmpty()) {
@ -205,37 +206,33 @@ public class GiacenzaRESTConsumer extends _BaseRESTConsumer {
}
if (inputCodMarts.isEmpty()) {
onComplete.run(data);
return;
return null;
}
mArticoloRESTConsumer.getByCodMarts(inputCodMarts, mtbAarts -> {
var mtbAarts = mArticoloRESTConsumer.getByCodMartsSynchronized(inputCodMarts);
var newMtbAarts = mArticoloRESTConsumer.fillMtbAartsWithMtbUntMisSynchronized(mtbAarts);
mArticoloRESTConsumer.fillMtbAartsWithMtbUntMis(mtbAarts, newMtbAarts -> {
if (data.getIncomingItems() != null && !data.getIncomingItems().isEmpty()) {
for (var item : data.getIncomingItems()) {
var mtbAart = Stream.of(newMtbAarts).filter(x -> x.getCodMart().equalsIgnoreCase(item.getCodMart()))
.findFirstOrElse(null);
if (data.getIncomingItems() != null && !data.getIncomingItems().isEmpty()) {
for (var item : data.getIncomingItems()) {
var mtbAart = Stream.of(newMtbAarts).filter(x -> x.getCodMart().equalsIgnoreCase(item.getCodMart()))
.findFirstOrElse(null);
if (mtbAart != null)
item.setMtbAart(mtbAart);
}
}
if (mtbAart != null)
item.setMtbAart(mtbAart);
}
}
if (data.getAvailableItems() != null && !data.getAvailableItems().isEmpty()) {
for (var item : data.getAvailableItems()) {
var mtbAart = Stream.of(newMtbAarts).filter(x -> x.getCodMart().equalsIgnoreCase(item.getCodMart()))
.findFirstOrElse(null);
if (data.getAvailableItems() != null && !data.getAvailableItems().isEmpty()) {
for (var item : data.getAvailableItems()) {
var mtbAart = Stream.of(newMtbAarts).filter(x -> x.getCodMart().equalsIgnoreCase(item.getCodMart()))
.findFirstOrElse(null);
if (mtbAart != null)
item.setMtbAart(mtbAart);
}
}
if (mtbAart != null)
item.setMtbAart(mtbAart);
}
}
onComplete.run(data);
}, onFailed);
}, onFailed);
return data;
}

View File

@ -123,27 +123,16 @@ public class PrinterRESTConsumer extends _BaseRESTConsumer {
printReportType(reportType, codMdep, null, params, onComplete, onFailed);
}
public void printClosedOrders(PrintOrderCloseDTO dto, String codMdep, Runnable onComplete, RunnableArgs<Exception> onFailed) {
public void printClosedOrdersSynchronized(PrintOrderCloseDTO dto, String codMdep) throws Exception {
if (BuildConfig.DEBUG) {
onComplete.run();
return;
}
PrinterRESTConsumerService printerService = restBuilder.getService(PrinterRESTConsumerService.class, 240);
Call<ServiceRESTResponse<Object>> callable = printerService.printClosedOrders(codMdep, dto);
callable.enqueue(new ManagedErrorCallback<>() {
@Override
public void onResponse(Call<ServiceRESTResponse<Object>> call, Response<ServiceRESTResponse<Object>> response) {
analyzeAnswer(response, "printCollo", data -> {
onComplete.run();
}, onFailed);
}
@Override
public void onFailure(Call<ServiceRESTResponse<Object>> call, @NonNull final Exception e) {
onFailed.run(e);
}
});
var response = callable.execute();
analyzeAnswer(response, "printCollo");
}

View File

@ -768,7 +768,7 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
.thenComparing(ComparatorCompat.comparing(x -> x.getDestinatario() != null ? x.getDestinatario() : "zzzzzzzzz"))
.thenComparing(ComparatorCompat.comparing(OrdiniUscitaElencoDTO::getNumOrd));
List<OrdiniUscitaElencoListModel> notHiddenElements = dataList.parallelStream()
List<OrdiniUscitaElencoListModel> notHiddenElements = dataList.stream()
.filter(x -> !x.isHidden())
.sorted(comparator)
.map(x -> {

View File

@ -53,7 +53,9 @@ public class OrdiniUscitaElencoAdapter extends ExtendedSectionedRecyclerViewNew<
String[] keyArray = new String[collect.keySet().size()];
collect.keySet().toArray(keyArray);
setSections(Arrays.asList(keyArray), collect);
var keyList = Arrays.asList(keyArray);
keyList.sort(String::compareTo);
setSections(keyList, collect);
}
});
}

View File

@ -26,6 +26,8 @@ import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.atomic.AtomicReference;
import javax.inject.Inject;
@ -257,7 +259,9 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
});
} else {
BarcodeManager.removeCallback(mBarcodeScannerInstanceID);
super.onBackPressed();
handler.post(() -> {
super.onBackPressed();
});
}
}
@ -830,10 +834,16 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
public void closeOrder() {
handler.post(() -> {
this.fabPopupMenu.dismiss();
this.fabPopupMenu.dismiss();
this.onLoadingStarted();
this.mViewmodel.closeOrder();
executorService.execute(() -> {
try {
this.mViewmodel.closeOrder();
this.onLoadingEnded();
} catch (Exception e) {
onError(e);
}
});
}
@ -1051,66 +1061,113 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
}).show(getSupportFragmentManager(), "tag");
}
public void askShouldPrintPackingList(PrintOrderCloseDTO printOrderCloseDTO, RunnableArgs<PrintOrderCloseDTO> onComplete) {
DialogSimpleMessageView.makeInfoDialog(
getResources().getString(R.string.action_close_order),
new SpannableString(getResources().getString(R.string.message_print_packing_list_on_close_order)),
null,
() -> {
printOrderCloseDTO.setFlagPrintPackingList(true);
if (SettingsManager.iDB().isFlagPrintEtichetteOnOrderClose()) {
this.askShouldPrintSSCC(printOrderCloseDTO, onComplete);
} else {
onComplete.run(printOrderCloseDTO);
public boolean askShouldPrintPackingList() {
AtomicReference<Boolean> resultPrintPackingList = new AtomicReference<>();
CountDownLatch countDownLatch = new CountDownLatch(1);
handler.post(() -> {
DialogSimpleMessageView.makeInfoDialog(
getResources().getString(R.string.action_close_order),
new SpannableString(getResources().getString(R.string.message_print_packing_list_on_close_order)),
null,
() -> {
resultPrintPackingList.set(true);
countDownLatch.countDown();
},
() -> {
resultPrintPackingList.set(false);
countDownLatch.countDown();
}
},
() -> {
printOrderCloseDTO.setFlagPrintPackingList(false);
if (SettingsManager.iDB().isFlagPrintEtichetteOnOrderClose()) {
this.askShouldPrintSSCC(printOrderCloseDTO, onComplete);
} else {
onComplete.run(printOrderCloseDTO);
}
}
)
.show(getSupportFragmentManager(), "tag");
)
.show(getSupportFragmentManager(), "tag");
});
try {
countDownLatch.await();
} catch (InterruptedException e) {
this.onError(e);
}
return resultPrintPackingList.get();
//
// boolean printPackingList = resultPrintPackingList.get();
// printOrderCloseDTO.setFlagPrintPackingList(printPackingList);
//
// if (SettingsManager.iDB().isFlagPrintEtichetteOnOrderClose()) {
// var shouldPrintSSCCResult = this.askShouldPrintSSCC(printOrderCloseDTO);
//
// printOrderCloseDTO.setFlagPrintSSCC(shouldPrintSSCCResult.isFlagPrintSSCC());
// printOrderCloseDTO.setFlagSkipPrintedSSCC(shouldPrintSSCCResult.isFlagSkipPrintedSSCC());
// }
//
// return printOrderCloseDTO;
}
public void askShouldPrintSSCC(PrintOrderCloseDTO printOrderCloseDTO, RunnableArgs<PrintOrderCloseDTO> onComplete) {
DialogPrintOrderSSCCListView.newInstance(printOrderCloseDTO, onComplete).show(this.getSupportFragmentManager(), "dialogPrintOrderSSCCListView");
public DialogPrintOrderSSCCListView.Result askShouldPrintSSCC(PrintOrderCloseDTO printOrderCloseDTO) {
AtomicReference<DialogPrintOrderSSCCListView.Result> result = new AtomicReference<>();
CountDownLatch countDownLatch = new CountDownLatch(1);
handler.post(() -> {
DialogPrintOrderSSCCListView.newInstance(printOrderCloseDTO, data -> {
result.set(data);
countDownLatch.countDown();
})
.show(this.getSupportFragmentManager(), "dialogPrintOrderSSCCListView");
});
try {
countDownLatch.await();
} catch (InterruptedException e) {
this.onError(e);
}
return result.get();
}
@Override
public void onBatchLotSelectionRequest(List<MtbPartitaMag> availableBatchLots, RunnableArgs<MtbPartitaMag> onComplete) {
DialogChooseBatchLotView.newInstance(availableBatchLots, onComplete)
.show(getSupportFragmentManager(), "tag");
handler.post(() -> {
DialogChooseBatchLotView.newInstance(availableBatchLots, onComplete)
.show(getSupportFragmentManager(), "tag");
});
}
@Override
public void onCloseOrderPrintRequest(RunnableArgs<PrintOrderCloseDTO> onComplete) {
public PrintOrderCloseDTO onCloseOrderPrintRequest() {
PrintOrderCloseDTO printOrderCloseDTO = new PrintOrderCloseDTO();
if (SettingsManager.iDB().isFlagPrintPackingListOnOrderClose()) {
this.askShouldPrintPackingList(printOrderCloseDTO, onComplete);
} else if (SettingsManager.iDB().isFlagPrintEtichetteOnOrderClose()) {
this.askShouldPrintSSCC(printOrderCloseDTO, onComplete);
var result = this.askShouldPrintPackingList();
printOrderCloseDTO.setFlagPrintPackingList(result);
}
if (SettingsManager.iDB().isFlagPrintEtichetteOnOrderClose()) {
var shouldPrintSSCC = this.askShouldPrintSSCC(printOrderCloseDTO);
printOrderCloseDTO.setFlagPrintSSCC(shouldPrintSSCC.isFlagPrintSSCC());
printOrderCloseDTO.setFlagSkipPrintedSSCC(shouldPrintSSCC.isFlagSkipPrintedSSCC());
}
return printOrderCloseDTO;
}
@Override
public void onCreateDocsRequest() {
DialogYesNoView.newInstance("Chiusura ordine", "Vuoi creare i documenti per gli ordini selezionati?", result -> {
handler.post(() -> {
DialogYesNoView.newInstance("Chiusura ordine", "Vuoi creare i documenti per gli ordini selezionati?", result -> {
switch (result) {
case YES:
this.mViewmodel.createDocs();
break;
case NO:
this.onOrderClosed();
break;
}
switch (result) {
case YES:
this.mViewmodel.createDocs();
break;
case NO:
this.onOrderClosed();
break;
}
}).show(this.getSupportFragmentManager(), "tag");
}).show(this.getSupportFragmentManager(), "tag");
});
}
@Override

View File

@ -354,8 +354,12 @@ public class SpedizioneViewModel {
if (this.mListener != null) mListener.onLoadingStarted();
}
private void sendOnCloseOrderPrintRequest(RunnableArgs<PrintOrderCloseDTO> onComplete) {
if (this.mListener != null) mListener.onCloseOrderPrintRequest(onComplete);
private PrintOrderCloseDTO sendOnCloseOrderPrintRequest() {
if (this.mListener != null) {
return mListener.onCloseOrderPrintRequest();
}
return null;
}
private void sendCreateDocsRequest() {
@ -519,33 +523,33 @@ public class SpedizioneViewModel {
}
public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO) throws Exception {
//Se non c'è una UL aperta
if (mCurrentMtbColt == null) {
//Se non c'è una UL aperta
if (mCurrentMtbColt == null) {
//Se è un'etichetta anonima
if (UtilityBarcode.isEtichettaAnonima(barcodeScanDTO)) {
//Se il collo non esiste allora lo creo associandolo a questa etichetta anonima
//invece se esiste apro un collo nuovo e cerco gli articoli presenti nell'ul
//dell'etichetta anonima
this.executeEtichettaAnonimaNotOpenedLU(barcodeScanDTO);
//Se è un'etichetta anonima
if (UtilityBarcode.isEtichettaAnonima(barcodeScanDTO)) {
//Se il collo non esiste allora lo creo associandolo a questa etichetta anonima
//invece se esiste apro un collo nuovo e cerco gli articoli presenti nell'ul
//dell'etichetta anonima
this.executeEtichettaAnonimaNotOpenedLU(barcodeScanDTO);
} else if (UtilityBarcode.isEtichettaPosizione(barcodeScanDTO)/* && mDefaultSegnoCol == 1*/) {
this.processBarcodePosizioneNotOpenedLU(barcodeScanDTO);
} else {
this.processBarcodeNotOpenedLU(barcodeScanDTO);
}
} else if (UtilityBarcode.isEtichettaPosizione(barcodeScanDTO)/* && mDefaultSegnoCol == 1*/) {
this.processBarcodePosizioneNotOpenedLU(barcodeScanDTO);
} else {
if (UtilityBarcode.isEtichettaAnonima(barcodeScanDTO)) {
//Cerco gli articoli presenti nell'ul dell'etichetta anonima
this.executeEtichettaLU(barcodeScanDTO.getStringValue());
} else {
this.processBarcodeAlreadyOpenedLU(barcodeScanDTO);
}
this.processBarcodeNotOpenedLU(barcodeScanDTO);
}
} else {
if (UtilityBarcode.isEtichettaAnonima(barcodeScanDTO)) {
//Cerco gli articoli presenti nell'ul dell'etichetta anonima
this.executeEtichettaLU(barcodeScanDTO.getStringValue());
} else {
this.processBarcodeAlreadyOpenedLU(barcodeScanDTO);
}
}
}
private void processBarcodePosizioneNotOpenedLU(BarcodeScanDTO barcodeScanDTO) throws Exception {
@ -1864,9 +1868,9 @@ public class SpedizioneViewModel {
(newCodTcol, newNetWeight, newGrossWeight) -> {
if(newCodTcol != null) mCurrentMtbColt.setCodTcol(newCodTcol);
if(newNetWeight != null) mCurrentMtbColt.setPesoNettoKg(newNetWeight);
if(newGrossWeight != null) mCurrentMtbColt.setPesoKg(newGrossWeight);
if (newCodTcol != null) mCurrentMtbColt.setCodTcol(newCodTcol);
if (newNetWeight != null) mCurrentMtbColt.setPesoNettoKg(newNetWeight);
if (newGrossWeight != null) mCurrentMtbColt.setPesoKg(newGrossWeight);
latch.countDown();
});
@ -2098,20 +2102,21 @@ public class SpedizioneViewModel {
}
public void closeOrder() {
this.sendOnLoadingStarted();
if (SettingsManager.iDB().isFlagPrintEtichetteOnOrderClose() || SettingsManager.iDB().isFlagPrintPackingListOnOrderClose()) {
this.sendOnCloseOrderPrintRequest(this::onCloseOrderPrintRequest);
} else {
this.onOrderClosedPrintingDone();
var printRequestResult = this.sendOnCloseOrderPrintRequest();
this.onCloseOrderPrintRequest(printRequestResult);
}
this.onOrderClosedPrintingDone();
}
private void onCloseOrderPrintRequest(PrintOrderCloseDTO dto) {
if (!dto.isFlagPrintPackingList() && !dto.isFlagPrintSSCC()) {
onOrderClosedPrintingDone();
return;
}
List<DtbOrdt> closedOrders = this.mTestateOrdini.stream()
List<DtbOrdt> closedOrders = this.mTestateOrdini.parallelStream()
.map(ord -> new DtbOrdt()
.setDataOrd(ord.getDataOrdS())
.setNumOrd(ord.getNumOrd())
@ -2121,11 +2126,17 @@ public class SpedizioneViewModel {
.collect(Collectors.toList());
dto.setPrintList(closedOrders);
printClosedOrders(dto, this::onOrderClosedPrintingDone, ex -> this.sendLUPrintError(ex, this::sendOnLoadingEnded));
try {
printClosedOrders(dto);
} catch (Exception e) {
this.sendLUPrintError(e, () -> {});
}
}
private void printClosedOrders(PrintOrderCloseDTO dto, Runnable onSuccess, RunnableArgs<Exception> onAbort) {
this.mPrinterRESTConsumer.printClosedOrders(dto, SettingsManager.i().getUserSession().getDepo().getCodMdep(), onSuccess, onAbort);
private void printClosedOrders(PrintOrderCloseDTO dto) throws Exception {
this.mPrinterRESTConsumer.printClosedOrdersSynchronized(dto, SettingsManager.i().getUserSession().getDepo().getCodMdep());
}
@ -2236,7 +2247,7 @@ public class SpedizioneViewModel {
void onBatchLotSelectionRequest(List<MtbPartitaMag> availableBatchLots, RunnableArgs<MtbPartitaMag> onComplete);
void onCloseOrderPrintRequest(RunnableArgs<PrintOrderCloseDTO> onComplete);
PrintOrderCloseDTO onCloseOrderPrintRequest();
void onCreateDocsRequest();

View File

@ -35,17 +35,18 @@ public class DialogPrintOrderSSCCListView extends BaseDialogFragment {
private Context mContext;
private DialogPrintOrderSsccListBinding mBindings;
private final PrintOrderCloseDTO printOrderCloseDTO;
private final RunnableArgs<PrintOrderCloseDTO> onDialogClose;
private final Result result = new Result();
private final RunnableArgs<Result> onDialogClose;
public static DialogPrintOrderSSCCListView newInstance(
PrintOrderCloseDTO printOrderCloseDTO,
RunnableArgs<PrintOrderCloseDTO> onDismiss
RunnableArgs<Result> onDismiss
) {
return new DialogPrintOrderSSCCListView(printOrderCloseDTO, onDismiss);
}
public DialogPrintOrderSSCCListView(@NotNull PrintOrderCloseDTO printOrderCloseDTO, @NotNull RunnableArgs<PrintOrderCloseDTO> onDismiss) {
public DialogPrintOrderSSCCListView(@NotNull PrintOrderCloseDTO printOrderCloseDTO, @NotNull RunnableArgs<Result> onDismiss) {
this.printOrderCloseDTO = printOrderCloseDTO;
this.onDialogClose = onDismiss;
}
@ -71,22 +72,22 @@ public class DialogPrintOrderSSCCListView extends BaseDialogFragment {
}
public void onCheckChange(RadioGroup radioGroup, int id) {
this.printOrderCloseDTO.setFlagSkipPrintedSSCC(id == mBindings.printOnlyNew.getId());
this.result.setFlagSkipPrintedSSCC(id == mBindings.printOnlyNew.getId());
}
public void onPositiveClick() {
this.printOrderCloseDTO.setFlagPrintSSCC(true);
this.result.setFlagPrintSSCC(true);
this.dismiss();
}
public void onNegativeClick() {
this.printOrderCloseDTO.setFlagPrintSSCC(false);
this.result.setFlagPrintSSCC(false);
this.dismiss();
}
@Override
public void onDismiss(@NonNull DialogInterface dialog) {
this.onDialogClose.run(this.printOrderCloseDTO);
this.onDialogClose.run(this.result);
super.onDismiss(dialog);
}
@ -112,4 +113,26 @@ public class DialogPrintOrderSSCCListView extends BaseDialogFragment {
UtilityExceptions.defaultException(this.mContext, ex);
dismiss();
}
public class Result {
private boolean flagPrintSSCC = false;
private boolean flagSkipPrintedSSCC = true;
public boolean isFlagPrintSSCC() {
return flagPrintSSCC;
}
private void setFlagPrintSSCC(boolean flagPrintSSCC) {
this.flagPrintSSCC = flagPrintSSCC;
}
public boolean isFlagSkipPrintedSSCC() {
return flagSkipPrintedSSCC;
}
private void setFlagSkipPrintedSSCC(boolean flagSkipPrintedSSCC) {
this.flagSkipPrintedSSCC = flagSkipPrintedSSCC;
}
}
}

View File

@ -4,6 +4,7 @@ import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.os.Handler;
import android.view.LayoutInflater;
import android.view.View;
@ -18,6 +19,7 @@ import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import javax.inject.Inject;
@ -42,6 +44,12 @@ public class DialogInfoSituazioneArticoloView extends BaseDialogRowInfoView {
@Inject
GiacenzaRESTConsumer giacenzaRESTConsumer;
@Inject
ExecutorService executorService;
@Inject
Handler handler;
private DialogInfoSituazioneArticoloBinding mBindings;
private Context mContext;
@ -86,24 +94,33 @@ public class DialogInfoSituazioneArticoloView extends BaseDialogRowInfoView {
String partitaMag = getSpedizioneListModel().getOriginalModel().getSitArtOrdDTO().getPartitaMag();
String codJcom = getSpedizioneListModel().getOriginalModel().getSitArtOrdDTO().getCodJcom();
giacenzaRESTConsumer.getInstantItemSituation(
codMdep,
codMart,
partitaMag,
codJcom,
result -> {
this.initIncomingItemsList(result.getIncomingItems());
this.initAvailableItemsList(result.getAvailableItems());
this.onLoadingStarted();
executorService.execute(() -> {
try {
var result = giacenzaRESTConsumer.getInstantItemSituationSynchronized(codMdep, codMart, partitaMag, codJcom);
this.onLoadingEnded();
}, this::onError);
handler.post(() -> {
try {
if(result != null && result.getIncomingItems() != null) this.initIncomingItemsList(result.getIncomingItems());
if(result != null && result.getAvailableItems() != null) this.initAvailableItemsList(result.getAvailableItems());
this.onLoadingEnded();
} catch (Exception e) {
onError(e);
}
});
} catch (Exception e) {
onError(e);
}
});
}
private void initIncomingItemsList(List<InstantItemSituationIncomingItemDto> incomingItems) {
mBindings.incomingLabel.setVisibility(incomingItems == null || incomingItems.isEmpty() ? View.GONE : View.VISIBLE);
if(incomingItems == null || incomingItems.isEmpty())
if (incomingItems == null || incomingItems.isEmpty())
return;
new LiveAdapter(incomingItems, BR.item)
@ -115,14 +132,14 @@ public class DialogInfoSituazioneArticoloView extends BaseDialogRowInfoView {
private void initAvailableItemsList(List<MvwSitArtUdcDetInventario> availableItems) {
mBindings.availableLabel.setVisibility(availableItems == null || availableItems.isEmpty() ? View.GONE : View.VISIBLE);
if(availableItems == null)
if (availableItems == null)
availableItems = new ArrayList<>();
availableItems = Stream.of(availableItems)
.filter(x -> x.getDataScad() == null || UtilityDate.isAfterToday(x.getDataScad()))
.toList();
if(availableItems.isEmpty())
if (availableItems.isEmpty())
return;
var preferedCodJcom = getSpedizioneListModel().getOriginalModel().getSitArtOrdDTO().getCodJcom();

View File

@ -25,6 +25,7 @@
android:layout_height="0dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintWidth="8dp"/>
<!-- 3. CheckBox direttamente nel layout principale -->