Fix thread in validation DialogInputQuantityV2

This commit is contained in:
Giuseppe Scorrano 2024-04-10 12:07:41 +02:00
parent 5d3bb333e1
commit b0272cd9e0
2 changed files with 38 additions and 51 deletions

View File

@ -256,15 +256,20 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
}; };
public void save() { public void save() {
this.onLoadingStarted();
this.mViewModel.validate(validated -> { this.mViewModel.validate(validated -> {
requireActivity().runOnUiThread(() -> {
this.onLoadingEnded();
if (validated) { if (validated) {
this.mAbort = false; this.mAbort = false;
dismiss(); dismiss();
this.mOnComplete.run(this.mViewModel.getResult(), false); this.mOnComplete.run(this.mViewModel.getResult(), false);
}else {
this.onLoadingEnded();
} }
}); });
});
} }
public void saveAndCloseLU() { public void saveAndCloseLU() {
@ -527,13 +532,6 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
this.mEnableDataCallback = true; this.mEnableDataCallback = true;
} }
@Override
public void onError(Exception ex) {
DialogSimpleMessageView
.makeErrorDialog(new SpannableString(Html.fromHtml(ex.getMessage())), null, null)
.show(requireActivity().getSupportFragmentManager(), "tag");
}
@Override @Override
public void onWarning(String text, RunnableArgs<Boolean> result) { public void onWarning(String text, RunnableArgs<Boolean> result) {
DialogSimpleMessageView.makeWarningDialog(new SpannableString(Html.fromHtml(text)), DialogSimpleMessageView.makeWarningDialog(new SpannableString(Html.fromHtml(text)),

View File

@ -99,7 +99,6 @@ public class DialogInputQuantityV2ViewModel {
private final MagazzinoRESTConsumer mMagazzinoRESTConsumer; private final MagazzinoRESTConsumer mMagazzinoRESTConsumer;
private StatoPartitaMag statoArt; private StatoPartitaMag statoArt;
private MtbPartitaMag mtbPartitaMag;
@Inject @Inject
public DialogInputQuantityV2ViewModel(BarcodeRESTConsumer barcodeRESTConsumer, MagazzinoRESTConsumer magazzinoRESTConsumer) { public DialogInputQuantityV2ViewModel(BarcodeRESTConsumer barcodeRESTConsumer, MagazzinoRESTConsumer magazzinoRESTConsumer) {
@ -488,7 +487,7 @@ public class DialogInputQuantityV2ViewModel {
new Thread(() -> { new Thread(() -> {
if (this.internalQtaCnf == null || UtilityBigDecimal.equalsTo(this.internalQtaCnf, BigDecimal.ZERO)) { if (this.internalQtaCnf == null || UtilityBigDecimal.equalsTo(this.internalQtaCnf, BigDecimal.ZERO)) {
this.mListener.onError(new InvalidQtaCnfQuantityException()); this.sendError(new InvalidQtaCnfQuantityException());
onValidated.run(false); onValidated.run(false);
return; return;
} }
@ -497,33 +496,33 @@ public class DialogInputQuantityV2ViewModel {
if (suggestPartitaMagRunnable != null) { if (suggestPartitaMagRunnable != null) {
internalPartitaMag = suggestPartitaMagRunnable.run(this); internalPartitaMag = suggestPartitaMagRunnable.run(this);
if (internalPartitaMag == null) { if (internalPartitaMag == null) {
this.mListener.onError(new InvalidBatchLotException()); this.sendError(new InvalidBatchLotException());
onValidated.run(false); onValidated.run(false);
return; return;
} }
} else { } else {
this.mListener.onError(new InvalidBatchLotException()); this.sendError(new InvalidBatchLotException());
onValidated.run(false); onValidated.run(false);
return; return;
} }
} }
if (this.statoArt == StatoPartitaMag.DISATTIVO) { if (this.statoArt == StatoPartitaMag.DISATTIVO) {
this.mListener.onError(new InactiveBatchLotException(internalPartitaMag)); this.sendError(new InactiveBatchLotException(internalPartitaMag));
onValidated.run(false); onValidated.run(false);
return; return;
} }
if (this.shouldAskDataScad && UtilityString.isNullOrEmpty(internalPartitaMag)) { if (this.shouldAskDataScad && UtilityString.isNullOrEmpty(internalPartitaMag)) {
this.mListener.onError(new InvalidBatchLotException()); this.sendError(new InvalidBatchLotException());
onValidated.run(false); onValidated.run(false);
return; return;
} }
if (this.shouldAskDataScad && this.internalDataScad == null) { if (this.shouldAskDataScad && this.internalDataScad == null) {
this.mListener.onError(new InvalidExpireDateException()); this.sendError(new InvalidExpireDateException());
onValidated.run(false); onValidated.run(false);
return; return;
} }
@ -531,7 +530,7 @@ public class DialogInputQuantityV2ViewModel {
if (!this.canOverflowOrderQuantity && UtilityBigDecimal.greaterThan(this.internalQtaTot, this.totalQtaOrd) && if (!this.canOverflowOrderQuantity && UtilityBigDecimal.greaterThan(this.internalQtaTot, this.totalQtaOrd) &&
this.mtbAart.get().isFlagQtaCnfFissaBoolean()) { this.mtbAart.get().isFlagQtaCnfFissaBoolean()) {
this.mListener.onError(new OverflowQtaTotOrderedQuantityException()); this.sendError(new OverflowQtaTotOrderedQuantityException());
onValidated.run(false); onValidated.run(false);
return; return;
} }
@ -539,14 +538,14 @@ public class DialogInputQuantityV2ViewModel {
if (!this.canOverflowOrderQuantity && UtilityBigDecimal.greaterThan(this.internalNumCnf, this.totalNumCnfOrd) && if (!this.canOverflowOrderQuantity && UtilityBigDecimal.greaterThan(this.internalNumCnf, this.totalNumCnfOrd) &&
!this.mtbAart.get().isFlagQtaCnfFissaBoolean()) { !this.mtbAart.get().isFlagQtaCnfFissaBoolean()) {
this.mListener.onError(new OverflowNumCnfOrderedQuantityException()); this.sendError(new OverflowNumCnfOrderedQuantityException());
onValidated.run(false); onValidated.run(false);
return; return;
} }
if (UtilityBigDecimal.greaterThan(this.internalQtaTot, this.totalQtaAvailable)) { if (UtilityBigDecimal.greaterThan(this.internalQtaTot, this.totalQtaAvailable)) {
this.mListener.onError(new OverflowQtaTotAvailableQuantityException()); this.sendError(new OverflowQtaTotAvailableQuantityException());
onValidated.run(false); onValidated.run(false);
return; return;
} }
@ -554,7 +553,7 @@ public class DialogInputQuantityV2ViewModel {
if (UtilityBigDecimal.greaterThan(this.internalNumCnf, this.totalNumCnfAvailable) && if (UtilityBigDecimal.greaterThan(this.internalNumCnf, this.totalNumCnfAvailable) &&
!this.mtbAart.get().isFlagQtaCnfFissaBoolean()) { !this.mtbAart.get().isFlagQtaCnfFissaBoolean()) {
this.mListener.onError(new OverflowNumCnfAvailableQuantityException()); this.sendError(new OverflowNumCnfAvailableQuantityException());
onValidated.run(false); onValidated.run(false);
return; return;
} }
@ -564,13 +563,13 @@ public class DialogInputQuantityV2ViewModel {
UtilityBigDecimal.equalsOrLowerThan(this.internalQtaCnf, BigDecimal.ZERO) || UtilityBigDecimal.equalsOrLowerThan(this.internalQtaCnf, BigDecimal.ZERO) ||
UtilityBigDecimal.equalsOrLowerThan(this.internalQtaTot, BigDecimal.ZERO))) { UtilityBigDecimal.equalsOrLowerThan(this.internalQtaTot, BigDecimal.ZERO))) {
this.mListener.onError(new InvalidQuantityException()); this.sendError(new InvalidQuantityException());
onValidated.run(false); onValidated.run(false);
return; return;
} }
if (this.isNoteMandatory() && (this.internalNote == null || this.internalNote.length() <= 0)) { if (this.isNoteMandatory() && (this.internalNote == null || this.internalNote.length() <= 0)) {
this.mListener.onError(new InvalidNotesException()); this.sendError(new InvalidNotesException());
onValidated.run(false); onValidated.run(false);
return; return;
} }
@ -579,10 +578,17 @@ public class DialogInputQuantityV2ViewModel {
this.internalPartitaMag = this.internalPartitaMag.toUpperCase(); this.internalPartitaMag = this.internalPartitaMag.toUpperCase();
if (SettingsManager.iDB().isFlagWarningNewPartitaMag()) { if (SettingsManager.iDB().isFlagWarningNewPartitaMag()) {
asyncMagazzinoRESTConsumer(internalPartitaMag, this.getMtbAart().getCodMart()); MtbPartitaMag mtbPartitaMag = null;
try {
mtbPartitaMag = retrievePartitaMag(internalPartitaMag, this.getMtbAart().getCodMart());
} catch (Exception e) {
this.sendError(e);
onValidated.run(false);
return;
}
if (mtbPartitaMag == null) { if (mtbPartitaMag == null) {
boolean result = runAsyncWarningDialog(UtilityResources.getString(R.string.batch_lot_inexistent_error_message)); boolean result = runWarningDialogSyncronized(UtilityResources.getString(R.string.batch_lot_inexistent_error_message));
if (!result) { if (!result) {
onValidated.run(false); onValidated.run(false);
return; return;
@ -593,7 +599,7 @@ public class DialogInputQuantityV2ViewModel {
if (this.warnOnQuantityOverflow && UtilityBigDecimal.greaterThan(this.internalQtaTot, this.totalQtaOrd) && if (this.warnOnQuantityOverflow && UtilityBigDecimal.greaterThan(this.internalQtaTot, this.totalQtaOrd) &&
this.mtbAart.get().isFlagQtaCnfFissaBoolean()) { this.mtbAart.get().isFlagQtaCnfFissaBoolean()) {
boolean result = runAsyncWarningDialog(UtilityResources.getString(R.string.confirm_ordered_quantity_overflow_error_message)); boolean result = runWarningDialogSyncronized(UtilityResources.getString(R.string.confirm_ordered_quantity_overflow_error_message));
if (!result) { if (!result) {
onValidated.run(false); onValidated.run(false);
return; return;
@ -603,7 +609,7 @@ public class DialogInputQuantityV2ViewModel {
if (this.warnOnQuantityOverflow && UtilityBigDecimal.greaterThan(this.internalNumCnf, this.totalNumCnfOrd) && if (this.warnOnQuantityOverflow && UtilityBigDecimal.greaterThan(this.internalNumCnf, this.totalNumCnfOrd) &&
!this.mtbAart.get().isFlagQtaCnfFissaBoolean()) { !this.mtbAart.get().isFlagQtaCnfFissaBoolean()) {
boolean result = runAsyncWarningDialog(UtilityResources.getString(R.string.confirm_ordered_num_cnf_overflow_error_message)); boolean result = runWarningDialogSyncronized(UtilityResources.getString(R.string.confirm_ordered_num_cnf_overflow_error_message));
if (!result) { if (!result) {
onValidated.run(false); onValidated.run(false);
return; return;
@ -614,7 +620,7 @@ public class DialogInputQuantityV2ViewModel {
}).start(); }).start();
} }
private boolean runAsyncWarningDialog(String text) { private boolean runWarningDialogSyncronized(String text) {
try { try {
final FutureTask<Object> ft = new FutureTask<>(() -> { final FutureTask<Object> ft = new FutureTask<>(() -> {
}, new Object()); }, new Object());
@ -632,26 +638,9 @@ public class DialogInputQuantityV2ViewModel {
} }
} }
private void asyncMagazzinoRESTConsumer(String partitaMag, String codMart) { private MtbPartitaMag retrievePartitaMag(String partitaMag, String codMart) throws Exception {
try { return mMagazzinoRESTConsumer.retrievePartitaMagSyncronized(partitaMag, codMart, this::sendError);
final FutureTask<Object> ft = new FutureTask<>(() -> {
}, new Object());
mMagazzinoRESTConsumer.retrievePartitaMag(
partitaMag,
codMart,
returnPartitaMag -> {
mtbPartitaMag = returnPartitaMag;
ft.run();
},
e -> {
this.sendError(e);
ft.run();
});
ft.get();
} catch (Exception e) {
this.sendError(e);
}
} }
public DialogInputQuantityV2ResultDTO getResult() { public DialogInputQuantityV2ResultDTO getResult() {