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.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.stream.Collectors;
import javax.inject.Singleton; 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 articoloRESTConsumerService = restBuilder.getService(ArticoloRESTConsumerService.class);
articoloRESTConsumerService articoloRESTConsumerService
@ -207,25 +209,26 @@ public class ArticoloRESTConsumer extends _BaseRESTConsumer {
} }
public void getUntMisArts(List<String> inputUntMis, RunnableArgs<List<MtbUntMis>> onComplete, RunnableArgs<Exception> onFailed) { public List<MtbUntMis> getUntMisArtsSynchronized(List<String> inputUntMis) throws Exception {
List<HashMap<String, Object>> whereCondList = Stream.of(inputUntMis) List<HashMap<String, Object>> whereCondList = inputUntMis.parallelStream()
.distinct() .distinct()
.withoutNulls() .filter(Objects::nonNull)
.map(x -> { .map(x -> {
HashMap<String, Object> data = new HashMap<>(); HashMap<String, Object> data = new HashMap<>();
data.put("unt_mis", x); data.put("unt_mis", x);
return data; return data;
}) })
.toList(); .collect(Collectors.toUnmodifiableList());
var whereCond = whereCondList.isEmpty() ? "" : " WHERE " + UtilityQuery.concatFieldListInWhereCond(whereCondList); var whereCond = whereCondList.isEmpty() ? "" : " WHERE " + UtilityQuery.concatFieldListInWhereCond(whereCondList);
Type typeOfObjectsList = new TypeToken<ArrayList<MtbUntMis>>() { Type typeOfObjectsList = new TypeToken<ArrayList<MtbUntMis>>() {
}.getType(); }.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>(); var inputUntMis = new ArrayList<String>();
if (inputMtbAart != null && !inputMtbAart.isEmpty()) { if (inputMtbAart != null && !inputMtbAart.isEmpty()) {
@ -237,21 +240,23 @@ public class ArticoloRESTConsumer extends _BaseRESTConsumer {
} }
if (inputUntMis.isEmpty()) { if (inputUntMis.isEmpty()) {
onComplete.run(inputMtbAart); return inputMtbAart;
return;
} }
getUntMisArts(inputUntMis, mtbUntMiss -> { var mtbUntMiss = getUntMisArtsSynchronized(inputUntMis);
for (var item : inputMtbAart) {
var mtbUntMis = Stream.of(mtbUntMiss).filter(x -> x.getUntMis().equalsIgnoreCase(item.getUntMis()))
.findFirstOrElse(null);
if (mtbUntMis != null) for (var item : inputMtbAart) {
item.setMtbUntMis(Collections.singletonList(mtbUntMis)); 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 giacenzaRESTConsumerService = restBuilder.getService(GiacenzaRESTConsumerService.class);
giacenzaRESTConsumerService.retrieveInstantItemSituation(codMdep, codMart, partitaMag, codJcom) var response = giacenzaRESTConsumerService.retrieveInstantItemSituation(codMdep, codMart, partitaMag, codJcom)
.enqueue(new ManagedErrorCallback<>() { .execute();
@Override
public void onResponse(Call<ServiceRESTResponse<InstantItemSituationResponseDto>> call, Response<ServiceRESTResponse<InstantItemSituationResponseDto>> response) {
analyzeAnswer(response, "getInstantItemSituation", data -> {
fillInstantItemSituationWithMtbAarts(data, onComplete, onFailed); var data = analyzeAnswer(response, "getInstantItemSituation");
}, onFailed); return fillInstantItemSituationWithMtbAartsSynchronized(data);
}
@Override
public void onFailure(Call<ServiceRESTResponse<InstantItemSituationResponseDto>> call, @NonNull final Exception e) {
onFailed.run(e);
}
});
} }
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>(); var inputCodMarts = new ArrayList<String>();
if (data.getIncomingItems() != null && !data.getIncomingItems().isEmpty()) { if (data.getIncomingItems() != null && !data.getIncomingItems().isEmpty()) {
@ -205,37 +206,33 @@ public class GiacenzaRESTConsumer extends _BaseRESTConsumer {
} }
if (inputCodMarts.isEmpty()) { if (inputCodMarts.isEmpty()) {
onComplete.run(data); return null;
return;
} }
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()) {
if (data.getIncomingItems() != null && !data.getIncomingItems().isEmpty()) { for (var item : data.getIncomingItems()) {
for (var item : data.getIncomingItems()) { var mtbAart = Stream.of(newMtbAarts).filter(x -> x.getCodMart().equalsIgnoreCase(item.getCodMart()))
var mtbAart = Stream.of(newMtbAarts).filter(x -> x.getCodMart().equalsIgnoreCase(item.getCodMart())) .findFirstOrElse(null);
.findFirstOrElse(null);
if (mtbAart != null) if (mtbAart != null)
item.setMtbAart(mtbAart); item.setMtbAart(mtbAart);
} }
} }
if (data.getAvailableItems() != null && !data.getAvailableItems().isEmpty()) { if (data.getAvailableItems() != null && !data.getAvailableItems().isEmpty()) {
for (var item : data.getAvailableItems()) { for (var item : data.getAvailableItems()) {
var mtbAart = Stream.of(newMtbAarts).filter(x -> x.getCodMart().equalsIgnoreCase(item.getCodMart())) var mtbAart = Stream.of(newMtbAarts).filter(x -> x.getCodMart().equalsIgnoreCase(item.getCodMart()))
.findFirstOrElse(null); .findFirstOrElse(null);
if (mtbAart != null) if (mtbAart != null)
item.setMtbAart(mtbAart); item.setMtbAart(mtbAart);
} }
} }
onComplete.run(data); return data;
}, onFailed);
}, onFailed);
} }

View File

@ -123,27 +123,16 @@ public class PrinterRESTConsumer extends _BaseRESTConsumer {
printReportType(reportType, codMdep, null, params, onComplete, onFailed); 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) { if (BuildConfig.DEBUG) {
onComplete.run();
return; return;
} }
PrinterRESTConsumerService printerService = restBuilder.getService(PrinterRESTConsumerService.class, 240); PrinterRESTConsumerService printerService = restBuilder.getService(PrinterRESTConsumerService.class, 240);
Call<ServiceRESTResponse<Object>> callable = printerService.printClosedOrders(codMdep, dto); 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 var response = callable.execute();
public void onFailure(Call<ServiceRESTResponse<Object>> call, @NonNull final Exception e) { analyzeAnswer(response, "printCollo");
onFailed.run(e);
}
});
} }

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(x -> x.getDestinatario() != null ? x.getDestinatario() : "zzzzzzzzz"))
.thenComparing(ComparatorCompat.comparing(OrdiniUscitaElencoDTO::getNumOrd)); .thenComparing(ComparatorCompat.comparing(OrdiniUscitaElencoDTO::getNumOrd));
List<OrdiniUscitaElencoListModel> notHiddenElements = dataList.parallelStream() List<OrdiniUscitaElencoListModel> notHiddenElements = dataList.stream()
.filter(x -> !x.isHidden()) .filter(x -> !x.isHidden())
.sorted(comparator) .sorted(comparator)
.map(x -> { .map(x -> {

View File

@ -53,7 +53,9 @@ public class OrdiniUscitaElencoAdapter extends ExtendedSectionedRecyclerViewNew<
String[] keyArray = new String[collect.keySet().size()]; String[] keyArray = new String[collect.keySet().size()];
collect.keySet().toArray(keyArray); 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.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.atomic.AtomicReference;
import javax.inject.Inject; import javax.inject.Inject;
@ -257,7 +259,9 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
}); });
} else { } else {
BarcodeManager.removeCallback(mBarcodeScannerInstanceID); BarcodeManager.removeCallback(mBarcodeScannerInstanceID);
super.onBackPressed(); handler.post(() -> {
super.onBackPressed();
});
} }
} }
@ -830,10 +834,16 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
public void closeOrder() { 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"); }).show(getSupportFragmentManager(), "tag");
} }
public void askShouldPrintPackingList(PrintOrderCloseDTO printOrderCloseDTO, RunnableArgs<PrintOrderCloseDTO> onComplete) { public boolean askShouldPrintPackingList() {
DialogSimpleMessageView.makeInfoDialog( AtomicReference<Boolean> resultPrintPackingList = new AtomicReference<>();
getResources().getString(R.string.action_close_order), CountDownLatch countDownLatch = new CountDownLatch(1);
new SpannableString(getResources().getString(R.string.message_print_packing_list_on_close_order)),
null, handler.post(() -> {
() -> { DialogSimpleMessageView.makeInfoDialog(
printOrderCloseDTO.setFlagPrintPackingList(true); getResources().getString(R.string.action_close_order),
if (SettingsManager.iDB().isFlagPrintEtichetteOnOrderClose()) { new SpannableString(getResources().getString(R.string.message_print_packing_list_on_close_order)),
this.askShouldPrintSSCC(printOrderCloseDTO, onComplete); null,
} else { () -> {
onComplete.run(printOrderCloseDTO); resultPrintPackingList.set(true);
countDownLatch.countDown();
},
() -> {
resultPrintPackingList.set(false);
countDownLatch.countDown();
} }
}, )
() -> { .show(getSupportFragmentManager(), "tag");
printOrderCloseDTO.setFlagPrintPackingList(false); });
if (SettingsManager.iDB().isFlagPrintEtichetteOnOrderClose()) {
this.askShouldPrintSSCC(printOrderCloseDTO, onComplete);
} else { try {
onComplete.run(printOrderCloseDTO); countDownLatch.await();
} } catch (InterruptedException e) {
} this.onError(e);
) }
.show(getSupportFragmentManager(), "tag");
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) { public DialogPrintOrderSSCCListView.Result askShouldPrintSSCC(PrintOrderCloseDTO printOrderCloseDTO) {
DialogPrintOrderSSCCListView.newInstance(printOrderCloseDTO, onComplete).show(this.getSupportFragmentManager(), "dialogPrintOrderSSCCListView"); 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 @Override
public void onBatchLotSelectionRequest(List<MtbPartitaMag> availableBatchLots, RunnableArgs<MtbPartitaMag> onComplete) { public void onBatchLotSelectionRequest(List<MtbPartitaMag> availableBatchLots, RunnableArgs<MtbPartitaMag> onComplete) {
DialogChooseBatchLotView.newInstance(availableBatchLots, onComplete) handler.post(() -> {
.show(getSupportFragmentManager(), "tag"); DialogChooseBatchLotView.newInstance(availableBatchLots, onComplete)
.show(getSupportFragmentManager(), "tag");
});
} }
@Override @Override
public void onCloseOrderPrintRequest(RunnableArgs<PrintOrderCloseDTO> onComplete) { public PrintOrderCloseDTO onCloseOrderPrintRequest() {
PrintOrderCloseDTO printOrderCloseDTO = new PrintOrderCloseDTO(); PrintOrderCloseDTO printOrderCloseDTO = new PrintOrderCloseDTO();
if (SettingsManager.iDB().isFlagPrintPackingListOnOrderClose()) { if (SettingsManager.iDB().isFlagPrintPackingListOnOrderClose()) {
this.askShouldPrintPackingList(printOrderCloseDTO, onComplete); var result = this.askShouldPrintPackingList();
} else if (SettingsManager.iDB().isFlagPrintEtichetteOnOrderClose()) { printOrderCloseDTO.setFlagPrintPackingList(result);
this.askShouldPrintSSCC(printOrderCloseDTO, onComplete);
} }
if (SettingsManager.iDB().isFlagPrintEtichetteOnOrderClose()) {
var shouldPrintSSCC = this.askShouldPrintSSCC(printOrderCloseDTO);
printOrderCloseDTO.setFlagPrintSSCC(shouldPrintSSCC.isFlagPrintSSCC());
printOrderCloseDTO.setFlagSkipPrintedSSCC(shouldPrintSSCC.isFlagSkipPrintedSSCC());
}
return printOrderCloseDTO;
} }
@Override @Override
public void onCreateDocsRequest() { 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) { switch (result) {
case YES: case YES:
this.mViewmodel.createDocs(); this.mViewmodel.createDocs();
break; break;
case NO: case NO:
this.onOrderClosed(); this.onOrderClosed();
break; break;
} }
}).show(this.getSupportFragmentManager(), "tag"); }).show(this.getSupportFragmentManager(), "tag");
});
} }
@Override @Override

View File

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

View File

@ -35,17 +35,18 @@ public class DialogPrintOrderSSCCListView extends BaseDialogFragment {
private Context mContext; private Context mContext;
private DialogPrintOrderSsccListBinding mBindings; private DialogPrintOrderSsccListBinding mBindings;
private final PrintOrderCloseDTO printOrderCloseDTO; private final PrintOrderCloseDTO printOrderCloseDTO;
private final RunnableArgs<PrintOrderCloseDTO> onDialogClose; private final Result result = new Result();
private final RunnableArgs<Result> onDialogClose;
public static DialogPrintOrderSSCCListView newInstance( public static DialogPrintOrderSSCCListView newInstance(
PrintOrderCloseDTO printOrderCloseDTO, PrintOrderCloseDTO printOrderCloseDTO,
RunnableArgs<PrintOrderCloseDTO> onDismiss RunnableArgs<Result> onDismiss
) { ) {
return new DialogPrintOrderSSCCListView(printOrderCloseDTO, 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.printOrderCloseDTO = printOrderCloseDTO;
this.onDialogClose = onDismiss; this.onDialogClose = onDismiss;
} }
@ -71,22 +72,22 @@ public class DialogPrintOrderSSCCListView extends BaseDialogFragment {
} }
public void onCheckChange(RadioGroup radioGroup, int id) { public void onCheckChange(RadioGroup radioGroup, int id) {
this.printOrderCloseDTO.setFlagSkipPrintedSSCC(id == mBindings.printOnlyNew.getId()); this.result.setFlagSkipPrintedSSCC(id == mBindings.printOnlyNew.getId());
} }
public void onPositiveClick() { public void onPositiveClick() {
this.printOrderCloseDTO.setFlagPrintSSCC(true); this.result.setFlagPrintSSCC(true);
this.dismiss(); this.dismiss();
} }
public void onNegativeClick() { public void onNegativeClick() {
this.printOrderCloseDTO.setFlagPrintSSCC(false); this.result.setFlagPrintSSCC(false);
this.dismiss(); this.dismiss();
} }
@Override @Override
public void onDismiss(@NonNull DialogInterface dialog) { public void onDismiss(@NonNull DialogInterface dialog) {
this.onDialogClose.run(this.printOrderCloseDTO); this.onDialogClose.run(this.result);
super.onDismiss(dialog); super.onDismiss(dialog);
} }
@ -112,4 +113,26 @@ public class DialogPrintOrderSSCCListView extends BaseDialogFragment {
UtilityExceptions.defaultException(this.mContext, ex); UtilityExceptions.defaultException(this.mContext, ex);
dismiss(); 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.Context;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
@ -18,6 +19,7 @@ import org.jetbrains.annotations.NotNull;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.concurrent.ExecutorService;
import javax.inject.Inject; import javax.inject.Inject;
@ -42,6 +44,12 @@ public class DialogInfoSituazioneArticoloView extends BaseDialogRowInfoView {
@Inject @Inject
GiacenzaRESTConsumer giacenzaRESTConsumer; GiacenzaRESTConsumer giacenzaRESTConsumer;
@Inject
ExecutorService executorService;
@Inject
Handler handler;
private DialogInfoSituazioneArticoloBinding mBindings; private DialogInfoSituazioneArticoloBinding mBindings;
private Context mContext; private Context mContext;
@ -86,24 +94,33 @@ public class DialogInfoSituazioneArticoloView extends BaseDialogRowInfoView {
String partitaMag = getSpedizioneListModel().getOriginalModel().getSitArtOrdDTO().getPartitaMag(); String partitaMag = getSpedizioneListModel().getOriginalModel().getSitArtOrdDTO().getPartitaMag();
String codJcom = getSpedizioneListModel().getOriginalModel().getSitArtOrdDTO().getCodJcom(); String codJcom = getSpedizioneListModel().getOriginalModel().getSitArtOrdDTO().getCodJcom();
giacenzaRESTConsumer.getInstantItemSituation( this.onLoadingStarted();
codMdep, executorService.execute(() -> {
codMart, try {
partitaMag, var result = giacenzaRESTConsumer.getInstantItemSituationSynchronized(codMdep, codMart, partitaMag, codJcom);
codJcom,
result -> {
this.initIncomingItemsList(result.getIncomingItems());
this.initAvailableItemsList(result.getAvailableItems());
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) { private void initIncomingItemsList(List<InstantItemSituationIncomingItemDto> incomingItems) {
mBindings.incomingLabel.setVisibility(incomingItems == null || incomingItems.isEmpty() ? View.GONE : View.VISIBLE); mBindings.incomingLabel.setVisibility(incomingItems == null || incomingItems.isEmpty() ? View.GONE : View.VISIBLE);
if(incomingItems == null || incomingItems.isEmpty()) if (incomingItems == null || incomingItems.isEmpty())
return; return;
new LiveAdapter(incomingItems, BR.item) new LiveAdapter(incomingItems, BR.item)
@ -115,14 +132,14 @@ public class DialogInfoSituazioneArticoloView extends BaseDialogRowInfoView {
private void initAvailableItemsList(List<MvwSitArtUdcDetInventario> availableItems) { private void initAvailableItemsList(List<MvwSitArtUdcDetInventario> availableItems) {
mBindings.availableLabel.setVisibility(availableItems == null || availableItems.isEmpty() ? View.GONE : View.VISIBLE); mBindings.availableLabel.setVisibility(availableItems == null || availableItems.isEmpty() ? View.GONE : View.VISIBLE);
if(availableItems == null) if (availableItems == null)
availableItems = new ArrayList<>(); availableItems = new ArrayList<>();
availableItems = Stream.of(availableItems) availableItems = Stream.of(availableItems)
.filter(x -> x.getDataScad() == null || UtilityDate.isAfterToday(x.getDataScad())) .filter(x -> x.getDataScad() == null || UtilityDate.isAfterToday(x.getDataScad()))
.toList(); .toList();
if(availableItems.isEmpty()) if (availableItems.isEmpty())
return; return;
var preferedCodJcom = getSpedizioneListModel().getOriginalModel().getSitArtOrdDTO().getCodJcom(); var preferedCodJcom = getSpedizioneListModel().getOriginalModel().getSitArtOrdDTO().getCodJcom();

View File

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