From 7207b83f390811af7d51e43ac1486e389f6179b3 Mon Sep 17 00:00:00 2001 From: Giuseppe Scorrano Date: Thu, 29 Nov 2018 11:42:13 +0100 Subject: [PATCH] Completato dialog scan or create UL per la rettifica giacenze --- .idea/modules.xml | 2 - .../consumers/ColliMagazzinoRESTConsumer.java | 72 +++++++ .../core/settings/DBSettingsModel.java | 10 + .../core/settings/SettingsManager.java | 13 +- .../RettificaGiacenzeFragment.java | 9 + .../adapter/AutoCompleteFornitoreAdapter.java | 32 ++- .../viewmodel/RettificaGiacenzeViewModel.java | 8 + .../DialogScanOrCreateLU.java | 188 ++++++++++++++++++ .../layout/dialog_input_quantity_articolo.xml | 3 +- .../res/layout/dialog_scan_or_create_lu.xml | 67 +++++++ .../main/res/layout/fragment_main_vendita.xml | 1 + 11 files changed, 389 insertions(+), 16 deletions(-) create mode 100644 app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_or_create_lu/DialogScanOrCreateLU.java create mode 100644 app/src/main/res/layout/dialog_scan_or_create_lu.xml diff --git a/.idea/modules.xml b/.idea/modules.xml index d4556b57..246b1bce 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -5,10 +5,8 @@ - - \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ColliMagazzinoRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ColliMagazzinoRESTConsumer.java index d133c1f5..927cb583 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ColliMagazzinoRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ColliMagazzinoRESTConsumer.java @@ -2,6 +2,9 @@ package it.integry.integrywmsnative.core.REST.consumers; import com.google.gson.JsonObject; +import java.util.Date; + +import it.integry.integrywmsnative.core.CommonConst; import it.integry.integrywmsnative.core.REST.RESTBuilder; import it.integry.integrywmsnative.core.REST.model.DistribuzioneColloDTO; import it.integry.integrywmsnative.core.REST.model.ServiceRESTResponse; @@ -9,6 +12,11 @@ import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.model.CommonModelConsts; import it.integry.integrywmsnative.core.model.MtbColr; import it.integry.integrywmsnative.core.model.MtbColt; +import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; +import it.integry.integrywmsnative.core.settings.SettingsManager; +import it.integry.integrywmsnative.core.utility.UtilityBarcode; +import it.integry.integrywmsnative.core.utility.UtilityString; +import it.integry.plugins.barcode_base_library.model.BarcodeScanDTO; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; @@ -22,6 +30,70 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer{ } + public static void createColloLavorazione(RunnableArgs onComplete, RunnableArgs onFailed) { + MtbColt mtbColtToCreate = new MtbColt() + .setGestione("L") + .setDataCollo(new Date()) + .setCodMdep(SettingsManager.i().userSession.depo.getCodMdep()) + .setPreparatoDa(SettingsManager.i().user.fullname) + .setOraInizPrep(new Date()) + .setCodAnag(SettingsManager.iDB().getDefaultCodAnag()); + + mtbColtToCreate + .setOperation(CommonModelConsts.OPERATION.INSERT); + + + saveCollo(mtbColtToCreate, new ISimpleOperationCallback() { + @Override + public void onSuccess(MtbColt value) { + if(onComplete != null) onComplete.run(value); + } + + @Override + public void onFailed(Exception ex) { + if(onFailed != null) onFailed.run(ex); + } + }); + } + + + public static void createColloFromEtichettaAnonima(BarcodeScanDTO barcodeScanDTO, String gestione, RunnableArgs onComplete, RunnableArgs onFailed) { + + MtbColt mtbColtToCreate = new MtbColt() + .setGestione(gestione) + .setDataCollo(new Date()) + .setCodMdep(SettingsManager.i().userSession.depo.getCodMdep()) + .setPreparatoDa(SettingsManager.i().user.fullname) + .setOraInizPrep(new Date()) + .setCodAnag(SettingsManager.iDB().getDefaultCodAnag()); + + Integer customNumCollo = UtilityBarcode.getNumColloFromULAnonima(barcodeScanDTO); + String customSerCollo = CommonConst.Config.DEFAULT_ANONYMOUS_UL_SERIE; + + if(customNumCollo != null) { + mtbColtToCreate.setNumCollo(customNumCollo); + } + + if(!UtilityString.isNullOrEmpty(customSerCollo)) { + mtbColtToCreate.setSerCollo(customSerCollo); + } + + mtbColtToCreate + .setOperation(CommonModelConsts.OPERATION.INSERT); + + saveCollo(mtbColtToCreate, new ISimpleOperationCallback() { + @Override + public void onSuccess(MtbColt value) { + if(onComplete != null) onComplete.run(value); + } + + @Override + public void onFailed(Exception ex) { + if(onFailed != null) onFailed.run(ex); + } + }); + } + public static void deleteCollo(MtbColt mtbColtToDelete, Runnable onComplete, RunnableArgs onFailed){ mtbColtToDelete.setOperation(CommonModelConsts.OPERATION.DELETE); diff --git a/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java b/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java index d0b4348d..9b188777 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java @@ -10,6 +10,7 @@ public class DBSettingsModel { private List availableCodMdep = null; private boolean enableCheckPartitaMagCheckPickingV; + private String defaultCodAnag; public List getAvailableProfiles() { return availableProfiles; @@ -35,4 +36,13 @@ public class DBSettingsModel { this.enableCheckPartitaMagCheckPickingV = enableCheckPartitaMagCheckPickingV; return this; } + + public String getDefaultCodAnag() { + return defaultCodAnag; + } + + public DBSettingsModel setDefaultCodAnag(String defaultCodAnag) { + this.defaultCodAnag = defaultCodAnag; + return this; + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java b/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java index a59d1ffd..2c91f2b7 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java @@ -130,10 +130,17 @@ public class SettingsManager { private static void loadGestSetupValues(Runnable onComplete, RunnableArgs onFailed) { - GestSetupRESTConsumer.getBooleanValue("PICKING", "SETUP", "ENABLE_CHECK_PARTITA_MAG_PICKING_V", value -> { - dbSettingsModelIstance.setEnableCheckPartitaMagCheckPickingV(value); + GestSetupRESTConsumer.getBooleanValue("PICKING", "SETUP", "ENABLE_CHECK_PARTITA_MAG_PICKING_V", valueEnableCheckPartitaMag -> { + dbSettingsModelIstance.setEnableCheckPartitaMagCheckPickingV(valueEnableCheckPartitaMag); + + GestSetupRESTConsumer.getValue("PICKING", "SETUP", "COD_ANAG_DEFAULT", valueCodAnagDefault -> { + dbSettingsModelIstance.setDefaultCodAnag(valueCodAnagDefault.value); + + if(onComplete != null) onComplete.run(); + }, ex -> { + if(onFailed != null) onFailed.run(ex); + }); - if(onComplete != null) onComplete.run(); }, ex -> { if(onFailed != null) onFailed.run(ex); }); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/RettificaGiacenzeFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/RettificaGiacenzeFragment.java index 1571dde4..c69d01ee 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/RettificaGiacenzeFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/RettificaGiacenzeFragment.java @@ -12,9 +12,11 @@ import android.view.ViewGroup; import butterknife.ButterKnife; import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.core.interfaces.ITitledFragment; +import it.integry.integrywmsnative.databinding.DialogScanOrCreateLuBinding; import it.integry.integrywmsnative.databinding.FragmentMainRettificaGiacenzeBinding; import it.integry.integrywmsnative.gest.rettifica_giacenze.core.RettificaGiacenzeHelper; import it.integry.integrywmsnative.gest.rettifica_giacenze.viewmodel.RettificaGiacenzeViewModel; +import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCreateLU; public class RettificaGiacenzeFragment extends Fragment implements ITitledFragment { @@ -67,11 +69,18 @@ public class RettificaGiacenzeFragment extends Fragment implements ITitledFragme mBinding.autoCompleteFornitori.setOnFocusChangeListener((v, hasFocus) -> { setUIToForn(); }); + mBinding.inputCodArtDescrForn.setOnFocusChangeListener((v, hasFocus) -> { + setUIToForn(); + }); mBinding.inputCodArtDescrInt.setOnFocusChangeListener((v, hasFocus) -> { setUIToIntArt(); }); + DialogScanOrCreateLU.makeBase(getActivity(), mtbColt -> { + mRettificaGiacenzeViewModel.setMtbColt(mtbColt); + }).show(); + } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/core/adapter/AutoCompleteFornitoreAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/core/adapter/AutoCompleteFornitoreAdapter.java index 9a5f0fc2..a371282a 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/core/adapter/AutoCompleteFornitoreAdapter.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/core/adapter/AutoCompleteFornitoreAdapter.java @@ -14,6 +14,7 @@ import android.widget.Filter; import android.widget.TextView; import java.util.ArrayList; +import java.util.ConcurrentModificationException; import java.util.Iterator; import java.util.List; @@ -76,22 +77,35 @@ public class AutoCompleteFornitoreAdapter extends ArrayAdapter { } } + @Override protected void publishResults(CharSequence constraint, FilterResults results) { - ArrayList filteredList = (ArrayList) results.values; - if(results != null && results.count > 0) { - clear(); - synchronized (filteredList) { - for (FornitoreDTO c : filteredList) { - add(c); + boolean error; + + do { + try { + ArrayList filteredList = (ArrayList) results.values; + if (results.count > 0) { + clear(); + + for (FornitoreDTO c : filteredList) { + add(c); + } + + notifyDataSetChanged(); + } - notifyDataSetChanged(); - + error = false; + } catch (ConcurrentModificationException ex) { + error = true; } - } + } while (error); + + } + @Override public CharSequence convertResultToString(Object resultValue) { return ((FornitoreDTO) resultValue).getCodAlis(); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/viewmodel/RettificaGiacenzeViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/viewmodel/RettificaGiacenzeViewModel.java index 36c5ca97..45d5eb32 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/viewmodel/RettificaGiacenzeViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/viewmodel/RettificaGiacenzeViewModel.java @@ -3,6 +3,7 @@ package it.integry.integrywmsnative.gest.rettifica_giacenze.viewmodel; import android.app.ProgressDialog; import android.content.Context; import android.databinding.ObservableArrayList; +import android.databinding.ObservableField; import android.text.SpannableString; import android.view.KeyEvent; import android.view.inputmethod.EditorInfo; @@ -12,6 +13,7 @@ import java.util.ArrayList; import java.util.List; import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.core.utility.UtilityProgress; import it.integry.integrywmsnative.core.utility.UtilityString; @@ -28,12 +30,18 @@ public class RettificaGiacenzeViewModel { private RettificaGiacenzeHelper mHelper; + private ObservableField mtbColt = new ObservableField<>(); + public void init(Context context, FragmentMainRettificaGiacenzeBinding binding, RettificaGiacenzeHelper helper) { mContext = context; mBinding = binding; mHelper = helper; } + public void setMtbColt(MtbColt mtbColt) { + this.mtbColt.set(mtbColt); + } + public void setupSearchFornitori(ArrayList listaFornitori) { AutoCompleteFornitoreAdapter autoCompleteFornitoreAdapter = new AutoCompleteFornitoreAdapter(mContext, listaFornitori); mBinding.autoCompleteFornitori.setAdapter(autoCompleteFornitoreAdapter); diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_or_create_lu/DialogScanOrCreateLU.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_or_create_lu/DialogScanOrCreateLU.java new file mode 100644 index 00000000..eab94c74 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_or_create_lu/DialogScanOrCreateLU.java @@ -0,0 +1,188 @@ +package it.integry.integrywmsnative.view.dialogs.scan_or_create_lu; + +import android.app.ProgressDialog; +import android.content.Context; +import android.databinding.DataBindingUtil; +import android.databinding.ViewDataBinding; +import android.support.v7.app.AlertDialog; +import android.text.SpannableString; +import android.view.LayoutInflater; +import android.view.View; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.REST.consumers.BarcodeRESTConsumer; +import it.integry.integrywmsnative.core.REST.consumers.ColliMagazzinoRESTConsumer; +import it.integry.integrywmsnative.core.REST.consumers.SystemRESTConsumer; +import it.integry.integrywmsnative.core.REST.model.Ean128Model; +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.MtbColt; +import it.integry.integrywmsnative.core.utility.UtilityBarcode; +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.DialogScanOrCreateLuBinding; +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 DialogScanOrCreateLU { + + private static Context currentContext; + + private static AlertDialog currentAlert; + + private static DialogScanOrCreateLuBinding mBinding; + + private static RunnableArgs mOnDialogDismiss; + + + public static AlertDialog makeBase(final Context context, RunnableArgs onDialogDismiss) { + currentContext = context; + + LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE ); + + mBinding = DataBindingUtil.inflate(inflater, R.layout.dialog_scan_or_create_lu, null, false); + + final AlertDialog.Builder alertDialog = new AlertDialog.Builder(context) + .setView(mBinding.getRoot()); + + currentAlert = alertDialog.create(); + currentAlert.setCanceledOnTouchOutside(false); + + init(onDialogDismiss); + initBarcode(context); + + return currentAlert; + } + + + private static void init(RunnableArgs onDialogDismiss) { + mOnDialogDismiss = onDialogDismiss; + + mBinding.createNewLuButton.setOnClickListener(v -> { + final ProgressDialog progressDialog = UtilityProgress.createDefaultProgressDialog(currentContext); + progressDialog.show(); + + ColliMagazzinoRESTConsumer.createColloLavorazione(createdMtbColt -> { + sendMtbColt(createdMtbColt, progressDialog); + }, ex -> { + UtilityExceptions.defaultException(currentContext, ex, progressDialog); + }); + }); + } + + private static void initBarcode(Context context) { + + int barcodeIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() + .setOnScanSuccessfull(onScanSuccessfull) + .setOnScanFailed(ex -> UtilityExceptions.defaultException(context, ex, false))); + + currentAlert.setOnDismissListener(dialog -> { + BarcodeManager.removeCallback(barcodeIstanceID); + }); + + } + + + private static RunnableArgs onScanSuccessfull = data -> { + BarcodeManager.disable(); + + final ProgressDialog progressDialog = UtilityProgress.createDefaultProgressDialog(currentContext); + progressDialog.show(); + + if(UtilityBarcode.isEtichettaAnonima(data)) { + executeEtichettaAnonima(data, progressDialog); + } else if(data.getType() == BarcodeType.EAN128) { + executeEAN128(data, progressDialog); + } else { + progressDialog.dismiss(); + BarcodeManager.enable(); + showNoULFound(); + } + + }; + + + private static void executeEtichettaAnonima(BarcodeScanDTO barcodeScanDTO, ProgressDialog progressDialog) { + ColliMagazzinoRESTConsumer.getBySSCC(barcodeScanDTO.getStringValue(), true, false, mtbColt -> { + + if(mtbColt == null) { + + ColliMagazzinoRESTConsumer.createColloFromEtichettaAnonima(barcodeScanDTO, "L", createdMtbColt -> { + BarcodeManager.enable(); + createdMtbColt.setDisablePrint(true); + sendMtbColt(createdMtbColt, progressDialog); + }, ex -> { + UtilityExceptions.defaultException(currentContext, ex, progressDialog); + BarcodeManager.enable(); + }); + + } else { + + BarcodeManager.enable(); + + mtbColt.setDisablePrint(true); + sendMtbColt(mtbColt, progressDialog); + + } + + }, ex -> { + UtilityExceptions.defaultException(currentContext, ex, progressDialog); + BarcodeManager.enable(); + }); + } + + + private static void executeEAN128(BarcodeScanDTO barcodeScanDTO, ProgressDialog progressDialog) { + BarcodeRESTConsumer.decodeEan128(barcodeScanDTO, ean128Model -> { + + if(ean128Model != null && !UtilityString.isNullOrEmpty(ean128Model.Sscc)) { + + ColliMagazzinoRESTConsumer.getBySSCC(ean128Model.Sscc, true, false, mtbColt -> { + + if(mtbColt != null) { + + BarcodeManager.enable(); + sendMtbColt(mtbColt, progressDialog); + + } else { + BarcodeManager.enable(); + progressDialog.dismiss(); + showNoULFound(); + } + + }, ex -> { + UtilityExceptions.defaultException(currentContext, ex, progressDialog); + BarcodeManager.enable(); + }); + + } else { + BarcodeManager.enable(); + progressDialog.dismiss(); + + showNoULFound(); + } + + + + + }, ex -> { + UtilityExceptions.defaultException(currentContext, ex, progressDialog); + BarcodeManager.enable(); + }); + } + + + private static void showNoULFound() { + + } + + private static void sendMtbColt(MtbColt mtbColtToSend, ProgressDialog progressDialog) { + progressDialog.dismiss(); + currentAlert.dismiss(); + mOnDialogDismiss.run(mtbColtToSend); + } + +} 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 c2d458c6..c404f734 100644 --- a/app/src/main/res/layout/dialog_input_quantity_articolo.xml +++ b/app/src/main/res/layout/dialog_input_quantity_articolo.xml @@ -26,8 +26,7 @@ + android:layout_height="wrap_content"> + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_main_vendita.xml b/app/src/main/res/layout/fragment_main_vendita.xml index 80811a9c..8f8703ce 100644 --- a/app/src/main/res/layout/fragment_main_vendita.xml +++ b/app/src/main/res/layout/fragment_main_vendita.xml @@ -12,6 +12,7 @@