Aggiunta lettura barcode in DialogInputQuantity

This commit is contained in:
Giuseppe Scorrano 2018-11-27 15:41:53 +01:00
parent 218a86cdb1
commit f41e56d0df
2 changed files with 124 additions and 10 deletions

View File

@ -308,11 +308,10 @@ public class AccettazioneOnOrdineAccettazioneInevasoViewModel implements IOnColl
DialogSimpleMessageHelper.makeWarningDialog(mActivity,
new SpannableString(mActivity.getResources().getText(R.string.no_result_from_barcode)),
null, null, null)
null, null)
.show();
}
}, ex -> {
BarcodeManager.enable();
UtilityExceptions.defaultException(mActivity, ex, progressDialog);

View File

@ -2,7 +2,9 @@ package it.integry.integrywmsnative.view.dialogs.input_quantity;
import android.app.AlertDialog;
import android.app.DatePickerDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.res.ColorStateList;
import android.databinding.DataBindingUtil;
import android.databinding.Observable;
@ -27,10 +29,22 @@ 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.BarcodeRESTConsumer;
import it.integry.integrywmsnative.core.REST.consumers.ISingleValueOperationCallback;
import it.integry.integrywmsnative.core.REST.model.Ean13PesoModel;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.utility.UtilityBarcode;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityLogger;
import it.integry.integrywmsnative.core.utility.UtilityProgress;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.view.dialogs.DialogSimpleMessageHelper;
import it.integry.plugins.barcode_base_library.model.BarcodeScanDTO;
import it.integry.plugins.barcode_base_library.model.BarcodeType;
public class DialogInputQuantity {
@ -182,8 +196,14 @@ public class DialogInputQuantity {
private static String scadenzaString = "Scadenza";
private static AlertDialog currentAlert;
private static Context currentContext;
private static MtbAart currentMtbAart;
private static QuantityDTO currentQuantityDto;
public static AlertDialog makeBase(final Context context, final DTO dto, boolean canOverflowQuantity, final ISingleValueOperationCallback<QuantityDTO> dialogCallback) {
currentContext = context;
currentMtbAart = dto.getMtbAart();
LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE );
@ -202,15 +222,15 @@ public class DialogInputQuantity {
originalColorStateList = txlInputNumDiCnf.getEditText().getTextColors();
final QuantityDTO quantityDTO = new QuantityDTO();
quantityDTO.canOverflowQuantity = canOverflowQuantity;
currentQuantityDto = new QuantityDTO();
currentQuantityDto.canOverflowQuantity = canOverflowQuantity;
setupQuantities(dto, quantityDTO);
setupQuantities(dto, currentQuantityDto);
setupQuantityListener(quantityDTO, txlInputNumDiCnf, txlInputQtaPerCnf, txlInputQtaTot);
setupQuantityListener(currentQuantityDto, txlInputNumDiCnf, txlInputQtaPerCnf, txlInputQtaTot);
contentView.setVariable(BR.viewmodel, dto);
contentView.setVariable(BR.quantityViewModel, quantityDTO);
contentView.setVariable(BR.quantityViewModel, currentQuantityDto);
final AlertDialog.Builder alertDialog = new AlertDialog.Builder(context)
.setView(contentView.getRoot())
@ -225,7 +245,7 @@ public class DialogInputQuantity {
final Handler handler = new Handler();
handler.postDelayed(() -> {
EditText editTextToFocus;
if(quantityDTO.canPartitaMagBeChanged.get()) {
if(currentQuantityDto.canPartitaMagBeChanged.get()) {
editTextToFocus = txlInputBatchLot.getEditText();
} else {
editTextToFocus = txlInputNumDiCnf.getEditText();
@ -240,11 +260,13 @@ public class DialogInputQuantity {
Button positiveButton = currentAlert.getButton(AlertDialog.BUTTON_POSITIVE);
positiveButton.setOnClickListener(view -> onConfirm(context, quantityDTO, dialogCallback));
positiveButton.setOnClickListener(view -> onConfirm(context, currentQuantityDto, dialogCallback));
});
initDatePicker(context, quantityDTO, contentView.getRoot().findViewById(R.id.input_data_scad));
initDatePicker(context, currentQuantityDto, contentView.getRoot().findViewById(R.id.input_data_scad));
setupBarcode(context);
return currentAlert;
@ -306,6 +328,99 @@ public class DialogInputQuantity {
}
private static void setupBarcode(Context context) {
int barcodeIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessfull(onScanSuccessfull)
.setOnScanFailed(ex -> UtilityExceptions.defaultException(context, ex)));
currentAlert.setOnDismissListener(dialog -> {
BarcodeManager.removeCallback(barcodeIstanceID);
});
}
private static RunnableArgs<BarcodeScanDTO> onScanSuccessfull = data -> {
BarcodeManager.disable();
if(UtilityBarcode.isEanPeso(data)){
try {
Ean13PesoModel ean13PesoModel = Ean13PesoModel.fromBarcode(data.getStringValue());
if(ean13PesoModel.getPrecode().contains(currentMtbAart.getBarCode())) {
currentQuantityDto.numCnf.set(1f);
currentQuantityDto.qtaCnf.set(ean13PesoModel.getPeso());
currentQuantityDto.qtaTot.set(ean13PesoModel.getPeso());
BarcodeManager.enable();
} else {
BarcodeManager.enable();
}
} catch (Exception e) {
UtilityLogger.errorMe(e);
BarcodeManager.enable();
}
} else if(data.getType() == BarcodeType.EAN128){
final ProgressDialog progressDialog = UtilityProgress.createDefaultProgressDialog(currentContext);
BarcodeRESTConsumer.decodeEan128(data, ean128Model -> {
progressDialog.dismiss();
BarcodeManager.enable();
if(ean128Model != null){
if(!UtilityString.isNullOrEmpty(ean128Model.BatchLot)) {
currentQuantityDto.batchLot.set(ean128Model.BatchLot);
}
try {
if(!UtilityString.isNullOrEmpty(ean128Model.BestBefore)){
currentQuantityDto.expireDate = UtilityDate.recognizeDate(ean128Model.BestBefore);
} else if(!UtilityString.isNullOrEmpty(ean128Model.Expiry)) {
currentQuantityDto.expireDate = UtilityDate.recognizeDate(ean128Model.Expiry);
}
if(currentQuantityDto.expireDate != null) {
currentQuantityDto.expireDateString.set(UtilityDate.formatDate(currentQuantityDto.expireDate, UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN));
}
} catch (Exception e) {
UtilityLogger.errorMe(e);
}
if(ean128Model.Count != null && ean128Model.Count > 0) {
currentQuantityDto.numCnf.set((float) ean128Model.Count);
}
if (ean128Model.NetWeightKg != null && ean128Model.NetWeightKg > 0) {
currentQuantityDto.qtaTot.set(ean128Model.NetWeightKg);
}
if(currentQuantityDto.qtaTot.get() > 0 && currentQuantityDto.numCnf.get() > 0) {
currentQuantityDto.qtaCnf.set(currentQuantityDto.qtaTot.get() / currentQuantityDto.numCnf.get());
}
}
}, ex -> {
UtilityExceptions.defaultException(currentContext, ex, progressDialog);
BarcodeManager.enable();
});
} else {
BarcodeManager.enable();
}
};
private static void setupQuantityListener(final QuantityDTO quantityDTO, final TextInputLayout txlInputNumDiCnf, final TextInputLayout txlInputQtaPerCnf, final TextInputLayout txlInputQtaTot) {
quantityDTO.numCnf.addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() {