Prima versione stabile del refactoring della Spedizione V2

This commit is contained in:
Giuseppe Scorrano 2020-04-03 13:50:07 +02:00
parent f0bbc60ab6
commit bd2532755c
12 changed files with 318 additions and 81 deletions

View File

@ -1,6 +1,10 @@
package it.integry.integrywmsnative; package it.integry.integrywmsnative;
import android.app.AlarmManager;
import android.app.Application; import android.app.Application;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration; import android.content.res.Configuration;
import android.content.res.Resources; import android.content.res.Resources;
@ -25,6 +29,20 @@ public class MainApplication extends Application {
private AppContext appContext = new AppContext(this); private AppContext appContext = new AppContext(this);
private static AppDatabase appDb; private static AppDatabase appDb;
private static Context context;
public static void exit() {
System.exit(0);
}
public static void restart() {
Intent mStartActivity = new Intent(context, MainActivity.class);
int mPendingIntentId = 123456;
PendingIntent mPendingIntent = PendingIntent.getActivity(context, mPendingIntentId, mStartActivity, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager mgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 100, mPendingIntent);
System.exit(0);
}
// Called when the application is starting, before any other application objects have been created. // Called when the application is starting, before any other application objects have been created.
@ -33,12 +51,11 @@ public class MainApplication extends Application {
public void onCreate() { public void onCreate() {
super.onCreate(); super.onCreate();
context = this;
appModule = new MainApplicationModule(MainApplication.this); appModule = new MainApplicationModule(MainApplication.this);
appComponent = DaggerMainApplicationComponent.create(); appComponent = DaggerMainApplicationComponent.create();
// .builder()
// .mainApplicationModule(new MainApplicationModule(MainApplication.this))
// .build();
appContext.init(); appContext.init();
appDb = AppDatabase.getDatabase(this); appDb = AppDatabase.getDatabase(this);

View File

@ -18,6 +18,7 @@ import java.util.Iterator;
import java.util.List; import java.util.List;
import it.integry.integrywmsnative.MainActivity; import it.integry.integrywmsnative.MainActivity;
import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.class_router.interfaces.IOrdiniVendita; import it.integry.integrywmsnative.core.class_router.interfaces.IOrdiniVendita;
import it.integry.integrywmsnative.core.expansion.RunnableArgss; import it.integry.integrywmsnative.core.expansion.RunnableArgss;
@ -224,30 +225,33 @@ public class MainFragment extends Fragment implements ITitledFragment, IScrollab
private void initGestMenu() { private void initGestMenu() {
ICustomConfiguration customConfiguration = ClassRouter.getInstance(ClassRouter.PATH.CUSTOM_CONFIGURATION); ICustomConfiguration customConfiguration = ClassRouter.getInstance(ClassRouter.PATH.CUSTOM_CONFIGURATION);
if(customConfiguration != null) { if (customConfiguration == null) {
BaseMenuConfiguration menuConfiguration = customConfiguration.getConfig(BaseCustomConfiguration.Keys.MENU_CONFIGURATION); MainApplication.restart();
List<MenuConfiguration.MenuGroup> menuGroups = menuConfiguration.getGroups();
for (MenuConfiguration.MenuGroup menuGroup : menuGroups) {
FragmentMainMenuGroupLayoutBinding groupBinding = DataBindingUtil.inflate(mLayoutInflater, R.layout.fragment_main_menu_group_layout, null, false);
String title = this.getResources().getString(menuGroup.getGroupText());
groupBinding.generalDashboardGroupTitle.setText(title);
MenuListAdapter menuListAdapter = new MenuListAdapter(getContext(), menuGroup.getItems());
groupBinding.mainList.setLayoutManager(new GridLayoutManager(getContext(), 2));
groupBinding.mainList.setAdapter(menuListAdapter);
groupBinding.mainList.setNestedScrollingEnabled(false);
menuListAdapter.setClickListener((view, position) -> {
onMenuClick(menuGroup.getItems().get(position));
});
mBindings.menuContainer.addView(groupBinding.getRoot());
}
} }
BaseMenuConfiguration menuConfiguration = customConfiguration.getConfig(BaseCustomConfiguration.Keys.MENU_CONFIGURATION);
List<MenuConfiguration.MenuGroup> menuGroups = menuConfiguration.getGroups();
for (MenuConfiguration.MenuGroup menuGroup : menuGroups) {
FragmentMainMenuGroupLayoutBinding groupBinding = DataBindingUtil.inflate(mLayoutInflater, R.layout.fragment_main_menu_group_layout, null, false);
String title = this.getResources().getString(menuGroup.getGroupText());
groupBinding.generalDashboardGroupTitle.setText(title);
MenuListAdapter menuListAdapter = new MenuListAdapter(getContext(), menuGroup.getItems());
groupBinding.mainList.setLayoutManager(new GridLayoutManager(getContext(), 2));
groupBinding.mainList.setAdapter(menuListAdapter);
groupBinding.mainList.setNestedScrollingEnabled(false);
menuListAdapter.setClickListener((view, position) -> {
onMenuClick(menuGroup.getItems().get(position));
});
mBindings.menuContainer.addView(groupBinding.getRoot());
}
} }
private void onMenuClick(MenuConfiguration.MenuItem menuItem) { private void onMenuClick(MenuConfiguration.MenuItem menuItem) {

View File

@ -38,6 +38,7 @@ import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.MtbDepoPosizione; import it.integry.integrywmsnative.core.model.MtbDepoPosizione;
import it.integry.integrywmsnative.core.rest.model.SitArtOrdDTO; import it.integry.integrywmsnative.core.rest.model.SitArtOrdDTO;
import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityLogger; import it.integry.integrywmsnative.core.utility.UtilityLogger;
@ -191,7 +192,7 @@ public class SpedizioneActivity extends AppCompatActivity implements SpedizioneV
private List<SpedizioneListModel> convertDataModelToListModel(List<PickingObjectDTO> dataList) { private List<SpedizioneListModel> convertDataModelToListModel(List<PickingObjectDTO> dataList) {
List<PickingObjectDTO> tmpList = Stream.of(dataList) List<PickingObjectDTO> tmpList = Stream.of(dataList)
.filter(x -> !x.isHidden()) .filter(x -> !x.isHidden() && UtilityBigDecimal.greaterThan(x.getSitArtOrdDTO().getQtaOrd(), BigDecimal.ZERO))
.toList(); .toList();
List<SpedizioneListModel> spedizioneListModels = new ArrayList<>(); List<SpedizioneListModel> spedizioneListModels = new ArrayList<>();
@ -396,11 +397,6 @@ public class SpedizioneActivity extends AppCompatActivity implements SpedizioneV
if (this.mShouldCloseActivity) super.onBackPressed(); if (this.mShouldCloseActivity) super.onBackPressed();
} }
@Override
public void onLUPositionRequired(RunnableArgs<MtbDepoPosizione> onComplete) {
}
@Override @Override
public void onLUPesoRequired(String codTcol, BigDecimal netWeightKG, BigDecimal grossWeightKG, RunnableArgsss<String, BigDecimal, BigDecimal> onComplete) { public void onLUPesoRequired(String codTcol, BigDecimal netWeightKG, BigDecimal grossWeightKG, RunnableArgsss<String, BigDecimal, BigDecimal> onComplete) {
DialogInputPeso.make(this, codTcol, netWeightKG, grossWeightKG, (newCodTcol, newNetWeight, newGrossWeight) -> { DialogInputPeso.make(this, codTcol, netWeightKG, grossWeightKG, (newCodTcol, newNetWeight, newGrossWeight) -> {

View File

@ -973,7 +973,7 @@ public class SpedizioneViewModel {
private void postCloseOperations(List<MtbColt> mtbColtList) { private void postCloseOperations(List<MtbColt> mtbColtList) {
this.mColliRegistrati.addAll(mtbColtList); this.mColliRegistrati.addAll(mtbColtList);
mColliDataRecoverService.closeSession(mMtbColtSessionID); this.mColliDataRecoverService.closeSession(mMtbColtSessionID);
this.mCurrentMtbColt = null; this.mCurrentMtbColt = null;
@ -985,13 +985,14 @@ public class SpedizioneViewModel {
pickingObjectDTO.getSitArtOrdDTO().setNumCnfOrd(pickingObjectDTO.getSitArtOrdDTO().getNumCnfOrd().subtract(withdrawMtbColr.getNumCnf())); pickingObjectDTO.getSitArtOrdDTO().setNumCnfOrd(pickingObjectDTO.getSitArtOrdDTO().getNumCnfOrd().subtract(withdrawMtbColr.getNumCnf()));
pickingObjectDTO.getSitArtOrdDTO().setQtaOrd(pickingObjectDTO.getSitArtOrdDTO().getQtaOrd().subtract(withdrawMtbColr.getQtaCol())); pickingObjectDTO.getSitArtOrdDTO().setQtaOrd(pickingObjectDTO.getSitArtOrdDTO().getQtaOrd().subtract(withdrawMtbColr.getQtaCol()));
Stream.of(pickingObjectDTO.getMtbColts()) if(pickingObjectDTO.getMtbColts() != null) {
.filter(x -> Objects.equals(x.getNumCollo(), withdrawMtbColr.getNumColloRif()) && Stream.of(pickingObjectDTO.getMtbColts())
x.getDataColloS().equals(withdrawMtbColr.getDataColloRifS()) && .filter(x -> Objects.equals(x.getNumCollo(), withdrawMtbColr.getNumColloRif()) &&
x.getSerCollo().equalsIgnoreCase(withdrawMtbColr.getSerColloRif()) && x.getDataColloS().equals(withdrawMtbColr.getDataColloRifS()) &&
x.getGestione().equalsIgnoreCase(withdrawMtbColr.getGestioneRif())) x.getSerCollo().equalsIgnoreCase(withdrawMtbColr.getSerColloRif()) &&
.forEach(x -> { x.getGestione().equalsIgnoreCase(withdrawMtbColr.getGestioneRif()))
List<MtbColr> mtbColrList = x.getMtbColr(); .forEach(x -> {
List<MtbColr> mtbColrList = x.getMtbColr();
// Stream.of(mtbColrList) // Stream.of(mtbColrList)
// .filter(y -> y.getCodMart().equalsIgnoreCase(withdrawMtbColr.getCodMart()) && // .filter(y -> y.getCodMart().equalsIgnoreCase(withdrawMtbColr.getCodMart()) &&
@ -1001,15 +1002,21 @@ public class SpedizioneViewModel {
// .for // .for
}); });
}
} }
} }
this.resetMatchedRows();
this.sendLUClosed();
} }
private void deleteLU(Runnable onComplete) { private void deleteLU(Runnable onComplete) {
mColliMagazzinoRESTConsumer.deleteCollo(mCurrentMtbColt, () -> { mColliMagazzinoRESTConsumer.deleteCollo(mCurrentMtbColt, () -> {
mCurrentMtbColt = null; this.mColliDataRecoverService.closeSession(mMtbColtSessionID);
this.mCurrentMtbColt = null;
if (onComplete != null) onComplete.run(); if (onComplete != null) onComplete.run();
}, this::sendError); }, this::sendError);
} }
@ -1043,8 +1050,6 @@ public class SpedizioneViewModel {
void onLUClosed(); void onLUClosed();
void onLUPositionRequired(RunnableArgs<MtbDepoPosizione> onComplete);
void onLUPesoRequired(String codTcol, BigDecimal netWeightKG, BigDecimal grossWeightKG, RunnableArgsss<String, BigDecimal, BigDecimal> onComplete); void onLUPesoRequired(String codTcol, BigDecimal netWeightKG, BigDecimal grossWeightKG, RunnableArgsss<String, BigDecimal, BigDecimal> onComplete);
void onLUPrintRequest(RunnableArgs<Boolean> onComplete); void onLUPrintRequest(RunnableArgs<Boolean> onComplete);

View File

@ -1,29 +1,35 @@
package it.integry.integrywmsnative.view.dialogs.input_quantity_v2; package it.integry.integrywmsnative.view.dialogs.input_quantity_v2;
import android.content.Context; import android.content.Context;
import android.content.res.ColorStateList;
import android.os.Bundle; import android.os.Bundle;
import android.text.Html;
import android.text.InputType; import android.text.InputType;
import android.text.SpannableString;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import androidx.databinding.DataBindingUtil; import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableField; import androidx.databinding.ObservableField;
import androidx.fragment.app.DialogFragment; import androidx.fragment.app.DialogFragment;
import com.google.android.material.textfield.TextInputLayout;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Date; import java.util.Date;
import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.expansion.RunnableArgss; import it.integry.integrywmsnative.core.expansion.RunnableArgss;
import it.integry.integrywmsnative.core.model.MtbUntMis; import it.integry.integrywmsnative.core.model.MtbUntMis;
import it.integry.integrywmsnative.core.utility.UtilityObservable; import it.integry.integrywmsnative.core.utility.UtilityObservable;
import it.integry.integrywmsnative.databinding.DialogInputQuantityV2Binding; import it.integry.integrywmsnative.databinding.DialogInputQuantityV2Binding;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper;
public class DialogInputQuantityV2 extends DialogFragment implements DialogInputQuantityV2ViewModel.Listener { public class DialogInputQuantityV2 extends DialogFragment implements DialogInputQuantityV2ViewModel.Listener {
@ -38,8 +44,13 @@ public class DialogInputQuantityV2 extends DialogFragment implements DialogInput
public ObservableField<BigDecimal> currentQtaCnf = new ObservableField<>(); public ObservableField<BigDecimal> currentQtaCnf = new ObservableField<>();
public ObservableField<BigDecimal> currentQtaTot = new ObservableField<>(); public ObservableField<BigDecimal> currentQtaTot = new ObservableField<>();
public ObservableField<Boolean> enabledNumCnf = new ObservableField<>(true);
public ObservableField<Boolean> enabledQtaCnf = new ObservableField<>(true);
public ObservableField<Boolean> enabledQtaTot = new ObservableField<>(true);
public Context context; public Context context;
private DialogInputQuantityV2Binding mBindings;
private boolean mEnableDataCallback = true; private boolean mEnableDataCallback = true;
public static DialogInputQuantityV2 newInstance(@NotNull DialogInputQuantityV2DTO dialogInputQuantityV2DTO, RunnableArgss<DialogInputQuantityV2ResultDTO, Boolean> onComplete) { public static DialogInputQuantityV2 newInstance(@NotNull DialogInputQuantityV2DTO dialogInputQuantityV2DTO, RunnableArgss<DialogInputQuantityV2ResultDTO, Boolean> onComplete) {
@ -62,9 +73,9 @@ public class DialogInputQuantityV2 extends DialogFragment implements DialogInput
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
this.context = getActivity(); this.context = getActivity();
DialogInputQuantityV2Binding bindings = DataBindingUtil.inflate(inflater, R.layout.dialog_input_quantity_v2, container, false); mBindings = DataBindingUtil.inflate(inflater, R.layout.dialog_input_quantity_v2, container, false);
bindings.toolbar.setTitle("Inserimento articolo"); mBindings.toolbar.setTitle("Inserimento articolo");
this.mViewModel = new DialogInputQuantityV2ViewModel() this.mViewModel = new DialogInputQuantityV2ViewModel()
.setMtbAart(mDialogInputQuantityV2DTO.getMtbAart()) .setMtbAart(mDialogInputQuantityV2DTO.getMtbAart())
@ -81,15 +92,15 @@ public class DialogInputQuantityV2 extends DialogFragment implements DialogInput
.setPartitaMag(mDialogInputQuantityV2DTO.getPartitaMag()) .setPartitaMag(mDialogInputQuantityV2DTO.getPartitaMag())
.setDataScad(mDialogInputQuantityV2DTO.getDataScad()); .setDataScad(mDialogInputQuantityV2DTO.getDataScad());
bindings.setView(this); mBindings.setView(this);
bindings.setViewmodel(this.mViewModel); mBindings.setViewmodel(this.mViewModel);
MtbUntMis mtbUntMis = mDialogInputQuantityV2DTO.getMtbAart().getMtbUntMis() != null && mDialogInputQuantityV2DTO.getMtbAart().getMtbUntMis().size() > 0 ? mDialogInputQuantityV2DTO.getMtbAart().getMtbUntMis().get(0) : null; MtbUntMis mtbUntMis = mDialogInputQuantityV2DTO.getMtbAart().getMtbUntMis() != null && mDialogInputQuantityV2DTO.getMtbAart().getMtbUntMis().size() > 0 ? mDialogInputQuantityV2DTO.getMtbAart().getMtbUntMis().get(0) : null;
if (!(mtbUntMis != null && mtbUntMis.isFlagDig())) { if (!(mtbUntMis != null && mtbUntMis.isFlagDig())) {
bindings.inputQtaTotText.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL); mBindings.inputQtaTotText.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
} }
return bindings.getRoot(); return mBindings.getRoot();
} }
public void dismiss() { public void dismiss() {
@ -97,13 +108,17 @@ public class DialogInputQuantityV2 extends DialogFragment implements DialogInput
} }
public void save() { public void save() {
this.mOnComplete.run(this.mViewModel.getResult(), false); if (this.mViewModel.validate()) {
dismiss(); this.mOnComplete.run(this.mViewModel.getResult(), false);
dismiss();
}
} }
public void saveAndCloseLU() { public void saveAndCloseLU() {
this.mOnComplete.run(this.mViewModel.getResult(), true); if (this.mViewModel.validate()) {
dismiss(); this.mOnComplete.run(this.mViewModel.getResult(), true);
dismiss();
}
} }
@ -134,6 +149,88 @@ public class DialogInputQuantityV2 extends DialogFragment implements DialogInput
this.mViewModel.setQtaTot(value); this.mViewModel.setQtaTot(value);
} }
}); });
final ColorStateList textColorsNumCnf = this.mBindings.inputNumCnfLayout.getEditText().getTextColors();
final ColorStateList textColorsQtaCnf = this.mBindings.inputQtaCnfLayout.getEditText().getTextColors();
final ColorStateList textColorsQtaTot = this.mBindings.inputQtaTotLayout.getEditText().getTextColors();
UtilityObservable.addPropertyChanged(this.mViewModel.blockedNumCnf, (value) -> {
toggleTextInputLayoutError(textColorsNumCnf, this.mBindings.inputNumCnfLayout, value);
if (this.mViewModel.mtbAart.get().isFlagQtaCnfFissaBoolean()) {
this.enabledQtaTot.set(!value);
} else {
if (value) {
if (this.mViewModel.blockedQtaCnf.get()) {
this.enabledQtaTot.set(false);
} else if (this.mViewModel.blockedQtaTot.get()) {
this.enabledQtaCnf.set(false);
}
} else {
if (!this.enabledQtaTot.get()) {
this.enabledQtaTot.set(true);
} else if (!this.enabledQtaCnf.get()) {
this.enabledQtaCnf.set(true);
}
}
}
});
UtilityObservable.addPropertyChanged(this.mViewModel.blockedQtaCnf, (value) -> {
toggleTextInputLayoutError(textColorsQtaCnf, this.mBindings.inputQtaCnfLayout, value);
if (value) {
if (this.mViewModel.blockedNumCnf.get()) {
this.enabledQtaTot.set(false);
} else if (this.mViewModel.blockedQtaTot.get()) {
this.enabledNumCnf.set(false);
}
} else {
if (!this.enabledQtaTot.get()) {
this.enabledQtaTot.set(true);
} else if (!this.enabledNumCnf.get()) {
this.enabledNumCnf.set(true);
}
}
});
UtilityObservable.addPropertyChanged(this.mViewModel.blockedQtaTot, (value) -> {
toggleTextInputLayoutError(textColorsQtaTot, this.mBindings.inputQtaTotLayout, value);
if (this.mViewModel.mtbAart.get().isFlagQtaCnfFissaBoolean()) {
this.enabledNumCnf.set(!value);
} else {
if (value) {
if (this.mViewModel.blockedQtaCnf.get()) {
this.enabledNumCnf.set(false);
} else if (this.mViewModel.blockedNumCnf.get()) {
this.enabledQtaCnf.set(false);
}
} else {
if (!this.enabledQtaCnf.get()) {
this.enabledQtaCnf.set(true);
} else if (!this.enabledNumCnf.get()) {
this.enabledNumCnf.set(true);
}
}
}
});
}
private void toggleTextInputLayoutError(ColorStateList originalColorStateList, TextInputLayout textInputLayout, boolean isError) {
if (isError) {
textInputLayout.setErrorEnabled(true);
textInputLayout.setError(" ");
textInputLayout.setErrorIconDrawable(null);
textInputLayout.getEditText().setTextColor(ContextCompat.getColor(this.context, R.color.red_600));
textInputLayout.setHintTextAppearance(R.style.ErrorFloatingLabel);
} else {
textInputLayout.setErrorEnabled(false);
textInputLayout.setError(null);
textInputLayout.getEditText().setTextColor(originalColorStateList);
textInputLayout.setHintTextAppearance(R.style.NormalFloatingLabel);
}
} }
@Override @Override
@ -147,6 +244,13 @@ public class DialogInputQuantityV2 extends DialogFragment implements DialogInput
this.currentQtaCnf.set(this.mViewModel.getQtaCnf()); this.currentQtaCnf.set(this.mViewModel.getQtaCnf());
this.currentQtaTot.set(this.mViewModel.getQtaTot()); this.currentQtaTot.set(this.mViewModel.getQtaTot());
this.mBindings.executePendingBindings();
this.mEnableDataCallback = true; this.mEnableDataCallback = true;
} }
@Override
public void onError(Exception ex) {
DialogSimpleMessageHelper.makeErrorDialog(this.context, new SpannableString(Html.fromHtml(ex.getMessage())), null, null).show();
}
} }

View File

@ -8,11 +8,20 @@ import java.util.Date;
import it.integry.integrywmsnative.core.model.MtbAart; import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal; import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
import it.integry.integrywmsnative.core.utility.UtilityObservable; import it.integry.integrywmsnative.core.utility.UtilityObservable;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.exception.InvalidBatchLotException;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.exception.InvalidExpireDateException;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.exception.InvalidQuantityException;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.exception.OverflowQuantityException;
public class DialogInputQuantityV2ViewModel { public class DialogInputQuantityV2ViewModel {
public ObservableField<MtbAart> mtbAart = new ObservableField<>(); public ObservableField<MtbAart> mtbAart = new ObservableField<>();
public ObservableField<Boolean> blockedNumCnf = new ObservableField<>();
public ObservableField<Boolean> blockedQtaCnf = new ObservableField<>();
public ObservableField<Boolean> blockedQtaTot = new ObservableField<>();
public BigDecimal totalQtaOrd; public BigDecimal totalQtaOrd;
public BigDecimal totalNumCnfOrd; public BigDecimal totalNumCnfOrd;
public BigDecimal qtaCnfOrd; public BigDecimal qtaCnfOrd;
@ -25,6 +34,8 @@ public class DialogInputQuantityV2ViewModel {
public BigDecimal totalNumCnfAvailable; public BigDecimal totalNumCnfAvailable;
public BigDecimal qtaCnfAvailable; public BigDecimal qtaCnfAvailable;
public Boolean shouldAskDataScad;
private BigDecimal internalNumCnf; private BigDecimal internalNumCnf;
private BigDecimal internalQtaCnf; private BigDecimal internalQtaCnf;
private BigDecimal internalQtaTot; private BigDecimal internalQtaTot;
@ -53,6 +64,12 @@ public class DialogInputQuantityV2ViewModel {
this.internalQtaTot = totalQtaOrd; this.internalQtaTot = totalQtaOrd;
} }
this.shouldAskDataScad = mtbAart.get().isFlagQtaCnfFissaBoolean() && mtbAart.get().getGgScadPartita() != null && mtbAart.get().getGgScadPartita() > 0;
this.blockedNumCnf.set(false);
this.blockedQtaCnf.set(false);
this.blockedQtaTot.set(false);
this.mListener.onDataChanged(); this.mListener.onDataChanged();
} }
@ -143,52 +160,91 @@ public class DialogInputQuantityV2ViewModel {
public void setNumCnf(BigDecimal newValue) { public void setNumCnf(BigDecimal newValue) {
this.internalNumCnf = newValue; this.internalNumCnf = newValue;
if (newValue == null) return; this.blockedNumCnf.set(!(UtilityBigDecimal.equalsTo(newValue, BigDecimal.ZERO) || newValue == null));
if (UtilityBigDecimal.equalsTo(newValue, BigDecimal.ZERO) || newValue == null) return;
if (UtilityBigDecimal.greaterThan(newValue, totalNumCnfAvailable)) if (UtilityBigDecimal.greaterThan(newValue, totalNumCnfAvailable))
newValue = totalNumCnfAvailable; newValue = totalNumCnfAvailable;
this.internalQtaTot = UtilityBigDecimal.multiply(newValue, this.internalQtaCnf);
//Se è piu' grande della qta da prelevare e non posso aggiungere qta extra allora ricalcolo
if (!canOverflowOrderQuantity)
newValue = UtilityBigDecimal.getLowerBetween(newValue, totalNumCnfOrd);
if (!this.blockedQtaTot.get() && this.internalQtaCnf != null)
this.internalQtaTot = UtilityBigDecimal.multiply(newValue, this.internalQtaCnf);
else if (!this.blockedQtaCnf.get() && !this.mtbAart.get().isFlagQtaCnfFissaBoolean() && this.internalQtaTot != null)
this.internalQtaCnf = UtilityBigDecimal.divide(newValue, internalQtaTot);
this.mListener.onDataChanged(); this.mListener.onDataChanged();
} }
public void setQtaCnf(BigDecimal newValue) { public void setQtaCnf(BigDecimal newValue) {
this.internalQtaCnf = newValue; this.internalQtaCnf = newValue;
String a = ""; this.blockedQtaCnf.set(!(UtilityBigDecimal.equalsTo(newValue, BigDecimal.ZERO) || newValue == null));
if (UtilityBigDecimal.equalsTo(newValue, BigDecimal.ZERO) || newValue == null) return;
if (!this.blockedQtaTot.get() && this.internalNumCnf != null)
this.internalQtaTot = UtilityBigDecimal.multiply(newValue, this.internalNumCnf);
else if (!this.blockedNumCnf.get() && this.internalQtaTot != null)
this.internalNumCnf = UtilityBigDecimal.divide(internalQtaTot, newValue);
this.mListener.onDataChanged(); this.mListener.onDataChanged();
} }
public void setQtaTot(BigDecimal newValue) { public void setQtaTot(BigDecimal newValue) {
this.internalQtaTot = newValue; this.internalQtaTot = newValue;
if (newValue == null) return; this.blockedQtaTot.set(!(UtilityBigDecimal.equalsTo(newValue, BigDecimal.ZERO) || newValue == null));
if (UtilityBigDecimal.equalsTo(newValue, BigDecimal.ZERO) || newValue == null) return;
newValue = UtilityBigDecimal.getLowerBetween(newValue, totalQtaAvailable); newValue = UtilityBigDecimal.getLowerBetween(newValue, totalQtaAvailable);
//Se è piu' grande della qta da prelevare e non posso aggiungere qta extra allora ricalcolo //Se è piu' grande della qta da prelevare e non posso aggiungere qta extra allora ricalcolo
if (UtilityBigDecimal.greaterThan(newValue, totalQtaOrd) && !canOverflowOrderQuantity) { if (!canOverflowOrderQuantity) {
newValue = UtilityBigDecimal.getLowerBetween(newValue, totalQtaOrd);
if (mtbAart.get().isFlagQtaCnfFissaBoolean()) {
//Ricalcolo num cnf
this.internalNumCnf = UtilityBigDecimal.divide(totalQtaOrd, internalQtaCnf);
} else {
//Ricalcolo qta cnf
this.internalQtaCnf = UtilityBigDecimal.divide(totalQtaOrd, internalNumCnf);
}
} else {
if (mtbAart.get().isFlagQtaCnfFissaBoolean()) {
//Ricalcolo num cnf
this.internalNumCnf = UtilityBigDecimal.divide(newValue, internalQtaCnf);
} else {
//Ricalcolo qta cnf
this.internalQtaCnf = UtilityBigDecimal.divide(newValue, internalNumCnf);
}
} }
if (!this.blockedQtaCnf.get() && !this.mtbAart.get().isFlagQtaCnfFissaBoolean() && this.internalNumCnf != null)
this.internalQtaCnf = UtilityBigDecimal.divide(newValue, internalNumCnf);
else if (!this.blockedNumCnf.get() && this.internalQtaCnf != null)
this.internalNumCnf = UtilityBigDecimal.divide(newValue, internalQtaCnf);
this.mListener.onDataChanged(); this.mListener.onDataChanged();
} }
public boolean validate() {
if (mtbAart.get().isFlagTracciabilitaBoolean() && UtilityString.isNullOrEmpty(internalPartitaMag)) {
this.mListener.onError(new InvalidBatchLotException());
return false;
} else if (this.shouldAskDataScad && UtilityString.isNullOrEmpty(internalPartitaMag)) {
this.mListener.onError(new InvalidBatchLotException());
return false;
} else if (this.shouldAskDataScad && this.internalDataScad == null) {
this.mListener.onError(new InvalidExpireDateException());
return false;
} else if (!this.canOverflowOrderQuantity && UtilityBigDecimal.greaterThan(this.internalQtaTot, this.totalQtaOrd)) {
this.mListener.onError(new OverflowQuantityException());
return false;
} else if (UtilityBigDecimal.lowerThan(this.internalQtaCnf, BigDecimal.ZERO) || UtilityBigDecimal.lowerThan(this.internalNumCnf, BigDecimal.ZERO) || UtilityBigDecimal.lowerThan(this.internalQtaTot, BigDecimal.ZERO)) {
this.mListener.onError(new InvalidQuantityException());
return false;
}
if (!UtilityString.isNullOrEmpty(this.internalPartitaMag))
this.internalPartitaMag = this.internalPartitaMag.toUpperCase();
return true;
}
public DialogInputQuantityV2ResultDTO getResult() { public DialogInputQuantityV2ResultDTO getResult() {
return new DialogInputQuantityV2ResultDTO() return new DialogInputQuantityV2ResultDTO()
.setPartitaMag(this.internalPartitaMag) .setPartitaMag(this.internalPartitaMag)
@ -205,5 +261,7 @@ public class DialogInputQuantityV2ViewModel {
public interface Listener { public interface Listener {
void onDataChanged(); void onDataChanged();
void onError(Exception ex);
} }
} }

View File

@ -0,0 +1,10 @@
package it.integry.integrywmsnative.view.dialogs.input_quantity_v2.exception;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.utility.UtilityResources;
public class InvalidBatchLotException extends Exception {
public InvalidBatchLotException() {
super(UtilityResources.getString(R.string.batch_lot_error_message));
}
}

View File

@ -0,0 +1,10 @@
package it.integry.integrywmsnative.view.dialogs.input_quantity_v2.exception;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.utility.UtilityResources;
public class InvalidExpireDateException extends Exception {
public InvalidExpireDateException() {
super(UtilityResources.getString(R.string.expire_date_error_message));
}
}

View File

@ -0,0 +1,12 @@
package it.integry.integrywmsnative.view.dialogs.input_quantity_v2.exception;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.utility.UtilityResources;
public class InvalidQuantityException extends Exception {
public InvalidQuantityException() {
super(UtilityResources.getString(R.string.wrong_quantity_input_message));
}
}

View File

@ -0,0 +1,10 @@
package it.integry.integrywmsnative.view.dialogs.input_quantity_v2.exception;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.utility.UtilityResources;
public class OverflowQuantityException extends Exception {
public OverflowQuantityException() {
super(UtilityResources.getString(R.string.quantity_overflow_error_message));
}
}

View File

@ -380,7 +380,7 @@
style="@style/TextInputLayout.OutlinePrimary" style="@style/TextInputLayout.OutlinePrimary"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="@{viewmodel.mtbAart.flagTracciabilitaBoolean &amp;&amp; viewmodel.mtbAart.ggScadPartita != null &amp;&amp; viewmodel.mtbAart.ggScadPartita > 0 ? 1f : 2f}" android:layout_weight="@{viewmodel.shouldAskDataScad ? 1f : 2f}"
android:paddingEnd="4dp" android:paddingEnd="4dp"
tools:layout_weight="1"> tools:layout_weight="1">
@ -400,7 +400,7 @@
style="@style/TextInputLayout.OutlinePrimary" style="@style/TextInputLayout.OutlinePrimary"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:visibility="@{viewmodel.mtbAart.flagTracciabilitaBoolean &amp;&amp; viewmodel.mtbAart.ggScadPartita != null &amp;&amp; viewmodel.mtbAart.ggScadPartita > 0 ? View.VISIBLE : View.GONE}" android:visibility="@{viewmodel.shouldAskDataScad ? View.VISIBLE : View.GONE}"
android:layout_weight="1"> android:layout_weight="1">
<com.google.android.material.textfield.TextInputEditText <com.google.android.material.textfield.TextInputEditText
@ -432,6 +432,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="@{!viewmodel.mtbAart.flagQtaCnfFissaBoolean ? 1f : 1.5f}" android:layout_weight="@{!viewmodel.mtbAart.flagQtaCnfFissaBoolean ? 1f : 1.5f}"
android:paddingEnd="4dp" android:paddingEnd="4dp"
android:enabled="@{view.enabledNumCnf}"
tools:layout_weight="1"> tools:layout_weight="1">
<com.google.android.material.textfield.TextInputEditText <com.google.android.material.textfield.TextInputEditText
@ -452,6 +453,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" android:layout_weight="1"
android:paddingEnd="4dp" android:paddingEnd="4dp"
android:enabled="@{view.enabledQtaCnf}"
android:visibility="@{!viewmodel.mtbAart.flagQtaCnfFissaBoolean ? View.VISIBLE : View.GONE}"> android:visibility="@{!viewmodel.mtbAart.flagQtaCnfFissaBoolean ? View.VISIBLE : View.GONE}">
<com.google.android.material.textfield.TextInputEditText <com.google.android.material.textfield.TextInputEditText
@ -471,6 +473,7 @@
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="@{!viewmodel.mtbAart.flagQtaCnfFissaBoolean ? 1f : 1.5f}" android:layout_weight="@{!viewmodel.mtbAart.flagQtaCnfFissaBoolean ? 1f : 1.5f}"
android:enabled="@{view.enabledQtaTot}"
tools:layout_weight="1"> tools:layout_weight="1">
<com.google.android.material.textfield.TextInputEditText <com.google.android.material.textfield.TextInputEditText

View File

@ -124,14 +124,22 @@
</style> </style>
<style name="ErrorFloatingLabel" parent="@android:style/TextAppearance"> <style name="OrangeFloatingLabel" parent="@android:style/TextAppearance">
<item name="colorAccent">@color/orange_600</item>
<item name="android:textColor">@color/orange_600</item>
<item name="android:textSize">12sp</item>
<item name="colorControlNormal">@color/orange_600</item>
<item name="colorControlActivated">@color/orange_600</item>
<item name="colorControlHighlight">@color/orange_600</item>
</style>
<style name="ErrorFloatingLabel" parent="@android:style/TextAppearance">
<item name="android:textColor">@color/red_500</item> <item name="android:textColor">@color/red_500</item>
<item name="android:textSize">12sp</item> <item name="android:textSize">12sp</item>
<item name="colorControlNormal">@color/red_500</item> <item name="colorControlNormal">@color/red_500</item>
<item name="colorControlActivated">@color/red_500</item> <item name="colorControlActivated">@color/red_500</item>
<item name="colorControlHighlight">@color/red_500</item> <item name="colorControlHighlight">@color/red_500</item>
</style> </style>
<style name="NormalFloatingLabel" parent="@android:style/TextAppearance"> <style name="NormalFloatingLabel" parent="@android:style/TextAppearance">
<item name="android:textColor">@color/colorPrimary</item> <item name="android:textColor">@color/colorPrimary</item>
<item name="android:textSize">12sp</item> <item name="android:textSize">12sp</item>
<item name="colorControlNormal">@color/colorPrimary</item> <item name="colorControlNormal">@color/colorPrimary</item>