From 99aac144f5d74c00b1a020c8020553a5d1c7e58f Mon Sep 17 00:00:00 2001 From: GiuseppeS Date: Mon, 8 Feb 2021 17:15:37 +0100 Subject: [PATCH 1/2] Completato picking Extra-Items da altre UL. --- .../MainApplicationComponent.java | 6 +- .../core/expansion/BaseDialogFragment.java | 37 +++ .../core/expansion/RunnableArgssss.java | 6 + .../gest/spedizione/SpedizioneActivity.java | 12 +- .../gest/spedizione/SpedizioneViewModel.java | 58 ++++- .../DialogChooseArtFromListaMtbColr.java | 80 +++++++ ...ialogChooseArtFromListaMtbColrAdapter.java | 78 +++++++ .../DialogInputQuantityV2.java | 6 +- .../view/dialogs/scan_art/DialogScanArt.java | 218 ++++++++---------- .../scan_art/DialogScanArtComponent.java | 15 ++ .../dialogs/scan_art/DialogScanArtModule.java | 17 ++ .../scan_art/DialogScanArtViewModel.java | 144 ++++++++++++ 12 files changed, 541 insertions(+), 136 deletions(-) create mode 100644 app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseDialogFragment.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/core/expansion/RunnableArgssss.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_mtb_colr/choose_art_from_lista_arts/DialogChooseArtFromListaMtbColr.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_mtb_colr/choose_art_from_lista_arts/DialogChooseArtFromListaMtbColrAdapter.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_art/DialogScanArtComponent.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_art/DialogScanArtModule.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_art/DialogScanArtViewModel.java diff --git a/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java b/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java index f8ab4e23..e5dbb0ec 100644 --- a/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java +++ b/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java @@ -25,6 +25,8 @@ import it.integry.integrywmsnative.gest.spedizione.SpedizioneComponent; import it.integry.integrywmsnative.gest.spedizione.SpedizioneModule; import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2Component; import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2Module; +import it.integry.integrywmsnative.view.dialogs.scan_art.DialogScanArtComponent; +import it.integry.integrywmsnative.view.dialogs.scan_art.DialogScanArtModule; // Definition of the Application graph @Singleton @@ -41,7 +43,8 @@ import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQua PickingResiModule.class, ProdPosizionamentoDaOrdModule.class, OrdiniUscitaElencoModule.class, - DialogInputQuantityV2Module.class}) + DialogInputQuantityV2Module.class, + DialogScanArtModule.class}) public interface MainApplicationComponent { MainActivityComponent.Factory mainActivityComponent(); @@ -55,6 +58,7 @@ public interface MainApplicationComponent { ProdPosizionamentoDaOrdComponent.Factory prodPosizionamentoDaOrdComponent(); OrdiniUscitaElencoComponent.Factory prodOrdineLavorazioneElencoComponent(); DialogInputQuantityV2Component.Factory dialogInputQuantityV2Component(); + DialogScanArtComponent.Factory dialogScanArtComponent(); diff --git a/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseDialogFragment.java b/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseDialogFragment.java new file mode 100644 index 00000000..457c1618 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseDialogFragment.java @@ -0,0 +1,37 @@ +package it.integry.integrywmsnative.core.expansion; + +import android.view.KeyEvent; + +import androidx.fragment.app.DialogFragment; + +import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; + +public class BaseDialogFragment extends DialogFragment { + + private boolean mBarcodeListener = false; + + public BaseDialogFragment() { + super(); + if (BarcodeManager.isEnabled() && BarcodeManager.isKeyboardEmulator()) { + getDialog().setOnKeyListener((dialog, keyCode, event) -> { + if (mBarcodeListener && (event.getAction() == KeyEvent.ACTION_DOWN || event.getAction() == KeyEvent.ACTION_MULTIPLE) && !isControlKey(event)) { + return BarcodeManager.onKeyDown(event.getKeyCode(), event); + } + return false; + }); + } + } + + private boolean isControlKey(KeyEvent keyEvent) { + int keyCode = keyEvent.getKeyCode(); + return ( + keyCode == KeyEvent.KEYCODE_BACK || + keyCode == KeyEvent.KEYCODE_SHIFT_LEFT || + keyCode == KeyEvent.KEYCODE_DEL + ); + } + + public void setBarcodeListener(boolean listen) { + this.mBarcodeListener = listen; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/expansion/RunnableArgssss.java b/app/src/main/java/it/integry/integrywmsnative/core/expansion/RunnableArgssss.java new file mode 100644 index 00000000..bfc8d071 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/expansion/RunnableArgssss.java @@ -0,0 +1,6 @@ +package it.integry.integrywmsnative.core.expansion; + +public interface RunnableArgssss { + + void run(S data1, T data2, U data3, V data4); +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneActivity.java index 023f5822..0ab1483a 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneActivity.java @@ -586,11 +586,13 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo }; public void addExtraItem() { - DialogScanArt.make(this, (status, mtbAart, ean128Model) -> { - if(status == DialogConsts.Results.YES) { - this.mViewmodel.dispatchExtraItem(mtbAart, ean128Model); - } - }).show(); + DialogScanArt + .newInstance((status, mtbAart, ean128Model, mtbColr) -> { + if(status == DialogConsts.Results.YES) { + this.mViewmodel.dispatchExtraItem(mtbAart, ean128Model, mtbColr); + } + }) + .show(getSupportFragmentManager(), "tag"); } public void startManualSearch() { diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneViewModel.java index 0e07871e..ba8484e4 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneViewModel.java @@ -918,7 +918,7 @@ public class SpedizioneViewModel { } - public void dispatchExtraItem(MtbAart mtbAart, Ean128Model ean128Model) { + public void dispatchExtraItem(MtbAart mtbAart, Ean128Model ean128Model, MtbColr mtbColrToUse) { PickingObjectDTO pickingObjectDTO = new PickingObjectDTO() .setMtbAart(mtbAart) @@ -928,6 +928,10 @@ public class SpedizioneViewModel { BigDecimal qtaColDaPrelevare = null; BigDecimal qtaCnfDaPrelevare = null; + BigDecimal totalQtaAvailable = null; + BigDecimal totalNumCnfAvailable = null; + BigDecimal qtaCnfAvailable = null; + BigDecimal initialNumCnf = null; BigDecimal initialQtaCnf = null; BigDecimal initialQtaTot = null; @@ -935,7 +939,48 @@ public class SpedizioneViewModel { String partitaMag = null; Date dataScad = null; - if (pickingObjectDTO.getTempPickData() != null && pickingObjectDTO.getTempPickData().getManualPickDTO() != null) { + MtbColt refMtbColt = null; + + if (mtbColrToUse != null) { + refMtbColt = new MtbColt() + .setDataCollo(mtbColrToUse.getDataColloD()) + .setSerCollo(mtbColrToUse.getSerCollo()) + .setNumCollo(mtbColrToUse.getNumCollo()) + .setGestione(mtbColrToUse.getGestione()) + .setMtbColr(new ObservableArrayList<>()); + + refMtbColt.getMtbColr().add(mtbColrToUse); + + pickingObjectDTO + .setMtbAart(mtbColrToUse.getMtbAart()) + .setTempPickData(new PickDataDTO().setSourceMtbColt(refMtbColt)); + + if (mtbColrToUse.getMtbAart().isFlagQtaCnfFissaBoolean()) { + numCnfDaPrelevare = mtbColrToUse.getNumCnf(); + qtaColDaPrelevare = mtbColrToUse.getQtaCol(); + qtaCnfDaPrelevare = mtbColrToUse.getQtaCnf(); + } else { + numCnfDaPrelevare = mtbColrToUse.getNumCnf(); + qtaCnfDaPrelevare = mtbColrToUse.getQtaCnf(); + qtaColDaPrelevare = mtbColrToUse.getQtaCol(); + } + + + totalQtaAvailable = mtbColrToUse.getQtaCol(); + totalNumCnfAvailable = mtbColrToUse.getNumCnf(); + qtaCnfAvailable = mtbColrToUse.getQtaCnf(); + + + if (UtilityBigDecimal.lowerThan(numCnfDaPrelevare, BigDecimal.ZERO)) + numCnfDaPrelevare = BigDecimal.ZERO; + + if (UtilityBigDecimal.lowerThan(qtaColDaPrelevare, BigDecimal.ZERO)) + qtaColDaPrelevare = BigDecimal.ZERO; + + partitaMag = mtbColrToUse.getPartitaMag(); + dataScad = mtbColrToUse.getDataScadPartitaD(); + + } else if (pickingObjectDTO.getTempPickData() != null && pickingObjectDTO.getTempPickData().getManualPickDTO() != null) { //Oppure le info del barcode scansionato PickDataDTO.ManualPickDTO manualPickDTO = pickingObjectDTO.getTempPickData().getManualPickDTO(); @@ -974,6 +1019,7 @@ public class SpedizioneViewModel { } + MtbColt finalRefMtbColt = refMtbColt; this.sendOnItemDispatched( pickingObjectDTO, pickingObjectDTO.getMtbAart(), @@ -986,15 +1032,15 @@ public class SpedizioneViewModel { qtaColDaPrelevare, numCnfDaPrelevare, qtaCnfDaPrelevare, - null, - null, - null, + totalQtaAvailable, + totalNumCnfAvailable, + qtaCnfAvailable, partitaMag, dataScad, mCanOverflowOrderQuantity, (pickedQuantityDTO, shouldCloseLU) -> { this.saveNewRow(pickingObjectDTO, - null, + finalRefMtbColt, pickedQuantityDTO.getNumCnf(), pickedQuantityDTO.getQtaCnf(), pickedQuantityDTO.getQtaTot(), diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_mtb_colr/choose_art_from_lista_arts/DialogChooseArtFromListaMtbColr.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_mtb_colr/choose_art_from_lista_arts/DialogChooseArtFromListaMtbColr.java new file mode 100644 index 00000000..ce261d25 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_mtb_colr/choose_art_from_lista_arts/DialogChooseArtFromListaMtbColr.java @@ -0,0 +1,80 @@ +package it.integry.integrywmsnative.view.dialogs.choose_art_from_lista_mtb_colr.choose_art_from_lista_arts; + +import android.app.Dialog; +import android.content.Context; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; +import android.view.LayoutInflater; + +import androidx.core.content.ContextCompat; +import androidx.databinding.DataBindingUtil; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; + +import java.util.List; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.interfaces.IRecyclerItemClicked; +import it.integry.integrywmsnative.core.model.MtbColr; +import it.integry.integrywmsnative.core.utility.UtilityDialog; +import it.integry.integrywmsnative.databinding.DialogChooseArtFromListaArtBinding; + +public class DialogChooseArtFromListaMtbColr { + + + private Context currentContext; + private Dialog mDialog; + + private DialogChooseArtFromListaMtbColrAdapter currentAdapter; + + private RunnableArgs mOnItemChoosed; + + public static Dialog make(final Context context, List mtbColrList, RunnableArgs onItemChoosed) { + return new DialogChooseArtFromListaMtbColr(context, mtbColrList, onItemChoosed).mDialog; + } + + + private DialogChooseArtFromListaMtbColr(Context context, List mtbColrList, RunnableArgs onItemChoosed) { + currentContext = context; + mOnItemChoosed = onItemChoosed; + + LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE ); + DialogChooseArtFromListaArtBinding bindings = DataBindingUtil.inflate(inflater, R.layout.dialog_choose_art_from_lista_art, null, false); + + mDialog = new Dialog(context); + + mDialog.setContentView(bindings.getRoot()); + + mDialog.setCanceledOnTouchOutside(false); + mDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + + UtilityDialog.setTo90PercentWidth(context, mDialog); + + initRecyclerView(bindings, mtbColrList); + } + + private void initRecyclerView(DialogChooseArtFromListaArtBinding binding, List dataset) { + binding.dialogChooseArtFromListaArtMainList.setNestedScrollingEnabled(false); + + binding.dialogChooseArtFromListaArtMainList.setHasFixedSize(true); + + binding.dialogChooseArtFromListaArtMainList.setLayoutManager(new LinearLayoutManager(currentContext)); + + DividerItemDecoration itemDecorator = new DividerItemDecoration(currentContext, DividerItemDecoration.VERTICAL); + itemDecorator.setDrawable(ContextCompat.getDrawable(currentContext, R.drawable.divider)); + binding.dialogChooseArtFromListaArtMainList.addItemDecoration(itemDecorator); + + currentAdapter = new DialogChooseArtFromListaMtbColrAdapter(currentContext, dataset, onItemClicked); + binding.dialogChooseArtFromListaArtMainList.setAdapter(currentAdapter); + } + + private IRecyclerItemClicked onItemClicked = (item, position) -> { + if(mOnItemChoosed != null) { + mOnItemChoosed.run(item); + } + + mDialog.dismiss(); + }; + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_mtb_colr/choose_art_from_lista_arts/DialogChooseArtFromListaMtbColrAdapter.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_mtb_colr/choose_art_from_lista_arts/DialogChooseArtFromListaMtbColrAdapter.java new file mode 100644 index 00000000..5abe80f8 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_mtb_colr/choose_art_from_lista_arts/DialogChooseArtFromListaMtbColrAdapter.java @@ -0,0 +1,78 @@ +package it.integry.integrywmsnative.view.dialogs.choose_art_from_lista_mtb_colr.choose_art_from_lista_arts; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.ViewGroup; + +import androidx.databinding.DataBindingUtil; +import androidx.recyclerview.widget.RecyclerView; + +import java.util.List; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.interfaces.IRecyclerItemClicked; +import it.integry.integrywmsnative.core.model.MtbAart; +import it.integry.integrywmsnative.core.model.MtbColr; +import it.integry.integrywmsnative.databinding.DialogChooseArtFromListaArtItemModelBinding; + +public class DialogChooseArtFromListaMtbColrAdapter extends RecyclerView.Adapter { + + protected Context mContext; + + private List mDataset; + private IRecyclerItemClicked mOnItemClickListener; + + public static class ViewHolder extends RecyclerView.ViewHolder { + protected DialogChooseArtFromListaArtItemModelBinding mViewDataBinding; + + + public ViewHolder(DialogChooseArtFromListaArtItemModelBinding v) { + super(v.getRoot()); + mViewDataBinding = v; + } + + public void bind(MtbAart mtbAart) { + mViewDataBinding.setMtbAart(mtbAart); + mViewDataBinding.executePendingBindings(); + } + } + + public DialogChooseArtFromListaMtbColrAdapter(Context context, List myDataset, IRecyclerItemClicked onItemClickListener) { + mContext = context; + mDataset = myDataset; + mOnItemClickListener = onItemClickListener; + } + + @Override + public DialogChooseArtFromListaMtbColrAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + // create a new view + DialogChooseArtFromListaArtItemModelBinding viewDataBinding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), R.layout.dialog_choose_art_from_lista_art__item_model, parent, false); + + return new ViewHolder(viewDataBinding); + } + + @Override + public void onBindViewHolder(DialogChooseArtFromListaMtbColrAdapter.ViewHolder holder, int position) { + MtbColr item = mDataset.get(position); + holder.bind(item.getMtbAart()); + + holder.mViewDataBinding.getRoot().setOnClickListener(x -> { + if(mOnItemClickListener != null) { + mOnItemClickListener.onItemClick(item, position); + } + }); + } + + @Override + public void onViewRecycled(DialogChooseArtFromListaMtbColrAdapter.ViewHolder holder) { + super.onViewRecycled(holder); + } + + @Override + public int getItemCount() { + return mDataset.size(); + } + + + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2.java index 59b20e70..5797879a 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2.java @@ -35,6 +35,7 @@ import it.integry.integrywmsnative.MainApplication; import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO; import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; +import it.integry.integrywmsnative.core.expansion.BaseDialogFragment; import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgss; import it.integry.integrywmsnative.core.model.MtbUntMis; @@ -44,10 +45,11 @@ import it.integry.integrywmsnative.core.utility.UtilityProgress; 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 BaseDialogFragment implements DialogInputQuantityV2ViewModel.Listener { @Inject DialogInputQuantityV2ViewModel mViewModel; + private DialogInputQuantityV2DTO mDialogInputQuantityV2DTO; private RunnableArgss mOnComplete; private Runnable mOnAbort; @@ -79,6 +81,8 @@ public class DialogInputQuantityV2 extends DialogFragment implements DialogInput } private DialogInputQuantityV2(@NotNull DialogInputQuantityV2DTO dialogInputQuantityV2DTO, @NotNull RunnableArgss onComplete, @NotNull Runnable onAbort) { + super(); + this.mDialogInputQuantityV2DTO = dialogInputQuantityV2DTO; this.mOnComplete = onComplete; this.mOnAbort = onAbort; diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_art/DialogScanArt.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_art/DialogScanArt.java index 2e20c562..ef08d61d 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_art/DialogScanArt.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_art/DialogScanArt.java @@ -4,177 +4,149 @@ import android.app.Dialog; import android.content.Context; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; -import android.text.SpannableString; +import android.os.Bundle; import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.databinding.DataBindingUtil; +import org.jetbrains.annotations.NotNull; + +import javax.inject.Inject; + +import it.integry.barcode_base_android_library.model.BarcodeScanDTO; +import it.integry.integrywmsnative.MainApplication; import it.integry.integrywmsnative.R; -import it.integry.integrywmsnative.core.expansion.BaseDialog; -import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer; -import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer; -import it.integry.integrywmsnative.core.rest.model.Ean128Model; -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.BaseDialogFragment; import it.integry.integrywmsnative.core.expansion.RunnableArgs; -import it.integry.integrywmsnative.core.expansion.RunnableArgsss; +import it.integry.integrywmsnative.core.expansion.RunnableArgssss; import it.integry.integrywmsnative.core.model.MtbAart; -import it.integry.integrywmsnative.core.utility.UtilityBarcode; +import it.integry.integrywmsnative.core.model.MtbColr; +import it.integry.integrywmsnative.core.rest.model.Ean128Model; import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.core.utility.UtilityProgress; -import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.databinding.DialogScanArtBinding; import it.integry.integrywmsnative.view.dialogs.DialogConsts; -import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper; -import it.integry.barcode_base_android_library.model.BarcodeScanDTO; +import it.integry.integrywmsnative.view.dialogs.choose_art_from_lista_mtb_colr.choose_art_from_lista_arts.DialogChooseArtFromListaMtbColr; -public class DialogScanArt { +public class DialogScanArt extends BaseDialogFragment implements DialogScanArtViewModel.Listener { + + @Inject + DialogScanArtViewModel mViewModel; private Context mContext; - private BaseDialog mDialog; - private RunnableArgsss mOnItemChoosed; + private DialogScanArtBinding mBindings; - public static Dialog make(final Context context, RunnableArgsss onItemChoosed) { - return new DialogScanArt(context, onItemChoosed).mDialog; + private int mBarcodeScannerIstanceID; + private Dialog mCurrentProgress; + + private RunnableArgssss mOnItemChoosed = null; + + + public static DialogScanArt newInstance(@NotNull RunnableArgssss onComplete) { + return new DialogScanArt(onComplete); + } + + private DialogScanArt(RunnableArgssss onItemChoosed) { + super(); + mOnItemChoosed = onItemChoosed; + } + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + this.initBarcode(); } - private DialogScanArt(Context context, RunnableArgsss onItemChoosed) { - mContext = context; - mOnItemChoosed = onItemChoosed; + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + this.mContext = getActivity(); - LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE ); - DialogScanArtBinding bindings = DataBindingUtil.inflate(inflater, R.layout.dialog_scan_art, null, false); + mBindings = DataBindingUtil.inflate(inflater, R.layout.dialog_scan_art, container, false); - mDialog = new BaseDialog(context); + MainApplication.appComponent + .dialogScanArtComponent() + .create() + .inject(this); - mDialog.setContentView(bindings.getRoot()); + this.mViewModel + .setListener(this); - mDialog.setCanceledOnTouchOutside(false); - mDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + getDialog().setCanceledOnTouchOutside(false); + getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); - - bindings.buttonNo.setOnClickListener(v -> { - mOnItemChoosed.run(DialogConsts.Results.ABORT, null, null); - mDialog.dismiss(); + mBindings.buttonNo.setOnClickListener(v -> { + mOnItemChoosed.run(DialogConsts.Results.ABORT, null, null, null); + dismiss(); }); - initBarcode(context); - } - - - - private void initBarcode(Context context) { - - int barcodeIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() - .setOnScanSuccessfull(onScanSuccessfull) - .setOnScanFailed(ex -> UtilityExceptions.defaultException(context, ex, false))); - - mDialog.setBarcodeListener(true); - mDialog.setOnDismissListener(dialog -> { - BarcodeManager.removeCallback(barcodeIstanceID); + getDialog().setOnDismissListener(dialog -> { + BarcodeManager.removeCallback(mBarcodeScannerIstanceID); BarcodeManager.enable(); }); + return mBindings.getRoot(); + } + + + + private void initBarcode() { + mBarcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() + .setOnScanSuccessfull(onScanSuccessfull) + .setOnScanFailed(ex -> UtilityExceptions.defaultException(this.mContext, ex, false))); + + setBarcodeListener(true); } private final RunnableArgs onScanSuccessfull = data -> { - - Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext); - BarcodeManager.disable(); + this.openProgress(); - if(UtilityBarcode.isEtichetta128(data)) { - this.executeEtichettaEan128(data, progressDialog); - } else if(UtilityBarcode.isEanPeso(data)){ - this.executeEtichettaEanPeso(data, progressDialog); - } else { - this.loadArticolo(data.getStringValue(), null, progressDialog); - } + this.mViewModel.processBarcodeDTO(data, (status, mtbAart, ean128Model, mtbColrList) -> { + if(mtbColrList != null && mtbColrList.size() > 0) { + DialogChooseArtFromListaMtbColr.make(mContext, mtbColrList, mtbColrChose -> { + mOnItemChoosed.run(status, mtbAart, ean128Model, mtbColrChose); + }).show(); + } else { + mOnItemChoosed.run(status, mtbAart, ean128Model, null); + } + BarcodeManager.enable(); + this.closeProgress(); + + dismiss(); + }); }; - - - - private void executeEtichettaEan128(BarcodeScanDTO barcodeScanDTO, Dialog progressDialog) { - BarcodeRESTConsumer.decodeEan128Static(barcodeScanDTO, ean128Model -> { - - String barcodeProd = null; - - if(ean128Model.Sscc != null) barcodeProd = ean128Model.Sscc; - if(ean128Model.Gtin != null) barcodeProd = ean128Model.Gtin; - if(ean128Model.Content != null) barcodeProd = ean128Model.Content; - - - if(!UtilityString.isNullOrEmpty(barcodeProd)) { - if (barcodeProd.startsWith("0") || barcodeProd.startsWith("9")) { - barcodeProd = barcodeProd.substring(1, barcodeProd.length()); - } - this.loadArticolo(barcodeProd, ean128Model, progressDialog); - } else { - //EAN 128 non completo o comunque mancano i riferimenti al prodotto - progressDialog.dismiss(); - BarcodeManager.enable(); - } - }, ex-> { - UtilityExceptions.defaultException(mContext, ex, progressDialog); - BarcodeManager.enable(); - }); + @Override + public void onError(Exception ex) { + this.closeProgress(); + UtilityExceptions.defaultException(mContext, ex, mCurrentProgress); + BarcodeManager.enable(); } - private void executeEtichettaEanPeso(BarcodeScanDTO barcodeScanDTO, Dialog progressDialog) { - try { - Ean13PesoModel ean13PesoModel = Ean13PesoModel.fromBarcode(barcodeScanDTO.getStringValue()); - - this.loadArticolo(ean13PesoModel.getPrecode(), ean13PesoModel.toEan128(), progressDialog); - } catch (Exception ex) { - UtilityExceptions.defaultException(mContext, ex, progressDialog); - BarcodeManager.enable(); + protected void openProgress() { + if (this.mCurrentProgress == null) { + this.mCurrentProgress = UtilityProgress.createDefaultProgressDialog(mContext); } } - - - private void loadArticolo(String barcodeProd, Ean128Model ean128Model, Dialog progressDialog) { - if(barcodeProd.length() == 14) { -// barcodeProd = UtilityBarcode.convertITF14toNeutral(barcodeProd); - barcodeProd = UtilityBarcode.convertITF14toEAN13(barcodeProd); + protected void closeProgress() { + if (mCurrentProgress != null) { + mCurrentProgress.dismiss(); + mCurrentProgress = null; } - - ArticoloRESTConsumer.getByBarcodeProdStatic(barcodeProd, mtbAartList -> { - - if(mtbAartList != null && mtbAartList.size() > 0) { - BarcodeManager.enable(); - progressDialog.dismiss(); - - mOnItemChoosed.run(DialogConsts.Results.YES, mtbAartList.get(0), ean128Model); - mDialog.dismiss(); - - - } else { - BarcodeManager.enable(); - progressDialog.dismiss(); - - DialogSimpleMessageHelper.makeWarningDialog(mContext, - new SpannableString(mContext.getResources().getText(R.string.no_result_from_barcode)), - null, null) - .show(); - } - - }, ex -> { - BarcodeManager.enable(); - UtilityExceptions.defaultException(mContext, ex, progressDialog); - }); } - - - - } diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_art/DialogScanArtComponent.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_art/DialogScanArtComponent.java new file mode 100644 index 00000000..b5e3d850 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_art/DialogScanArtComponent.java @@ -0,0 +1,15 @@ +package it.integry.integrywmsnative.view.dialogs.scan_art; + +import dagger.Subcomponent; + +@Subcomponent +public interface DialogScanArtComponent { + + @Subcomponent.Factory + interface Factory { + DialogScanArtComponent create(); + } + + void inject(DialogScanArt dialogScanArt); + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_art/DialogScanArtModule.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_art/DialogScanArtModule.java new file mode 100644 index 00000000..9634e0a0 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_art/DialogScanArtModule.java @@ -0,0 +1,17 @@ +package it.integry.integrywmsnative.view.dialogs.scan_art; + +import dagger.Module; +import dagger.Provides; +import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer; + +@Module(subcomponents = DialogScanArtComponent.class) +public class DialogScanArtModule { + + @Provides + DialogScanArtViewModel providesDialogScanArtViewModel(BarcodeRESTConsumer barcodeRESTConsumer, ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer, ArticoloRESTConsumer articoloRESTConsumer) { + return new DialogScanArtViewModel(barcodeRESTConsumer, colliMagazzinoRESTConsumer, articoloRESTConsumer); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_art/DialogScanArtViewModel.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_art/DialogScanArtViewModel.java new file mode 100644 index 00000000..c1d1737b --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_art/DialogScanArtViewModel.java @@ -0,0 +1,144 @@ +package it.integry.integrywmsnative.view.dialogs.scan_art; + +import org.jetbrains.annotations.NotNull; + +import java.util.List; + +import it.integry.barcode_base_android_library.model.BarcodeScanDTO; +import it.integry.integrywmsnative.core.exception.InvalidLUException; +import it.integry.integrywmsnative.core.exception.NoArtsFoundException; +import it.integry.integrywmsnative.core.exception.NoResultFromBarcodeException; +import it.integry.integrywmsnative.core.expansion.RunnableArgssss; +import it.integry.integrywmsnative.core.model.MtbAart; +import it.integry.integrywmsnative.core.model.MtbColr; +import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer; +import it.integry.integrywmsnative.core.rest.model.Ean128Model; +import it.integry.integrywmsnative.core.rest.model.Ean13PesoModel; +import it.integry.integrywmsnative.core.utility.UtilityBarcode; +import it.integry.integrywmsnative.core.utility.UtilityString; +import it.integry.integrywmsnative.view.dialogs.DialogConsts; + +public class DialogScanArtViewModel { + + private final BarcodeRESTConsumer mBarcodeRESTConsumer; + private final ColliMagazzinoRESTConsumer mColliMagazzinoRESTConsumer; + private final ArticoloRESTConsumer mArticoloRESTConsumer; + + private Listener mListener; + + public DialogScanArtViewModel(BarcodeRESTConsumer barcodeRESTConsumer, ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer, ArticoloRESTConsumer articoloRESTConsumer) { + this.mBarcodeRESTConsumer = barcodeRESTConsumer; + this.mColliMagazzinoRESTConsumer = colliMagazzinoRESTConsumer; + this.mArticoloRESTConsumer = articoloRESTConsumer; + } + + + public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO, RunnableArgssss> onComplete) { + if (UtilityBarcode.isEtichettaAnonima(barcodeScanDTO)) { + //Cerco gli articoli presenti nell'ul dell'etichetta anonima + this.executeEtichettaLU(barcodeScanDTO.getStringValue(), onComplete); + + } else if (UtilityBarcode.isEtichettaPosizione(barcodeScanDTO)) { + //Cerco l'UL presente all'interno della posizione +// this.executeEtichettaPosizione(barcodeScanDTO.getStringValue(), onComplete); + + } else if(UtilityBarcode.isEtichetta128(barcodeScanDTO)) { + this.executeEtichettaEan128(barcodeScanDTO, onComplete); + } else if(UtilityBarcode.isEanPeso(barcodeScanDTO)){ + this.executeEtichettaEanPeso(barcodeScanDTO, onComplete); + } else { + this.loadArticolo(barcodeScanDTO.getStringValue(), null, onComplete); + } + } + + + private void executeEtichettaEan128(BarcodeScanDTO barcodeScanDTO, RunnableArgssss> onComplete) { + this.mBarcodeRESTConsumer.decodeEan128(barcodeScanDTO, ean128Model -> { + + String barcodeProd = null; + + if(ean128Model.Sscc != null) barcodeProd = ean128Model.Sscc; + if(ean128Model.Gtin != null) barcodeProd = ean128Model.Gtin; + if(ean128Model.Content != null) barcodeProd = ean128Model.Content; + + + if(!UtilityString.isNullOrEmpty(barcodeProd)) { + if (!UtilityString.isNullOrEmpty(ean128Model.Sscc)) { + this.executeEtichettaLU(ean128Model.Sscc, onComplete); + } else { + if (barcodeProd.startsWith("0") || barcodeProd.startsWith("9")) { + barcodeProd = barcodeProd.substring(1); + } + + this.loadArticolo(barcodeProd, ean128Model, onComplete); + } + } else { + //EAN 128 non completo o comunque mancano i riferimenti al prodotto + this.sendError(new NoResultFromBarcodeException()); + } + }, this::sendError); + } + + private void executeEtichettaEanPeso(BarcodeScanDTO barcodeScanDTO, RunnableArgssss> onComplete) { + + try { + Ean13PesoModel ean13PesoModel = Ean13PesoModel.fromBarcode(barcodeScanDTO.getStringValue()); + + this.loadArticolo(ean13PesoModel.getPrecode(), ean13PesoModel.toEan128(), onComplete); + } catch (Exception ex) { + this.sendError(ex); + } + } + + + private void executeEtichettaLU(String SSCC, RunnableArgssss> onComplete) { + mColliMagazzinoRESTConsumer.getBySSCC(SSCC, true, false, mtbColt -> { + + if (mtbColt != null && mtbColt.getMtbColr() != null && mtbColt.getMtbColr().size() > 0) { + if (mtbColt.getSegno() != -1) { + onComplete.run(DialogConsts.Results.YES, null, null, mtbColt.getMtbColr()); + } else this.sendError(new InvalidLUException()); + } else { + this.sendError(new NoArtsFoundException()); + } + + }, this::sendError); + } + + + private void loadArticolo(@NotNull String barcodeProd, Ean128Model ean128Model, RunnableArgssss> onComplete) { + if(barcodeProd.length() == 14) { +// barcodeProd = UtilityBarcode.convertITF14toNeutral(barcodeProd); + barcodeProd = UtilityBarcode.convertITF14toEAN13(barcodeProd); + } + + this.mArticoloRESTConsumer.getByBarcodeProd(barcodeProd, mtbAartList -> { + if(mtbAartList != null && mtbAartList.size() > 0) { + onComplete.run(DialogConsts.Results.YES, mtbAartList.get(0), ean128Model, null); + } else { + this.sendError(new NoResultFromBarcodeException()); + } + }, this::sendError); + } + + + + + private void sendError(Exception ex) { + if (this.mListener != null) mListener.onError(ex); + } + + + public void setListener(Listener listener) { + this.mListener = listener; + } + + public interface Listener { + + void onError(Exception ex); + } + + +} From 702ce4b79e35639a5400e8a3de322a0daa6f176a Mon Sep 17 00:00:00 2001 From: GiuseppeS Date: Mon, 8 Feb 2021 17:19:09 +0100 Subject: [PATCH 2/2] -> v1.16.0 (182) --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 56dc0944..b3b7a7bb 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -7,8 +7,8 @@ apply plugin: 'com.google.gms.google-services' android { - def appVersionCode = 181 - def appVersionName = '1.15.0' + def appVersionCode = 182 + def appVersionName = '1.16.0' signingConfigs { release {