From ab183893b0bc90e1d04aa71acb2090a8855b8a24 Mon Sep 17 00:00:00 2001 From: Giuseppe Scorrano Date: Mon, 19 Nov 2018 11:34:02 +0100 Subject: [PATCH] Migliorata gestione errori DialogInputQuantity --- .../AccettazioneOnOrdineInevasoViewModel.java | 2 +- .../input_quantity/DialogInputQuantity.java | 106 +++++++++++++----- .../dialogs/input_quantity/QuantityDTO.java | 2 + .../layout/dialog_input_quantity_articolo.xml | 2 +- app/src/main/res/values-it/strings.xml | 5 +- app/src/main/res/values/strings.xml | 5 +- 6 files changed, 88 insertions(+), 34 deletions(-) diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/viewmodel/AccettazioneOnOrdineInevasoViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/viewmodel/AccettazioneOnOrdineInevasoViewModel.java index ee42445b..7d826281 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/viewmodel/AccettazioneOnOrdineInevasoViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/viewmodel/AccettazioneOnOrdineInevasoViewModel.java @@ -463,7 +463,7 @@ public class AccettazioneOnOrdineInevasoViewModel implements IOnColloClosedCallb float qtaEvasa = item.qtaRiservate + qtaEvasaInMtbColr; - DialogInputQuantity.makeBase(mActivity, item, qtaEvasa, value -> onOrdineRowDispatched(item, value)).show(); + DialogInputQuantity.makeBase(mActivity, item, qtaEvasa, true, value -> onOrdineRowDispatched(item, value)).show(); } } diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity/DialogInputQuantity.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity/DialogInputQuantity.java index fcaf5719..e3182466 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity/DialogInputQuantity.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity/DialogInputQuantity.java @@ -3,42 +3,32 @@ package it.integry.integrywmsnative.view.dialogs.input_quantity; import android.app.AlertDialog; import android.app.DatePickerDialog; import android.content.Context; -import android.content.DialogInterface; import android.content.res.ColorStateList; import android.databinding.DataBindingUtil; import android.databinding.Observable; import android.databinding.ViewDataBinding; -import android.graphics.Color; import android.os.Handler; -import android.os.SystemClock; -import android.support.design.widget.TextInputEditText; import android.support.design.widget.TextInputLayout; import android.support.v4.content.ContextCompat; import android.support.v7.widget.AppCompatTextView; +import android.text.Html; import android.text.SpannableString; import android.util.Log; import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.view.WindowManager; import android.view.inputmethod.InputMethodManager; import android.widget.Button; -import android.widget.DatePicker; +import android.widget.EditText; -import java.text.SimpleDateFormat; import java.util.Calendar; -import java.util.Date; import java.util.GregorianCalendar; import it.integry.integrywmsnative.BR; import it.integry.integrywmsnative.MainApplication; import it.integry.integrywmsnative.R; -import it.integry.integrywmsnative.core.REST.consumers.ISimpleOperationCallback; import it.integry.integrywmsnative.core.REST.consumers.ISingleValueOperationCallback; import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneDTO; import it.integry.integrywmsnative.view.dialogs.DialogSimpleMessageHelper; -import it.integry.integrywmsnative.view.dialogs.IButtonDialogAction; public class DialogInputQuantity { @@ -46,12 +36,16 @@ public class DialogInputQuantity { private static String scadenzaString = "Scadenza"; - public static AlertDialog makeBase(final Context context, OrdineAccettazioneDTO.Riga articoloItem, final float qtaEvasa, final ISingleValueOperationCallback dialogCallback) { + private static AlertDialog currentAlert; + + public static AlertDialog makeBase(final Context context, OrdineAccettazioneDTO.Riga articoloItem, final float qtaEvasa, boolean canOverflowQuantity, final ISingleValueOperationCallback dialogCallback) { LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE ); ViewDataBinding contentView = DataBindingUtil.inflate(inflater, R.layout.dialog_input_quantity_articolo, null, false); + final TextInputLayout txlInputBatchLot = contentView.getRoot().findViewById(R.id.input_partita_mag); + final TextInputLayout txlInputNumDiCnf = contentView.getRoot().findViewById(R.id.input_num_cnf); final TextInputLayout txlInputQtaPerCnf = contentView.getRoot().findViewById(R.id.input_qta_cnf); final TextInputLayout txlInputQtaTot = contentView.getRoot().findViewById(R.id.input_qta_tot); @@ -64,6 +58,7 @@ public class DialogInputQuantity { originalColorStateList = txlInputNumDiCnf.getEditText().getTextColors(); final QuantityDTO quantityDTO = new QuantityDTO(); + quantityDTO.canOverflowQuantity = canOverflowQuantity; setupQuantities(articoloItem, quantityDTO, qtaEvasa); @@ -77,35 +72,36 @@ public class DialogInputQuantity { .setPositiveButton(context.getText(R.string.confirm), null) .setNegativeButton(context.getText(R.string.abort), null); - final AlertDialog alert = alertDialog.create(); - alert.setCanceledOnTouchOutside(false); + currentAlert = alertDialog.create(); + currentAlert.setCanceledOnTouchOutside(false); - alert.setOnShowListener(dialogInterface -> { + currentAlert.setOnShowListener(dialogInterface -> { final Handler handler = new Handler(); handler.postDelayed(() -> { - txlInputNumDiCnf.getEditText().requestFocus(); + EditText editTextToFocus; + if(quantityDTO.canPartitaMagBeChanged.get()) { + editTextToFocus = txlInputBatchLot.getEditText(); + } else { + editTextToFocus = txlInputNumDiCnf.getEditText(); + } + + + editTextToFocus.requestFocus(); InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); - imm.showSoftInput(txlInputNumDiCnf.getEditText(), InputMethodManager.SHOW_IMPLICIT); + imm.showSoftInput(editTextToFocus, InputMethodManager.SHOW_IMPLICIT); }, 100); - Button positiveButton = alert.getButton(AlertDialog.BUTTON_POSITIVE); + Button positiveButton = currentAlert.getButton(AlertDialog.BUTTON_POSITIVE); - positiveButton.setOnClickListener(view -> { - if(quantityDTO.qtaCnf.get() <= 0 || quantityDTO.numCnf.get() <= 0 || quantityDTO.qtaTot.get() <= 0) { - showQuantityErrorDialog(context); - } else { - dialogCallback.onResult(quantityDTO); - alert.dismiss(); - } - }); + positiveButton.setOnClickListener(view -> onConfirm(context, quantityDTO, dialogCallback)); }); initDatePicker(context, quantityDTO, contentView.getRoot().findViewById(R.id.input_data_scad)); - return alert; + return currentAlert; } @@ -301,11 +297,61 @@ public class DialogInputQuantity { } + private static void onConfirm(Context context, QuantityDTO quantityDTO, ISingleValueOperationCallback dialogCallback){ + if(quantityDTO.shouldAskDataScad.get() && (quantityDTO.batchLot == null || quantityDTO.batchLot.get().trim().length() == 0)){ + + showBatchLotErrorPrompt(context); + + } else if(quantityDTO.shouldAskDataScad.get() && quantityDTO.expireDate == null){ + + showExpireDateErrorPrompt(context); + + } else if(!quantityDTO.canOverflowQuantity && quantityDTO.qtaTot.get() > quantityDTO.maxQta) { + + showQuantityOverflowErrorPrompt(context); + + } else if(quantityDTO.qtaCnf.get() <= 0 || quantityDTO.numCnf.get() <= 0 || quantityDTO.qtaTot.get() <= 0) { + + showQuantityErrorDialog(context); + + } else { + + dialogCallback.onResult(quantityDTO); + currentAlert.dismiss(); + + } + } + + private static void showQuantityErrorDialog(Context mContext){ - String errorMessage = mContext.getText(R.string.wrong_quantity_input).toString(); + String errorMessage = mContext.getText(R.string.wrong_quantity_input_message).toString(); - DialogSimpleMessageHelper.makeErrorDialog(mContext, new SpannableString(errorMessage), null, null).show(); + DialogSimpleMessageHelper.makeErrorDialog(mContext, new SpannableString(Html.fromHtml(errorMessage)), null, null).show(); + } + + + private static void showQuantityOverflowErrorPrompt(Context mContext){ + + String errorMessage = mContext.getText(R.string.quantity_overflow_error_message).toString(); + + DialogSimpleMessageHelper.makeErrorDialog(mContext, new SpannableString(Html.fromHtml(errorMessage)), null, null).show(); + } + + + private static void showExpireDateErrorPrompt(Context mContext){ + + String errorMessage = mContext.getText(R.string.expire_date_error_message).toString(); + + DialogSimpleMessageHelper.makeErrorDialog(mContext, new SpannableString(Html.fromHtml(errorMessage)), null, null).show(); + } + + + private static void showBatchLotErrorPrompt(Context mContext){ + + String errorMessage = mContext.getText(R.string.batch_lot_error_message).toString(); + + DialogSimpleMessageHelper.makeErrorDialog(mContext, new SpannableString(Html.fromHtml(errorMessage)), null, null).show(); } } diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity/QuantityDTO.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity/QuantityDTO.java index ef1aa7a4..a2c1b2f6 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity/QuantityDTO.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity/QuantityDTO.java @@ -34,6 +34,8 @@ public class QuantityDTO { public boolean numCnfNotificationEnabled = true; public boolean qtaCnfNotificationEnabled = true; public boolean qtaTotNotificationEnabled = true; + public boolean canOverflowQuantity = false; + public Float maxQta = 0f; public BindableBoolean canPartitaMagBeChanged = new BindableBoolean(true); diff --git a/app/src/main/res/layout/dialog_input_quantity_articolo.xml b/app/src/main/res/layout/dialog_input_quantity_articolo.xml index a78c8c3d..6b312cf8 100644 --- a/app/src/main/res/layout/dialog_input_quantity_articolo.xml +++ b/app/src/main/res/layout/dialog_input_quantity_articolo.xml @@ -168,6 +168,7 @@ app:layout_constraintGuide_percent="0.50"/> Salvataggio completato Stampa completata - + + quantità inserita supera la quantità massima disponibile]]> + data di scadenza inserita non è valida]]> + lotto inserito non è valido]]> Impostazioni Check box This is a regular preference diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5f9167db..eb2f425b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -99,7 +99,10 @@ Data saved Printing job completed - The quantity entered is not valid, please check it + amount is not valid, please check it]]> + amount exceeds the maximum amount available, please check it]]> + expire date is not valid, please check it.]]> + batch lot is not valid, please check it.]]> Settings Check box This is a regular preference