Migliorata gestione errori DialogInputQuantity

This commit is contained in:
Giuseppe Scorrano 2018-11-19 11:34:02 +01:00
parent 26361912f4
commit ab183893b0
6 changed files with 88 additions and 34 deletions

View File

@ -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();
}
}

View File

@ -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<QuantityDTO> dialogCallback) {
private static AlertDialog currentAlert;
public static AlertDialog makeBase(final Context context, OrdineAccettazioneDTO.Riga articoloItem, final float qtaEvasa, boolean canOverflowQuantity, final ISingleValueOperationCallback<QuantityDTO> 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<QuantityDTO> 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();
}
}

View File

@ -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);

View File

@ -168,6 +168,7 @@
app:layout_constraintGuide_percent="0.50"/>
<android.support.design.widget.TextInputLayout
android:id="@+id/input_partita_mag"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:enabled="@{quantityViewModel.canPartitaMagBeChanged}"
@ -177,7 +178,6 @@
android:nextFocusRight="@+id/input_data_scad">
<android.support.design.widget.TextInputEditText
android:id="@+id/input_partita_mag"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textNoSuggestions"

View File

@ -93,7 +93,10 @@
<string name="data_saved">Salvataggio completato</string>
<string name="alert_print_completed_message">Stampa completata</string>
<string name="wrong_quantity_input"><![CDATA[La quantità inserita non è valida]]></string>
<string name="wrong_quantity_input_message"><![CDATA[La quantità inserita non è valida]]></string>
<string name="quantity_overflow_error_message"><![CDATA[La <b>quantità</b> inserita supera la quantità massima disponibile]]></string>
<string name="expire_date_error_message"><![CDATA[La <b>data di scadenza</b> inserita non è valida]]></string>
<string name="batch_lot_error_message"><![CDATA[Il <b>lotto</b> inserito non è valido]]></string>
<string name="settings_category">Impostazioni</string>
<string name="check_box_preference_title">Check box</string>
<string name="check_box_preference_summary">This is a regular preference</string>

View File

@ -99,7 +99,10 @@
<string name="data_saved">Data saved</string>
<string name="alert_print_completed_message">Printing job completed</string>
<string name="wrong_quantity_input">The quantity entered is not valid, please check it</string>
<string name="wrong_quantity_input_message"><![CDATA[The inserted <b>amount</b> is not valid, please check it]]></string>
<string name="quantity_overflow_error_message"><![CDATA[The inserted <b>amount</b> exceeds the maximum amount available, please check it]]></string>
<string name="expire_date_error_message"><![CDATA[The inserted <b>expire date</b> is not valid, please check it.]]></string>
<string name="batch_lot_error_message"><![CDATA[The inserted <b>batch lot</b> is not valid, please check it.]]></string>
<string name="settings_category">Settings</string>
<string name="check_box_preference_title">Check box</string>
<string name="check_box_preference_summary">This is a regular preference</string>