Aggiunto un messaggio di allert quando viene inserita una quantità superiore rispetto a quella presente nell'ordine.

This commit is contained in:
Marco Elefante 2023-11-21 13:02:06 +01:00
parent 7f9524e0b2
commit 8c24f5f025
8 changed files with 129 additions and 27 deletions

17
.idea/deploymentTargetDropDown.xml generated Normal file
View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="deploymentTargetDropDown">
<runningDeviceTargetSelectedWithDropDown>
<Target>
<type value="RUNNING_DEVICE_TARGET" />
<deviceKey>
<Key>
<type value="SERIAL_NUMBER" />
<value value="21088B8EFD" />
</Key>
</deviceKey>
</Target>
</runningDeviceTargetSelectedWithDropDown>
<timeTargetWasSelectedWithDropDown value="2023-11-20T09:49:24.751485900Z" />
</component>
</project>

View File

@ -1,6 +1,6 @@
<component name="ProjectRunConfigurationManager"> <component name="ProjectRunConfigurationManager">
<configuration default="false" name="app" type="AndroidRunConfigurationType" factoryName="Android App"> <configuration default="false" name="app" type="AndroidRunConfigurationType" factoryName="Android App">
<module name="WMS.app.main" /> <module name="WMS_Native.app.main" />
<option name="DEPLOY" value="true" /> <option name="DEPLOY" value="true" />
<option name="DEPLOY_APK_FROM_BUNDLE" value="false" /> <option name="DEPLOY_APK_FROM_BUNDLE" value="false" />
<option name="DEPLOY_AS_INSTANT" value="false" /> <option name="DEPLOY_AS_INSTANT" value="false" />
@ -9,7 +9,6 @@
<option name="ALL_USERS" value="false" /> <option name="ALL_USERS" value="false" />
<option name="ALWAYS_INSTALL_WITH_PM" value="false" /> <option name="ALWAYS_INSTALL_WITH_PM" value="false" />
<option name="CLEAR_APP_STORAGE" value="false" /> <option name="CLEAR_APP_STORAGE" value="false" />
<option name="DYNAMIC_FEATURES_DISABLED_LIST" value="WMS.dynamic__base,WMS.dynamic_vgalimenti" />
<option name="ACTIVITY_EXTRA_FLAGS" value="" /> <option name="ACTIVITY_EXTRA_FLAGS" value="" />
<option name="MODE" value="default_activity" /> <option name="MODE" value="default_activity" />
<option name="CLEAR_LOGCAT" value="false" /> <option name="CLEAR_LOGCAT" value="false" />
@ -25,6 +24,8 @@
<option name="WORKING_DIR" value="" /> <option name="WORKING_DIR" value="" />
<option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" /> <option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
<option name="SHOW_OPTIMIZED_WARNING" value="true" /> <option name="SHOW_OPTIMIZED_WARNING" value="true" />
<option name="ATTACH_ON_WAIT_FOR_DEBUGGER" value="false" />
<option name="DEBUG_SANDBOX_SDK" value="false" />
</Auto> </Auto>
<Hybrid> <Hybrid>
<option name="USE_JAVA_AWARE_DEBUGGER" value="false" /> <option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
@ -32,14 +33,21 @@
<option name="WORKING_DIR" value="" /> <option name="WORKING_DIR" value="" />
<option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" /> <option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
<option name="SHOW_OPTIMIZED_WARNING" value="true" /> <option name="SHOW_OPTIMIZED_WARNING" value="true" />
<option name="ATTACH_ON_WAIT_FOR_DEBUGGER" value="false" />
<option name="DEBUG_SANDBOX_SDK" value="false" />
</Hybrid> </Hybrid>
<Java /> <Java>
<option name="ATTACH_ON_WAIT_FOR_DEBUGGER" value="false" />
<option name="DEBUG_SANDBOX_SDK" value="false" />
</Java>
<Native> <Native>
<option name="USE_JAVA_AWARE_DEBUGGER" value="false" /> <option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
<option name="SHOW_STATIC_VARS" value="true" /> <option name="SHOW_STATIC_VARS" value="true" />
<option name="WORKING_DIR" value="" /> <option name="WORKING_DIR" value="" />
<option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" /> <option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
<option name="SHOW_OPTIMIZED_WARNING" value="true" /> <option name="SHOW_OPTIMIZED_WARNING" value="true" />
<option name="ATTACH_ON_WAIT_FOR_DEBUGGER" value="false" />
<option name="DEBUG_SANDBOX_SDK" value="false" />
</Native> </Native>
<Profilers> <Profilers>
<option name="ADVANCED_PROFILING_ENABLED" value="false" /> <option name="ADVANCED_PROFILING_ENABLED" value="false" />

View File

@ -69,6 +69,7 @@ public class DBSettingsModel {
private boolean flagCanAddUnknownBarcodesAccettazioneBolla = false; private boolean flagCanAddUnknownBarcodesAccettazioneBolla = false;
private boolean flagEnableFastPickAccettazioneBolla = false; private boolean flagEnableFastPickAccettazioneBolla = false;
private boolean flagDisableMandatoryTracciabilitaAccettazioneBolla = false; private boolean flagDisableMandatoryTracciabilitaAccettazioneBolla = false;
private boolean flagHigherQuantityWarning = false;
public boolean isFlagSpedizioneEnableFakeGiacenza() { public boolean isFlagSpedizioneEnableFakeGiacenza() {
return flagSpedizioneEnableFakeGiacenza; return flagSpedizioneEnableFakeGiacenza;
@ -556,4 +557,13 @@ public class DBSettingsModel {
this.flagDisableMandatoryTracciabilitaAccettazioneBolla = flagDisableMandatoryTracciabilitaAccettazioneBolla; this.flagDisableMandatoryTracciabilitaAccettazioneBolla = flagDisableMandatoryTracciabilitaAccettazioneBolla;
return this; return this;
} }
public boolean isFlagHigherQuantityWarning() {
return flagHigherQuantityWarning;
}
public DBSettingsModel setFlagHigherQuantityWarning(boolean flagHigherQuantityWarning) {
this.flagHigherQuantityWarning = flagHigherQuantityWarning;
return this;
}
} }

View File

@ -470,6 +470,12 @@ public class SettingsManager {
.setKeySection("FLAG_DISABLE_MANDATORY_TRACCIABILITA") .setKeySection("FLAG_DISABLE_MANDATORY_TRACCIABILITA")
.setSetter(dbSettingsModelIstance::setFlagDisableMandatoryTracciabilitaAccettazioneBolla) .setSetter(dbSettingsModelIstance::setFlagDisableMandatoryTracciabilitaAccettazioneBolla)
.setDefaultValue(false)); .setDefaultValue(false));
stbGestSetupReaderList.add(new StbGestSetupReader<>(Boolean.class)
.setGestName("PICKING")
.setSection("SPEDIZIONE")
.setKeySection("FLAG_HIGHER_QUANTITY_WARNING")
.setSetter(dbSettingsModelIstance::setFlagHigherQuantityWarning)
.setDefaultValue(false));
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep(); String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();

View File

@ -849,6 +849,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
.setPartitaMag(partitaMag) .setPartitaMag(partitaMag)
.setDataScad(dataScad) .setDataScad(dataScad)
.setCanOverflowOrderQuantity(canOverflowOrderQuantity) .setCanOverflowOrderQuantity(canOverflowOrderQuantity)
.setWarnOnQuantityOverflow(SettingsManager.iDB().isFlagHigherQuantityWarning())
.setCanLUBeClosed(true) .setCanLUBeClosed(true)
.setCanPartitaMagBeChanged(canPartitaMagBeChanged) .setCanPartitaMagBeChanged(canPartitaMagBeChanged)
.setStatoPartitaMag(pickingObjectDTO != null ? pickingObjectDTO.getStatoArticoloDTO() : null) .setStatoPartitaMag(pickingObjectDTO != null ? pickingObjectDTO.getStatoArticoloDTO() : null)

View File

@ -44,6 +44,7 @@ public class DialogInputQuantityV2DTO {
private boolean saveOnImeDone = false; private boolean saveOnImeDone = false;
private boolean notifyProductLotStatus = false; private boolean notifyProductLotStatus = false;
private boolean disableTracciabilitaCheck = false; private boolean disableTracciabilitaCheck = false;
private boolean warnOnQuantityOverflow = false;
private StatoArticoloDTO statoPartitaMag; private StatoArticoloDTO statoPartitaMag;
@ -370,4 +371,13 @@ public class DialogInputQuantityV2DTO {
this.customArtDescription = customArtDescription; this.customArtDescription = customArtDescription;
return this; return this;
} }
public boolean isWarnOnQuantityOverflow() {
return warnOnQuantityOverflow;
}
public DialogInputQuantityV2DTO setWarnOnQuantityOverflow(boolean warnOnQuantityOverflow) {
this.warnOnQuantityOverflow = warnOnQuantityOverflow;
return this;
}
} }

View File

@ -170,6 +170,7 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
.setTotalQtaAvailable(mDialogInputQuantityV2DTO.getTotalQtaAvailable()) .setTotalQtaAvailable(mDialogInputQuantityV2DTO.getTotalQtaAvailable())
.setCanInputZeroQuantity(mDialogInputQuantityV2DTO.isCanInputZeroQuantity()) .setCanInputZeroQuantity(mDialogInputQuantityV2DTO.isCanInputZeroQuantity())
.setCanOverflowOrderQuantity(mDialogInputQuantityV2DTO.isCanOverflowOrderQuantity()) .setCanOverflowOrderQuantity(mDialogInputQuantityV2DTO.isCanOverflowOrderQuantity())
.setWarnOnQuantityOverflow(mDialogInputQuantityV2DTO.isWarnOnQuantityOverflow())
.setQtaCnfAvailable(mDialogInputQuantityV2DTO.getQtaCnfAvailable()) .setQtaCnfAvailable(mDialogInputQuantityV2DTO.getQtaCnfAvailable())
.setPartitaMag(mDialogInputQuantityV2DTO.getPartitaMag()) .setPartitaMag(mDialogInputQuantityV2DTO.getPartitaMag())
.setNote(mDialogInputQuantityV2DTO.getNote()) .setNote(mDialogInputQuantityV2DTO.getNote())
@ -256,19 +257,23 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
}; };
public void save() { public void save() {
if (this.mViewModel.validate()) { this.mViewModel.validate(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);
} }
});
} }
public void saveAndCloseLU() { public void saveAndCloseLU() {
if (this.mViewModel.validate()) { this.mViewModel.validate(validated -> {
if (validated) {
this.mAbort = false; this.mAbort = false;
dismiss(); dismiss();
this.mOnComplete.run(this.mViewModel.getResult(), true); this.mOnComplete.run(this.mViewModel.getResult(), true);
} }
});
} }
// @Override // @Override
@ -532,4 +537,13 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
.makeErrorDialog(new SpannableString(Html.fromHtml(ex.getMessage())), null, null) .makeErrorDialog(new SpannableString(Html.fromHtml(ex.getMessage())), null, null)
.show(requireActivity().getSupportFragmentManager(), "tag"); .show(requireActivity().getSupportFragmentManager(), "tag");
} }
@Override
public void onWarning(String text, RunnableArgs<Boolean> result) {
DialogSimpleMessageView.makeWarningDialog(new SpannableString(Html.fromHtml(text)),
null,
() -> result.run(true),
() -> result.run(false)
).show(requireActivity().getSupportFragmentManager(), "tag");
}
} }

View File

@ -3,12 +3,14 @@ package it.integry.integrywmsnative.view.dialogs.input_quantity_v2;
import androidx.databinding.ObservableField; import androidx.databinding.ObservableField;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate; import java.time.LocalDate;
import javax.inject.Inject; import javax.inject.Inject;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO; import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.core.di.BindableString; import it.integry.integrywmsnative.core.di.BindableString;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.expansion.RunnableArgsWithReturn; import it.integry.integrywmsnative.core.expansion.RunnableArgsWithReturn;
import it.integry.integrywmsnative.core.model.MtbAart; import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
@ -80,6 +82,7 @@ public class DialogInputQuantityV2ViewModel {
private int onNumCnfInputChanged; private int onNumCnfInputChanged;
private int onQtaTotInputChanged; private int onQtaTotInputChanged;
private boolean disableTracciabilitaCheck; private boolean disableTracciabilitaCheck;
private boolean warnOnQuantityOverflow;
private Listener mListener; private Listener mListener;
@ -333,6 +336,11 @@ public class DialogInputQuantityV2ViewModel {
return this; return this;
} }
public DialogInputQuantityV2ViewModel setWarnOnQuantityOverflow(boolean warnOnQuantityOverflow) {
this.warnOnQuantityOverflow = warnOnQuantityOverflow;
return this;
}
public DialogInputQuantityV2ViewModel setCanPartitaMagBeChanged(boolean canPartitaMagBeChanged) { public DialogInputQuantityV2ViewModel setCanPartitaMagBeChanged(boolean canPartitaMagBeChanged) {
this.canPartitaMagBeChanged = canPartitaMagBeChanged; this.canPartitaMagBeChanged = canPartitaMagBeChanged;
return this; return this;
@ -457,11 +465,12 @@ public class DialogInputQuantityV2ViewModel {
this.blockedQtaTot.set(false); this.blockedQtaTot.set(false);
} }
public boolean validate() { public void validate(RunnableArgs<Boolean> onValidated) {
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.mListener.onError(new InvalidQtaCnfQuantityException());
return false; onValidated.run(false);
return;
} }
if (!disableTracciabilitaCheck && mtbAart.get().isFlagTracciabilitaBoolean() && UtilityString.isNullOrEmpty(internalPartitaMag)) { if (!disableTracciabilitaCheck && mtbAart.get().isFlagTracciabilitaBoolean() && UtilityString.isNullOrEmpty(internalPartitaMag)) {
@ -469,51 +478,59 @@ public class DialogInputQuantityV2ViewModel {
internalPartitaMag = suggestPartitaMagRunnable.run(this); internalPartitaMag = suggestPartitaMagRunnable.run(this);
if (internalPartitaMag == null) { if (internalPartitaMag == null) {
this.mListener.onError(new InvalidBatchLotException()); this.mListener.onError(new InvalidBatchLotException());
return false; onValidated.run(false);
return;
} }
} else { } else {
this.mListener.onError(new InvalidBatchLotException()); this.mListener.onError(new InvalidBatchLotException());
return false; onValidated.run(false);
return;
} }
} }
if (this.shouldAskDataScad && UtilityString.isNullOrEmpty(internalPartitaMag)) { if (this.shouldAskDataScad && UtilityString.isNullOrEmpty(internalPartitaMag)) {
this.mListener.onError(new InvalidBatchLotException()); this.mListener.onError(new InvalidBatchLotException());
return false; onValidated.run(false);
return;
} }
if (this.shouldAskDataScad && this.internalDataScad == null) { if (this.shouldAskDataScad && this.internalDataScad == null) {
this.mListener.onError(new InvalidExpireDateException()); this.mListener.onError(new InvalidExpireDateException());
return false; onValidated.run(false);
return;
} }
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.mListener.onError(new OverflowQtaTotOrderedQuantityException());
return false; onValidated.run(false);
return;
} }
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.mListener.onError(new OverflowNumCnfOrderedQuantityException());
return false; onValidated.run(false);
return;
} }
if (UtilityBigDecimal.greaterThan(this.internalQtaTot, this.totalQtaAvailable)) { if (UtilityBigDecimal.greaterThan(this.internalQtaTot, this.totalQtaAvailable)) {
this.mListener.onError(new OverflowQtaTotAvailableQuantityException()); this.mListener.onError(new OverflowQtaTotAvailableQuantityException());
return false; onValidated.run(false);
return;
} }
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.mListener.onError(new OverflowNumCnfAvailableQuantityException());
return false; onValidated.run(false);
return;
} }
if (!this.canInputZeroQuantity && (this.internalNumCnf == null || this.internalQtaCnf == null || this.internalQtaTot == null || if (!this.canInputZeroQuantity && (this.internalNumCnf == null || this.internalQtaCnf == null || this.internalQtaTot == null ||
@ -522,17 +539,36 @@ public class DialogInputQuantityV2ViewModel {
UtilityBigDecimal.equalsOrLowerThan(this.internalQtaTot, BigDecimal.ZERO))) { UtilityBigDecimal.equalsOrLowerThan(this.internalQtaTot, BigDecimal.ZERO))) {
this.mListener.onError(new InvalidQuantityException()); this.mListener.onError(new InvalidQuantityException());
return false; onValidated.run(false);
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.mListener.onError(new InvalidNotesException());
return false; onValidated.run(false);
return;
} }
if (!UtilityString.isNullOrEmpty(this.internalPartitaMag)) if (!UtilityString.isNullOrEmpty(this.internalPartitaMag))
this.internalPartitaMag = this.internalPartitaMag.toUpperCase(); this.internalPartitaMag = this.internalPartitaMag.toUpperCase();
return true;
//Gli ultimi due controlli sono in coda a causa della callBack di onWarning, non eseguirebbe i controlli messi dopo
if (this.warnOnQuantityOverflow && UtilityBigDecimal.greaterThan(this.internalQtaTot, this.totalQtaOrd) &&
this.mtbAart.get().isFlagQtaCnfFissaBoolean()) {
this.mListener.onWarning("Hai inserito una quantità superiore rispetto a quella presente nell'ordine. <br>Continuare?", onValidated);
return;
}
if (this.warnOnQuantityOverflow && UtilityBigDecimal.greaterThan(this.internalNumCnf, this.totalNumCnfOrd) &&
!this.mtbAart.get().isFlagQtaCnfFissaBoolean()) {
this.mListener.onWarning("Hai inserito una quantità superiore rispetto a quella presente nell'ordine. <br>Continuare?", onValidated);
return;
}
onValidated.run(true);
} }
public DialogInputQuantityV2ResultDTO getResult() { public DialogInputQuantityV2ResultDTO getResult() {
@ -543,7 +579,6 @@ public class DialogInputQuantityV2ViewModel {
.setQtaCnf(this.internalQtaCnf) .setQtaCnf(this.internalQtaCnf)
.setNote(this.internalNote) .setNote(this.internalNote)
.setQtaTot(this.internalQtaTot); .setQtaTot(this.internalQtaTot);
} }
public void setListener(Listener listener) { public void setListener(Listener listener) {
@ -577,5 +612,6 @@ public class DialogInputQuantityV2ViewModel {
void onDataChanged(); void onDataChanged();
void onError(Exception ex); void onError(Exception ex);
void onWarning(String text, RunnableArgs<Boolean> result);
} }
} }