diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/viewmodel/AccettazioneOnOrdineAccettazioneInevasoViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/viewmodel/AccettazioneOnOrdineAccettazioneInevasoViewModel.java index 7cc7e5b9..68fa4bb8 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/viewmodel/AccettazioneOnOrdineAccettazioneInevasoViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/viewmodel/AccettazioneOnOrdineAccettazioneInevasoViewModel.java @@ -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); 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 1eca644b..9cb05cd9 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 @@ -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 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 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() {