From af815e87f9c82654a3f2b3d20b8bb7d5e6e15632 Mon Sep 17 00:00:00 2001 From: Gius95 Date: Fri, 7 Dec 2018 19:34:43 +0100 Subject: [PATCH] Implementate logiche di picking UL to UL in Versamento Merce --- .idea/caches/build_file_checksums.ser | Bin 728 -> 728 bytes app/build.gradle | 1 + .../integrywmsnative/MainActivity.java | 4 +- .../REST/consumers/ArticoloRESTConsumer.java | 27 ++ .../ArticoloRESTConsumerService.java | 4 + .../consumers/ColliMagazzinoRESTConsumer.java | 125 ++++++++- .../ColliMagazzinoRESTConsumerService.java | 6 + .../REST/consumers/PosizioneRESTonsumer.java | 41 +++ .../REST/watcher/ServerStatusChecker.java | 9 +- .../integrywmsnative/core/di/Converters.java | 13 + .../core/model/CheckableMtbAart.java | 35 +++ .../core/model/CheckableMtbColr.java | 36 +++ .../integrywmsnative/core/model/MtbAart.java | 152 +++++------ .../integrywmsnative/core/model/MtbColt.java | 9 +- .../core/model/MtbDepoPosizione.java | 49 ++++ .../core/settings/DBSettingsModel.java | 11 + .../core/settings/SettingsManager.java | 16 +- .../core/utility/UtilityBarcode.java | 21 ++ .../core/utility/UtilityServer.java | 37 ++- .../core/AccettazioneOrdineInevasoHelper.java | 6 +- ...eOnOrdineAccettazioneInevasoViewModel.java | 8 +- .../RettificaGiacenzeFragment.java | 2 - .../viewmodel/RettificaGiacenzeViewModel.java | 31 +-- .../core/VenditaOrdineInevasoHelper.java | 2 + .../VenditaOrdineInevasoViewModel.java | 2 +- .../VersamentoMerceFragment.java | 108 +++++++- .../core/VersamentoMerceHelper.java | 13 + .../viewmodel/VersamentoMerceViewModel.java | 258 ++++++++++++++++++ ...java => DialogChooseArtFromListaArts.java} | 26 +- ... DialogChooseArtFromListaArtsAdapter.java} | 11 +- .../DialogChooseArtsFromListaArts.java | 104 +++++++ .../DialogChooseArtsFromListaArtsAdapter.java | 84 ++++++ .../input_quantity/DialogInputQuantity.java | 45 +-- .../DialogScanOrCreateLU.java | 99 +++++-- ...hoose_arts_from_lista_arts__item_model.xml | 113 ++++++++ ...log_choose_arts_from_lista_arts_layout.xml | 35 +++ .../res/layout/dialog_scan_or_create_lu.xml | 41 +-- .../layout/fragment_main_versamento_merce.xml | 139 ++++++++++ .../main/res/menu/activity_main_drawer.xml | 2 +- app/src/main/res/values-it/strings.xml | 4 + app/src/main/res/values/strings.xml | 4 + 41 files changed, 1514 insertions(+), 219 deletions(-) create mode 100644 app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/PosizioneRESTonsumer.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/core/model/CheckableMtbAart.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/core/model/CheckableMtbColr.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/core/model/MtbDepoPosizione.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/gest/versamento_merce/core/VersamentoMerceHelper.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/gest/versamento_merce/viewmodel/VersamentoMerceViewModel.java rename app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_arts/{DialogChooseArtFromListaArt.java => DialogChooseArtFromListaArts.java} (72%) rename app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_arts/{DialogChooseArtFromListaArtAdapter.java => DialogChooseArtFromListaArtsAdapter.java} (76%) create mode 100644 app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_arts_from_lista_arts/DialogChooseArtsFromListaArts.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_arts_from_lista_arts/DialogChooseArtsFromListaArtsAdapter.java create mode 100644 app/src/main/res/layout/dialog_choose_arts_from_lista_arts__item_model.xml create mode 100644 app/src/main/res/layout/dialog_choose_arts_from_lista_arts_layout.xml create mode 100644 app/src/main/res/layout/fragment_main_versamento_merce.xml diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index fe61d7ed35dd8d289e6c08164d617a5f95cbe3ac..2557897699ae4e03f46200969abf3271f63ecb08 100644 GIT binary patch delta 70 zcmV-M0J;Cz1=t0Um;{Ix@AHwIPm?79Ba!_U7A;^aMX)@R1x>u0WfzTNB{r; delta 55 zcmV-70LcH?1=t0Um;`fBMih~pPXrKQaBz|VBoH9KIC+xpyQP;v;;eg&VtSG3C6kZ> N36mrN60>6gbpc~@6?gyu diff --git a/app/build.gradle b/app/build.gradle index 96c23c70..834f6cac 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,5 +1,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' +apply plugin: 'kotlin-android-extensions' android { compileSdkVersion 27 diff --git a/app/src/main/java/it/integry/integrywmsnative/MainActivity.java b/app/src/main/java/it/integry/integrywmsnative/MainActivity.java index 0eff41f4..c9926fa6 100644 --- a/app/src/main/java/it/integry/integrywmsnative/MainActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/MainActivity.java @@ -33,6 +33,7 @@ import it.integry.integrywmsnative.gest.main.MainFragment; import it.integry.integrywmsnative.gest.rettifica_giacenze.RettificaGiacenzeFragment; import it.integry.integrywmsnative.gest.settings.MainSettingsFragment; import it.integry.integrywmsnative.gest.vendita.MainVenditaFragment; +import it.integry.integrywmsnative.gest.versamento_merce.VersamentoMerceFragment; import it.integry.plugins.waterfalltoolbar.WaterfallToolbar; public class MainActivity extends AppCompatActivity @@ -149,7 +150,8 @@ public class MainActivity extends AppCompatActivity fragment = RettificaGiacenzeFragment.newInstance(); this.adaptViewToFragment(fragment); } else if (id == R.id.nav_manage) { - + fragment = VersamentoMerceFragment.newInstance(); + this.adaptViewToFragment(fragment); } else if (id == R.id.nav_share) { } else if (id == R.id.nav_send) { diff --git a/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ArticoloRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ArticoloRESTConsumer.java index db3dd08d..b7e5b40b 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ArticoloRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ArticoloRESTConsumer.java @@ -1,5 +1,8 @@ package it.integry.integrywmsnative.core.REST.consumers; +import com.annimon.stream.Collectors; +import com.annimon.stream.Stream; + import java.util.List; import it.integry.integrywmsnative.core.REST.RESTBuilder; @@ -30,4 +33,28 @@ public class ArticoloRESTConsumer extends _BaseRESTConsumer { }); } + + public static void getByCodMart(List codMartToFind, RunnableArgs> onComplete, RunnableArgs onFailed) { + + String joinedCods = Stream.of(codMartToFind) + .collect(Collectors.joining(",")); + + + ArticoloRESTConsumerService articoloRESTConsumer = RESTBuilder.getService(ArticoloRESTConsumerService.class); + articoloRESTConsumer.getByCodMart(joinedCods).enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + analyzeAnswer(response, "getByCodMart", (m) -> { + onComplete.run(response.body().getEntityList()); + }, onFailed); + } + + @Override + public void onFailure(Call> call, Throwable t) { + onFailed.run(new Exception(t)); + } + }); + + } + } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ArticoloRESTConsumerService.java b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ArticoloRESTConsumerService.java index 9be5e171..5d476b84 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ArticoloRESTConsumerService.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ArticoloRESTConsumerService.java @@ -5,6 +5,7 @@ import java.util.List; import it.integry.integrywmsnative.core.REST.model.ServiceRESTResponse; import it.integry.integrywmsnative.core.model.MtbAart; import retrofit2.Call; +import retrofit2.http.GET; import retrofit2.http.POST; import retrofit2.http.Query; @@ -14,4 +15,7 @@ public interface ArticoloRESTConsumerService { @POST("SM2getArticoloByBarcode") Call> getByBarcodeProd(@Query("barcode") String barcodeProd); + @GET("SM2getArticoloByCodMart") + Call> getByCodMart(@Query("codMart") String barcodeProd); + } 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 708bf4b0..91b5a73b 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 @@ -1,8 +1,11 @@ package it.integry.integrywmsnative.core.REST.consumers; +import com.annimon.stream.Stream; import com.google.gson.JsonObject; +import java.text.SimpleDateFormat; import java.util.Date; +import java.util.List; import it.integry.integrywmsnative.core.CommonConst; import it.integry.integrywmsnative.core.REST.RESTBuilder; @@ -10,8 +13,11 @@ import it.integry.integrywmsnative.core.REST.model.DistribuzioneColloDTO; import it.integry.integrywmsnative.core.REST.model.ServiceRESTResponse; import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.model.CommonModelConsts; +import it.integry.integrywmsnative.core.model.MtbAart; import it.integry.integrywmsnative.core.model.MtbColr; import it.integry.integrywmsnative.core.model.MtbColt; +import it.integry.integrywmsnative.core.model.MtbDepo; +import it.integry.integrywmsnative.core.model.MtbDepoPosizione; import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.utility.UtilityBarcode; @@ -24,6 +30,26 @@ import retrofit2.Response; public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer{ + public static void getAvailablePosizioni(RunnableArgs> onComplete, RunnableArgs onFailed) { + String codMdep = SettingsManager.i().userSession.depo.getCodMdep(); + + ColliMagazzinoRESTConsumerService colliMagazzinoRESTConsumerService = RESTBuilder.getService(ColliMagazzinoRESTConsumerService.class); + colliMagazzinoRESTConsumerService.getAvailablePosizioni(codMdep).enqueue(new Callback>>() { + @Override + public void onResponse(Call>> call, Response>> response) { + analyzeAnswer(response, "getAvailablePosizioni", (m) -> { + onComplete.run(response.body().getDto()); + }, onFailed); + } + + @Override + public void onFailure(Call>> call, Throwable t) { + onFailed.run(new Exception(t)); + } + }); + } + + public static void saveCollo(MtbColt mtbColtToSave, final ISimpleOperationCallback callback){ EntityRESTConsumer.processEntity(mtbColtToSave, callback, MtbColt.class); @@ -132,7 +158,43 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer{ colliMagazzinoRESTConsumerService.getColloByBarcode(ssccString, onlyResiduo, throwExcIfNull).enqueue(new Callback>() { @Override public void onResponse(Call> call, Response> response) { - analyzeAnswer(response, "GetBySSCC", onComplete, onFailed); + analyzeAnswer(response, "GetBySSCC", mtbColt -> { + + if(mtbColt != null && mtbColt.getMtbColr() != null && mtbColt.getMtbColr().size() > 0){ + List codMarts = Stream.of(mtbColt.getMtbColr()) + .map(MtbColr::getCodMart) + .withoutNulls() + .distinct() + .toList(); + + ArticoloRESTConsumer.getByCodMart(codMarts, arts -> { + + if(arts != null && arts.size() > 0) { + for (MtbColr mtbColr : mtbColt.getMtbColr()) { + + MtbAart foundMtbAart = null; + + List mtbAartStream = Stream.of(arts) + .filter(x -> x.getCodMart().equalsIgnoreCase(mtbColr.getCodMart())).toList(); + + if(mtbAartStream != null && mtbAartStream.size() > 0){ + foundMtbAart = mtbAartStream.get(0); + } + + mtbColr.setMtbAart(foundMtbAart); + } + } + + }, onFailed); + + } + + onComplete.run(mtbColt); + + }, onFailed); + + + } @Override @@ -143,6 +205,65 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer{ } + public static void getByTestata(MtbColt testata, boolean onlyResiduo, boolean throwExcIfNull, RunnableArgs onComplete, RunnableArgs onFailed) { + String ssccString = null; + + if(testata.getSerCollo().equalsIgnoreCase(CommonConst.Config.DEFAULT_ANONYMOUS_UL_SERIE)){ + ssccString = "U"; + + SimpleDateFormat sdf = new SimpleDateFormat("yy"); + ssccString += sdf.format(testata.getDataColloD()); + + ssccString += String.format("%07d", testata.getNumCollo()); + } else { + ssccString = ""; + + switch (testata.getGestioneEnum()) { + case ACQUISTO: + ssccString += "1"; + break; + + case LAVORAZIONE: + ssccString += "2"; + break; + + case VENDITA: + ssccString += "3"; + break; + } + + SimpleDateFormat sdf = new SimpleDateFormat("yy"); + ssccString += sdf.format(testata.getDataColloD()); + + ssccString += String.format("%05d", testata.getNumCollo()); + ssccString += "0"; + } + + getBySSCC(ssccString, onlyResiduo, throwExcIfNull, onComplete, onFailed); + } + + + public static void changePosizione(MtbColt testata, MtbDepoPosizione posizione, Runnable onComplete, RunnableArgs onFailed) { + + testata.setOperation(CommonModelConsts.OPERATION.UPDATE); + + if(posizione == null) testata.setPosizione(null); + else testata.setPosizione(posizione.getPosizione()); + + ColliMagazzinoRESTConsumer.saveCollo(testata, new ISimpleOperationCallback() { + @Override + public void onSuccess(MtbColt value) { + if(onComplete != null) onComplete.run(); + } + + @Override + public void onFailed(Exception ex) { + if(onFailed != null) onFailed.run(ex); + } + }); + + } + public static void deleteRiga(MtbColr mtbColrToDelete, Runnable onComplete, RunnableArgs onFailed){ @@ -193,4 +314,6 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer{ + + } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ColliMagazzinoRESTConsumerService.java b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ColliMagazzinoRESTConsumerService.java index a91f2f4c..571a9399 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ColliMagazzinoRESTConsumerService.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ColliMagazzinoRESTConsumerService.java @@ -2,17 +2,23 @@ package it.integry.integrywmsnative.core.REST.consumers; import com.google.gson.JsonObject; +import java.util.List; + import it.integry.integrywmsnative.core.REST.model.DistribuzioneColloDTO; import it.integry.integrywmsnative.core.REST.model.ServiceRESTResponse; import it.integry.integrywmsnative.core.model.MtbColr; import it.integry.integrywmsnative.core.model.MtbColt; +import it.integry.integrywmsnative.core.model.MtbDepoPosizione; import retrofit2.Call; import retrofit2.http.Body; +import retrofit2.http.GET; import retrofit2.http.POST; import retrofit2.http.Query; public interface ColliMagazzinoRESTConsumerService { + @GET("getAvailablePosizioni") + Call>> getAvailablePosizioni(@Query("codMdep") String codMdep); @POST("SM2DistribuzioneRigheCollo") Call> distribuisciCollo(@Body DistribuzioneColloDTO distribuzioneCollo); diff --git a/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/PosizioneRESTonsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/PosizioneRESTonsumer.java new file mode 100644 index 00000000..cc970746 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/PosizioneRESTonsumer.java @@ -0,0 +1,41 @@ +package it.integry.integrywmsnative.core.REST.consumers; + +import com.annimon.stream.Stream; +import com.google.gson.reflect.TypeToken; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; + +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.model.MtbColt; +import it.integry.integrywmsnative.core.model.MtbDepoPosizione; +import it.integry.integrywmsnative.core.utility.UtilityDB; + +public class PosizioneRESTonsumer extends _BaseRESTConsumer { + + + + public static void getBancaliInPosizione(MtbDepoPosizione mtbDepoPosizione, RunnableArgs> onComplete, RunnableArgs onFailed) { + + + String sql = "SELECT * FROM mtb_colt WHERE cod_mdep = " + UtilityDB.valueToString(mtbDepoPosizione.getCodMdep()) + " AND posizione = " + UtilityDB.valueToString(mtbDepoPosizione.getPosizione()); + + + Type typeOfObjectsList = new TypeToken>() {}.getType(); + SystemRESTConsumer.processSql(sql, typeOfObjectsList, new ISimpleOperationCallback>() { + @Override + public void onSuccess(List value) { + if(onComplete != null) onComplete.run(value); + } + + @Override + public void onFailed(Exception ex) { + if(onFailed != null) onFailed.run(ex); + } + }); + + } + + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/REST/watcher/ServerStatusChecker.java b/app/src/main/java/it/integry/integrywmsnative/core/REST/watcher/ServerStatusChecker.java index d141f2c1..4001ba3e 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/REST/watcher/ServerStatusChecker.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/REST/watcher/ServerStatusChecker.java @@ -16,12 +16,9 @@ public class ServerStatusChecker { private List> mCallback = new ArrayList<>(); - private ISingleValueOperationCallback mInternalCallback = new ISingleValueOperationCallback() { - @Override - public void onResult(Boolean value) { - for (ISingleValueOperationCallback callback : mCallback) { - callback.onResult(value); - } + private ISingleValueOperationCallback mInternalCallback = value -> { + for (ISingleValueOperationCallback callback : mCallback) { + callback.onResult(value); } }; diff --git a/app/src/main/java/it/integry/integrywmsnative/core/di/Converters.java b/app/src/main/java/it/integry/integrywmsnative/core/di/Converters.java index 0ec54f26..746fc636 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/di/Converters.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/di/Converters.java @@ -5,6 +5,7 @@ import android.databinding.BindingConversion; import android.support.constraint.Guideline; import android.support.design.widget.TextInputEditText; import android.support.v4.util.Pair; +import android.support.v7.widget.AppCompatCheckBox; import android.support.v7.widget.AppCompatTextView; import android.util.Log; import android.view.View; @@ -145,6 +146,18 @@ public class Converters { ((RadioButton) view.getChildAt(newValue ? 1 : 0)).setChecked(true); } + @BindingAdapter("app:checked") + public static void bindCheckbox(AppCompatCheckBox view, final BindableBoolean bindableBoolean) { + if (view.getTag(R.id.bound_observable) != bindableBoolean) { + view.setTag(R.id.bound_observable, bindableBoolean); + view.setOnCheckedChangeListener((compoundButton, b) -> { + bindableBoolean.set(b); + }); + } + Boolean newValue = bindableBoolean.get(); + view.setChecked(newValue); + } + @BindingAdapter("app:checked") public static void bindCheckbox(CheckBox view, final BindableBoolean bindableBoolean) { if (view.getTag(R.id.bound_observable) != bindableBoolean) { diff --git a/app/src/main/java/it/integry/integrywmsnative/core/model/CheckableMtbAart.java b/app/src/main/java/it/integry/integrywmsnative/core/model/CheckableMtbAart.java new file mode 100644 index 00000000..6a4b2e8b --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/model/CheckableMtbAart.java @@ -0,0 +1,35 @@ +package it.integry.integrywmsnative.core.model; + +import it.integry.integrywmsnative.core.di.BindableBoolean; + +public class CheckableMtbAart { + + private MtbAart mtbAart; + private BindableBoolean checked = new BindableBoolean(false); + + public CheckableMtbAart(MtbAart mtbAart) { + this.mtbAart = mtbAart; + } + + public MtbAart getMtbAart() { + return mtbAart; + } + + public CheckableMtbAart setMtbAart(MtbAart mtbAart) { + this.mtbAart = mtbAart; + return this; + } + + public BindableBoolean getChecked() { + return checked; + } + + public CheckableMtbAart setChecked(BindableBoolean checked) { + this.checked = checked; + return this; + } + + public void toggleCheck() { + this.checked.set(!this.checked.get()); + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/model/CheckableMtbColr.java b/app/src/main/java/it/integry/integrywmsnative/core/model/CheckableMtbColr.java new file mode 100644 index 00000000..f6cc9751 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/model/CheckableMtbColr.java @@ -0,0 +1,36 @@ +package it.integry.integrywmsnative.core.model; + +import it.integry.integrywmsnative.core.di.BindableBoolean; + +public class CheckableMtbColr { + + + private MtbColr mtbColr; + private BindableBoolean checked = new BindableBoolean(false); + + public CheckableMtbColr(MtbColr mtbColr) { + this.mtbColr = mtbColr; + } + + public MtbColr getMtbColr() { + return mtbColr; + } + + public CheckableMtbColr setMtbColr(MtbColr mtbColr) { + this.mtbColr = mtbColr; + return this; + } + + public BindableBoolean getChecked() { + return checked; + } + + public CheckableMtbColr setChecked(BindableBoolean checked) { + this.checked = checked; + return this; + } + + public void toggleCheck() { + this.checked.set(!this.checked.get()); + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/model/MtbAart.java b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbAart.java index 61a4a3d3..d5168a05 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/model/MtbAart.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbAart.java @@ -12,82 +12,82 @@ import java.util.Date; public class MtbAart implements Parcelable{ - public String codMart; - public String descrizione; - public String untMis; - public String barCode; - public BigDecimal pesoKg; - public BigDecimal qtaCnf; - public String codAliq; - public String codScoArt; - public String codTcolUi; - public String codTcolUl; - public String articoloComposto; - public String esposizioneComp; - public String descrizioneEstesa; - public String codUltForn; - public String dataUltCar; - public BigDecimal valUltCar; - public String codUltClie; - public String dataUltScar; - public BigDecimal valUltScar; - public String tipoCodice; - public String note; - public String posizione; - public BigDecimal colliPedana; - public String untMis2; - public BigDecimal rapConv2; - public String flagInclListino; - public String untMis3; - public BigDecimal rapConv3; - public String codMartStat; - public String codMcon; - public String codMgrp; - public String codMsfa; - public String codMsgr; - public String codMstp; - public String codMtip; - public String descrizioneStat; - public String flagStato; - public BigDecimal cambioDiviCar; - public BigDecimal cambioDiviScar; - public Integer ggScadPartita; - public BigDecimal volumeMc; - public String flagEsponiPrz; - public String dataUltVar; - public BigDecimal percSfrido; - public String codBarreImb; - public String flagCalcPrz; - public String esposizioneCompAcq; - public String flagCalcPrzAcq; - public String diacod; - public String plu; - public String partIvaProd; - public String ragSocProd; - public String flagRapConvVariabile; - public String flagMovArtMag; - public String flagTracciabilita; - public BigDecimal taraKg; - public BigDecimal colliStrato; - public String flagQtaCnfFissa; - public String flagColliPedanaFisso; - public String codCconCosti; - public String codCconRicavi; - public String codDgrpArt; - public String codDiviCar; - public String codDiviScar; - public String codEcrCat; - public String codEcrMcat; - public String codEcrRep; - public String codEcrStipo; - public String codEcrTipo; - public String codGrpBolla; - public String ingredienti; - public String idArtEqui; - public String descrCassa; - public String codNcIntracee; - public String marchio; - public Integer sezione; + private String codMart; + private String descrizione; + private String untMis; + private String barCode; + private BigDecimal pesoKg; + private BigDecimal qtaCnf; + private String codAliq; + private String codScoArt; + private String codTcolUi; + private String codTcolUl; + private String articoloComposto; + private String esposizioneComp; + private String descrizioneEstesa; + private String codUltForn; + private String dataUltCar; + private BigDecimal valUltCar; + private String codUltClie; + private String dataUltScar; + private BigDecimal valUltScar; + private String tipoCodice; + private String note; + private String posizione; + private BigDecimal colliPedana; + private String untMis2; + private BigDecimal rapConv2; + private String flagInclListino; + private String untMis3; + private BigDecimal rapConv3; + private String codMartStat; + private String codMcon; + private String codMgrp; + private String codMsfa; + private String codMsgr; + private String codMstp; + private String codMtip; + private String descrizioneStat; + private String flagStato; + private BigDecimal cambioDiviCar; + private BigDecimal cambioDiviScar; + private Integer ggScadPartita; + private BigDecimal volumeMc; + private String flagEsponiPrz; + private String dataUltVar; + private BigDecimal percSfrido; + private String codBarreImb; + private String flagCalcPrz; + private String esposizioneCompAcq; + private String flagCalcPrzAcq; + private String diacod; + private String plu; + private String partIvaProd; + private String ragSocProd; + private String flagRapConvVariabile; + private String flagMovArtMag; + private String flagTracciabilita; + private BigDecimal taraKg; + private BigDecimal colliStrato; + private String flagQtaCnfFissa; + private String flagColliPedanaFisso; + private String codCconCosti; + private String codCconRicavi; + private String codDgrpArt; + private String codDiviCar; + private String codDiviScar; + private String codEcrCat; + private String codEcrMcat; + private String codEcrRep; + private String codEcrStipo; + private String codEcrTipo; + private String codGrpBolla; + private String ingredienti; + private String idArtEqui; + private String descrCassa; + private String codNcIntracee; + private String marchio; + private Integer sezione; public MtbAart(){} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColt.java b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColt.java index c56b02ad..24826a57 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColt.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColt.java @@ -332,9 +332,14 @@ public class MtbColt extends EntityBase implements Parcelable { return dataCollo; } - public Date getDataColloD() throws ParseException { + public Date getDataColloD() { SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); - return sdf.parse(getDataColloS()); + try { + return sdf.parse(getDataColloS()); + } catch (ParseException e) { + UtilityLogger.errorMe(e); + return null; + } } public MtbColt setDataCollo(String dataCollo) { diff --git a/app/src/main/java/it/integry/integrywmsnative/core/model/MtbDepoPosizione.java b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbDepoPosizione.java new file mode 100644 index 00000000..f67b8e3b --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbDepoPosizione.java @@ -0,0 +1,49 @@ +package it.integry.integrywmsnative.core.model; + +public class MtbDepoPosizione { + + private String codMdep; + private String posizione; + private String descrizione; + private String flagMonoCollo; + + public String getCodMdep() { + return codMdep; + } + + public MtbDepoPosizione setCodMdep(String codMdep) { + this.codMdep = codMdep; + return this; + } + + public String getPosizione() { + return posizione; + } + + public MtbDepoPosizione setPosizione(String posizione) { + this.posizione = posizione; + return this; + } + + public String getDescrizione() { + return descrizione; + } + + public MtbDepoPosizione setDescrizione(String descrizione) { + this.descrizione = descrizione; + return this; + } + + public String getFlagMonoCollo() { + return flagMonoCollo; + } + + public MtbDepoPosizione setFlagMonoCollo(String flagMonoCollo) { + this.flagMonoCollo = flagMonoCollo; + return this; + } + + public boolean isFlagMonoCollo() { + return flagMonoCollo.equalsIgnoreCase("S"); + } +} 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 c378e3ba..6e5c66e3 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 @@ -3,11 +3,14 @@ package it.integry.integrywmsnative.core.settings; import java.util.List; import it.integry.integrywmsnative.core.REST.model.AvailableCodMdepsDTO; +import it.integry.integrywmsnative.core.model.MtbDepo; +import it.integry.integrywmsnative.core.model.MtbDepoPosizione; public class DBSettingsModel { private List availableProfiles = null; private List availableCodMdep = null; + private List availablePosizioni = null; private boolean enableCheckPartitaMagCheckPickingV; private boolean flagMultiClienteOrdV; @@ -18,10 +21,18 @@ public class DBSettingsModel { return availableProfiles; } + public List getAvailablePosizioni() { + return availablePosizioni; + } + public void setAvailableProfiles(List availableProfiles) { this.availableProfiles = availableProfiles; } + public void setAvailablePosizioni(List availablePosizioni) { + this.availablePosizioni = availablePosizioni; + } + public List getAvailableCodMdep() { return availableCodMdep; } 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 e4a6a2dc..83df8179 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 @@ -5,6 +5,7 @@ import android.content.Context; import java.util.List; import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.REST.consumers.ColliMagazzinoRESTConsumer; import it.integry.integrywmsnative.core.REST.consumers.GestSetupRESTConsumer; import it.integry.integrywmsnative.core.REST.consumers.ISimpleOperationCallback; import it.integry.integrywmsnative.core.REST.consumers.SystemRESTConsumer; @@ -69,7 +70,8 @@ public class SettingsManager { loadAvailableProfiles(() -> loadAvailableCodMdeps(() -> - loadGestSetupValues(onComplete, onFailed) ,onFailed), onFailed); + loadAvailablePosizioni(() -> + loadGestSetupValues(onComplete, onFailed) ,onFailed), onFailed), onFailed); } private static void loadAvailableProfiles(Runnable onComplete, RunnableArgs onFailed){ @@ -129,6 +131,18 @@ public class SettingsManager { } + private static void loadAvailablePosizioni(Runnable onComplete, RunnableArgs onFailed) { + ColliMagazzinoRESTConsumer.getAvailablePosizioni(availablePosizioni -> { + dbSettingsModelIstance.setAvailablePosizioni(availablePosizioni); + + if(onComplete != null) onComplete.run(); + }, ex -> { + if(onFailed != null) onFailed.run(ex); + } + ); + } + + private static void loadGestSetupValues(Runnable onComplete, RunnableArgs onFailed) { GestSetupRESTConsumer.getValue("PICKING", "SETUP", "DEFAULT_CAUSALE_RETTIFICA_GIACENZE", valueDefaultCausaleRettificaGiacenze -> { dbSettingsModelIstance.setDefaultCausaleRettificaGiacenze(valueDefaultCausaleRettificaGiacenze.value); diff --git a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityBarcode.java b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityBarcode.java index 78aca7a1..bd6258d1 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityBarcode.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityBarcode.java @@ -1,5 +1,9 @@ package it.integry.integrywmsnative.core.utility; +import com.annimon.stream.Stream; + +import it.integry.integrywmsnative.core.model.MtbDepoPosizione; +import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.plugins.barcode_base_library.model.BarcodeScanDTO; import it.integry.plugins.barcode_base_library.model.BarcodeType; @@ -9,6 +13,23 @@ public class UtilityBarcode { return barcodeScanDTO != null && barcodeScanDTO.getType() == BarcodeType.CODE128 && barcodeScanDTO.getStringValue().startsWith("U"); } + public static boolean isEtichettaPosizione(BarcodeScanDTO barcodeScanDTO) { + String barcode = barcodeScanDTO.getStringValue(); + boolean isPosizione = false; + + if(SettingsManager.iDB().getAvailablePosizioni() != null) { + Stream tmpStream = Stream.of(SettingsManager.iDB().getAvailablePosizioni()) + .filter(x -> x.getPosizione().equalsIgnoreCase(barcode)); + + if(tmpStream.count() > 0){ + isPosizione = true; + } + } + + + return barcodeScanDTO != null && isPosizione; + } + public static boolean isEanPeso(BarcodeScanDTO barcodeScanDTO) { return barcodeScanDTO != null && barcodeScanDTO.getType() == BarcodeType.EAN13 && barcodeScanDTO.getStringValue().startsWith("2"); } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityServer.java b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityServer.java index 9b588223..a57129c8 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityServer.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityServer.java @@ -10,29 +10,26 @@ import it.integry.integrywmsnative.core.REST.consumers.ISingleValueOperationCall public class UtilityServer { public static void isHostReachable(final String serverAddress, final int serverTCPport, final ISingleValueOperationCallback callback){ - new Thread(new Runnable() { - @Override - public void run() { + new Thread(() -> { - boolean connected = false; - Socket socket; - try { - socket = new Socket(); - SocketAddress socketAddress = new InetSocketAddress(serverAddress, serverTCPport); - socket.connect(socketAddress, 10000); - if (socket.isConnected()) { - connected = true; - socket.close(); - } - } catch (IOException e) { - e.printStackTrace(); - } finally { - socket = null; + boolean connected = false; + Socket socket; + try { + socket = new Socket(); + SocketAddress socketAddress = new InetSocketAddress(serverAddress, serverTCPport); + socket.connect(socketAddress, 10000); + if (socket.isConnected()) { + connected = true; + socket.close(); } - - callback.onResult(connected); - + } catch (IOException e) { + e.printStackTrace(); + } finally { + socket = null; } + + callback.onResult(connected); + }).start(); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/core/AccettazioneOrdineInevasoHelper.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/core/AccettazioneOrdineInevasoHelper.java index e60c39af..bffb15dc 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/core/AccettazioneOrdineInevasoHelper.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/core/AccettazioneOrdineInevasoHelper.java @@ -206,7 +206,7 @@ public class AccettazioneOrdineInevasoHelper { } } - Collections.sort(tmpList, (obj1, obj2) -> obj1.mtbAart.descrizioneEstesa.compareToIgnoreCase(obj2.mtbAart.descrizioneEstesa)); + Collections.sort(tmpList, (obj1, obj2) -> obj1.mtbAart.getDescrizioneEstesa().compareToIgnoreCase(obj2.mtbAart.getDescrizioneEstesa())); if(tmpList.size() > 0){ groupedRighe.add(tmpList); @@ -278,7 +278,7 @@ public class AccettazioneOrdineInevasoHelper { rowModel.setBadge1(rowItem.codArtFor); rowModel.setBadge2(String.valueOf(rowItem.numOrd)); - rowModel.setDescrizione(rowItem.mtbAart.descrizioneEstesa); + rowModel.setDescrizione(rowItem.mtbAart.getDescrizioneEstesa()); rowModel.setQtaRiservata(getRigaQuantityEvasa(rowItem, mtbColrs)); // rowModel.qtaRiservata = decimalFormat.format(rowItem.qtaRiservate); @@ -303,7 +303,7 @@ public class AccettazioneOrdineInevasoHelper { SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); List filteredMtbColrs = Stream.of(mtbColrs).filter( - x -> x.getCodMart().equalsIgnoreCase(item.mtbAart.codMart) && + x -> x.getCodMart().equalsIgnoreCase(item.mtbAart.getCodMart()) && (x.getCodJcom() != null && x.getCodJcom().equalsIgnoreCase(item.codJcom)) && x.getRigaOrd() == item.rigaOrd && x.getNumOrd() == item.numOrd && 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 98ef153d..49b67cd1 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 @@ -319,7 +319,7 @@ public class AccettazioneOnOrdineAccettazioneInevasoViewModel implements IOnColl removeListFilter(); List foundRowsList = Stream.of(groupedOrdini) - .filter(x -> x.getMtbAart().getCodMart().equalsIgnoreCase(mtbAart.codMart) && + .filter(x -> x.getMtbAart().getCodMart().equalsIgnoreCase(mtbAart.getCodMart()) && (x.isHidden() != null && !x.isHidden()) && (x.isTempHidden() != null && !x.isTempHidden())) .toList(); @@ -675,7 +675,7 @@ public class AccettazioneOnOrdineAccettazioneInevasoViewModel implements IOnColl List currentMtbColrs = mArticoliInColloBottomSheetViewModel.mtbColt.get().getMtbColr(); List filteredMtbColrs = Stream.of(currentMtbColrs).filter( - x -> x.getCodMart().equalsIgnoreCase(item.mtbAart.codMart) && + x -> x.getCodMart().equalsIgnoreCase(item.mtbAart.getCodMart()) && x.getNumOrd() == item.numOrd && (x.getCodJcom() != null && x.getCodJcom().equalsIgnoreCase(item.codJcom)) && x.getRigaOrd() == item.rigaOrd).toList(); @@ -746,7 +746,7 @@ public class AccettazioneOnOrdineAccettazioneInevasoViewModel implements IOnColl mActivity.getText(R.string.loading) + " ...", true); final MtbColr mtbColr = new MtbColr() - .setCodMart(item.mtbAart.codMart) + .setCodMart(item.mtbAart.getCodMart()) .setPartitaMag(quantityDTO.batchLot.get()) .setDataScadPartita(quantityDTO.expireDate) .setQtaCol(new BigDecimal(quantityDTO.qtaTot.get())) @@ -774,7 +774,7 @@ public class AccettazioneOnOrdineAccettazioneInevasoViewModel implements IOnColl .setGestione(value.getGestione()) .setSerCollo(value.getSerCollo()) .setRiga(value.getMtbColr().get(0).getRiga()) - .setUntMis(item.getMtbAart().untMis) + .setUntMis(item.getMtbAart().getUntMis()) .setMtbAart(item.getMtbAart()); //item.setQtaRiservate(item.getQtaRiservate().add(mtbColr.getQtaCol())); 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 58133970..e41508b0 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 @@ -56,8 +56,6 @@ public class RettificaGiacenzeFragment extends Fragment implements ITitledFragme mBinding.setView(this); mBinding.setViewmodel(mRettificaGiacenzeViewModel); - ButterKnife.bind(this, mBinding.getRoot()); - init(); return mBinding.getRoot(); } 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 80c7e3de..a57ceffe 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 @@ -38,10 +38,8 @@ import it.integry.integrywmsnative.core.model.MtbCols; import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.report.ReportManager; import it.integry.integrywmsnative.core.settings.SettingsManager; -import it.integry.integrywmsnative.core.utility.UtilityBarcode; import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.core.utility.UtilityLogger; -import it.integry.integrywmsnative.core.utility.UtilityNumber; import it.integry.integrywmsnative.core.utility.UtilityProgress; import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.databinding.FragmentMainRettificaGiacenzeBinding; @@ -51,13 +49,12 @@ import it.integry.integrywmsnative.gest.rettifica_giacenze.core.adapter.Rettific import it.integry.integrywmsnative.gest.rettifica_giacenze.dto.FornitoreDTO; import it.integry.integrywmsnative.ui.StatusBarAlert; import it.integry.integrywmsnative.view.dialogs.DialogSimpleMessageHelper; -import it.integry.integrywmsnative.view.dialogs.choose_art_from_lista_arts.DialogChooseArtFromListaArt; +import it.integry.integrywmsnative.view.dialogs.choose_art_from_lista_arts.DialogChooseArtFromListaArts; import it.integry.integrywmsnative.view.dialogs.input_quantity.DialogInputQuantity; import it.integry.integrywmsnative.view.dialogs.input_quantity.QuantityDTO; import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCreateLU; import it.integry.plugins.barcode_base_library.model.BarcodeScanDTO; import it.integry.plugins.barcode_base_library.model.BarcodeType; -import kotlin.NotImplementedError; public class RettificaGiacenzeViewModel implements IRecyclerItemClicked { @@ -148,18 +145,6 @@ public class RettificaGiacenzeViewModel implements IRecyclerItemClicked BarcodeManager.enable(); } - /* - if(UtilityBarcode.isEtichettaAnonima(data) && !thereIsAnOpenedUL()){ - this.executeEtichettaAnonima(data, progressDialog); - } else if(data.getType() == BarcodeType.EAN128) { - this.executeEtichettaEan128(data, progressDialog); - } else if(UtilityBarcode.isEanPeso(data)){ - this.executeEtichettaEanPeso(data, progressDialog); - } else { - this.loadArticolo(data.getStringValue(), null, progressDialog); - } - */ - }; @@ -265,7 +250,7 @@ public class RettificaGiacenzeViewModel implements IRecyclerItemClicked } else if(articoloFornitoreDTOS.size() == 1) { dispatchArt(articoloFornitoreDTOS.get(0)); } else { - DialogChooseArtFromListaArt.makeBase(mContext, articoloFornitoreDTOS, this::dispatchArt).show(); + DialogChooseArtFromListaArts.make(mContext, articoloFornitoreDTOS, this::dispatchArt).show(); } } else { showNoArtsFound(); @@ -284,9 +269,9 @@ public class RettificaGiacenzeViewModel implements IRecyclerItemClicked qtaDto.setMtbAart(mtbAart); - qtaDto.setQtaCnf(mtbAart.qtaCnf); + qtaDto.setQtaCnf(mtbAart.getQtaCnf()); qtaDto.setNumCnf(1); - qtaDto.setQtaTot(mtbAart.qtaCnf); + qtaDto.setQtaTot(mtbAart.getQtaCnf()); qtaDto.setQtaDaEvadere(new BigDecimal(-1)); @@ -333,11 +318,11 @@ public class RettificaGiacenzeViewModel implements IRecyclerItemClicked mContext.getText(R.string.loading) + " ...", true); final MtbColr mtbColr = new MtbColr() - .setCodMart(mtbAart.codMart) + .setCodMart(mtbAart.getCodMart()) .setPartitaMag(quantityDTO.batchLot.get()) .setDataScadPartita(quantityDTO.expireDate) .setQtaCol(new BigDecimal(quantityDTO.qtaTot.get())) - .setDescrizione(mtbAart.descrizioneEstesa); + .setDescrizione(mtbAart.getDescrizioneEstesa()); mtbColr.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE); @@ -357,7 +342,7 @@ public class RettificaGiacenzeViewModel implements IRecyclerItemClicked .setGestione(value.getGestione()) .setSerCollo(value.getSerCollo()) .setRiga(value.getMtbColr().get(0).getRiga()) - .setUntMis(mtbAart.untMis) + .setUntMis(mtbAart.getUntMis()) .setMtbAart(mtbAart); mtbColt.get().getMtbColr().add(mtbColr); @@ -406,7 +391,7 @@ public class RettificaGiacenzeViewModel implements IRecyclerItemClicked } public void openLU() { - DialogScanOrCreateLU.makeBase(mContext, mtbColt -> { + DialogScanOrCreateLU.make(mContext, mtbColt -> { if(mtbColt == null) { ((MainActivity)mContext).popToMain(); } else { diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/core/VenditaOrdineInevasoHelper.java b/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/core/VenditaOrdineInevasoHelper.java index c9bad1c3..e2317fa8 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/core/VenditaOrdineInevasoHelper.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/core/VenditaOrdineInevasoHelper.java @@ -99,6 +99,8 @@ public class VenditaOrdineInevasoHelper { final PickingObjectDTO currentItem = currentGroup.get(k); final VenditaOrdineInevasoListViewModel.SubItem rowModel = new VenditaOrdineInevasoListViewModel.SubItem(); + + String badge1 = currentItem.getCodAlis() + " - " + (!UtilityString.isNullOrEmpty(currentItem.getCodArtFor()) ? currentItem.getCodArtFor() : currentItem.getCodMart()); rowModel.setBadge1(badge1); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/viewmodel/VenditaOrdineInevasoViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/viewmodel/VenditaOrdineInevasoViewModel.java index 7a85f9ef..a2b34639 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/viewmodel/VenditaOrdineInevasoViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/viewmodel/VenditaOrdineInevasoViewModel.java @@ -929,7 +929,7 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO .setGestione(value.getGestione()) .setSerCollo(value.getSerCollo()) .setRiga(value.getMtbColr().get(0).getRiga()) - .setUntMis(item.getMtbAart().untMis) + .setUntMis(item.getMtbAart().getUntMis()) .setMtbAart(item.getMtbAart()); mArticoliInColloBottomSheetViewModel.mtbColt.get().getMtbColr().add(mtbColr); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/versamento_merce/VersamentoMerceFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/versamento_merce/VersamentoMerceFragment.java index 2c6170a9..6dd39d76 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/versamento_merce/VersamentoMerceFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/versamento_merce/VersamentoMerceFragment.java @@ -1,4 +1,110 @@ package it.integry.integrywmsnative.gest.versamento_merce; -public class VersamentoMerceFragment { +import android.content.Context; +import android.databinding.DataBindingUtil; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +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.interfaces.ITitledFragment; +import it.integry.integrywmsnative.core.utility.UtilityExceptions; +import it.integry.integrywmsnative.databinding.FragmentMainVersamentoMerceBinding; +import it.integry.integrywmsnative.gest.versamento_merce.core.VersamentoMerceHelper; +import it.integry.integrywmsnative.gest.versamento_merce.viewmodel.VersamentoMerceViewModel; + +public class VersamentoMerceFragment extends Fragment implements ITitledFragment { + + private FragmentMainVersamentoMerceBinding mBinding; + private VersamentoMerceViewModel mVersamentoMerceViewModel; + private VersamentoMerceHelper mHelper; + + + private int barcodeScannerIstanceID = -1; + + public VersamentoMerceFragment() { + // Required empty public constructor + } + + + public static VersamentoMerceFragment newInstance() { + VersamentoMerceFragment fragment = new VersamentoMerceFragment(); + Bundle args = new Bundle(); + + fragment.setArguments(args); + return fragment; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + if (getArguments() != null) { + //mParam1 = getArguments().getString(ARG_PARAM1); + //mParam2 = getArguments().getString(ARG_PARAM2); + } + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_main_versamento_merce, container, false); + mVersamentoMerceViewModel = new VersamentoMerceViewModel(); + + mBinding.setView(this); + mBinding.setViewmodel(mVersamentoMerceViewModel); + + init(); + return mBinding.getRoot(); + } + + private void init() { + mHelper = new VersamentoMerceHelper(getActivity()); + mVersamentoMerceViewModel.init(getActivity(), mBinding, mHelper); + + barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() + .setOnScanSuccessfull(mVersamentoMerceViewModel.onScanSuccessfull) + .setOnScanFailed(ex -> UtilityExceptions.defaultException(getActivity(), ex, false))); + + + + /* + mHelper.loadListaFornitori(listaFornitori -> { + mRettificaGiacenzeViewModel.setupSearchFornitori(listaFornitori); + }); + + + mBinding.autoCompleteFornitori.setOnFocusChangeListener((v, hasFocus) -> { + setUIToForn(); + }); + mBinding.inputCodArtDescrForn.setOnFocusChangeListener((v, hasFocus) -> { + setUIToForn(); + }); + + mBinding.inputCodArtDescrInt.setOnFocusChangeListener((v, hasFocus) -> { + setUIToIntArt(); + }); + + */ + mVersamentoMerceViewModel.openLU(); + + } + + @Override + public void onAttach(Context context) { + super.onAttach(context); + } + + @Override + public void onDetach() { + super.onDetach(); + } + + @Override + public String getTitle(Context context) { + return context.getResources().getString(R.string.versamento_merce_fragment_title); + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/versamento_merce/core/VersamentoMerceHelper.java b/app/src/main/java/it/integry/integrywmsnative/gest/versamento_merce/core/VersamentoMerceHelper.java new file mode 100644 index 00000000..7eef4341 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/versamento_merce/core/VersamentoMerceHelper.java @@ -0,0 +1,13 @@ +package it.integry.integrywmsnative.gest.versamento_merce.core; + +import android.content.Context; + +public class VersamentoMerceHelper { + + private Context mContext; + + public VersamentoMerceHelper(Context context) { + this.mContext = context; + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/versamento_merce/viewmodel/VersamentoMerceViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/versamento_merce/viewmodel/VersamentoMerceViewModel.java new file mode 100644 index 00000000..cc2c900f --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/versamento_merce/viewmodel/VersamentoMerceViewModel.java @@ -0,0 +1,258 @@ +package it.integry.integrywmsnative.gest.versamento_merce.viewmodel; + +import android.app.Activity; +import android.app.ProgressDialog; +import android.content.Context; +import android.databinding.ObservableField; +import android.text.SpannableString; + +import com.annimon.stream.Stream; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import it.integry.integrywmsnative.MainActivity; +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.ISimpleOperationCallback; +import it.integry.integrywmsnative.core.REST.consumers.ISingleValueOperationCallback; +import it.integry.integrywmsnative.core.REST.consumers.PosizioneRESTonsumer; +import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.model.CommonModelConsts; +import it.integry.integrywmsnative.core.model.MtbAart; +import it.integry.integrywmsnative.core.model.MtbColr; +import it.integry.integrywmsnative.core.model.MtbColt; +import it.integry.integrywmsnative.core.model.MtbDepoPosizione; +import it.integry.integrywmsnative.core.settings.SettingsManager; +import it.integry.integrywmsnative.core.utility.UtilityBarcode; +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.core.utility.UtilityToast; +import it.integry.integrywmsnative.databinding.FragmentMainVersamentoMerceBinding; +import it.integry.integrywmsnative.gest.versamento_merce.core.VersamentoMerceHelper; +import it.integry.integrywmsnative.view.dialogs.DialogSimpleMessageHelper; +import it.integry.integrywmsnative.view.dialogs.choose_arts_from_lista_arts.DialogChooseArtsFromListaArts; +import it.integry.integrywmsnative.view.dialogs.input_quantity.DialogInputQuantity; +import it.integry.integrywmsnative.view.dialogs.input_quantity.QuantityDTO; +import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCreateLU; +import it.integry.plugins.barcode_base_library.model.BarcodeScanDTO; +import it.integry.plugins.barcode_base_library.model.BarcodeType; + +public class VersamentoMerceViewModel { + + + private Context mContext; + private FragmentMainVersamentoMerceBinding mBinding; + private VersamentoMerceHelper mHelper; + + public ObservableField mtbColt = new ObservableField<>(); + + public void init(Activity context, FragmentMainVersamentoMerceBinding binding, VersamentoMerceHelper helper) { + mContext = context; + mBinding = binding; + mHelper = helper; + } + + public void openLU() { + DialogScanOrCreateLU.make(mContext, true, mtbColt -> { + if(mtbColt == null) { + ((MainActivity)mContext).popToMain(); + } else { + setMtbColt(mtbColt); + } + }).show(); + } + + public void setMtbColt(MtbColt mtbColt) { + this.mtbColt.set(mtbColt); + } + + public void resetMtbColt() { + this.mtbColt.set(null); + } + + public RunnableArgs onScanSuccessfull = data -> { + + BarcodeManager.disable(); + + ProgressDialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext); + + if(UtilityBarcode.isEtichettaPosizione(data)){ + progressDialog.show(); + this.executeEtichettaPosizione(data, progressDialog); + } else if(data.getType() == BarcodeType.EAN8 || data.getType() == BarcodeType.EAN13 || data.getType() == BarcodeType.UPCA){ + //searchArtInt(data.getStringValue()); + } else if(data.getType() == BarcodeType.EAN128) { + this.executeEtichettaEan128(data, progressDialog); + } else { + BarcodeManager.enable(); + } + + + }; + + private void executeEtichettaPosizione(BarcodeScanDTO barcodeScanDTO, ProgressDialog progressDialog) { + MtbDepoPosizione foundPosizione = Stream.of(SettingsManager.iDB().getAvailablePosizioni()) + .filter(x -> x.getPosizione().equalsIgnoreCase(barcodeScanDTO.getStringValue())) + .single(); + + if(foundPosizione.isFlagMonoCollo()) { + + PosizioneRESTonsumer.getBancaliInPosizione(foundPosizione, mtbColtList -> { + + if(mtbColtList == null || mtbColtList.size() == 0){ + progressDialog.dismiss(); + BarcodeManager.enable(); + showNoULFound(); + } else if (mtbColtList.size() == 1) { + ColliMagazzinoRESTConsumer.getByTestata(mtbColtList.get(0), true, false, mtbColt -> { + + //TAKE HERE + pickMerceULtoUL(mtbColt, progressDialog); + + }, ex -> { + UtilityExceptions.defaultException(mContext, ex, progressDialog); + BarcodeManager.enable(); + }); + } + + }, ex -> { + UtilityExceptions.defaultException(mContext, ex, progressDialog); + BarcodeManager.enable(); + }); + } else { + + ColliMagazzinoRESTConsumer.changePosizione(mtbColt.get(), foundPosizione, () -> { + progressDialog.dismiss(); + BarcodeManager.enable(); + + resetMtbColt(); + }, ex -> { + UtilityExceptions.defaultException(mContext, ex, progressDialog); + BarcodeManager.enable(); + }); + + } + } + + private void executeEtichettaEan128(BarcodeScanDTO barcodeScanDTO, ProgressDialog progressDialog) { + BarcodeRESTConsumer.decodeEan128(barcodeScanDTO, ean128Model -> { + + String barcodeProd = null; + + if(!UtilityString.isNullOrEmpty(ean128Model.Sscc)) barcodeProd = ean128Model.Sscc; + if(!UtilityString.isNullOrEmpty(ean128Model.Gtin)) barcodeProd = ean128Model.Gtin; + if(!UtilityString.isNullOrEmpty(ean128Model.Content)) barcodeProd = ean128Model.Content; + + + if(!UtilityString.isNullOrEmpty(barcodeProd)) { + + if(!UtilityString.isNullOrEmpty(ean128Model.Sscc)){ + this.executeEtichettaLU(ean128Model.Sscc, progressDialog); + } else { + showNoULFound(); + progressDialog.dismiss(); + BarcodeManager.enable(); + } + + + } else { + //EAN 128 non completo o comunque mancano i riferimenti al prodotto + progressDialog.dismiss(); + BarcodeManager.enable(); + } + }, ex-> { + UtilityExceptions.defaultException(mContext, ex, progressDialog); + BarcodeManager.enable(); + }); + } + + + + + private void executeEtichettaLU(String sscc, ProgressDialog progressDialog) { + ColliMagazzinoRESTConsumer.getBySSCC(sscc, true, false, mtbColt -> { + + //TAKE HERE + pickMerceULtoUL(mtbColt, progressDialog); + + }, ex -> { + UtilityExceptions.defaultException(mContext, ex, progressDialog); + BarcodeManager.enable(); + }); + } + + + + + private void pickMerceULtoUL(MtbColt destMtbColt, ProgressDialog progressDialog) { + List mtbColrsToPick = Stream.of(mtbColt.get().getMtbColr()) + .filter(x -> x.getQtaCol().floatValue() > 0) + .toList(); + + DialogChooseArtsFromListaArts.make(mContext, mtbColrsToPick, pickedAarts -> { + + progressDialog.dismiss(); + UtilityToast.showToast("Selezionati " + pickedAarts.size() + " articoli"); + + List destNewMtbColr = new ArrayList<>(); + + askQuantities(pickedAarts.iterator(), destNewMtbColr, () -> { + BarcodeManager.enable(); + + UtilityToast.showToast("Create " + destNewMtbColr.size() + " nuove righe"); + + }); + + }, () -> { + progressDialog.dismiss(); + BarcodeManager.enable(); + }).show(); + } + + + private void askQuantities(Iterator sourceMtbColrs, List destMtbColr, Runnable onComplete){ + + if(sourceMtbColrs.hasNext()){ + + askSingleQuantity(sourceMtbColrs.next(), mtbColr -> { + destMtbColr.add(mtbColr); + askQuantities(sourceMtbColrs, destMtbColr, onComplete); + }); + } else { + onComplete.run(); + } + } + + + private void askSingleQuantity(MtbColr mtbColr, RunnableArgs onComplete) { + DialogInputQuantity.DTO dto = new DialogInputQuantity.DTO() + .setBatchLot(mtbColr.getPartitaMag()) + .setDataScad(mtbColr.getDataScadPartitaD()) + .setMtbAart(mtbColr.getMtbAart()) + .setQtaTot(mtbColr.getQtaCol()) + .setQtaOrd(mtbColr.getQtaCol()) + .setQtaDaEvadere(new BigDecimal(-1)) + .setQtaEvasa(BigDecimal.ZERO) + .setCanPartitaMagBeChanged(false) + .setCanDataScadBeChanged(false) + .setMaxQta(mtbColr.getQtaCol()); + + DialogInputQuantity.makeBase(mContext, dto, false, value -> { + onComplete.run(mtbColr); + }).show(); + } + + + private void showNoULFound() { + DialogSimpleMessageHelper.makeWarningDialog(mContext, + new SpannableString(mContext.getResources().getText(R.string.no_lu_found_message)), + null, null).show(); + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_arts/DialogChooseArtFromListaArt.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_arts/DialogChooseArtFromListaArts.java similarity index 72% rename from app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_arts/DialogChooseArtFromListaArt.java rename to app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_arts/DialogChooseArtFromListaArts.java index 0fb08207..22cf6a0f 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_arts/DialogChooseArtFromListaArt.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_arts/DialogChooseArtFromListaArts.java @@ -14,20 +14,24 @@ 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.MtbAart; -import it.integry.integrywmsnative.core.model.MtbAartWithFornitore; import it.integry.integrywmsnative.databinding.DialogChooseArtFromListaArtBinding; -public class DialogChooseArtFromListaArt { +public class DialogChooseArtFromListaArts { - private static Context currentContext; - private static AlertDialog currentAlert; + private Context currentContext; + private AlertDialog currentAlert; - private static DialogChooseArtFromListaArtAdapter currentAdapter; + private DialogChooseArtFromListaArtsAdapter currentAdapter; - private static RunnableArgs mOnItemChoosed; + private RunnableArgs mOnItemChoosed; - public static AlertDialog makeBase(final Context context, List listaArts, RunnableArgs onItemChoosed) { + public static AlertDialog make(final Context context, List listaArts, RunnableArgs onItemChoosed) { + return new DialogChooseArtFromListaArts(context, listaArts, onItemChoosed).currentAlert; + } + + + private DialogChooseArtFromListaArts(Context context, List listaArts, RunnableArgs onItemChoosed) { currentContext = context; mOnItemChoosed = onItemChoosed; @@ -44,11 +48,9 @@ public class DialogChooseArtFromListaArt { currentAlert.setCanceledOnTouchOutside(false); initRecyclerView(binding, listaArts); - - return currentAlert; } - private static void initRecyclerView(DialogChooseArtFromListaArtBinding binding, List dataset) { + private void initRecyclerView(DialogChooseArtFromListaArtBinding binding, List dataset) { binding.dialogChooseArtFromListaArtMainList.setNestedScrollingEnabled(false); binding.dialogChooseArtFromListaArtMainList.setHasFixedSize(true); @@ -59,11 +61,11 @@ public class DialogChooseArtFromListaArt { itemDecorator.setDrawable(ContextCompat.getDrawable(currentContext, R.drawable.divider)); binding.dialogChooseArtFromListaArtMainList.addItemDecoration(itemDecorator); - currentAdapter = new DialogChooseArtFromListaArtAdapter(currentContext, dataset, onItemClicked); + currentAdapter = new DialogChooseArtFromListaArtsAdapter(currentContext, dataset, onItemClicked); binding.dialogChooseArtFromListaArtMainList.setAdapter(currentAdapter); } - private static IRecyclerItemClicked onItemClicked = (item, position) -> { + private IRecyclerItemClicked onItemClicked = (item, position) -> { if(mOnItemChoosed != null) { mOnItemChoosed.run(item); } diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_arts/DialogChooseArtFromListaArtAdapter.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_arts/DialogChooseArtFromListaArtsAdapter.java similarity index 76% rename from app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_arts/DialogChooseArtFromListaArtAdapter.java rename to app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_arts/DialogChooseArtFromListaArtsAdapter.java index ac510075..96af4c8c 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_arts/DialogChooseArtFromListaArtAdapter.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_arts/DialogChooseArtFromListaArtsAdapter.java @@ -11,10 +11,9 @@ 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.MtbAartWithFornitore; import it.integry.integrywmsnative.databinding.DialogChooseArtFromListaArtItemModelBinding; -public class DialogChooseArtFromListaArtAdapter extends RecyclerView.Adapter { +public class DialogChooseArtFromListaArtsAdapter extends RecyclerView.Adapter { protected Context mContext; @@ -36,14 +35,14 @@ public class DialogChooseArtFromListaArtAdapter extends RecyclerView.Adapter myDataset, IRecyclerItemClicked onItemClickListener) { + public DialogChooseArtFromListaArtsAdapter(Context context, List myDataset, IRecyclerItemClicked onItemClickListener) { mContext = context; mDataset = myDataset; mOnItemClickListener = onItemClickListener; } @Override - public DialogChooseArtFromListaArtAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + public DialogChooseArtFromListaArtsAdapter.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); @@ -51,7 +50,7 @@ public class DialogChooseArtFromListaArtAdapter extends RecyclerView.Adapter> mOnItemsChoosed; + private Runnable mOnAbort; + + public static AlertDialog make(final Context context, List listaMtbColr, RunnableArgs> onItemsChoosed, Runnable onAbort) { + return new DialogChooseArtsFromListaArts(context, listaMtbColr, onItemsChoosed, onAbort).currentAlert; + } + + + private DialogChooseArtsFromListaArts(Context context, List listaMtbColr, RunnableArgs> onItemsChoosed, Runnable onAbort) { + currentContext = context; + mOnItemsChoosed = onItemsChoosed; + mOnAbort = onAbort; + + if(listaMtbColr != null){ + for (MtbColr mtbColr : listaMtbColr) { + if(UtilityString.isNullOrEmpty(mtbColr.getUntMis()) && mtbColr.getMtbAart() != null){ + mtbColr.setUntMis(mtbColr.getMtbAart().getUntMis()); + } + } + } + + LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + DialogChooseArtsFromListaArtsLayoutBinding binding = DataBindingUtil.inflate(inflater, R.layout.dialog_choose_arts_from_lista_arts_layout, null, false); + + + final AlertDialog.Builder alertDialog = new AlertDialog.Builder(context) + .setView(binding.getRoot()) + .setPositiveButton(context.getText(R.string.confirm), (dialogInterface, i) -> { + onPositiveClick(); + }) + .setNegativeButton(context.getText(R.string.abort), ((dialogInterface, i) -> { + onNegativeClick(); + })); + + currentAlert = alertDialog.create(); + currentAlert.setCanceledOnTouchOutside(false); + + initRecyclerView(binding, listaMtbColr); + } + + private void initRecyclerView(DialogChooseArtsFromListaArtsLayoutBinding binding, List dataset) { + binding.dialogChooseArtsFromListaArtMainList.setNestedScrollingEnabled(false); + + binding.dialogChooseArtsFromListaArtMainList.setHasFixedSize(true); + + binding.dialogChooseArtsFromListaArtMainList.setLayoutManager(new LinearLayoutManager(currentContext)); + + DividerItemDecoration itemDecorator = new DividerItemDecoration(currentContext, DividerItemDecoration.VERTICAL); + itemDecorator.setDrawable(ContextCompat.getDrawable(currentContext, R.drawable.divider)); + binding.dialogChooseArtsFromListaArtMainList.addItemDecoration(itemDecorator); + + currentAdapter = new DialogChooseArtsFromListaArtsAdapter(currentContext, dataset); + binding.dialogChooseArtsFromListaArtMainList.setAdapter(currentAdapter); + } + + + private void onPositiveClick() { + + if(mOnItemsChoosed != null) { + mOnItemsChoosed.run(currentAdapter.getSelectedItems()); + } + + } + + + private void onNegativeClick() { + + if(this.mOnAbort != null) mOnAbort.run(); + + } + + + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_arts_from_lista_arts/DialogChooseArtsFromListaArtsAdapter.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_arts_from_lista_arts/DialogChooseArtsFromListaArtsAdapter.java new file mode 100644 index 00000000..81d0e4c2 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_arts_from_lista_arts/DialogChooseArtsFromListaArtsAdapter.java @@ -0,0 +1,84 @@ +package it.integry.integrywmsnative.view.dialogs.choose_arts_from_lista_arts; + +import android.content.Context; +import android.databinding.DataBindingUtil; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.ViewGroup; + +import com.annimon.stream.Stream; + +import java.util.List; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.model.CheckableMtbAart; +import it.integry.integrywmsnative.core.model.CheckableMtbColr; +import it.integry.integrywmsnative.core.model.MtbAart; +import it.integry.integrywmsnative.core.model.MtbColr; +import it.integry.integrywmsnative.databinding.DialogChooseArtsFromListaArtsItemModelBinding; + +public class DialogChooseArtsFromListaArtsAdapter extends RecyclerView.Adapter { + + protected Context mContext; + + private List mDataset; + + + public DialogChooseArtsFromListaArtsAdapter(Context context, List myDataset) { + mContext = context; + + if(myDataset != null) { + mDataset = Stream.of(myDataset) + .withoutNulls() + .map(CheckableMtbColr::new).toList(); + } + } + + + public static class ViewHolder extends RecyclerView.ViewHolder { + protected DialogChooseArtsFromListaArtsItemModelBinding mViewDataBinding; + + + public ViewHolder(DialogChooseArtsFromListaArtsItemModelBinding v) { + super(v.getRoot()); + mViewDataBinding = v; + } + + public void bind(CheckableMtbColr checkableMtbColr) { + mViewDataBinding.setCheckableMtbColr(checkableMtbColr); + mViewDataBinding.executePendingBindings(); + } + } + + @Override + public DialogChooseArtsFromListaArtsAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + // create a new view + DialogChooseArtsFromListaArtsItemModelBinding viewDataBinding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), R.layout.dialog_choose_arts_from_lista_arts__item_model, parent, false); + + return new ViewHolder(viewDataBinding); + } + + @Override + public void onBindViewHolder(DialogChooseArtsFromListaArtsAdapter.ViewHolder holder, int position) { + CheckableMtbColr item = mDataset.get(position); + holder.bind(item); + + } + + @Override + public void onViewRecycled(DialogChooseArtsFromListaArtsAdapter.ViewHolder holder) { + super.onViewRecycled(holder); + } + + @Override + public int getItemCount() { + return mDataset.size(); + } + + public List getSelectedItems() { + return Stream.of(mDataset) + .filter(y -> y.getChecked().get()) + .map(CheckableMtbColr::getMtbColr).toList(); + } + +} 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 4b735691..bb4ccb30 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 @@ -193,20 +193,24 @@ public class DialogInputQuantity { } } - private static ColorStateList originalColorStateList = null; + private ColorStateList originalColorStateList = null; - private static String scadenzaString = "Scadenza"; + private String scadenzaString = "Scadenza"; - private static AlertDialog currentAlert; - private static Context currentContext; + private AlertDialog currentAlert; + private Context currentContext; - private static DialogInputQuantityArticoloBinding currentBinding; + private DialogInputQuantityArticoloBinding currentBinding; - private static MtbAart currentMtbAart; - private static QuantityDTO currentQuantityDto; - private static DTO currentDTO; + private MtbAart currentMtbAart; + private QuantityDTO currentQuantityDto; + private DTO currentDTO; public static AlertDialog makeBase(final Context context, final DTO dto, boolean canOverflowQuantity, final ISingleValueOperationCallback dialogCallback) { + return new DialogInputQuantity(context, dto, canOverflowQuantity, dialogCallback).currentAlert; + } + + public DialogInputQuantity(Context context, final DTO dto, boolean canOverflowQuantity, final ISingleValueOperationCallback dialogCallback) { currentContext = context; currentMtbAart = dto.getMtbAart(); currentDTO = dto; @@ -272,12 +276,9 @@ public class DialogInputQuantity { initDatePicker(context, currentQuantityDto, currentBinding.getRoot().findViewById(R.id.input_data_scad)); setupBarcode(context); - - return currentAlert; - } - private static void setupQuantities(DTO dto, QuantityDTO quantityDTO){ + private void setupQuantities(DTO dto, QuantityDTO quantityDTO){ if(dto.getQtaTot() != null) quantityDTO.qtaTot.set(dto.getQtaTot().floatValue()); if(dto.getMaxQta() != null) quantityDTO.maxQta = dto.getMaxQta().floatValue(); @@ -295,7 +296,7 @@ public class DialogInputQuantity { if(dto.getQtaCnf() != null) { quantityDTO.qtaCnf.set(dto.getQtaCnf().floatValue()); } else { - quantityDTO.qtaCnf.set(dto.mtbAart.qtaCnf.floatValue()); + quantityDTO.qtaCnf.set(dto.mtbAart.getQtaCnf().floatValue()); } } @@ -337,7 +338,7 @@ public class DialogInputQuantity { } - private static void setupBarcode(Context context) { + private void setupBarcode(Context context) { int barcodeIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() .setOnScanSuccessfull(onScanSuccessfull) @@ -350,7 +351,7 @@ public class DialogInputQuantity { } - private static RunnableArgs onScanSuccessfull = data -> { + private RunnableArgs onScanSuccessfull = data -> { BarcodeManager.disable(); if(UtilityBarcode.isEanPeso(data)){ @@ -429,7 +430,7 @@ public class DialogInputQuantity { }; - private static void setupQuantityListener(final QuantityDTO quantityDTO, final TextInputLayout txlInputNumDiCnf, final TextInputLayout txlInputQtaPerCnf, final TextInputLayout txlInputQtaTot) { + private void setupQuantityListener(final QuantityDTO quantityDTO, final TextInputLayout txlInputNumDiCnf, final TextInputLayout txlInputQtaPerCnf, final TextInputLayout txlInputQtaTot) { quantityDTO.numCnf.addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() { @Override @@ -562,7 +563,7 @@ public class DialogInputQuantity { } - private static void initDatePicker(Context context, QuantityDTO quantityDTO, AppCompatTextView textInputLayout) { + private void initDatePicker(Context context, QuantityDTO quantityDTO, AppCompatTextView textInputLayout) { quantityDTO.expireDateString.set(scadenzaString); if(quantityDTO.expireDate != null) { @@ -598,7 +599,7 @@ public class DialogInputQuantity { } - private static void onConfirm(Context context, QuantityDTO quantityDTO, ISingleValueOperationCallback dialogCallback){ + private void onConfirm(Context context, QuantityDTO quantityDTO, ISingleValueOperationCallback dialogCallback){ if(currentDTO.mtbAart.isFlagTracciabilita() && (quantityDTO.batchLot == null || quantityDTO.batchLot.get().trim().length() == 0)){ showBatchLotErrorPrompt(context); @@ -628,7 +629,7 @@ public class DialogInputQuantity { } - private static void showQuantityErrorDialog(Context mContext){ + private void showQuantityErrorDialog(Context mContext){ String errorMessage = mContext.getText(R.string.wrong_quantity_input_message).toString(); @@ -636,7 +637,7 @@ public class DialogInputQuantity { } - private static void showQuantityOverflowErrorPrompt(Context mContext){ + private void showQuantityOverflowErrorPrompt(Context mContext){ String errorMessage = mContext.getText(R.string.quantity_overflow_error_message).toString(); @@ -644,7 +645,7 @@ public class DialogInputQuantity { } - private static void showExpireDateErrorPrompt(Context mContext){ + private void showExpireDateErrorPrompt(Context mContext){ String errorMessage = mContext.getText(R.string.expire_date_error_message).toString(); @@ -652,7 +653,7 @@ public class DialogInputQuantity { } - private static void showBatchLotErrorPrompt(Context mContext){ + private void showBatchLotErrorPrompt(Context mContext){ String errorMessage = mContext.getText(R.string.batch_lot_error_message).toString(); 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 index 58b4a5b7..6c5c6d80 100644 --- 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 @@ -9,19 +9,26 @@ import android.text.SpannableString; import android.view.LayoutInflater; import android.view.View; +import com.annimon.stream.Stream; + 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.PosizioneRESTonsumer; 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.model.MtbDepoPosizione; +import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.utility.UtilityBarcode; 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.core.utility.UtilityToast; import it.integry.integrywmsnative.databinding.DialogScanOrCreateLuBinding; import it.integry.integrywmsnative.view.dialogs.DialogSimpleMessageHelper; import it.integry.plugins.barcode_base_library.model.BarcodeScanDTO; @@ -29,18 +36,26 @@ import it.integry.plugins.barcode_base_library.model.BarcodeType; public class DialogScanOrCreateLU { - private static Context currentContext; + private Context currentContext; - private static AlertDialog currentAlert; + private AlertDialog currentAlert; - private static DialogScanOrCreateLuBinding mBinding; + private DialogScanOrCreateLuBinding mBinding; - private static RunnableArgs mOnDialogDismiss; + private RunnableArgs mOnDialogDismiss; - private static MtbColt currentMtbColt; + private MtbColt currentMtbColt; - public static AlertDialog makeBase(final Context context, RunnableArgs onDialogDismiss) { + public static AlertDialog make(final Context context, RunnableArgs onDialogDismiss) { + return new DialogScanOrCreateLU(context, false, onDialogDismiss).currentAlert; + } + + public static AlertDialog make(final Context context, boolean disableCreation, RunnableArgs onDialogDismiss) { + return new DialogScanOrCreateLU(context, disableCreation, onDialogDismiss).currentAlert; + } + + private DialogScanOrCreateLU(Context context, boolean disableCreation, RunnableArgs onDialogDismiss) { mOnDialogDismiss = null; currentMtbColt = null; @@ -50,6 +65,8 @@ public class DialogScanOrCreateLU { mBinding = DataBindingUtil.inflate(inflater, R.layout.dialog_scan_or_create_lu, null, false); + if(disableCreation) mBinding.dialogScanOrCreateLuCreationLayout.setVisibility(View.GONE); + final AlertDialog.Builder alertDialog = new AlertDialog.Builder(context) .setView(mBinding.getRoot()); @@ -58,12 +75,10 @@ public class DialogScanOrCreateLU { init(onDialogDismiss); initBarcode(context); - - return currentAlert; } - private static void init(RunnableArgs onDialogDismiss) { + private void init(RunnableArgs onDialogDismiss) { mOnDialogDismiss = onDialogDismiss; mBinding.createNewLuButton.setOnClickListener(v -> { @@ -78,7 +93,7 @@ public class DialogScanOrCreateLU { }); } - private static void initBarcode(Context context) { + private void initBarcode(Context context) { int barcodeIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() .setOnScanSuccessfull(onScanSuccessfull) @@ -86,6 +101,7 @@ public class DialogScanOrCreateLU { currentAlert.setOnDismissListener(dialog -> { BarcodeManager.removeCallback(barcodeIstanceID); + BarcodeManager.enable(); if(currentMtbColt == null) { mOnDialogDismiss.run(null); } @@ -94,16 +110,18 @@ public class DialogScanOrCreateLU { } - private static RunnableArgs onScanSuccessfull = data -> { + private RunnableArgs onScanSuccessfull = data -> { BarcodeManager.disable(); final ProgressDialog progressDialog = UtilityProgress.createDefaultProgressDialog(currentContext); progressDialog.show(); - if(UtilityBarcode.isEtichettaAnonima(data)) { - executeEtichettaAnonima(data, progressDialog); + if(UtilityBarcode.isEtichettaPosizione(data)){ + this.executeEtichettaPosizione(data, progressDialog); + } else if(UtilityBarcode.isEtichettaAnonima(data)) { + this.executeEtichettaAnonima(data, progressDialog); } else if(data.getType() == BarcodeType.EAN128) { - executeEAN128(data, progressDialog); + this.executeEAN128(data, progressDialog); } else { progressDialog.dismiss(); BarcodeManager.enable(); @@ -112,8 +130,43 @@ public class DialogScanOrCreateLU { }; + private void executeEtichettaPosizione(BarcodeScanDTO barcodeScanDTO, ProgressDialog progressDialog) { - private static void executeEtichettaAnonima(BarcodeScanDTO barcodeScanDTO, ProgressDialog progressDialog) { + MtbDepoPosizione foundPosizione = Stream.of(SettingsManager.iDB().getAvailablePosizioni()) + .filter(x -> x.getPosizione().equalsIgnoreCase(barcodeScanDTO.getStringValue())) + .single(); + + PosizioneRESTonsumer.getBancaliInPosizione(foundPosizione, mtbColtList -> { + + if(mtbColtList == null || mtbColtList.size() == 0){ + progressDialog.dismiss(); + BarcodeManager.enable(); + showNoULFound(); + } else if (mtbColtList.size() == 1) { + ColliMagazzinoRESTConsumer.getByTestata(mtbColtList.get(0), true, false, mtbColt -> { + sendMtbColt(mtbColt, progressDialog); + }, ex -> { + UtilityExceptions.defaultException(currentContext, ex, progressDialog); + BarcodeManager.enable(); + }); + + + + } else { + progressDialog.dismiss(); + BarcodeManager.enable(); + showTooMuchULFound(); + } + + }, ex -> { + UtilityExceptions.defaultException(currentContext, ex, progressDialog); + BarcodeManager.enable(); + }); + + } + + + private void executeEtichettaAnonima(BarcodeScanDTO barcodeScanDTO, ProgressDialog progressDialog) { ColliMagazzinoRESTConsumer.getBySSCC(barcodeScanDTO.getStringValue(), true, false, mtbColt -> { if(mtbColt == null) { @@ -143,7 +196,7 @@ public class DialogScanOrCreateLU { } - private static void executeEAN128(BarcodeScanDTO barcodeScanDTO, ProgressDialog progressDialog) { + private void executeEAN128(BarcodeScanDTO barcodeScanDTO, ProgressDialog progressDialog) { BarcodeRESTConsumer.decodeEan128(barcodeScanDTO, ean128Model -> { if(ean128Model != null && !UtilityString.isNullOrEmpty(ean128Model.Sscc)) { @@ -183,11 +236,19 @@ public class DialogScanOrCreateLU { } - private static void showNoULFound() { - + private void showTooMuchULFound() { + DialogSimpleMessageHelper.makeWarningDialog(currentContext, + new SpannableString(currentContext.getResources().getText(R.string.too_much_lu_found_message)), + null, null).show(); } - private static void sendMtbColt(MtbColt mtbColtToSend, ProgressDialog progressDialog) { + private void showNoULFound() { + DialogSimpleMessageHelper.makeWarningDialog(currentContext, + new SpannableString(currentContext.getResources().getText(R.string.no_lu_found_message)), + null, null).show(); + } + + private void sendMtbColt(MtbColt mtbColtToSend, ProgressDialog progressDialog) { currentMtbColt = mtbColtToSend; progressDialog.dismiss(); currentAlert.dismiss(); diff --git a/app/src/main/res/layout/dialog_choose_arts_from_lista_arts__item_model.xml b/app/src/main/res/layout/dialog_choose_arts_from_lista_arts__item_model.xml new file mode 100644 index 00000000..07bfb696 --- /dev/null +++ b/app/src/main/res/layout/dialog_choose_arts_from_lista_arts__item_model.xml @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_choose_arts_from_lista_arts_layout.xml b/app/src/main/res/layout/dialog_choose_arts_from_lista_arts_layout.xml new file mode 100644 index 00000000..cabe6fd4 --- /dev/null +++ b/app/src/main/res/layout/dialog_choose_arts_from_lista_arts_layout.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_scan_or_create_lu.xml b/app/src/main/res/layout/dialog_scan_or_create_lu.xml index 4196c50b..ea02e853 100644 --- a/app/src/main/res/layout/dialog_scan_or_create_lu.xml +++ b/app/src/main/res/layout/dialog_scan_or_create_lu.xml @@ -37,29 +37,34 @@ - - + android:orientation="vertical"> + - + + diff --git a/app/src/main/res/layout/fragment_main_versamento_merce.xml b/app/src/main/res/layout/fragment_main_versamento_merce.xml new file mode 100644 index 00000000..99354d08 --- /dev/null +++ b/app/src/main/res/layout/fragment_main_versamento_merce.xml @@ -0,0 +1,139 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/activity_main_drawer.xml b/app/src/main/res/menu/activity_main_drawer.xml index 53a03d02..80171f0e 100644 --- a/app/src/main/res/menu/activity_main_drawer.xml +++ b/app/src/main/res/menu/activity_main_drawer.xml @@ -17,7 +17,7 @@ + android:title="Versamento Merce" /> diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 1b399548..ee085573 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -13,6 +13,7 @@ Ordini di accettazione Spedizione Rettifica giacenze + Versamento merce Errore Ops Attenzione @@ -135,6 +136,7 @@ Filtro avanzato Seleziona un articolo + Seleziona gli articoli Fornitore Cod art / Descrizione @@ -147,6 +149,8 @@ Automezzo Nessun articolo trovato + Nessuna UL trovata + E\' stata trovata più di una UL \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ce190d3a..e78cc8c2 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -22,6 +22,7 @@ Multiple acceptance orders Check out Inventory + Items placement Error Ops Warning @@ -142,6 +143,7 @@ Advanced filter Choose item + Choose items Supplier @@ -156,6 +158,8 @@ Vehicle No items found + No LU found + Multiple LU found Do you want print the label?