From c11858aea288182ea336fa1a9e3a037e27352b7c Mon Sep 17 00:00:00 2001 From: ValerioC Date: Thu, 26 May 2022 12:35:26 +0200 Subject: [PATCH 1/7] Ottimizzazione funzione rettifica giacenza. Evitare di uscire dalla gestione dopo aver rettificato una pedana. --- .../RettificaGiacenzeFragment.java | 33 +++++++++---------- .../RettificaGiacenzeViewModel.java | 15 +++++---- 2 files changed, 25 insertions(+), 23 deletions(-) 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 59bfe4b7..3ef3d80f 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 @@ -37,7 +37,6 @@ import it.integry.integrywmsnative.core.expansion.BaseFragment; import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgss; import it.integry.integrywmsnative.core.interfaces.ILifecycleFragment; -import it.integry.integrywmsnative.core.interfaces.IPoppableActivity; import it.integry.integrywmsnative.core.interfaces.ITitledFragment; import it.integry.integrywmsnative.core.model.MtbAart; import it.integry.integrywmsnative.core.model.MtbColr; @@ -319,18 +318,18 @@ public class RettificaGiacenzeFragment extends BaseFragment implements ITitledFr this.currentMtbColtObs.set(null); thereIsAnOpenedUL.set(false); - - if (getActivity() != null) ((IPoppableActivity) getActivity()).pop(); + this.mViewModel.requestLU(); + /*if (getActivity() != null) ((IPoppableActivity) getActivity()).pop();*/ } @Override public void onMtbColrDeleteRequest(RunnableArgs onComplete) { String text = getResources().getString(R.string.alert_delete_mtb_colr); DialogSimpleMessageView.makeWarningDialog(new SpannableString(text), - null, - () -> onComplete.run(true), - () -> onComplete.run(false) - ) + null, + () -> onComplete.run(true), + () -> onComplete.run(false) + ) .show(requireActivity().getSupportFragmentManager(), "tag"); } @@ -448,11 +447,11 @@ public class RettificaGiacenzeFragment extends BaseFragment implements ITitledFr @Override public void onLUPrintRequest(RunnableArgs onComplete) { DialogSimpleMessageView.makeInfoDialog( - getActivity().getResources().getString(R.string.action_print_ul), - new SpannableString(getActivity().getResources().getString(R.string.ask_print_message)), - null, - () -> onComplete.run(true), - () -> onComplete.run(false)) + getActivity().getResources().getString(R.string.action_print_ul), + new SpannableString(getActivity().getResources().getString(R.string.ask_print_message)), + null, + () -> onComplete.run(true), + () -> onComplete.run(false)) .show(getActivity().getSupportFragmentManager(), "tag"); ; } @@ -460,11 +459,11 @@ public class RettificaGiacenzeFragment extends BaseFragment implements ITitledFr @Override public void onLUPrintError(Exception ex, Runnable onComplete) { DialogSimpleMessageView.makeErrorDialog( - new SpannableString(ex.getMessage()), - null, - null, - R.string.button_ignore_print, - onComplete) + new SpannableString(ex.getMessage()), + null, + null, + R.string.button_ignore_print, + onComplete) .show(getActivity().getSupportFragmentManager(), "tag"); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/RettificaGiacenzeViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/RettificaGiacenzeViewModel.java index 6874e361..1f1eb997 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/RettificaGiacenzeViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/RettificaGiacenzeViewModel.java @@ -85,15 +85,18 @@ public class RettificaGiacenzeViewModel { this.sendOnLoadingEnded(); - this.sendOnLUOpenRequest((mtbColt, created) -> { - this.mCurrentMtbColt = mtbColt; - this.mIsCreatedLU = created; - - this.sendLUOpened(mtbColt); - }); + this.requestLU(); }, this::sendError); } + public void requestLU() { + this.sendOnLUOpenRequest((mtbColt, created) -> { + this.mCurrentMtbColt = mtbColt; + this.mIsCreatedLU = created; + + this.sendLUOpened(mtbColt); + }); + } public RettificaGiacenzeViewModel setListener(RettificaGiacenzeViewModel.Listener listener) { this.mListener = listener; From abfd92ce0775f7d0c33e2809f6c3915fcd934aa3 Mon Sep 17 00:00:00 2001 From: GiuseppeS Date: Thu, 26 May 2022 16:16:13 +0200 Subject: [PATCH 2/7] Fix su inizializzazione observables in DialogInputQuantityV2 --- .../core/data_cache/DataCache.java | 2 +- .../DialogInputQuantityV2View.java | 17 ++++++++++++----- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_cache/DataCache.java b/app/src/main/java/it/integry/integrywmsnative/core/data_cache/DataCache.java index 85870e11..56556e71 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_cache/DataCache.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_cache/DataCache.java @@ -8,7 +8,7 @@ import java.util.UUID; public class DataCache { - private static List dataCacheList = new ArrayList<>(); + private static final List dataCacheList = new ArrayList<>(); public static String addItem(Object item) { diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2View.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2View.java index 535bc6e7..4d285878 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2View.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2View.java @@ -224,7 +224,7 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia this.mViewModel.init(onNumCnfInputChanged); } - private void initObservables() { + private void initViewObservables() { UtilityObservable.addPropertyChanged(this.currentPartitaMag, (value) -> { if (this.mEnableDataCallback) { @@ -281,6 +281,12 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia } }); + + } + + + private void initViewModelObservables() { + final ColorStateList textColorsNumCnf = this.mBindings.inputNumCnfLayout.getEditText().getTextColors(); final ColorStateList textColorsQtaCnf = this.mBindings.inputQtaCnfLayout.getEditText().getTextColors(); final ColorStateList textColorsQtaTot = this.mBindings.inputQtaTotLayout.getEditText().getTextColors(); @@ -346,15 +352,16 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia } } }); - - mObservablesInitated = true; } private void init() { - if (!mObservablesInitated) { - initObservables(); + initViewObservables(); + mObservablesInitated = true; } + + initViewModelObservables(); + //Init double taps this.mBindings.inputNumCnfText.setOnClickListener(new DoubleClick(new DoubleClickListener() { @Override From 9db8337f9b7428c2d4deda200ae8493880c81c3a Mon Sep 17 00:00:00 2001 From: GiuseppeS Date: Thu, 26 May 2022 16:18:10 +0200 Subject: [PATCH 3/7] -> v1.27.3 (290) --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 5c277d96..b576cdb8 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,8 +10,8 @@ apply plugin: 'com.google.gms.google-services' android { - def appVersionCode = 289 - def appVersionName = '1.7.2' + def appVersionCode = 290 + def appVersionName = '1.27.3' signingConfigs { release { From 33a01b2c15e99940ee8c75e3fba5b6e59fe96988 Mon Sep 17 00:00:00 2001 From: ValerioC Date: Fri, 27 May 2022 09:45:35 +0200 Subject: [PATCH 4/7] spedizione: bugfix calcolo qta residua in picking da collo --- .../integrywmsnative/gest/spedizione/SpedizioneViewModel.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneViewModel.java index be80c0ea..fa09f2a6 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneViewModel.java @@ -757,6 +757,9 @@ public class SpedizioneViewModel { this.getPickingList().postValue(pickingList); } else { MtbColt refMtbColt = matchedItem.getRefMtbColt(); + if (matchedItem.getMtbColts() != null && matchedItem.getMtbColts().size() == 1) { + refMtbColt = matchedItem.getMtbColts().get(0); + } MtbColr refMtbColr = refMtbColt != null ? refMtbColt.getMtbColr().get(0) : null; this.dispatchOrdineRow(matchedItem, refMtbColt, refMtbColr, refMtbColr == null); } From 344fc42d035529e3809ad20d223865b0a260f88d Mon Sep 17 00:00:00 2001 From: ValerioC Date: Fri, 27 May 2022 16:22:34 +0200 Subject: [PATCH 5/7] bugfix in schermata dialog_input_quantity_v2 --- .../integrywmsnative/core/rest/model/SitArtOrdDTO.java | 10 ++++++++++ .../input_quantity_v2/DialogInputQuantityV2View.java | 8 ++++++-- .../res/layout-land-hdpi/dialog_input_quantity_v2.xml | 2 +- app/src/main/res/layout/dialog_input_quantity_v2.xml | 2 +- 4 files changed, 18 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/model/SitArtOrdDTO.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/model/SitArtOrdDTO.java index baff542f..2c7b0003 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/model/SitArtOrdDTO.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/model/SitArtOrdDTO.java @@ -26,6 +26,7 @@ public class SitArtOrdDTO { private String descrizioneMsgr; private String codMsfa; private String descrizioneMsfa; + private String untord; private final HashMap extraInfo = new HashMap<>(); @@ -212,4 +213,13 @@ public class SitArtOrdDTO { public HashMap getExtraInfo() { return extraInfo; } + + public String getUntord() { + return untord; + } + + public SitArtOrdDTO setUntord(String untord) { + this.untord = untord; + return this; + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2View.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2View.java index 4d285878..9cddf4ea 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2View.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2View.java @@ -24,6 +24,7 @@ import com.pedromassango.doubleclick.DoubleClick; import com.pedromassango.doubleclick.DoubleClickListener; import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.Calendar; import java.util.Date; @@ -57,6 +58,7 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia private Runnable mOnAbort; public ObservableField currentTextNumCnfToTake = new ObservableField<>(0); + public ObservableField flagShowCnfToTakeLabel = new ObservableField<>(true); public ObservableField currentTextNumPezziToTake = new ObservableField<>(0); public ObservableField currentPartitaMag = new ObservableField<>(); @@ -408,8 +410,9 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia this.currentTaraArticolo.set(this.mViewModel.getMtbAart().getTaraKg()); if (this.mDialogInputQuantityV2DTO.getTotalNumCnfOrd() != null && !this.mDialogInputQuantityV2DTO.getTotalNumCnfOrd().equals(BigDecimal.ZERO) && !(this.mDialogInputQuantityV2DTO.getTotalNumCnfOrd().intValue() == 0)) { - this.currentTextNumCnfToTake.set(this.mDialogInputQuantityV2DTO.getTotalNumCnfOrd().intValue()); - int qtaText = this.mDialogInputQuantityV2DTO.getTotalQtaOrd().intValue() % this.mDialogInputQuantityV2DTO.getTotalNumCnfOrd().intValue(); + int numCnftoTake = this.mDialogInputQuantityV2DTO.getTotalQtaOrd().divide(this.mDialogInputQuantityV2DTO.getQtaCnfOrd(), 0, RoundingMode.DOWN).intValue(); + this.currentTextNumCnfToTake.set(numCnftoTake); + int qtaText = this.mDialogInputQuantityV2DTO.getTotalQtaOrd().intValue() % this.mDialogInputQuantityV2DTO.getQtaCnfOrd().intValue(); this.currentTextNumPezziToTake.set(qtaText); } else { this.currentTextNumCnfToTake.set(0); @@ -451,6 +454,7 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia BigDecimal taraTot = this.mViewModel.getNumCnf().multiply(articolo.getTaraKg()); this.currentTaraTot.set(taraTot); this.currentPesoLordo.set(this.mViewModel.getQtaTot().add(taraTot)); + this.flagShowCnfToTakeLabel.set(false); } this.mBindings.executePendingBindings(); diff --git a/app/src/main/res/layout-land-hdpi/dialog_input_quantity_v2.xml b/app/src/main/res/layout-land-hdpi/dialog_input_quantity_v2.xml index c749808e..e1cea0f0 100644 --- a/app/src/main/res/layout-land-hdpi/dialog_input_quantity_v2.xml +++ b/app/src/main/res/layout-land-hdpi/dialog_input_quantity_v2.xml @@ -193,7 +193,7 @@ android:layout_gravity="center" android:layout_marginTop="2dp" android:gravity="center" - android:visibility="@{view.currentTextNumCnfToTake > 0 || view.currentTextNumPezziToTake > 0 ? View.VISIBLE : View.GONE}"> + android:visibility="@{view.flagShowCnfToTakeLabel && (view.currentTextNumCnfToTake > 0 || view.currentTextNumPezziToTake > 0 )? View.VISIBLE : View.GONE}"> + android:visibility="@{view.flagShowCnfToTakeLabel && (view.currentTextNumCnfToTake > 0 || view.currentTextNumPezziToTake > 0) ? View.VISIBLE : View.GONE}"> Date: Wed, 1 Jun 2022 19:22:32 +0200 Subject: [PATCH 6/7] =?UTF-8?q?aggiunte=20funzionalit=C3=A0=20versamento?= =?UTF-8?q?=20e=20recupero=20alla=20gestione=20linee=20di=20produzione?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 11 +- .../MainApplicationComponent.java | 7 +- .../MainApplicationModule.java | 7 + .../core/expansion/BaseFragment.java | 11 +- .../ProductionLinesRESTConsumer.java | 21 ++ .../core/settings/SettingsManager.java | 4 +- .../ProdDettaglioLineaActivity.java | 321 +++++++++++++++++ .../ProdDettaglioLineaComponent.java | 15 + .../ProdDettaglioLineaModule.java | 19 + .../ProdDettaglioLineaViewModel.java | 238 ++++++++++++ .../dialogs/BottomSheetLineAction.java | 37 +- .../dialogs/DialogRecoverUl.java} | 10 +- .../dialogs/DialogStartProduction.java | 117 ++++++ .../ProdLineeProduzioneFragment.java | 56 +-- .../ProdLineeProduzioneModule.java | 13 +- .../ProdLineeProduzioneViewModel.java | 48 +-- .../dto/ProdLineStatusDTO.java | 33 ++ .../ProdRecuperoMaterialeFragment.java | 37 +- .../ProdRecuperoMaterialeViewModel.java | 62 +++- .../ProdRecuperMaterialeRESTConsumer.java | 13 +- .../DialogInputQuantityV2DTO.java | 10 + .../DialogInputQuantityV2View.java | 4 +- .../dialogs/scan_art/DialogScanArtView.java | 2 +- .../DialogScanOrCreateLUView.java | 14 +- .../layout/activity_prod_dettaglio_linea.xml | 341 ++++++++++++++++++ .../res/layout/bottom_sheet_line_actions.xml | 31 +- .../res/layout/dialog_start_production.xml | 1 + app/src/main/res/values-it/strings.xml | 7 +- app/src/main/res/values/strings.xml | 5 + 29 files changed, 1331 insertions(+), 164 deletions(-) create mode 100644 app/src/main/java/it/integry/integrywmsnative/gest/prod_dettaglio_linea/ProdDettaglioLineaActivity.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/gest/prod_dettaglio_linea/ProdDettaglioLineaComponent.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/gest/prod_dettaglio_linea/ProdDettaglioLineaModule.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/gest/prod_dettaglio_linea/ProdDettaglioLineaViewModel.java rename app/src/main/java/it/integry/integrywmsnative/gest/{prod_linee_produzione => prod_dettaglio_linea}/dialogs/BottomSheetLineAction.java (73%) rename app/src/main/java/it/integry/integrywmsnative/gest/{prod_linee_produzione/dialogs/DialogStartProduction.java => prod_dettaglio_linea/dialogs/DialogRecoverUl.java} (86%) create mode 100644 app/src/main/java/it/integry/integrywmsnative/gest/prod_dettaglio_linea/dialogs/DialogStartProduction.java create mode 100644 app/src/main/res/layout/activity_prod_dettaglio_linea.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b0409f1f..72c1b25c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -27,11 +27,18 @@ android:screenOrientation="portrait" android:theme="@style/Light" android:windowSoftInputMode="adjustNothing" /> - - + diff --git a/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java b/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java index 26d9a408..57b9f360 100644 --- a/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java +++ b/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java @@ -41,6 +41,8 @@ import it.integry.integrywmsnative.gest.picking_resi.PickingResiComponent; import it.integry.integrywmsnative.gest.picking_resi.PickingResiModule; import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.ProdOrdineProduzioneElencoComponent; import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.ProdOrdineProduzioneElencoModule; +import it.integry.integrywmsnative.gest.prod_dettaglio_linea.ProdDettaglioLineaComponent; +import it.integry.integrywmsnative.gest.prod_dettaglio_linea.ProdDettaglioLineaModule; import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.ProdFabbisognoLineeProdComponent; import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.ProdFabbisognoLineeProdModule; import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.dialog_ask_mag_prossimita.DialogAskMagazzinoProssimitaComponent; @@ -134,7 +136,8 @@ import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCr DialogAskClienteModule.class, DialogEditArticoloModule.class, DialogPrintOrderSSCCListModule.class, - ProdLineeProduzioneModule.class + ProdLineeProduzioneModule.class, + ProdDettaglioLineaModule.class }) public interface MainApplicationComponent { @@ -226,6 +229,8 @@ public interface MainApplicationComponent { ProdLineeProduzioneComponent.Factory prodLineeProduzioneComponent(); + ProdDettaglioLineaComponent.Factory prodDettaglioLineaComponent(); + void inject(MainApplication mainApplication); void inject(AppContext mainApplication); diff --git a/app/src/main/java/it/integry/integrywmsnative/MainApplicationModule.java b/app/src/main/java/it/integry/integrywmsnative/MainApplicationModule.java index 66a9c84d..130336d4 100644 --- a/app/src/main/java/it/integry/integrywmsnative/MainApplicationModule.java +++ b/app/src/main/java/it/integry/integrywmsnative/MainApplicationModule.java @@ -25,6 +25,7 @@ import it.integry.integrywmsnative.core.rest.consumers.MesRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.OrdiniRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.PosizioniRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers.ProductionLinesRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer; import it.integry.integrywmsnative.core.services.inventario.InventarioService; import it.integry.integrywmsnative.core.update.UpdatesManager; @@ -200,4 +201,10 @@ public class MainApplicationModule { return new InventarioService(giacenzaRESTConsumer); } + @Provides + @Singleton + ProductionLinesRESTConsumer provideProductionLinesRESTConsumer() { + return new ProductionLinesRESTConsumer(); + } + } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseFragment.java b/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseFragment.java index 7923a94f..dfcb3aea 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseFragment.java @@ -100,8 +100,13 @@ public abstract class BaseFragment extends Fragment { } protected void popMe() { - requireActivity().runOnUiThread(() -> { - ((IPoppableActivity) requireActivity()).pop(); - }); + if (requireActivity() instanceof IPoppableActivity) { + requireActivity().runOnUiThread(() -> { + ((IPoppableActivity) requireActivity()).pop(); + }); + } else { + requireActivity().getSupportFragmentManager().popBackStack(); + } + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ProductionLinesRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ProductionLinesRESTConsumer.java index 035536f1..0b802557 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ProductionLinesRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ProductionLinesRESTConsumer.java @@ -1,5 +1,6 @@ package it.integry.integrywmsnative.core.rest.consumers; +import com.annimon.stream.Stream; import com.google.gson.JsonObject; import java.util.List; @@ -88,4 +89,24 @@ public class ProductionLinesRESTConsumer extends _BaseRESTConsumer { } + public void getLineDetails(ProdLineStatusDTO lineaProd, RunnableArgs onComplete, RunnableArgs onFailed) { + ProductionLinesRESTConsumerService restService = RESTBuilder.getService(ProductionLinesRESTConsumerService.class); + Call>> callable = restService.getStatoLinee(lineaProd.getCodMdepLav()); + callable.enqueue(new Callback<>() { + @Override + public void onResponse(Call>> call, Response>> response) { + analyzeAnswer(response, "getLineDetails", (lines) -> { + ProdLineStatusDTO newLine = Stream.of(lines).filter(dto -> dto.getCodJfas().equalsIgnoreCase(lineaProd.getCodJfas())).findFirstOrElse(null); + onComplete.run(newLine); + }, 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/settings/SettingsManager.java b/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java index 86c32edd..80b4447f 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 @@ -342,8 +342,8 @@ public class SettingsManager { String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep(); GestSetupRESTConsumer.getBooleanValue("PICKING", "SPEDIZIONE", "FLAG_PRINT_PACKING_LIST_ON_CLOSE", codMdep, (value) -> { dbSettingsModelIstance.setFlagPrintPackingListOnOrderClose(value); - GestSetupRESTConsumer.getBooleanValue("PICKING", "SPEDIZIONE", "FLAG_PRINT_ETICHETTE_ON_CLOSE", codMdep, (gestSetupDTO) -> { - dbSettingsModelIstance.setFlagPrintEtichetteOnOrderClose(value); + GestSetupRESTConsumer.getBooleanValue("PICKING", "SPEDIZIONE", "FLAG_PRINT_ETICHETTE_ON_CLOSE", codMdep, (setupValue) -> { + dbSettingsModelIstance.setFlagPrintEtichetteOnOrderClose(setupValue); if (onComplete != null) onComplete.run(); }, onFailed); }, onFailed); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_dettaglio_linea/ProdDettaglioLineaActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_dettaglio_linea/ProdDettaglioLineaActivity.java new file mode 100644 index 00000000..17b95d99 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_dettaglio_linea/ProdDettaglioLineaActivity.java @@ -0,0 +1,321 @@ +package it.integry.integrywmsnative.gest.prod_dettaglio_linea; + +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.text.Html; +import android.text.InputType; +import android.text.SpannableString; +import android.widget.Toast; + +import androidx.databinding.Observable; +import androidx.databinding.ObservableField; + +import com.google.android.material.chip.Chip; + +import javax.inject.Inject; + +import it.integry.barcode_base_android_library.model.BarcodeScanDTO; +import it.integry.integrywmsnative.MainApplication; +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO; +import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; +import it.integry.integrywmsnative.core.data_cache.DataCache; +import it.integry.integrywmsnative.core.di.BindableBoolean; +import it.integry.integrywmsnative.core.di.BindableString; +import it.integry.integrywmsnative.core.expansion.BaseActivity; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.model.MtbColr; +import it.integry.integrywmsnative.core.utility.UtilityResources; +import it.integry.integrywmsnative.core.utility.UtilityString; +import it.integry.integrywmsnative.databinding.ActivityProdDettaglioLineaBinding; +import it.integry.integrywmsnative.gest.prod_dettaglio_linea.dialogs.BottomSheetLineAction; +import it.integry.integrywmsnative.gest.prod_dettaglio_linea.dialogs.DialogStartProduction; +import it.integry.integrywmsnative.gest.prod_linee_produzione.dto.ProdLineStatusDTO; +import it.integry.integrywmsnative.gest.prod_recupero_materiale.ProdRecuperoMaterialeFragment; +import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO; +import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleInputHelper; +import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; +import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO; +import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View; + +public class ProdDettaglioLineaActivity extends BaseActivity implements ProdDettaglioLineaViewModel.Listener { + + private static final String DATA_KEY_LINE = "keyLinea"; + + private ActivityProdDettaglioLineaBinding mBinding; + public final ObservableField listaOrd = new ObservableField<>(); + public final BindableString lineaLabel = new BindableString(); + public final BindableBoolean isStarted = new BindableBoolean(false); + public final BindableBoolean isPaused = new BindableBoolean(false); + public final BindableBoolean flagShowProdInfo = new BindableBoolean(false); + public final BindableString hrNum = new BindableString(); + public final BindableString codMart = new BindableString(); + public final BindableString partitaMag = new BindableString(); + public final BindableString productDescription = new BindableString(); + + private int barcodeScannerIstanceID = -1; + + @Inject + ProdDettaglioLineaViewModel mViewModel; + + @Inject + DialogInputQuantityV2View mDialogInputQuantityV2View; + + + public static Intent newInstance(Context context, ProdLineStatusDTO prodLine) { + Intent myIntent = new Intent(context, ProdDettaglioLineaActivity.class); + String keyLine = DataCache.addItem(prodLine); + myIntent.putExtra(DATA_KEY_LINE, keyLine); + return myIntent; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mBinding = ActivityProdDettaglioLineaBinding.inflate(getLayoutInflater()); + setContentView(mBinding.getRoot()); + setSupportActionBar(mBinding.toolbar); + setTitle(R.string.line_details); + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + + ProdLineStatusDTO lineaProd = DataCache.retrieveItem(getIntent().getStringExtra(DATA_KEY_LINE)); + if (lineaProd == null) { + Toast.makeText(this, "Selezionare una linea di produzione e riprovare", Toast.LENGTH_SHORT).show(); + close(); + return; + } + + MainApplication.appComponent + .prodDettaglioLineaComponent() + .create() + .inject(this); + + + mViewModel.setListener(this); + mBinding.setViewModel(mViewModel); + mBinding.setView(this); + this.init(); + mViewModel.init(lineaProd); + + } + + private void init() { + initBarcodeReader(); + mViewModel.lineaProd.observe(this, lineaProd -> { + this.listaOrd.set(lineaProd.getListaOrd()); + this.lineaLabel.set(lineaProd.getLabel()); + this.isStarted.set(lineaProd.isStarted()); + this.isPaused.set(lineaProd.isPaused()); + this.partitaMag.set(lineaProd.getPartitaMag()); + this.codMart.set(lineaProd.getCodMart()); + this.productDescription.set(lineaProd.getDescrizioneProd()); + this.flagShowProdInfo.set(lineaProd.isStarted() && !UtilityString.isNullOrEmpty(lineaProd.getCodMart())); + this.hrNum.set(lineaProd.getQtaAllocate().toString()); + }); + listaOrd.addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() { + @Override + public void onPropertyChanged(Observable sender, int propertyId) { + renderOrdersChips(); + } + }); + } + + private void renderOrdersChips() { + mBinding.ordersList.removeAllViews(); + String listaOrdString = listaOrd.get(); + if (!UtilityString.isNullOrEmpty(listaOrdString)) { + for (String ord : listaOrdString.split("\\|")) { + Chip chip = new Chip(this); + chip.setClickable(false); + chip.setText(ord); + mBinding.ordersList.addView(chip); + } + } + } + + + @Override + public boolean onSupportNavigateUp() { + onBackPressed(); + return true; + } + + + public void onSettingsRequest(ProdLineStatusDTO lineaProd) { + BottomSheetLineAction.newInstance(lineaProd, this::requestResources, this::requestOrderChange, this::requestProductionStop, this::requestMaterialRecover, BarcodeManager::enable).show(getSupportFragmentManager(), "BottomSheetLineAction"); + } + + @Override + public void requestQtaVersamento(MtbColr mtbColr, + RunnableArgs onComplete) { + onLoadingStarted(); + DialogInputQuantityV2DTO dialogInputQuantityV2DTO = new DialogInputQuantityV2DTO() + .setMtbAart(mtbColr.getMtbAart()) + .setInitialNumCnf(mtbColr.getNumCnf()) + .setInitialQtaCnf(mtbColr.getQtaCnf()) + .setInitialQtaTot(mtbColr.getQtaCol()) + .setTotalQtaAvailable(mtbColr.getQtaCol()) + .setTotalNumCnfAvailable(mtbColr.getNumCnf()) + .setQtaCnfAvailable(mtbColr.getQtaCnf()) + .setPartitaMag(mtbColr.getPartitaMag()) + .setDataScad(mtbColr.getDataScadPartitaD()) + .setCanOverflowOrderQuantity(false) + .setCanPartitaMagBeChanged(false) + .setCanLUBeClosed(false) + .setFocusOnStart(false); + + if (!mDialogInputQuantityV2View.isVisible()) + this.runOnUiThread(() -> { + onLoadingEnded(); + mDialogInputQuantityV2View + .setDialogInputQuantityV2DTO(dialogInputQuantityV2DTO) + .setOnComplete((resultDTO, shouldCloseLU) -> { + + PickedQuantityDTO pickedQuantityDTO = new PickedQuantityDTO() + .setNumCnf(resultDTO.getNumCnf()) + .setQtaCnf(resultDTO.getQtaCnf()) + .setQtaTot(resultDTO.getQtaTot()) + .setPartitaMag(resultDTO.getPartitaMag()) + .setDataScad(resultDTO.getDataScad()); + + onComplete.run(pickedQuantityDTO); + + }) + .setOnAbort(this::onLoadingEnded) + .show(this.getSupportFragmentManager(), "tag"); + }); + else this.onLoadingEnded(); + } + + public void onLineStop() { + onBackPressed(); + } + + public void askForLUBarcode() { + this.onLoadingEnded(); + this.runOnUiThread(() -> { + DialogStartProduction.newInstance((dto) -> { + this.mViewModel.checkBarcodeAndStartOrdine(dto); + }, + UtilityResources.getString(R.string.title_open_lu), + UtilityResources.getString(R.string.scan_lu_to_recover) + ).show(getSupportFragmentManager(), "DialogStartProduction"); + }); + } + + private void initBarcodeReader() { + barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() + .setOnScanSuccessful(onScanSuccessful) + .setOnScanFailed(this::onError)); + + BarcodeManager.enable(); + } + + + public void requestResources() { + this.onLoadingEnded(); + BarcodeManager.disable(); + this.runOnUiThread(() -> { + + DialogSimpleInputHelper.makeInputDialog(this, "Inserisci il numero di risorse da allocare", qta -> { + this.onLoadingStarted(); + try { + Integer hrNum = Integer.parseInt(qta); + this.mViewModel.startProductionLine(hrNum); + } catch (NumberFormatException ex) { + this.onError(new Exception("Inserire un numero di risorse valido")); + } + }, BarcodeManager::enable, InputType.TYPE_CLASS_NUMBER).show(); + }); + } + + public void requestOrderChange() { + this.onLoadingEnded(); + this.runOnUiThread(() -> { + DialogStartProduction.newInstance((dto) -> { + this.mViewModel.checkBarcodeAndStartOrdine(dto); + }).show(getSupportFragmentManager(), "DialogStartProduction"); + }); + } + + public void requestProductionStop() { + this.onLoadingEnded(); + BarcodeManager.disable(); + ProdLineStatusDTO lineaProd = mViewModel.getLineaProd(); + if (UtilityString.isNullOrEmpty(lineaProd.getListaOrd())) { + mViewModel.stopProduction(); + } else { + this.confirmOrderClose(() -> { + mViewModel.stopProduction(); + }); + } + + + } + + public void requestMaterialRecover() { + this.onLoadingEnded(); + BarcodeManager.disable(); + this.runOnUiThread(() -> { + getSupportFragmentManager() + .beginTransaction() + .add(R.id.frame_layout_container, + ProdRecuperoMaterialeFragment.newInstance(mViewModel.lineaProd.getValue().getCodJfas())) + .addToBackStack("ProdRecuperoMaterialeFragment") + .commit(); + + }); + + + } + + @Override + public void successDialog(String message, Runnable onComplete) { + BarcodeManager.disable(); + + this.runOnUiThread(() -> DialogSimpleMessageView.makeSuccessDialog(getResources().getString(R.string.success), + new SpannableString(message), null, onComplete).show(getSupportFragmentManager(), "successDialog")); + + } + + private final RunnableArgs onScanSuccessful = data -> { + this.onLoadingStarted(); + + this.mViewModel.processBarcodeDTO(data, this::onLoadingEnded); + + }; + + + @Override + public void confirmOrderClose(Runnable onConfirm) { + this.onLoadingEnded(); + this.runOnUiThread(() -> { + DialogSimpleMessageView.makeWarningDialog( + Html.fromHtml("Per completare l'operazione è necessario chiudere gli ordini attualmente aperti sulla linea." + + "

" + + "Continuare?"), + null, + onConfirm, + BarcodeManager::enable + ).show(getSupportFragmentManager(), "confirmOrderClose"); + }); + } + + + public void close() { + onBackPressed(); + } + + @Override + public void onBackPressed() { + int count = getSupportFragmentManager().getBackStackEntryCount(); + if (count > 0) { + getSupportFragmentManager().popBackStack(); + } else { + BarcodeManager.removeCallback(barcodeScannerIstanceID); + super.onBackPressed(); + } + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_dettaglio_linea/ProdDettaglioLineaComponent.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_dettaglio_linea/ProdDettaglioLineaComponent.java new file mode 100644 index 00000000..af42745c --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_dettaglio_linea/ProdDettaglioLineaComponent.java @@ -0,0 +1,15 @@ +package it.integry.integrywmsnative.gest.prod_dettaglio_linea; + +import dagger.Subcomponent; + +@Subcomponent +public interface ProdDettaglioLineaComponent { + + @Subcomponent.Factory + interface Factory { + + ProdDettaglioLineaComponent create(); + } + + void inject(ProdDettaglioLineaActivity prodDettaglioLineaActivity); +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_dettaglio_linea/ProdDettaglioLineaModule.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_dettaglio_linea/ProdDettaglioLineaModule.java new file mode 100644 index 00000000..9151d9bd --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_dettaglio_linea/ProdDettaglioLineaModule.java @@ -0,0 +1,19 @@ +package it.integry.integrywmsnative.gest.prod_dettaglio_linea; + +import dagger.Module; +import dagger.Provides; +import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers.MesRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers.ProductionLinesRESTConsumer; + +@Module(subcomponents = ProdDettaglioLineaComponent.class) +public class ProdDettaglioLineaModule { + + + @Provides + ProdDettaglioLineaViewModel providesProdDettaglioLineaViewModel(ProductionLinesRESTConsumer productionLinesRESTConsumer, BarcodeRESTConsumer barcodeRESTConsumer, ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer, MesRESTConsumer mesRESTConsumer) { + return new ProdDettaglioLineaViewModel(productionLinesRESTConsumer, barcodeRESTConsumer, colliMagazzinoRESTConsumer, mesRESTConsumer); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_dettaglio_linea/ProdDettaglioLineaViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_dettaglio_linea/ProdDettaglioLineaViewModel.java new file mode 100644 index 00000000..6b32581a --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_dettaglio_linea/ProdDettaglioLineaViewModel.java @@ -0,0 +1,238 @@ +package it.integry.integrywmsnative.gest.prod_dettaglio_linea; + +import androidx.lifecycle.MutableLiveData; + +import javax.inject.Inject; + +import it.integry.barcode_base_android_library.model.BarcodeScanDTO; +import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; +import it.integry.integrywmsnative.core.exception.NoLUFoundException; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener; +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.rest.consumers.BarcodeRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers.MesRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers.ProductionLinesRESTConsumer; +import it.integry.integrywmsnative.core.utility.UtilityBarcode; +import it.integry.integrywmsnative.core.utility.UtilityString; +import it.integry.integrywmsnative.gest.prod_linee_produzione.dto.ProdLineStatusDTO; +import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO; + +public class ProdDettaglioLineaViewModel { + + private Listener mListener; + + private final ProductionLinesRESTConsumer productionLinesRESTConsumer; + private final ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer; + private final MesRESTConsumer mesRESTConsumer; + private final BarcodeRESTConsumer mBarcodeRESTConsumer; + public final MutableLiveData lineaProd = new MutableLiveData<>(); + + + @Inject + public ProdDettaglioLineaViewModel(ProductionLinesRESTConsumer productionLinesRESTConsumer, BarcodeRESTConsumer barcodeRESTConsumer, ColliMagazzinoRESTConsumer magazzinoRESTConsumer, MesRESTConsumer mesRESTConsumer) { + this.productionLinesRESTConsumer = productionLinesRESTConsumer; + this.mBarcodeRESTConsumer = barcodeRESTConsumer; + this.colliMagazzinoRESTConsumer = magazzinoRESTConsumer; + this.mesRESTConsumer = mesRESTConsumer; + } + + public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) { + if (UtilityBarcode.isEtichettaAnonima(barcodeScanDTO)) { + this.executeEtichettaAnonima(barcodeScanDTO, onComplete); + } else if (UtilityBarcode.isEtichetta128(barcodeScanDTO)) { + this.executeEAN128(barcodeScanDTO, onComplete); + } else { + onComplete.run(); + } + } + + private void executeEtichettaAnonima(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) { + handleSSCCBarcode(barcodeScanDTO.getStringValue(), onComplete); + } + + private void handleSSCCBarcode(String sscc, Runnable onComplete) { + this.colliMagazzinoRESTConsumer.getBySSCC(sscc, true, false, mtbColt -> { + + if (mtbColt == null) { + this.sendError(new NoLUFoundException()); + } else { + if (mtbColt.getMtbColr().size() <= 0) { + this.sendError(new Exception("E' stata scansionata una UL già vuota")); + } + onComplete.run(); + this.sendOnLUSelected(mtbColt); + } + + }, this::sendError); + } + + private void sendOnLUSelected(MtbColt mtbColt) { + this.sendOnLoadingStarted(); + this.checkOrdersCompatibility(mtbColt, () -> { + MtbColr row = mtbColt.getMtbColr().get(0); + mListener.requestQtaVersamento( + row, + dto -> { + sendOnLoadingStarted(); + row.setQtaCnf(dto.getQtaCnf()); + row.setNumCnf(dto.getNumCnf()); + row.setQtaCol(dto.getQtaTot()); + row.setPesoLordoKg(null); + row.setPesoNettoKg(null); + ProdLineStatusDTO prodLine = lineaProd.getValue(); + MtbDepoPosizione posizione = new MtbDepoPosizione(); + posizione.setPosizione(prodLine.getCodJfas()); + posizione.setCodMdep(prodLine.getCodMdepLav()); + posizione.setFlagLineaProduzione("S"); + this.colliMagazzinoRESTConsumer.createColloScaricoDaCarico(mtbColt, posizione, + generatedMtbColt -> { + this.sendOnLoadingEnded(); + this.mListener.successDialog("Versamento completato!", BarcodeManager::enable); + }, this::sendError); + }); + }); + } + + private void checkOrdersCompatibility(MtbColt mtbColt, Runnable onComplete) { + mesRESTConsumer.getOrdiniLavorazioneMateriale(lineaProd.getValue().getCodJfas(), getIdMaterialeFromCollo(mtbColt), ordini -> { + if (ordini != null && ordini.size() > 0) { + onComplete.run(); + } else { + this.sendError(new Exception("Nessun ordine compatibile disponibile sulla linea selezionata")); + } + }, this::sendError); + } + + private String getIdMaterialeFromCollo(MtbColt mtbColt) { + MtbAart articolo = mtbColt.getMtbColr().get(0).getMtbAart(); + return UtilityString.isNullOrEmpty(articolo.getIdArtEqui()) ? articolo.getCodMart() : articolo.getIdArtEqui(); + } + + + private void executeEAN128(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) { + this.mBarcodeRESTConsumer.decodeEan128(barcodeScanDTO, ean128Model -> { + if (ean128Model != null && !UtilityString.isNullOrEmpty(ean128Model.Sscc)) { + handleSSCCBarcode(ean128Model.Sscc, onComplete); + } else { + this.sendError(new NoLUFoundException()); + } + + }, this::sendError); + } + + public void settings() { + this.mListener.onSettingsRequest(lineaProd.getValue()); + } + + private void sendOnLoadingStarted() { + if (this.mListener != null) mListener.onLoadingStarted(); + } + + private void sendOnLoadingEnded() { + if (this.mListener != null) mListener.onLoadingEnded(); + } + + private void sendError(Exception ex) { + if (this.mListener != null) mListener.onError(ex); + } + + public void startProductionLine(Integer hrNum) { + this.sendOnLoadingStarted(); + ProdLineStatusDTO prodLine = lineaProd.getValue(); + this.productionLinesRESTConsumer.avviaLineaDiProduzione(prodLine.getCodJfas(), + hrNum, + () -> this.mListener.successDialog("Operazione completata", this::loadLineDetails), + this::sendError); + } + + + private void startProduction(String codMart, String partitaMag) { + this.sendOnLoadingStarted(); + ProdLineStatusDTO prodLine = lineaProd.getValue(); + this.productionLinesRESTConsumer.avviaProduzioneArticoloSuLinea(prodLine.getCodJfas(), codMart, partitaMag, + () -> this.mListener.successDialog("Operazione completata", this::loadLineDetails), + this::sendError); + } + + public void stopProduction() { + this.sendOnLoadingStarted(); + ProdLineStatusDTO prodLine = lineaProd.getValue(); + this.productionLinesRESTConsumer.arrestaLineaDiProduzione(prodLine.getCodJfas(), + () -> this.mListener.successDialog("Operazione completata", this::onLineStop), + this::sendError); + } + + private void onLineStop() { + this.mListener.onLineStop(); + } + + public void checkBarcodeAndStartOrdine(BarcodeScanDTO dto) { + this.sendOnLoadingStarted(); + ProdLineStatusDTO prodLine = lineaProd.getValue(); + mBarcodeRESTConsumer.decodeEan128(dto, (ean128) -> { + String codMart = ean128.Content; + String partitaMag = ean128.BatchLot; + if (!prodLine.isStarted()) { + this.sendError(new Exception("Impossibile avviare una produzione su una linea ferma!")); + } else if (UtilityString.isNullOrEmpty(prodLine.getListaOrd())) { + this.startProduction(codMart, partitaMag); + } else { + this.mListener.confirmOrderClose(() -> { + this.startProduction(codMart, partitaMag); + }); + } + }, this::sendError); + } + + public void loadLineDetails() { + sendOnLoadingStarted(); + if (lineaProd.getValue() == null) { + this.sendError(new Exception("Nessuna linea selezionata!")); + return; + } + productionLinesRESTConsumer.getLineDetails(lineaProd.getValue(), linea -> { + this.lineaProd.postValue(linea); + sendOnLoadingEnded(); + }, this::sendError); + } + + public void init(ProdLineStatusDTO lineaProd) { + this.lineaProd.setValue(lineaProd); + this.loadLineDetails(); + } + + public ProdLineStatusDTO getLineaProd() { + return lineaProd.getValue(); + } + + public void beginMaterialRecover() { + this.mListener.askForLUBarcode(); + } + + public interface Listener extends ILoadingListener { + void onError(Exception ex); + + void successDialog(String message, Runnable onComplete); + + void requestQtaVersamento(MtbColr mtbColr, RunnableArgs onComplete); + + void onSettingsRequest(ProdLineStatusDTO lineaProd); + + void onLineStop(); + + void askForLUBarcode(); + + void confirmOrderClose(Runnable onConfirm); + } + + public ProdDettaglioLineaViewModel setListener(Listener listener) { + this.mListener = listener; + return this; + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_linee_produzione/dialogs/BottomSheetLineAction.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_dettaglio_linea/dialogs/BottomSheetLineAction.java similarity index 73% rename from app/src/main/java/it/integry/integrywmsnative/gest/prod_linee_produzione/dialogs/BottomSheetLineAction.java rename to app/src/main/java/it/integry/integrywmsnative/gest/prod_dettaglio_linea/dialogs/BottomSheetLineAction.java index 07f3f01c..6a41b8ac 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_linee_produzione/dialogs/BottomSheetLineAction.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_dettaglio_linea/dialogs/BottomSheetLineAction.java @@ -1,4 +1,4 @@ -package it.integry.integrywmsnative.gest.prod_linee_produzione.dialogs; +package it.integry.integrywmsnative.gest.prod_dettaglio_linea.dialogs; import android.content.DialogInterface; import android.os.Bundle; @@ -11,7 +11,6 @@ import androidx.annotation.Nullable; import com.google.android.material.bottomsheet.BottomSheetDialogFragment; -import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.databinding.BottomSheetLineActionsBinding; import it.integry.integrywmsnative.gest.prod_linee_produzione.dto.ProdLineStatusDTO; @@ -20,17 +19,19 @@ public class BottomSheetLineAction extends BottomSheetDialogFragment { private BottomSheetLineActionsBinding mBinding; private ProdLineStatusDTO prodLine; - private RunnableArgs onChangeResourcesRequest; - private RunnableArgs onChangeOrdersRequest; - private RunnableArgs onLineCloseRequest; + private Runnable onChangeResourcesRequest; + private Runnable onChangeOrdersRequest; + private Runnable onLineCloseRequest; + private Runnable onRecoverRequest; private Runnable onCancelAction; - public static BottomSheetLineAction newInstance(ProdLineStatusDTO dto, RunnableArgs onChangeResourcesRequest, RunnableArgs onChangeOrdersRequest, RunnableArgs onLineCloseRequest, Runnable onCancel) { + public static BottomSheetLineAction newInstance(ProdLineStatusDTO dto, Runnable onChangeResourcesRequest, Runnable onChangeOrdersRequest, Runnable onLineCloseRequest, Runnable onRecoverRequest, Runnable onCancel) { BottomSheetLineAction fragment = new BottomSheetLineAction(); fragment .setProdLine(dto) .setOnChangeResourcesRequest(onChangeResourcesRequest) .setOnChangeOrdersRequest(onChangeOrdersRequest) + .setOnRecoverRequest(onRecoverRequest) .setOnLineCloseRequest(onLineCloseRequest) .setOnCancelAction(onCancel); return fragment; @@ -53,19 +54,24 @@ public class BottomSheetLineAction extends BottomSheetDialogFragment { return this; } - public BottomSheetLineAction setOnChangeResourcesRequest(RunnableArgs onChangeResourcesRequest) { + public BottomSheetLineAction setOnChangeResourcesRequest(Runnable onChangeResourcesRequest) { this.onChangeResourcesRequest = onChangeResourcesRequest; return this; } - public BottomSheetLineAction setOnChangeOrdersRequest(RunnableArgs onChangeOrdersRequest) { + public BottomSheetLineAction setOnChangeOrdersRequest(Runnable onChangeOrdersRequest) { this.onChangeOrdersRequest = onChangeOrdersRequest; return this; } + public BottomSheetLineAction setOnRecoverRequest(Runnable onRecoverRequest) { + this.onRecoverRequest = onRecoverRequest; + return this; + } - public BottomSheetLineAction setOnLineCloseRequest(RunnableArgs onLineCloseRequest) { + + public BottomSheetLineAction setOnLineCloseRequest(Runnable onLineCloseRequest) { this.onLineCloseRequest = onLineCloseRequest; return this; } @@ -81,7 +87,7 @@ public class BottomSheetLineAction extends BottomSheetDialogFragment { public void onResourcesClicked() { if (this.onChangeResourcesRequest != null) { - this.onChangeResourcesRequest.run(prodLine); + this.onChangeResourcesRequest.run(); } this.dismiss(); @@ -89,14 +95,21 @@ public class BottomSheetLineAction extends BottomSheetDialogFragment { public void onPlayClicked() { if (this.onChangeOrdersRequest != null) { - this.onChangeOrdersRequest.run(prodLine); + this.onChangeOrdersRequest.run(); } this.dismiss(); } public void onStopClicked() { if (this.onLineCloseRequest != null) { - this.onLineCloseRequest.run(prodLine); + this.onLineCloseRequest.run(); + } + this.dismiss(); + } + + public void onRecoverClicked() { + if (this.onRecoverRequest != null) { + this.onRecoverRequest.run(); } this.dismiss(); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_linee_produzione/dialogs/DialogStartProduction.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_dettaglio_linea/dialogs/DialogRecoverUl.java similarity index 86% rename from app/src/main/java/it/integry/integrywmsnative/gest/prod_linee_produzione/dialogs/DialogStartProduction.java rename to app/src/main/java/it/integry/integrywmsnative/gest/prod_dettaglio_linea/dialogs/DialogRecoverUl.java index d1fa80ba..6a1c292a 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_linee_produzione/dialogs/DialogStartProduction.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_dettaglio_linea/dialogs/DialogRecoverUl.java @@ -1,4 +1,4 @@ -package it.integry.integrywmsnative.gest.prod_linee_produzione.dialogs; +package it.integry.integrywmsnative.gest.prod_dettaglio_linea.dialogs; import android.content.DialogInterface; import android.graphics.Color; @@ -19,16 +19,16 @@ import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.utility.UtilityBarcode; import it.integry.integrywmsnative.databinding.DialogStartProductionBinding; -public class DialogStartProduction extends BaseDialogFragment { +public class DialogRecoverUl extends BaseDialogFragment { private int barcodeScannerIstanceID = -1; private RunnableArgs onScanSuccessful; private DialogStartProductionBinding mBinding; - public static DialogStartProduction newInstance(RunnableArgs onScanSuccessful) { + public static DialogRecoverUl newInstance(RunnableArgs onScanSuccessful) { Bundle args = new Bundle(); - DialogStartProduction fragment = new DialogStartProduction(); + DialogRecoverUl fragment = new DialogRecoverUl(); fragment.setArguments(args); fragment.setOnScanSuccessful(onScanSuccessful); return fragment; @@ -41,7 +41,7 @@ public class DialogStartProduction extends BaseDialogFragment { super.onDismiss(dialog); } - public DialogStartProduction setOnScanSuccessful(RunnableArgs onScanSuccessful) { + public DialogRecoverUl setOnScanSuccessful(RunnableArgs onScanSuccessful) { this.onScanSuccessful = onScanSuccessful; return this; } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_dettaglio_linea/dialogs/DialogStartProduction.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_dettaglio_linea/dialogs/DialogStartProduction.java new file mode 100644 index 00000000..a90fb0b4 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_dettaglio_linea/dialogs/DialogStartProduction.java @@ -0,0 +1,117 @@ +package it.integry.integrywmsnative.gest.prod_dettaglio_linea.dialogs; + +import android.content.DialogInterface; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import it.integry.barcode_base_android_library.model.BarcodeScanDTO; +import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO; +import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; +import it.integry.integrywmsnative.core.expansion.BaseDialogFragment; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.utility.UtilityBarcode; +import it.integry.integrywmsnative.core.utility.UtilityString; +import it.integry.integrywmsnative.databinding.DialogStartProductionBinding; + +public class DialogStartProduction extends BaseDialogFragment { + private int barcodeScannerIstanceID = -1; + private RunnableArgs onScanSuccessful; + private DialogStartProductionBinding mBinding; + private String title; + private String label; + + public static DialogStartProduction newInstance(RunnableArgs onScanSuccessful) { + + Bundle args = new Bundle(); + + DialogStartProduction fragment = new DialogStartProduction(); + fragment.setArguments(args); + fragment.setOnScanSuccessful(onScanSuccessful); + return fragment; + } + + public static DialogStartProduction newInstance(RunnableArgs onScanSuccessful, String title, String label) { + + Bundle args = new Bundle(); + + DialogStartProduction fragment = new DialogStartProduction(); + fragment.setTitle(title); + fragment.setLabel(label); + fragment.setArguments(args); + fragment.setOnScanSuccessful(onScanSuccessful); + return fragment; + } + + public String getTitle() { + return title; + } + + public DialogStartProduction setTitle(String title) { + this.title = title; + return this; + } + + public String getLabel() { + return label; + } + + public DialogStartProduction setLabel(String label) { + this.label = label; + return this; + } + + @Override + public void onDismiss(@NonNull DialogInterface dialog) { + BarcodeManager.removeCallback(barcodeScannerIstanceID); + super.onDismiss(dialog); + } + + public DialogStartProduction setOnScanSuccessful(RunnableArgs onScanSuccessful) { + this.onScanSuccessful = onScanSuccessful; + return this; + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + mBinding = DialogStartProductionBinding.inflate(inflater, container, false); + mBinding.setLifecycleOwner(this); + this.initBarcodeReader(); + setCancelable(true); + getDialog().setCanceledOnTouchOutside(true); + getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + + if (!UtilityString.isNullOrEmpty(title)) { + mBinding.titleText.setText(title); + } + + if (!UtilityString.isNullOrEmpty(label)) { + mBinding.scanLabel.setText(label); + } + return mBinding.getRoot(); + } + + + private void initBarcodeReader() { + barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() + .setOnScanSuccessful(this::processBarcode) + .setOnScanFailed(this::onError)); + BarcodeManager.enable(); + } + + private void processBarcode(BarcodeScanDTO barcodeScanDTO) { + if (UtilityBarcode.isEan128(barcodeScanDTO)) { + this.onScanSuccessful.run(barcodeScanDTO); + this.dismiss(); + } else { + this.onError(new Exception("Il barcode scansionato non è valido!")); + } + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_linee_produzione/ProdLineeProduzioneFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_linee_produzione/ProdLineeProduzioneFragment.java index 92fa730b..6211e578 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_linee_produzione/ProdLineeProduzioneFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_linee_produzione/ProdLineeProduzioneFragment.java @@ -2,7 +2,6 @@ package it.integry.integrywmsnative.gest.prod_linee_produzione; import android.content.Context; import android.os.Bundle; -import android.text.Html; import android.text.InputType; import android.text.SpannableString; import android.view.LayoutInflater; @@ -10,7 +9,6 @@ import android.view.View; import android.view.ViewGroup; import androidx.appcompat.widget.AppCompatTextView; -import androidx.databinding.DataBindingUtil; import androidx.databinding.ObservableArrayList; import androidx.recyclerview.widget.LinearLayoutManager; @@ -27,10 +25,8 @@ import it.integry.integrywmsnative.core.expansion.BaseFragment; import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.interfaces.IScrollableFragment; import it.integry.integrywmsnative.core.interfaces.ITitledFragment; -import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.databinding.FragmentLineeProdBinding; -import it.integry.integrywmsnative.gest.prod_linee_produzione.dialogs.BottomSheetLineAction; -import it.integry.integrywmsnative.gest.prod_linee_produzione.dialogs.DialogStartProduction; +import it.integry.integrywmsnative.gest.prod_dettaglio_linea.ProdDettaglioLineaActivity; import it.integry.integrywmsnative.gest.prod_linee_produzione.dto.ProdLineStatusDTO; import it.integry.integrywmsnative.gest.prod_linee_produzione.ui.LinesListAdapter; import it.integry.integrywmsnative.ui.ElevatedToolbar; @@ -60,8 +56,7 @@ public class ProdLineeProduzioneFragment extends BaseFragment implements ITitled @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - - mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_linee_prod, container, false); + mBinding = FragmentLineeProdBinding.inflate(inflater, container, false); MainApplication.appComponent .prodLineeProduzioneComponent() .create() @@ -71,11 +66,17 @@ public class ProdLineeProduzioneFragment extends BaseFragment implements ITitled mBinding.setLifecycleOwner(this); this.initRecyclerView(); this.initBarcodeReader(); - mViewModel.init(); return mBinding.getRoot(); } + @Override + public void onStart() { + super.onStart(); + mViewModel.init(); + } + + private void initBarcodeReader() { barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() .setOnScanSuccessful(onScanSuccessful) @@ -123,28 +124,6 @@ public class ProdLineeProduzioneFragment extends BaseFragment implements ITitled }); } - public void requestOrderChange(ProdLineStatusDTO prodLine) { - this.onLoadingEnded(); - requireActivity().runOnUiThread(() -> { - DialogStartProduction.newInstance((dto) -> { - this.mViewModel.checkBarcodeAndStartOrdine(prodLine, dto); - }).show(getChildFragmentManager(), "DialogStartProduction"); - }); - } - - public void requestProductionStop(ProdLineStatusDTO prodLine) { - this.onLoadingEnded(); - BarcodeManager.disable(); - if (UtilityString.isNullOrEmpty(prodLine.getListaOrd())) { - mViewModel.stopProduction(prodLine); - } else { - this.confirmOrderClose(() -> { - mViewModel.stopProduction(prodLine); - }); - } - - } - @Override public void successDialog(String message, Runnable onComplete) { BarcodeManager.disable(); @@ -160,25 +139,10 @@ public class ProdLineeProduzioneFragment extends BaseFragment implements ITitled if (!dto.isStarted()) { this.requestResources(dto); } else { - BottomSheetLineAction.newInstance(dto, this::requestResources, this::requestOrderChange, this::requestProductionStop, BarcodeManager::enable).show(getChildFragmentManager(), "BottomSheetLineAction"); + requireActivity().startActivity(ProdDettaglioLineaActivity.newInstance(requireActivity(), dto)); } } - @Override - public void confirmOrderClose(Runnable onConfirm) { - this.onLoadingEnded(); - requireActivity().runOnUiThread(() -> { - DialogSimpleMessageView.makeWarningDialog( - Html.fromHtml("Per completare l'operazione è necessario chiudere gli ordini attualmente aperti sulla linea." - + "

" + - "Continuare?"), - null, - onConfirm, - BarcodeManager::enable - ).show(getChildFragmentManager(), "confirmOrderClose"); - }); - } - @Override public void onCreateActionBar(AppCompatTextView titleText, Context context) { diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_linee_produzione/ProdLineeProduzioneModule.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_linee_produzione/ProdLineeProduzioneModule.java index a36e3629..3d75435a 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_linee_produzione/ProdLineeProduzioneModule.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_linee_produzione/ProdLineeProduzioneModule.java @@ -1,10 +1,7 @@ package it.integry.integrywmsnative.gest.prod_linee_produzione; -import javax.inject.Singleton; - import dagger.Module; import dagger.Provides; -import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.ProductionLinesRESTConsumer; import it.integry.integrywmsnative.gest.prod_rientro_merce.ProdRientroMerceComponent; @@ -12,14 +9,8 @@ import it.integry.integrywmsnative.gest.prod_rientro_merce.ProdRientroMerceCompo public class ProdLineeProduzioneModule { @Provides - ProdLineeProduzioneViewModel providesProdRientroMerceViewModel(ProductionLinesRESTConsumer productionLinesRESTConsumer, BarcodeRESTConsumer barcodeRESTConsumer) { - return new ProdLineeProduzioneViewModel(productionLinesRESTConsumer, barcodeRESTConsumer); - } - - @Provides - @Singleton - ProductionLinesRESTConsumer providesProductionLinesRESTConsumer() { - return new ProductionLinesRESTConsumer(); + ProdLineeProduzioneViewModel providesProdRientroMerceViewModel(ProductionLinesRESTConsumer productionLinesRESTConsumer) { + return new ProdLineeProduzioneViewModel(productionLinesRESTConsumer); } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_linee_produzione/ProdLineeProduzioneViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_linee_produzione/ProdLineeProduzioneViewModel.java index d2ac9714..326c8ed2 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_linee_produzione/ProdLineeProduzioneViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_linee_produzione/ProdLineeProduzioneViewModel.java @@ -11,40 +11,34 @@ import javax.inject.Inject; import it.integry.barcode_base_android_library.model.BarcodeScanDTO; import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener; -import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.ProductionLinesRESTConsumer; import it.integry.integrywmsnative.core.settings.SettingsManager; -import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.gest.prod_linee_produzione.dto.ProdLineStatusDTO; public class ProdLineeProduzioneViewModel { private final ProductionLinesRESTConsumer productionLinesRESTConsumer; - private final BarcodeRESTConsumer mBarcodeRESTConsumer; private final MutableLiveData> prodLines = new MutableLiveData<>(); private Listener mListener; @Inject - public ProdLineeProduzioneViewModel(ProductionLinesRESTConsumer productionLinesRESTConsumer, BarcodeRESTConsumer barcodeRESTConsumer) { + public ProdLineeProduzioneViewModel(ProductionLinesRESTConsumer productionLinesRESTConsumer) { this.productionLinesRESTConsumer = productionLinesRESTConsumer; - this.mBarcodeRESTConsumer = barcodeRESTConsumer; } public void init() { - this.sendOnLoadingStarted(); reloadLines(); - } private void reloadLines() { - BarcodeManager.disable(); sendOnLoadingStarted(); + BarcodeManager.disable(); this.productionLinesRESTConsumer.getStatoLinee(SettingsManager.i().getUserSession().getDepo().getCodMdep(), lineeProdList -> { - this.sendOnLoadingEnded(); BarcodeManager.enable(); prodLines.postValue(lineeProdList); + this.sendOnLoadingEnded(); }, this::sendError); } @@ -58,15 +52,12 @@ public class ProdLineeProduzioneViewModel { public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO) { String codJfas = barcodeScanDTO.getStringValue(); - ProdLineStatusDTO prodLine = prodLines.getValue() != null ? Stream.of(prodLines.getValue()).filter(x -> x.getCodJfas().equalsIgnoreCase(codJfas)).findFirstOrElse(null) : null; if (prodLine != null) { this.onLineSelected(prodLine); } else { this.sendError(new Exception("Linea di produzione " + codJfas + " non trovata")); } - - } @@ -94,37 +85,6 @@ public class ProdLineeProduzioneViewModel { mListener.selectLine(lineSelected); } - public void checkBarcodeAndStartOrdine(ProdLineStatusDTO prodLine, BarcodeScanDTO dto) { - this.sendOnLoadingStarted(); - mBarcodeRESTConsumer.decodeEan128(dto, (ean128) -> { - String codMart = ean128.Content; - String partitaMag = ean128.BatchLot; - if (!prodLine.isStarted()) { - this.sendError(new Exception("Impossibile avviare una produzione su una linea ferma!")); - } else if (UtilityString.isNullOrEmpty(prodLine.getListaOrd())) { - this.startProduction(prodLine, codMart, partitaMag); - } else { - this.mListener.confirmOrderClose(() -> { - this.startProduction(prodLine, codMart, partitaMag); - }); - } - }, this::sendError); - } - - private void startProduction(ProdLineStatusDTO prodLine, String codMart, String partitaMag) { - this.sendOnLoadingStarted(); - this.productionLinesRESTConsumer.avviaProduzioneArticoloSuLinea(prodLine.getCodJfas(), codMart, partitaMag, - () -> this.mListener.successDialog("Operazione completata", this::reloadLines), - this::sendError); - } - - public void stopProduction(ProdLineStatusDTO prodLine) { - this.sendOnLoadingStarted(); - this.productionLinesRESTConsumer.arrestaLineaDiProduzione(prodLine.getCodJfas(), - () -> this.mListener.successDialog("Operazione completata", this::reloadLines), - this::sendError); - } - public interface Listener extends ILoadingListener { @@ -134,8 +94,6 @@ public class ProdLineeProduzioneViewModel { void selectLine(ProdLineStatusDTO prodLineStatusDTO); - void confirmOrderClose(Runnable onConfirm); - } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_linee_produzione/dto/ProdLineStatusDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_linee_produzione/dto/ProdLineStatusDTO.java index 10808248..eee545c4 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_linee_produzione/dto/ProdLineStatusDTO.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_linee_produzione/dto/ProdLineStatusDTO.java @@ -16,12 +16,18 @@ public class ProdLineStatusDTO { private Date datetimeEnd; + private String codMart; + + private String partitaMag; + private BigDecimal maxAllocazione; private Integer qtaAllocate; private String listaOrd; + private String descrizioneProd; + public String getCodJfas() { return codJfas; @@ -126,4 +132,31 @@ public class ProdLineStatusDTO { return qtaAllocate + (maxAllocazione != null && maxAllocazione.compareTo(BigDecimal.ZERO) > 0 ? "/" + maxAllocazione : ""); } + public String getCodMart() { + return codMart; + } + + public ProdLineStatusDTO setCodMart(String codMart) { + this.codMart = codMart; + return this; + } + + public String getPartitaMag() { + return partitaMag; + } + + public ProdLineStatusDTO setPartitaMag(String partitaMag) { + this.partitaMag = partitaMag; + return this; + } + + + public String getDescrizioneProd() { + return descrizioneProd; + } + + public ProdLineStatusDTO setDescrizioneProd(String descrizioneProd) { + this.descrizioneProd = descrizioneProd; + return this; + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/ProdRecuperoMaterialeFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/ProdRecuperoMaterialeFragment.java index 557c217f..2aab53aa 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/ProdRecuperoMaterialeFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/ProdRecuperoMaterialeFragment.java @@ -59,6 +59,7 @@ public class ProdRecuperoMaterialeFragment extends BaseFragment implements ITitl private FragmentProdRecuperoMaterialeBinding mBinding; private int barcodeScannerIstanceID = -1; + private String codJfas; private final ObservableArrayList mHistoryULMutableData = new ObservableArrayList<>(); @@ -67,7 +68,12 @@ public class ProdRecuperoMaterialeFragment extends BaseFragment implements ITitl } public static ProdRecuperoMaterialeFragment newInstance() { + return newInstance(null); + } + + public static ProdRecuperoMaterialeFragment newInstance(String codJfas) { ProdRecuperoMaterialeFragment fragment = new ProdRecuperoMaterialeFragment(); + fragment.setCodJfas(codJfas); return fragment; } @@ -96,8 +102,12 @@ public class ProdRecuperoMaterialeFragment extends BaseFragment implements ITitl @Override public void onStart() { super.onStart(); - - mViewModel.init(); + this.addOnPreDestroy(() -> { + if (barcodeScannerIstanceID > -1) { + BarcodeManager.removeCallback(barcodeScannerIstanceID); + } + }); + mViewModel.init(codJfas); } @@ -115,6 +125,15 @@ public class ProdRecuperoMaterialeFragment extends BaseFragment implements ITitl BarcodeManager.enable(); } + public String getCodJfas() { + return codJfas; + } + + public ProdRecuperoMaterialeFragment setCodJfas(String codJfas) { + this.codJfas = codJfas; + return this; + } + private final RunnableArgs onScanSuccessful = data -> { this.onLoadingStarted(); @@ -133,7 +152,9 @@ public class ProdRecuperoMaterialeFragment extends BaseFragment implements ITitl mBinding.prodRecuperoMaterialeMainList.setAdapter(adapter); - mToolbar.setRecyclerView(mBinding.prodRecuperoMaterialeMainList); + if (mToolbar != null) + mToolbar.setRecyclerView(mBinding.prodRecuperoMaterialeMainList); + } private void refreshList(List filteredList) { @@ -230,11 +251,11 @@ public class ProdRecuperoMaterialeFragment extends BaseFragment implements ITitl public void onLUPrintError(Exception ex, Runnable onComplete) { this.onLoadingEnded(); DialogSimpleMessageView.makeErrorDialog( - new SpannableString(ex.getMessage()), - null, - null, - R.string.button_ignore_print, - onComplete) + new SpannableString(ex.getMessage()), + null, + null, + R.string.button_ignore_print, + onComplete) .show(requireActivity().getSupportFragmentManager(), "tag"); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/ProdRecuperoMaterialeViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/ProdRecuperoMaterialeViewModel.java index 5ea748b6..ba014ab2 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/ProdRecuperoMaterialeViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/ProdRecuperoMaterialeViewModel.java @@ -51,11 +51,11 @@ public class ProdRecuperoMaterialeViewModel { this.mPrinterRESTConsumer = printerRESTConsumer; } - public void init() { + public void init(String codJfas) { this.sendOnLoadingStarted(); new Thread(() -> { - mProdRecuperMaterialeRESTConsumer.loadLastULVersate(ulList -> { + mProdRecuperMaterialeRESTConsumer.loadLastULVersate(codJfas, ulList -> { this.mUlList.setValue(ulList); this.sendOnLoadingEnded(); @@ -151,27 +151,64 @@ public class ProdRecuperoMaterialeViewModel { BigDecimal totalSumOfQtaCol = BigDecimal.ZERO; BigDecimal totalSumOfNumCnf = BigDecimal.ZERO; - for (HistoryVersamentoProdULDTO.OrdineDto ordine : item.getOrdini()) { + if (SettingsManager.iDB().isFlagVersamentoDirettoProduzione()) { + for (HistoryVersamentoProdULDTO.OrdineDto ordine : item.getOrdini()) { + BigDecimal qtaColToSave; + BigDecimal numCnfToSave; + + if (SettingsManager.iDB().isFlagForceAllToColli() || (item.getMtbAart() != null && !item.getMtbAart().isFlagQtaCnfFissaBoolean())) { + numCnfToSave = UtilityBigDecimal.divideAndRoundToInteger(inputNumCnf.multiply(BigDecimal.valueOf(ordine.getPercentageHr())), BigDecimal.valueOf(100), RoundingMode.FLOOR); + qtaColToSave = numCnfToSave.multiply(inputQtaCnf).setScale(0, BigDecimal.ROUND_FLOOR); + } else { + qtaColToSave = UtilityBigDecimal.divideAndRoundToInteger(inputQtaTot.multiply(BigDecimal.valueOf(ordine.getPercentageHr())), BigDecimal.valueOf(100), RoundingMode.FLOOR); + numCnfToSave = UtilityBigDecimal.divide(qtaColToSave, item.getQtaCnf(), RoundingMode.FLOOR); + } + + + totalSumOfQtaCol = totalSumOfQtaCol.add(qtaColToSave); + totalSumOfNumCnf = totalSumOfNumCnf.add(numCnfToSave); + + numCnfToSave = numCnfToSave.multiply(BigDecimal.valueOf(-1)); + qtaColToSave = qtaColToSave.multiply(BigDecimal.valueOf(-1)); + + + final MtbColr mtbColrScarico = new MtbColr() + .setCodMart(item.getCodMart()) + .setPartitaMag(UtilityString.empty2null(item.getPartitaMag())) + .setQtaCol(qtaColToSave) + .setQtaCnf(inputQtaCnf) + .setNumCnf(numCnfToSave) + .setDescrizione(UtilityString.isNullOrEmpty(item.getMtbAart().getDescrizioneEstesa()) ? item.getMtbAart().getDescrizione() : item.getMtbAart().getDescrizioneEstesa()) + .setDatetimeRow(UtilityDate.getDateInstance()) + .setNumColloRif(item.getNumColloRif()) + .setDataColloRif(item.getDataColloRif()) + .setGestioneRif(item.getGestioneRif()) + .setSerColloRif(item.getSerColloRif()) + .setDataOrd(ordine.getData()) + .setNumOrd(ordine.getNumero()) + .setRigaOrd(ordine.getRigaOrd()); + + mtbColrScarico.setOperation(CommonModelConsts.OPERATION.INSERT); + mtbColtScarico.getMtbColr().add(mtbColrScarico); + } + } else { BigDecimal qtaColToSave; BigDecimal numCnfToSave; - if (SettingsManager.iDB().isFlagForceAllToColli() || (item.getMtbAart() != null && !item.getMtbAart().isFlagQtaCnfFissaBoolean())) { - numCnfToSave = UtilityBigDecimal.divideAndRoundToInteger(inputNumCnf.multiply(BigDecimal.valueOf(ordine.getPercentageHr())), BigDecimal.valueOf(100), RoundingMode.FLOOR); + numCnfToSave = inputNumCnf; qtaColToSave = numCnfToSave.multiply(inputQtaCnf).setScale(0, BigDecimal.ROUND_FLOOR); } else { - qtaColToSave = UtilityBigDecimal.divideAndRoundToInteger(inputQtaTot.multiply(BigDecimal.valueOf(ordine.getPercentageHr())), BigDecimal.valueOf(100), RoundingMode.FLOOR); + qtaColToSave = inputQtaTot; numCnfToSave = UtilityBigDecimal.divide(qtaColToSave, item.getQtaCnf(), RoundingMode.FLOOR); } - - totalSumOfQtaCol = totalSumOfQtaCol.add(qtaColToSave); - totalSumOfNumCnf = totalSumOfNumCnf.add(numCnfToSave); + totalSumOfQtaCol = qtaColToSave; + totalSumOfNumCnf = numCnfToSave; numCnfToSave = numCnfToSave.multiply(BigDecimal.valueOf(-1)); qtaColToSave = qtaColToSave.multiply(BigDecimal.valueOf(-1)); - final MtbColr mtbColrScarico = new MtbColr() .setCodMart(item.getCodMart()) .setPartitaMag(UtilityString.empty2null(item.getPartitaMag())) @@ -183,10 +220,7 @@ public class ProdRecuperoMaterialeViewModel { .setNumColloRif(item.getNumColloRif()) .setDataColloRif(item.getDataColloRif()) .setGestioneRif(item.getGestioneRif()) - .setSerColloRif(item.getSerColloRif()) - .setDataOrd(ordine.getData()) - .setNumOrd(ordine.getNumero()) - .setRigaOrd(ordine.getRigaOrd()); + .setSerColloRif(item.getSerColloRif()); mtbColrScarico.setOperation(CommonModelConsts.OPERATION.INSERT); mtbColtScarico.getMtbColr().add(mtbColrScarico); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/rest/ProdRecuperMaterialeRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/rest/ProdRecuperMaterialeRESTConsumer.java index 9d707a58..18276dc9 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/rest/ProdRecuperMaterialeRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/rest/ProdRecuperMaterialeRESTConsumer.java @@ -16,6 +16,9 @@ import it.integry.integrywmsnative.core.model.MtbAart; import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers._BaseRESTConsumer; +import it.integry.integrywmsnative.core.settings.SettingsManager; +import it.integry.integrywmsnative.core.utility.UtilityDB; +import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.gest.prod_recupero_materiale.dto.HistoryVersamentoProdULDTO; import it.integry.integrywmsnative.gest.prod_recupero_materiale.dto.HistoryVersamentoProdULRestDTO; @@ -32,6 +35,10 @@ public class ProdRecuperMaterialeRESTConsumer extends _BaseRESTConsumer { public void loadLastULVersate(RunnableArgs> onComplete, RunnableArgs onFailed) { + loadLastULVersate(null, onComplete, onFailed); + } + + public void loadLastULVersate(String codJfas, RunnableArgs> onComplete, RunnableArgs onFailed) { String sql = "WITH ul_list AS ( " + " SELECT jtb_fasi.cod_jfas, " + @@ -68,7 +75,7 @@ public class ProdRecuperMaterialeRESTConsumer extends _BaseRESTConsumer { " AND mtb_colr.data_collo = mtb_colt.data_collo " + " AND mtb_colr.ser_collo = mtb_colt.ser_collo " + " AND mtb_colr.gestione = mtb_colt.gestione " + - " INNER JOIN dtb_ord_steps ON dtb_ord_steps.data_ord = mtb_colr.data_ord " + + " " + (SettingsManager.iDB().isFlagVersamentoDirettoProduzione() ? "INNER" : "LEFT OUTER") + " join dtb_ord_steps ON dtb_ord_steps.data_ord = mtb_colr.data_ord " + " AND dtb_ord_steps.gestione = mtb_colr.gestione " + " AND dtb_ord_steps.num_ord = mtb_colr.num_ord " + " AND dtb_ord_steps.data_iniz is not null " + @@ -76,6 +83,7 @@ public class ProdRecuperMaterialeRESTConsumer extends _BaseRESTConsumer { " INNER JOIN mtb_aart ON mtb_colr.cod_mart = mtb_aart.cod_mart " + " LEFT OUTER JOIN jtb_fasi ON mtb_colt.cod_jfas = jtb_fasi.cod_jfas " + " WHERE jtb_fasi.cod_jfas IS NOT NULL " + + (UtilityString.isNullOrEmpty(codJfas) ? "" : " AND jtb_fasi.cod_jfas = " + UtilityDB.valueToString(codJfas)) + " AND segno = -1 " + " AND mtb_colr.data_collo > DATEADD(DAY, -5, GETDATE()) " + " GROUP BY jtb_fasi.cod_jfas, " + @@ -177,7 +185,8 @@ public class ProdRecuperMaterialeRESTConsumer extends _BaseRESTConsumer { " ISNULL(max_ul.hr, '') = ISNULL(ul_list.hr, '') AND " + " max_ul.max_datetime_row = ul_list.datetime_row"; - Type typeOfObjectsList = new TypeToken>() {}.getType(); + Type typeOfObjectsList = new TypeToken>() { + }.getType(); this.mSystemRESTConsumer.>processSql(sql, typeOfObjectsList, ulList -> { if (ulList == null) { diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2DTO.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2DTO.java index 2333b838..08213283 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2DTO.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2DTO.java @@ -31,6 +31,7 @@ public class DialogInputQuantityV2DTO { private boolean isDataScadMandatory = false; private boolean isNotesAllowed = false; private boolean isNotesMandatory = false; + private boolean isFocusOnStart = true; private boolean canLUBeClosed; private boolean saveOnImeDone = false; @@ -131,6 +132,15 @@ public class DialogInputQuantityV2DTO { return this; } + public boolean isFocusOnStart() { + return isFocusOnStart; + } + + public DialogInputQuantityV2DTO setFocusOnStart(boolean focusOnStart) { + isFocusOnStart = focusOnStart; + return this; + } + public BigDecimal getTotalQtaAvailable() { return UtilityBigDecimal.round(totalQtaAvailable); } diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2View.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2View.java index 9cddf4ea..a06b1b65 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2View.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2View.java @@ -170,7 +170,9 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia }); } this.onLoadingEnded(); - mBindings.inputNumCnfText.requestFocus(); + if (mDialogInputQuantityV2DTO.isFocusOnStart()) { + mBindings.inputNumCnfText.requestFocus(); + } return mBindings.getRoot(); } diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_art/DialogScanArtView.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_art/DialogScanArtView.java index f62f9a16..6d0ff184 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_art/DialogScanArtView.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_art/DialogScanArtView.java @@ -98,7 +98,7 @@ public class DialogScanArtView extends BaseDialogFragment implements DialogScanA mBarcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() .setOnScanSuccessful(onScanSuccessfull) .setOnScanFailed(this::onError)); - + BarcodeManager.enable(); setBarcodeListener(true); } diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_or_create_lu/DialogScanOrCreateLUView.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_or_create_lu/DialogScanOrCreateLUView.java index cec29798..6ac64921 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_or_create_lu/DialogScanOrCreateLUView.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_or_create_lu/DialogScanOrCreateLUView.java @@ -115,7 +115,7 @@ public class DialogScanOrCreateLUView extends BaseDialogFragment implements Dial public void onDismiss(@NonNull DialogInterface dialog) { BarcodeManager.removeCallback(mBarcodeScannerIstanceID); BarcodeManager.enable(); - if(openedMtbColt == null) { + if (openedMtbColt == null) { mOnComplete.run(null, false); } super.onDismiss(dialog); @@ -126,7 +126,7 @@ public class DialogScanOrCreateLUView extends BaseDialogFragment implements Dial mBarcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() .setOnScanSuccessful(onScanSuccessfull) .setOnScanFailed(this::onError)); - + BarcodeManager.enable(); setBarcodeListener(true); } @@ -150,11 +150,11 @@ public class DialogScanOrCreateLUView extends BaseDialogFragment implements Dial @Override public void onLUVenditaConfirmRequired(RunnableArgs onConfirm) { DialogSimpleMessageView.makeWarningDialog(new SpannableString(getString(R.string.lu_gest_v_loading_alert)), - null, () -> { - onConfirm.run(true); - }, () -> { - onConfirm.run(false); - }) + null, () -> { + onConfirm.run(true); + }, () -> { + onConfirm.run(false); + }) .show(requireActivity().getSupportFragmentManager(), "tag"); } diff --git a/app/src/main/res/layout/activity_prod_dettaglio_linea.xml b/app/src/main/res/layout/activity_prod_dettaglio_linea.xml new file mode 100644 index 00000000..ecfd6b83 --- /dev/null +++ b/app/src/main/res/layout/activity_prod_dettaglio_linea.xml @@ -0,0 +1,341 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/bottom_sheet_line_actions.xml b/app/src/main/res/layout/bottom_sheet_line_actions.xml index 9bd37c8e..873ff9d3 100644 --- a/app/src/main/res/layout/bottom_sheet_line_actions.xml +++ b/app/src/main/res/layout/bottom_sheet_line_actions.xml @@ -8,18 +8,19 @@ + + - + android:padding="16dp"> + + + + + + + + diff --git a/app/src/main/res/layout/dialog_start_production.xml b/app/src/main/res/layout/dialog_start_production.xml index f9894f3a..a06b151c 100644 --- a/app/src/main/res/layout/dialog_start_production.xml +++ b/app/src/main/res/layout/dialog_start_production.xml @@ -59,6 +59,7 @@ android:layout_height="wrap_content" /> Picking non disponibile
Scansiona il codice a barre di un articolo Prima di procedere apri una nuova UL + Scansiona il codice a barre di una UL per versarla Articolo extra Info Info UL @@ -396,12 +397,16 @@ In lavorazione In pausa Ferma - Risorse allocate + Risorse assegnate Ordini in lavorazione + Lavorazione in corso Assegna risorse Avvia nuova produzione Arresta produzione Inizio produzione Ultima produzione Nessuna linea disponibile + Dettaglio linea + Materiali versati + Scansiona il codice a barre della UL da recuperare \ 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 56d8af0c..50b7eab4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -118,6 +118,7 @@ Please scan an item barcode Extra item Piece + Please scan a LU barcode to deposit between 3 and 30 alphanumeric characters enter a valid username @@ -404,10 +405,14 @@ Stopped Resources set Orders in progress + Production in progress Set resources Start production Stop production Production start Last production No production line available + Line details + Deposited products + Please scan the LU barcode to recover From 7a6097fa69dbd58038f202c367d2711e363cb02b Mon Sep 17 00:00:00 2001 From: ValerioC Date: Wed, 1 Jun 2022 19:23:49 +0200 Subject: [PATCH 7/7] -> v1.27.4 (291) --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index b576cdb8..94e29d29 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,8 +10,8 @@ apply plugin: 'com.google.gms.google-services' android { - def appVersionCode = 290 - def appVersionName = '1.27.3' + def appVersionCode = 291 + def appVersionName = '1.27.4' signingConfigs { release {