diff --git a/app/build.gradle b/app/build.gradle index 57aa1234..618cf942 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -91,27 +91,27 @@ dependencies { //Firebase // Import the Firebase BoM - implementation platform('com.google.firebase:firebase-bom:25.12.0') + implementation platform('com.google.firebase:firebase-bom:26.0.0') + implementation 'com.google.firebase:firebase-analytics' implementation 'com.google.firebase:firebase-core' implementation 'com.google.firebase:firebase-crash' - implementation 'com.google.firebase:firebase-perf' implementation 'com.google.firebase:firebase-crashlytics' - implementation 'com.google.firebase:firebase-analytics' - implementation 'com.google.android.gms:play-services-basement:17.4.0' + implementation 'com.google.firebase:firebase-perf' + implementation 'com.google.android.gms:play-services-basement:17.5.0' implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'com.google.android.material:material:1.3.0-alpha03' - implementation 'androidx.constraintlayout:constraintlayout:2.0.2' + implementation 'androidx.constraintlayout:constraintlayout:2.0.3' implementation 'androidx.cardview:cardview:1.0.0' implementation 'androidx.recyclerview:recyclerview:1.1.0' - implementation 'androidx.preference:preference:1.1.1' + implementation 'androidx.preference:preference-ktx:1.1.1' implementation 'com.squareup.okhttp3:okhttp:4.9.0' implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.9.0' implementation 'com.annimon:stream:1.2.1' - implementation 'androidx.lifecycle:lifecycle-runtime:2.2.0' + implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.2.0' implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' implementation 'androidx.lifecycle:lifecycle-common-java8:2.2.0' implementation 'org.apache.commons:commons-text:1.9' diff --git a/app/google-services.json b/app/google-services.json index bab7083e..4b6560c5 100644 --- a/app/google-services.json +++ b/app/google-services.json @@ -14,14 +14,6 @@ } }, "oauth_client": [ - { - "client_id": "963231271247-b50hgcd89u9ksfc7189mri044kq8aq1p.apps.googleusercontent.com", - "client_type": 1, - "android_info": { - "package_name": "it.integry.integrywmsnative", - "certificate_hash": "864b69dcc40196befa65638a868cec1c61245fa6" - } - }, { "client_id": "963231271247-59qdc1vobbnjfp135ce4hv12c53s9hse.apps.googleusercontent.com", "client_type": 1, @@ -30,6 +22,14 @@ "certificate_hash": "3b6d97a981f446f5011049d781aeb9960f9352af" } }, + { + "client_id": "963231271247-b50hgcd89u9ksfc7189mri044kq8aq1p.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "it.integry.integrywmsnative", + "certificate_hash": "864b69dcc40196befa65638a868cec1c61245fa6" + } + }, { "client_id": "963231271247-6jof105pci1g0g7m2e7kjbtrtk2443g4.apps.googleusercontent.com", "client_type": 3 @@ -41,20 +41,13 @@ } ], "services": { - "analytics_service": { - "status": 1 - }, "appinvite_service": { - "status": 2, "other_platform_oauth_client": [ { "client_id": "963231271247-6jof105pci1g0g7m2e7kjbtrtk2443g4.apps.googleusercontent.com", "client_type": 3 } ] - }, - "ads_service": { - "status": 2 } } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 62d398b2..2ebbabd5 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -25,10 +25,14 @@ android:windowSoftInputMode="adjustNothing" /> + onComplete); + void onLUOpened(MtbColt mtbColt); void onLUClosed(); + + void onRowSaved(); } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/interfaces/viewmodel_listeners/ILoadingListener.java b/app/src/main/java/it/integry/integrywmsnative/core/interfaces/viewmodel_listeners/ILoadingListener.java index f77f00f0..a02d3378 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/interfaces/viewmodel_listeners/ILoadingListener.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/interfaces/viewmodel_listeners/ILoadingListener.java @@ -1,7 +1,9 @@ package it.integry.integrywmsnative.core.interfaces.viewmodel_listeners; public interface ILoadingListener { + void onLoadingStarted(); void onLoadingEnded(); + } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/model/DtbDocr.java b/app/src/main/java/it/integry/integrywmsnative/core/model/DtbDocr.java index 1f2d8cef..88a823ea 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/model/DtbDocr.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/model/DtbDocr.java @@ -141,6 +141,8 @@ public class DtbDocr { private MtbAart mtbAart; + private String dataScadPartitaMag; + public String getCodAnag() { return codAnag; } @@ -739,6 +741,19 @@ public class DtbDocr { return this; } + public String getDataScadPartitaMag() { + return dataScadPartitaMag; + } + + public Date getDataScadPartitaMagD() { + return UtilityDate.recognizeDateWithExceptionHandler(getDataScadPartitaMag()); + } + + public DtbDocr setDataScadPartitaMag(String dataScadPartitaMag) { + this.dataScadPartitaMag = dataScadPartitaMag; + return this; + } + public MtbAart getMtbAart() { return mtbAart; } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/PVOrdiniAcquistoRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/PVOrdiniAcquistoRESTConsumer.java index 16dcb743..dc73ded6 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/PVOrdiniAcquistoRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/PVOrdiniAcquistoRESTConsumer.java @@ -6,7 +6,6 @@ import com.annimon.stream.Stream; import java.math.BigDecimal; import java.util.ArrayList; -import java.util.Date; import java.util.List; import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloOrdine; @@ -18,6 +17,7 @@ import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.model.DtbOrdt; import it.integry.integrywmsnative.core.rest.RESTBuilder; import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; +import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.core.utility.UtilityLogger; import it.integry.integrywmsnative.core.utility.UtilityThread; import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dto.ArtDTO; @@ -84,7 +84,7 @@ public class PVOrdiniAcquistoRESTConsumer extends _BaseRESTConsumer { } ordineDTO.setChiaveGriglia(griglia.getCodAlis()); - ordineDTO.setDataConsD(new Date()); + ordineDTO.setDataConsD(UtilityDate.getDateInstance()); ordineDTO.setArtRows(artRows); saveDTO.setGestione("O"); saveDTO.setOrdineDTO(ordineDTO); @@ -101,7 +101,7 @@ public class PVOrdiniAcquistoRESTConsumer extends _BaseRESTConsumer { if (dtoList.size() > 0){ DtbOrdt dto = dtoList.get(0); ordine.setTransmitted(true); - ordine.setTransmissionDate(new Date()); + ordine.setTransmissionDate(UtilityDate.getDateInstance()); ordine.setGestione(dto.getGestione()); ordine.setDataOrdS(dto.getDataOrd()); ordine.setCodMdep(dto.getCodMdep()); diff --git a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityBigDecimal.java b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityBigDecimal.java index 79b8db0d..69e27a21 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityBigDecimal.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityBigDecimal.java @@ -26,6 +26,14 @@ public class UtilityBigDecimal { return input.compareTo(toCompareWith) < 0; } + public static boolean equalsOrLowerThan(BigDecimal input, BigDecimal toCompareWith) { + return equalsTo(input, toCompareWith) || lowerThan(input, toCompareWith); + } + + public static boolean equalsOrGreaterThan(BigDecimal input, BigDecimal toCompareWith) { + return equalsTo(input, toCompareWith) || greaterThan(input, toCompareWith); + } + public static BigDecimal getLowerBetween(BigDecimal input1, BigDecimal input2) { if(input1 == null) return input2; if(input2 == null) return input1; diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingActivity.java index 784fabd7..a026c015 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingActivity.java @@ -42,6 +42,7 @@ import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer; import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.utility.UtilityBigDecimal; import it.integry.integrywmsnative.core.utility.UtilityExceptions; +import it.integry.integrywmsnative.core.utility.UtilityResources; import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.core.utility.UtilityToast; import it.integry.integrywmsnative.databinding.ActivityAccettazioneOrdineInevasoBinding; @@ -246,7 +247,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta accettazioneListModel.setQtaEvasa(numCnfEvasa); accettazioneListModel.setQtaTot(x.getSitArtOrdDTO().getNumCnfOrd()); - accettazioneListModel.setUntMis("col"); + accettazioneListModel.setUntMis(UtilityResources.getString(R.string.unt_mis_col)); } else { BigDecimal qtaEvasa = BigDecimal.ZERO; @@ -299,7 +300,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta accettazioneListModel.setQtaEvasa(numCnfEvasa); accettazioneListModel.setQtaTot(x.getSitArtOrdDTO().getNumCnfOrd()); - accettazioneListModel.setUntMis("col"); + accettazioneListModel.setUntMis(UtilityResources.getString(R.string.unt_mis_col)); } else { BigDecimal qtaEvasa = BigDecimal.ZERO; @@ -353,7 +354,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta accettazioneListModel.setQtaEvasa(numCnfEvasa); accettazioneListModel.setQtaTot(x.getSitArtOrdDTO().getNumCnfOrd()); - accettazioneListModel.setUntMis("col"); + accettazioneListModel.setUntMis(UtilityResources.getString(R.string.unt_mis_col)); } else { BigDecimal qtaEvasa = BigDecimal.ZERO; diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingViewModel.java index 84209fc5..165b7bca 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingViewModel.java @@ -493,10 +493,30 @@ public class AccettazionePickingViewModel { } } + BigDecimal initialNumCnf; + BigDecimal initialQtaCnf; + BigDecimal initialQtaTot; + + if (qtaColDaPrelevare != null) { + initialNumCnf = numCnfDaPrelevare; + initialQtaCnf = qtaCnfDaPrelevare; + initialQtaTot = qtaColDaPrelevare; + + } else { + initialNumCnf = totalNumCnfOrd; + initialQtaCnf = qtaCnfOrd; + initialQtaTot = totalQtaOrd; + } + + if(UtilityBigDecimal.greaterThan(initialNumCnf, pickingObjectDTO.getMtbAart().getColliPedana())) { + initialNumCnf = pickingObjectDTO.getMtbAart().getColliPedana(); + initialQtaTot = initialNumCnf.multiply(initialQtaCnf); + } + this.sendOnItemDispatched( pickingObjectDTO, pickingObjectDTO.getMtbAart(), - null, null, null, + initialNumCnf, initialQtaCnf, initialQtaTot, qtaDaEvadere, numCnfDaEvadere, qtaCnfDaEvadere, @@ -904,14 +924,10 @@ public class AccettazionePickingViewModel { boolean canOverflowQuantity, RunnableArgss onComplete); - void onRowSaved(); - void onFilterApplied(String newValue); void onFilterRemoved(); - void onMtbColrDeleteRequest(RunnableArgs onComplete); - } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoModule.java b/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoModule.java index c994a493..b56e3eb1 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoModule.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoModule.java @@ -7,7 +7,6 @@ import dagger.Provides; import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer; -import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer; @Module(subcomponents = {PickingLiberoComponent.class}) public class PickingLiberoModule { @@ -16,8 +15,7 @@ public class PickingLiberoModule { @Singleton PickingLiberoViewModel providesPickingLiberoViewModel(ArticoloRESTConsumer articoloRESTConsumer, ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer, - PrinterRESTConsumer printerRESTConsumer, BarcodeRESTConsumer barcodeRESTConsumer) { - return new PickingLiberoViewModel(articoloRESTConsumer, colliMagazzinoRESTConsumer, printerRESTConsumer, barcodeRESTConsumer); + return new PickingLiberoViewModel(articoloRESTConsumer, colliMagazzinoRESTConsumer, barcodeRESTConsumer); } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoViewModel.java index 9b332953..82b46947 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoViewModel.java @@ -24,11 +24,11 @@ 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.VtbDest; +import it.integry.integrywmsnative.core.model.dto.PickDataDTO; import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer; -import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer; import it.integry.integrywmsnative.core.rest.model.Ean128Model; import it.integry.integrywmsnative.core.rest.model.Ean13PesoModel; import it.integry.integrywmsnative.core.settings.SettingsManager; @@ -37,7 +37,6 @@ import it.integry.integrywmsnative.core.utility.UtilityBigDecimal; import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.gest.spedizione.exceptions.InvalidPesoKGException; -import it.integry.integrywmsnative.core.model.dto.PickDataDTO; import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO; import it.integry.integrywmsnative.gest.spedizione.model.PickingObjectDTO; @@ -48,7 +47,6 @@ public class PickingLiberoViewModel { private final ArticoloRESTConsumer mArticoloRESTConsumer; private final ColliMagazzinoRESTConsumer mColliMagazzinoRESTConsumer; - private final PrinterRESTConsumer mPrinterRESTConsumer; private final BarcodeRESTConsumer mBarcodeRESTConsumer; @@ -62,11 +60,9 @@ public class PickingLiberoViewModel { @Inject public PickingLiberoViewModel(ArticoloRESTConsumer articoloRESTConsumer, ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer, - PrinterRESTConsumer printerRESTConsumer, BarcodeRESTConsumer barcodeRESTConsumer) { this.mArticoloRESTConsumer = articoloRESTConsumer; this.mColliMagazzinoRESTConsumer = colliMagazzinoRESTConsumer; - this.mPrinterRESTConsumer = printerRESTConsumer; this.mBarcodeRESTConsumer = barcodeRESTConsumer; } @@ -815,7 +811,6 @@ public class PickingLiberoViewModel { } public interface Listener extends ILoadingListener, ILUBaseOperationsListener { - void onMtbColrDeleteRequest(RunnableArgs onComplete); void onError(Exception ex); @@ -840,8 +835,6 @@ public class PickingLiberoViewModel { boolean canPartitaMagBeChanged, boolean canLUBeClosed, RunnableArgss onComplete); - - void onRowSaved(); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiActivity.java index 845e1d88..da258280 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiActivity.java @@ -1,109 +1,135 @@ package it.integry.integrywmsnative.gest.picking_resi; +import android.content.Context; +import android.content.Intent; +import android.content.res.Resources; +import android.os.Bundle; +import android.text.SpannableString; + import androidx.databinding.DataBindingUtil; import androidx.databinding.ObservableArrayList; -import androidx.databinding.ObservableField; -import androidx.databinding.ObservableList; import androidx.recyclerview.widget.LinearLayoutManager; -import android.app.Dialog; -import android.content.Context; -import android.content.Intent; -import android.os.Bundle; -import android.text.SpannableString; - import com.annimon.stream.Stream; import com.tfb.fbtoast.FBToast; import java.math.BigDecimal; import java.util.ArrayList; +import java.util.Date; import java.util.List; +import javax.inject.Inject; + +import it.integry.barcode_base_android_library.model.BarcodeScanDTO; +import it.integry.integrywmsnative.MainApplication; import it.integry.integrywmsnative.R; -import it.integry.integrywmsnative.core.expansion.BaseActivity; -import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer; -import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer; 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.expansion.BaseActivity; import it.integry.integrywmsnative.core.expansion.RunnableArgs; -import it.integry.integrywmsnative.core.model.CommonModelConsts; +import it.integry.integrywmsnative.core.expansion.RunnableArgss; +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.report.ReportManager; +import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO; import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.core.utility.UtilityExceptions; -import it.integry.integrywmsnative.core.utility.UtilityNumber; -import it.integry.integrywmsnative.core.utility.UtilityProgress; +import it.integry.integrywmsnative.core.utility.UtilityResources; import it.integry.integrywmsnative.core.utility.UtilityString; +import it.integry.integrywmsnative.core.utility.UtilityToast; import it.integry.integrywmsnative.databinding.ActivityPickingResiBinding; -import it.integry.integrywmsnative.gest.picking_resi.dto.WithdrawableDtbDocr; -import it.integry.integrywmsnative.gest.ultime_consegne_cliente.rest.UltimeConsegneClienteRESTConsumer; import it.integry.integrywmsnative.gest.picking_resi.core.PickingResiListAdapter; -import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO; -import it.integry.integrywmsnative.view.bottomsheet.interfaces.IOnColloClosedCallback; -import it.integry.integrywmsnative.view.bottomsheet.viewmodel.ArticoliInColloBottomSheetViewModel; +import it.integry.integrywmsnative.gest.picking_resi.core.PickingResiListModel; +import it.integry.integrywmsnative.gest.picking_resi.rest.WithdrawableDtbDocr; +import it.integry.integrywmsnative.gest.spedizione.exceptions.InvalidPesoKGException; +import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO; +import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentView; +import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentViewModel; import it.integry.integrywmsnative.view.dialogs.ask_should_print.DialogAskShouldPrint; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper; -import it.integry.integrywmsnative.view.dialogs.input_quantity.DialogInputQuantity; -import it.integry.integrywmsnative.view.dialogs.input_quantity.QuantityDTO; -import it.integry.barcode_base_android_library.model.BarcodeScanDTO; +import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2; +import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO; import it.integry.integrywmsnative.view.dialogs.note_aggiuntive_lu.NoteAggiuntiveLUDialog; -public class PickingResiActivity extends BaseActivity implements IOnColloClosedCallback { +public class PickingResiActivity extends BaseActivity implements BottomSheetFragmentLUContentView.Listener, BottomSheetFragmentLUContentViewModel.Listener, PickingResiViewModel.Listener { + + private ActivityPickingResiBinding mBindings; + + @Inject + PickingResiViewModel mViewmodel; + + private BottomSheetFragmentLUContentViewModel mBottomSheetFragmentLUContentViewModel; + + private ObservableArrayList mPickingResiMutableData = new ObservableArrayList<>(); + + public BindableBoolean noLUPresent = new BindableBoolean(true); + public BindableBoolean noItemsToPick = new BindableBoolean(false); + public BindableBoolean bottomSheetEnabled = new BindableBoolean(false); + + private String mTitle; private List mDocumentiResiList; - public ObservableList mDtbDocrList; - private final List mColliRegistrati = new ArrayList<>(); - - private ActivityPickingResiBinding mBinding; - private ArticoliInColloBottomSheetViewModel mArticoliInColloBottomSheetViewModel; - - public ObservableField currentMtbColt = new ObservableField<>(); - - private PickingResiListAdapter mAdapter; private int barcodeScannerIstanceID = -1; - private String mActivityTitle; - private String mDefaultGestioneOfUL; - private String mDefaultCodAnagOfUL; - private Integer mDefaultSegnoOfUL; - + private boolean mShouldCloseActivity; public static void startActivity(Context context, String activityTitle, List documentoResoDTOList, Integer segno) { - String consegneCacheKey = DataCache.addItem(documentoResoDTOList); - Intent intent = new Intent(context, PickingResiActivity.class); + intent.putExtra("activity_title", activityTitle); + + String consegneCacheKey = DataCache.addItem(documentoResoDTOList); intent.putExtra("key", consegneCacheKey); + intent.putExtra("segno", segno); + context.startActivity(intent); } + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - mBinding = DataBindingUtil.setContentView(this, R.layout.activity_picking_resi); - mBinding.setViewmodel(this); - - this.mDtbDocrList = new ObservableArrayList<>(); - - mArticoliInColloBottomSheetViewModel = new ArticoliInColloBottomSheetViewModel(this, this.mBinding.bottomSheetInclude); - mArticoliInColloBottomSheetViewModel.setOnCloseColloCallbackListener(this); - mArticoliInColloBottomSheetViewModel.setOnItemEditedCallback(this::onItemEdited); - mArticoliInColloBottomSheetViewModel.setOnItemDeletedCallback(this::onItemDeleted); - + mTitle = getIntent().getStringExtra("activity_title"); mDocumentiResiList = DataCache.retrieveItem(getIntent().getStringExtra("key")); - mDefaultSegnoOfUL = getIntent().getIntExtra("segno", +1); + int defaultSegnoLU = getIntent().getIntExtra("segno", +1); - mActivityTitle = getIntent().getStringExtra("activity_title"); + mBindings = DataBindingUtil.setContentView(this, R.layout.activity_picking_resi); - this.initView(); + MainApplication.appComponent + .pickingResiComponent() + .create() + .inject(this); + + mViewmodel.setListener(this); + + setSupportActionBar(mBindings.toolbar); + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + + getSupportActionBar().setTitle(mTitle); + + mBindings.setLifecycleOwner(this); + mBindings.setPickingResiView(this); + + mBindings.bottomSheetLuContent.init(mBindings.bottomSheetLuContent, null); + mBottomSheetFragmentLUContentViewModel = mBindings.bottomSheetLuContent.getViewModelInstance(); + mBindings.bottomSheetLuContent.setListener(this); + mBottomSheetFragmentLUContentViewModel.setListener(this); + this.initVars(); + this.initBarcodeReader(); + this.initRecyclerView(); + + + String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep(); + + this.mViewmodel.init(mDocumentiResiList, defaultSegnoLU, codMdep); } @Override @@ -114,435 +140,255 @@ public class PickingResiActivity extends BaseActivity implements IOnColloClosedC @Override public void onBackPressed() { - if(mArticoliInColloBottomSheetViewModel.isExpanded()){ - mArticoliInColloBottomSheetViewModel.collapse(); - } - else if(thereIsAnOpenedUL()) { - mArticoliInColloBottomSheetViewModel.closeCurrentUL(() -> { - BarcodeManager.removeCallback(barcodeScannerIstanceID); - super.onBackPressed(); - }); - } - else { + if (this.mBindings.bottomSheetLuContent.isExpanded()) { + this.mBindings.bottomSheetLuContent.collapse(); + } else if (!noLUPresent.get()) { + this.mShouldCloseActivity = true; + BarcodeManager.removeCallback(barcodeScannerIstanceID); + this.mViewmodel.closeLU(true); + } else { BarcodeManager.removeCallback(barcodeScannerIstanceID); super.onBackPressed(); } } - private void initView() { + + private void initVars() { + this.noLUPresent.addOnPropertyChangedCallback(() -> { + this.bottomSheetEnabled.set(!this.noLUPresent.get()); + }); + } + + private void initBarcodeReader() { barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() - .setOnScanSuccessfull(this::onScanSuccessful) + .setOnScanSuccessfull(onScanSuccessful) .setOnScanFailed(ex -> UtilityExceptions.defaultException(this, ex, false))); + } + private void initRecyclerView() { + this.mBindings.elevatedToolbar.setRecyclerView(this.mBindings.mainList); - setSupportActionBar(this.mBinding.toolbar); - getSupportActionBar().setDisplayHomeAsUpEnabled(true); + this.mViewmodel.getPickingList().observe(this, updatedData -> { + this.mPickingResiMutableData.clear(); + this.mPickingResiMutableData.addAll(convertDataModelToListModel(updatedData)); + this.noItemsToPick.set(updatedData.isEmpty()); + }); - getSupportActionBar().setTitle(mActivityTitle); + PickingResiListAdapter pickingResiListAdapter = new PickingResiListAdapter(this, mPickingResiMutableData); + this.mBindings.mainList.setAdapter(pickingResiListAdapter); + this.mBindings.mainList.setLayoutManager(new LinearLayoutManager(this)); - this.mBinding.elevatedToolbar.setRecyclerView(this.mBinding.mainList); - - Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(this); - UltimeConsegneClienteRESTConsumer.loadDocRowFromConsegna(mDocumentiResiList, dtbDocrToPick -> { - progressDialog.dismiss(); - this.mDtbDocrList.addAll(dtbDocrToPick); - - try { - this.initDatiPicking(); - } catch (Exception ex) { - DialogSimpleMessageHelper.showSimpleErrorDialog(this, ex.getMessage()); + pickingResiListAdapter.setOnItemClicked(clickedItem -> { + if (!noLUPresent.get()) { + this.mViewmodel.dispatchOrdineRow(clickedItem); } - - this.initList(); - }, ex -> { - UtilityExceptions.defaultException(this, ex, progressDialog); }); } - private void initList() { - mAdapter = new PickingResiListAdapter(this, this.mDtbDocrList); - mAdapter.setOnItemClicked(this::onOrdineRowDispatch); + private List convertDataModelToListModel(List dataList) { + List pickingResiListModels = new ArrayList<>(); - this.mBinding.mainList.setLayoutManager(new LinearLayoutManager(this)); - this.mBinding.mainList.setAdapter(mAdapter); + Stream.of(dataList) + .sortBy(x -> x.getNumDoc() + " " + x.getDataDocS() + " " + x.getCodDtip() + " " + x.getSerDoc() + " " + x.getCodAnag() + " " + x.getIdRiga()) + .forEach(x -> { + + PickingResiListModel pickingResiListModel = new PickingResiListModel(); + + pickingResiListModel.setGroupTitle(x.getCodDtip() + " - N° " + x.getNumDoc() + " del " + UtilityDate.formatDate(x.getDataDocD(), UtilityDate.COMMONS_DATE_FORMATS.DM_HUMAN)); + pickingResiListModel.setBadge1(x.getCodMart()); + pickingResiListModel.setDescrizione(UtilityString.isNull(x.getDescrizioneEstesa(), x.getDescrizione())); + pickingResiListModel.setActive(true); + pickingResiListModel.setOriginalModel(x); + + BigDecimal qtaColEvasa = BigDecimal.ZERO; + BigDecimal numCnfColEvasa = BigDecimal.ZERO; + + for (MtbColr mtbColr : x.getWithdrawRows()) { + qtaColEvasa = qtaColEvasa.add(mtbColr.getQtaCol()); + numCnfColEvasa = numCnfColEvasa.add(mtbColr.getNumCnf()); + } + + if (SettingsManager.iDB().isFlagForceAllToColli() || (x.getMtbAart() == null || !x.getMtbAart().isFlagQtaCnfFissaBoolean())) { + pickingResiListModel.setUntMis(UtilityResources.getString(R.string.unt_mis_col)); + pickingResiListModel.setQtaEvasa(numCnfColEvasa); + pickingResiListModel.setQtaTot(x.getNumCnf()); + + } else { + if (x.getMtbAart() != null) + pickingResiListModel.setUntMis(x.getMtbAart().getUntMis()); + else pickingResiListModel.setUntMis(x.getUntDoc()); + pickingResiListModel.setQtaEvasa(qtaColEvasa); + pickingResiListModel.setQtaTot(x.getQtaDoc()); + } + + + pickingResiListModels.add(pickingResiListModel); + }); + + return pickingResiListModels; } - private void initDatiPicking() throws Exception { - List foundGestioni = Stream.of(this.mDocumentiResiList) - .map(DocumentoResoDTO::getGestione) - .distinct() - .withoutNulls() - .toList(); + private RunnableArgs onScanSuccessful = data -> { + BarcodeManager.disable(); - if(foundGestioni.size() > 1) { - throw new Exception("Sono stati caricati documenti con diverse gestioni"); - } else mDefaultGestioneOfUL = foundGestioni.get(0); + this.openProgress(); + this.mViewmodel.processBarcodeDTO(data, () -> { + BarcodeManager.enable(); + this.closeProgress(); + }); + }; - List foundCodAnags = Stream.of(this.mDocumentiResiList) - .map(DocumentoResoDTO::getCodAnag) - .distinct() - .toList(); + public void createNewLU() { + this.mBindings.mainFab.close(true); - if(foundCodAnags.size() > 1) { - throw new Exception("Sono stati caricati documenti con diversi codici anagrafici"); - } else mDefaultCodAnagOfUL = foundCodAnags.get(0); + this.openProgress(); - } - - - - - private void onScanSuccessful(BarcodeScanDTO data) { - - } - - public void createNewUL() { - this.createNewUL(null, null, null, false, true, null); - } - - public void createNewUL(Integer customNumCollo, String customSerCollo, Dialog progress, boolean disablePrint, boolean closeProgress, Runnable onComplete) { - this.mBinding.mainFab.close(true); - - if (progress == null){ - progress = UtilityProgress.createDefaultProgressDialog(this); - } - - MtbColt mtbColt = new MtbColt(); - mtbColt.initDefaultFields(); - mtbColt .setGestione(mDefaultGestioneOfUL) - .setSegno(mDefaultSegnoOfUL) - .setCodAnag(mDefaultCodAnagOfUL) - .setCodMdep(SettingsManager.i().getUserSession().getDepo().getCodMdep()) - .setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE); - - - if(customNumCollo != null) { - mtbColt.setNumCollo(customNumCollo); - } - - if(!UtilityString.isNullOrEmpty(customSerCollo)) { - mtbColt.setSerCollo(customSerCollo); - } - - - Dialog finalProgress = progress; - ColliMagazzinoRESTConsumer.saveColloStatic(mtbColt, value -> { - - value.setDisablePrint(disablePrint); - - setULToCurrentContext(value); - - if(closeProgress) finalProgress.dismiss(); - - FBToast.successToast(this, getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT); - - if(onComplete != null) onComplete.run(); - - }, ex -> { - UtilityExceptions.defaultException(this, ex, finalProgress); - }); - - } - - private void setULToCurrentContext(MtbColt mtbColt){ - if(mtbColt != null && mtbColt.getMtbColr() == null) { - mtbColt.setMtbColr(new ObservableArrayList<>()); - } - - this.currentMtbColt.set(mtbColt); - mArticoliInColloBottomSheetViewModel.mtbColt.set(mtbColt); - } - - - - - public void onOrdineRowDispatch(final WithdrawableDtbDocr item) { - if(currentMtbColt.get() != null){ - - List currentMtbColrs = item.getWithdrawRows(); - - BigDecimal qtaEvasaTotaleInMtbColr = BigDecimal.ZERO; - for (MtbColr mtbColr : currentMtbColrs) { - qtaEvasaTotaleInMtbColr.add(mtbColr.getQtaCol()); - } - - BigDecimal qtaDaEvadere = item.getQtaDoc().subtract(qtaEvasaTotaleInMtbColr); - if(qtaDaEvadere.floatValue() < 0) qtaDaEvadere = BigDecimal.ZERO; - - DialogInputQuantity.DTO dto = new DialogInputQuantity.DTO() - .setBatchLot(item.getPartitaMag()) - .setCodArtFor(item.getCodArtFor()) - .setMtbAart(item.getMtbAart()) - .setQtaDisponibile(qtaDaEvadere) - .setQtaTot(qtaDaEvadere) - .setQtaEvasa(qtaEvasaTotaleInMtbColr) - .setCanPartitaMagBeChanged(false) - .setMaxQta(qtaDaEvadere); - - - DialogInputQuantity.makeBase(this, dto, false, (quantityDTO, closeUL) -> { - onOrdineRowDispatched(item, quantityDTO, closeUL); - - }, null).show(); - } - } - - - - - private void onOrdineRowDispatched(WithdrawableDtbDocr item, QuantityDTO quantityDTO, boolean closeUL){ - final Dialog progress = UtilityProgress.createDefaultProgressDialog(this); - - final MtbColr mtbColr = new MtbColr() - .setCodMart(item.getCodMart()) - .setPartitaMag(UtilityString.empty2null(quantityDTO.batchLot.get())) - .setQtaCol(quantityDTO.qtaTot.getBigDecimal()) - .setQtaCnf(quantityDTO.qtaCnf.getBigDecimal()) - .setNumCnf(quantityDTO.numCnf.getBigDecimal()) - .setDescrizione(item.getDescrizioneEstesa()) - .setDatetimeRow(UtilityDate.getDateInstance()) - - .setCodAnagDoc(item.getCodAnag()) - .setCodDtipDoc(item.getCodDtip()) - .setSerDoc(item.getSerDoc()) - .setNumDoc(item.getNumDoc()) - .setDataDoc(item.getDataDocS()) - .setIdRigaDoc(item.getIdRiga()); -// .setCodJcom(item.getCodJcom()); - - - - mtbColr.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE); - - MtbColt cloneMtbColt = (MtbColt) currentMtbColt.get().clone(); - cloneMtbColt.setOperation(CommonModelConsts.OPERATION.NO_OP); - - cloneMtbColt.setMtbColr(new ObservableArrayList<>()); - cloneMtbColt.getMtbColr().add(mtbColr); - - ColliMagazzinoRESTConsumer.saveColloStatic(cloneMtbColt, value -> { - - mtbColr - .setDataCollo(value.getDataColloS()) - .setNumCollo(value.getNumCollo()) - .setGestione(value.getGestione()) - .setSerCollo(value.getSerCollo()) - .setRiga(value.getMtbColr().get(0).getRiga()) - .setUntMis(item.getMtbAart().getUntMis()) - .setMtbAart(item.getMtbAart()); - - item.getWithdrawRows().add(mtbColr); - - this.refreshDtbDocrItem(item); - - currentMtbColt.get().getMtbColr().add(mtbColr); - - //Chiamato removeListFilter perché cosi mi cancella tutti i dati di pick temporanei - removeListFilter(); - - FBToast.successToast(this, this.getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT); - - progress.dismiss(); - -// if(closeUL) onColloClosed(null); - }, ex -> { - UtilityExceptions.defaultException(this, ex, progress); + this.mViewmodel.createNewLU(null, null, () -> { + this.closeProgress(); }); } - @Override - public void onColloClosed(Runnable onComplete, boolean shouldPrint) { - if(thereIsAnOpenedUL()) { + public void onMtbColrEdit(MtbColr mtbColr) { + this.mViewmodel.dispatchRowEdit(mtbColr); + } - final Dialog progress = UtilityProgress.createDefaultProgressDialog(this); - progress.show(); + @Override + public void onMtbColrDelete(MtbColr mtbColr) { + this.mViewmodel.deleteRow(mtbColr); + } - if(thereIsAnyRowInUL()) { - NoteAggiuntiveLUDialog.make(this, noteString -> { + @Override + public void onBottomSheetLUClose() { + this.mViewmodel.closeLU(true); + } - MtbColt currentLU = currentMtbColt.get(); + @Override + public void onNoteAggiuntiveRequired(RunnableArgs onComplete, Runnable onAbort) { + NoteAggiuntiveLUDialog.make(this, onComplete, onAbort).show(); + } - Runnable postNoteSave = () -> { - ColliMagazzinoRESTConsumer.updateDataFineStatic( - currentLU, - () -> printCollo(progress, currentMtbColt.get(), onComplete), - ex -> UtilityExceptions.defaultException(this, ex, progress)); - }; - - if(!UtilityString.isNullOrEmpty(noteString)) { - currentLU.setAnnotazioni(noteString); - - ColliMagazzinoRESTConsumer.saveColloStatic(currentLU, mtbColt -> { - postNoteSave.run(); - }, ex -> UtilityExceptions.defaultException(this, ex, progress)); - } else postNoteSave.run(); - - - }, () -> { - - }).show(); - } else { - deleteCollo(progress, onComplete); - } + @Override + public void onError(Exception ex) { + this.closeProgress(); + if(ex instanceof InvalidPesoKGException) { + UtilityToast.showToast(ex.getMessage()); } else { - if(onComplete != null) onComplete.run(); - } - } - - private void onItemEdited(MtbColr mtbColrOriginal, MtbColr mtbColrEdited) { - for(int i = 0; i < mDtbDocrList.size(); i++) { - int foundIndex = mDtbDocrList.get(i).getWithdrawRows().indexOf(mtbColrOriginal); - - if(foundIndex >= 0){ - mDtbDocrList.get(i).getWithdrawRows().remove(foundIndex); - mDtbDocrList.get(i).getWithdrawRows().add(foundIndex, mtbColrEdited); - - refreshDtbDocrItem(this.mDtbDocrList.get(i)); - - break; - } - } - } - - private void onItemDeleted(MtbColr mtbColrDeleted) { - for(int i = 0; i < mDtbDocrList.size(); i++) { - int foundIndex = mDtbDocrList.get(i).getWithdrawRows().indexOf(mtbColrDeleted); - - if(foundIndex >= 0){ - mDtbDocrList.get(i).getWithdrawRows().remove(foundIndex); - - refreshDtbDocrItem(this.mDtbDocrList.get(i)); - - break; - } - } - } - - private void printCollo(Dialog progress, MtbColt mtbColtToPrint, Runnable onComplete) { - DialogAskShouldPrint.make(this, "Packing List", shouldPrint -> { - - if(shouldPrint) { - PrinterRESTConsumer.getAvailablePrintersStatic(SettingsManager.i().getUserSession().getDepo().getCodMdep(), PrinterRESTConsumer.Type.PRIMARIA, printerList -> { - - if (printerList.size() > 0) { - try { - singlePrint(mtbColtToPrint, printerList.get(0), () -> { - postCloseOperations(mtbColtToPrint, onComplete); - progress.dismiss(); - }, ex -> { - progress.dismiss(); - String errorMessage = ex.getMessage(); - DialogSimpleMessageHelper.makeErrorDialog( - this, - new SpannableString(errorMessage), - null, - null, - R.string.button_ignore_print, - () -> postCloseOperations(mtbColtToPrint, onComplete)).show(); - }); - - } catch (Exception ex) { - UtilityExceptions.defaultException(this, ex, progress); - postCloseOperations(mtbColtToPrint, onComplete); - } - } else { - progress.dismiss(); - String errorMessage = "Nessuna stampante configurata"; - DialogSimpleMessageHelper.makeWarningDialog(this, new SpannableString(errorMessage), null, () -> postCloseOperations(mtbColtToPrint, onComplete)).show(); - } - }, ex -> { - UtilityExceptions.defaultException(this, ex, progress); - }); - } else { - postCloseOperations(mtbColtToPrint, onComplete); - progress.dismiss(); - } - }).show(); - } - - - - private void singlePrint(MtbColt mtbColtToPrint, String printerName, Runnable onComplete, RunnableArgs onAbort) { - ReportManager.getReportNameLUFromGestione(mtbColtToPrint.getGestioneEnum(), reportName -> { - - PrinterRESTConsumer.printColloStatic( - printerName, - mtbColtToPrint, - 1, - reportName, onComplete, onAbort); - - }, onAbort); - } - - private void postCloseOperations(MtbColt generatedMtbColt, Runnable onComplete) { - this.mColliRegistrati.add(generatedMtbColt); - - setULToCurrentContext(null); - - for(int i = 0; i < this.mDtbDocrList.size(); i++) { - WithdrawableDtbDocr dtbDocr = this.mDtbDocrList.get(i); - - List withdraws = dtbDocr.getWithdrawRows(); - - for(int k = 0; k < withdraws.size(); k++) { - MtbColr withdrawRow = withdraws.get(k); - - dtbDocr.setQtaDoc(dtbDocr.getQtaDoc().subtract(withdrawRow.getQtaCol())); - } - - dtbDocr.getWithdrawRows().clear(); - - if(UtilityNumber.decimalToFloat(dtbDocr.getQtaDoc()) <= 0) { - this.mDtbDocrList.remove(dtbDocr); - i--; - } else this.refreshDtbDocrItem(dtbDocr); + UtilityExceptions.defaultException(this, ex, mCurrentProgress); } - removeListFilter(); - - if(onComplete != null) onComplete.run(); + BarcodeManager.enable(); } + @Override + public void onItemDispatched(MtbAart mtbAart, + BigDecimal initialNumCnf, + BigDecimal initialQtaCnf, + BigDecimal initialQtaTot, + BigDecimal totalQtaAvailable, + BigDecimal totalNumCnfAvailable, + BigDecimal qtaCnfAvailable, + String partitaMag, + Date dataScad, + RunnableArgss onComplete) { + DialogInputQuantityV2DTO dialogInputQuantityV2DTO = new DialogInputQuantityV2DTO() + .setMtbAart(mtbAart) + .setInitialNumCnf(initialNumCnf) + .setInitialQtaCnf(initialQtaCnf) + .setInitialQtaTot(initialQtaTot) + .setTotalQtaAvailable(totalQtaAvailable) + .setTotalNumCnfAvailable(totalNumCnfAvailable) + .setQtaCnfAvailable(qtaCnfAvailable) + .setPartitaMag(partitaMag) + .setDataScad(dataScad) + .setCanOverflowOrderQuantity(false) + .setCanLUBeClosed(false) + .setCanPartitaMagBeChanged(false); - private void deleteCollo(Dialog progress, Runnable onComplete) { + DialogInputQuantityV2 + .newInstance(dialogInputQuantityV2DTO, (resultDTO, shouldCloseLU) -> { + PickedQuantityDTO pickedQuantityDTO = new PickedQuantityDTO() + .setNumCnf(resultDTO.getNumCnf()) + .setQtaCnf(resultDTO.getQtaCnf()) + .setQtaTot(resultDTO.getQtaTot()) + .setPartitaMag(resultDTO.getPartitaMag()) + .setDataScad(resultDTO.getDataScad()); - ColliMagazzinoRESTConsumer.deleteColloStatic(currentMtbColt.get(), () -> { - setULToCurrentContext(null); - - progress.dismiss(); - - - if(onComplete != null) onComplete.run(); - }, ex -> UtilityExceptions.defaultException(this, ex, progress) - ); + this.openProgress(); + onComplete.run(pickedQuantityDTO, shouldCloseLU); + }, () -> { +// this.mViewmodel.resetMatchedRows(); + }) + .show(getSupportFragmentManager(), "tag"); } - - public boolean thereIsAnOpenedUL() { - return currentMtbColt.get() != null; + @Override + public void onRowSaved() { + FBToast.successToast(this, getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT); } - public boolean thereIsAnyRowInUL() { - return currentMtbColt.get() != null && - currentMtbColt.get().getMtbColr() != null && - currentMtbColt.get().getMtbColr().size() > 0; + @Override + public void onMtbColrDeleteRequest(RunnableArgs onComplete) { + String text = getResources().getString(R.string.alert_delete_mtb_colr); + DialogSimpleMessageHelper.makeWarningDialog(this, + new SpannableString(text), + null, + () -> onComplete.run(true), + () -> onComplete.run(false) + ).show(); } + @Override + public void onLUOpened(MtbColt mtbColt) { + noLUPresent.set(false); + FBToast.successToast(this, getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT); - private void refreshDtbDocrItem(WithdrawableDtbDocr dtbDocr) { - int index = this.mDtbDocrList.indexOf(dtbDocr); - this.mDtbDocrList.remove(dtbDocr); - this.mDtbDocrList.add(index, dtbDocr); + this.mBottomSheetFragmentLUContentViewModel.setMtbColt(mtbColt); } + @Override + public void onLUClosed() { + noLUPresent.set(true); + this.mBottomSheetFragmentLUContentViewModel.setMtbColt(null); - public void removeListFilter() { + if (this.mShouldCloseActivity) super.onBackPressed(); } + @Override + public void onLUSuccessullyPrinted() { + Resources res = getResources(); + String errorMessage = res.getText(R.string.alert_print_completed_message).toString(); + DialogSimpleMessageHelper.makeSuccessDialog(this, res.getText(R.string.completed).toString(), new SpannableString(errorMessage), null, null).show(); + } + @Override + public void onLUPrintRequest(RunnableArgs onComplete) { + DialogAskShouldPrint.make(this, "Packing List", onComplete).show(); + } + + @Override + public void onLUPrintError(Exception ex, Runnable onComplete) { + this.closeProgress(); + DialogSimpleMessageHelper.makeErrorDialog( + this, + new SpannableString(ex.getMessage()), + null, + null, + R.string.button_ignore_print, + onComplete).show(); + } + + @Override + public void onLoadingStarted() { + this.openProgress(); + } + + @Override + public void onLoadingEnded() { + this.closeProgress(); + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiComponent.java b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiComponent.java new file mode 100644 index 00000000..4567a6bd --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiComponent.java @@ -0,0 +1,15 @@ +package it.integry.integrywmsnative.gest.picking_resi; + +import dagger.Subcomponent; + +@Subcomponent +public interface PickingResiComponent { + + @Subcomponent.Factory + interface Factory { + PickingResiComponent create(); + } + + void inject(PickingResiActivity pickingResiActivity); + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiModule.java b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiModule.java new file mode 100644 index 00000000..b0d8af52 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiModule.java @@ -0,0 +1,33 @@ +package it.integry.integrywmsnative.gest.picking_resi; + +import dagger.Module; +import dagger.Provides; +import it.integry.integrywmsnative.core.data_recover.ColliDataRecoverService; +import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers.OrdiniRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer; +import it.integry.integrywmsnative.gest.picking_resi.rest.PickingResiRESTConsumer; +import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentViewModel; + +@Module(subcomponents = PickingResiComponent.class) +public class PickingResiModule { + + @Provides + PickingResiRESTConsumer providesPickingResiRESTConsumer(SystemRESTConsumer systemRESTConsumer) { + return new PickingResiRESTConsumer(systemRESTConsumer); + } + + @Provides + BottomSheetFragmentLUContentViewModel providesBottomSheetFragmentLUContentViewModel() { + return new BottomSheetFragmentLUContentViewModel(); + } + + @Provides + PickingResiViewModel providesPickingResiViewModel(ArticoloRESTConsumer articoloRESTConsumer, ColliDataRecoverService colliDataRecoverService, OrdiniRESTConsumer ordiniRESTConsumer, ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer, PrinterRESTConsumer printerRESTConsumer, BarcodeRESTConsumer barcodeRESTConsumer, PickingResiRESTConsumer pickingResiRESTConsumer) { + return new PickingResiViewModel(articoloRESTConsumer, barcodeRESTConsumer, colliDataRecoverService, ordiniRESTConsumer, colliMagazzinoRESTConsumer, printerRESTConsumer, pickingResiRESTConsumer); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiViewModel.java new file mode 100644 index 00000000..3087bfd0 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiViewModel.java @@ -0,0 +1,578 @@ +package it.integry.integrywmsnative.gest.picking_resi; + +import androidx.databinding.ObservableArrayList; +import androidx.lifecycle.MutableLiveData; + +import com.annimon.stream.Optional; +import com.annimon.stream.Stream; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import javax.inject.Inject; + +import it.integry.barcode_base_android_library.model.BarcodeScanDTO; +import it.integry.integrywmsnative.core.data_recover.ColliDataRecoverService; +import it.integry.integrywmsnative.core.exception.NoPrintersFoundException; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.expansion.RunnableArgss; +import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILUBaseOperationsListener; +import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILUPrintListener; +import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener; +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.report.ReportManager; +import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers.OrdiniRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer; +import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO; +import it.integry.integrywmsnative.core.utility.UtilityBarcode; +import it.integry.integrywmsnative.core.utility.UtilityBigDecimal; +import it.integry.integrywmsnative.core.utility.UtilityDate; +import it.integry.integrywmsnative.core.utility.UtilityString; +import it.integry.integrywmsnative.gest.picking_resi.exceptions.DocumentsLoadException; +import it.integry.integrywmsnative.gest.picking_resi.rest.PickingResiRESTConsumer; +import it.integry.integrywmsnative.gest.picking_resi.rest.WithdrawableDtbDocr; +import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO; + +public class PickingResiViewModel { + + + private Listener mListener; + + private final MutableLiveData> mPickingList = new MutableLiveData<>(); + private final List mColliRegistrati = new ArrayList<>(); + + private MtbColt mCurrentMtbColt = null; + + private String mDefaultGestioneOfLU; + private String mDefaultCodAnagOfLU; + private int mDefaultSegnoOfLU; + private String mDefaultCodMdepOfLU; + + private final ArticoloRESTConsumer mArticoloRESTConsumer; + private final BarcodeRESTConsumer mBarcodeRESTConsumer; + private final ColliDataRecoverService mColliDataRecoverService; + private final OrdiniRESTConsumer mOrdiniRestConsumerService; + private final ColliMagazzinoRESTConsumer mColliMagazzinoRESTConsumer; + private final PrinterRESTConsumer mPrinterRESTConsumer; + private final PickingResiRESTConsumer mPickingResiRESTConsumer; + + + @Inject + public PickingResiViewModel(ArticoloRESTConsumer articoloRESTConsumer, + BarcodeRESTConsumer barcodeRESTConsumer, + ColliDataRecoverService colliDataRecoverService, + OrdiniRESTConsumer ordiniRESTConsumer, + ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer, + PrinterRESTConsumer printerRESTConsumer, + PickingResiRESTConsumer mPickingResiRESTConsumer) { + this.mArticoloRESTConsumer = articoloRESTConsumer; + this.mBarcodeRESTConsumer = barcodeRESTConsumer; + this.mColliDataRecoverService = colliDataRecoverService; + this.mOrdiniRestConsumerService = ordiniRESTConsumer; + this.mColliMagazzinoRESTConsumer = colliMagazzinoRESTConsumer; + this.mPrinterRESTConsumer = printerRESTConsumer; + this.mPickingResiRESTConsumer = mPickingResiRESTConsumer; + } + + public void init(List documentList, int defaultSegnoLU, String codMdep) { + this.mDefaultSegnoOfLU = defaultSegnoLU; + this.mDefaultCodMdepOfLU = codMdep; + + this.sendOnLoadingStarted(); + + this.initDatiPicking(documentList); + + this.mPickingResiRESTConsumer.loadDocRows(documentList, withdrawableDtbDocr -> { + this.mPickingList.postValue(withdrawableDtbDocr); + this.sendOnLoadingEnded(); + }, ex -> this.sendError(new DocumentsLoadException(ex))); + } + + private void initDatiPicking(List documentList) { + List foundGestioni = Stream.of(documentList) + .map(DocumentoResoDTO::getGestione) + .distinct() + .withoutNulls() + .toList(); + + if (foundGestioni.size() > 1) { + this.sendError(new Exception("Sono stati caricati documenti con diverse gestioni")); + } else mDefaultGestioneOfLU = foundGestioni.get(0); + + + List foundCodAnags = Stream.of(documentList) + .map(DocumentoResoDTO::getCodAnag) + .distinct() + .toList(); + + if (foundCodAnags.size() > 1) { + this.sendError(new Exception("Sono stati caricati documenti con diversi codici anagrafici")); + } else mDefaultCodAnagOfLU = foundCodAnags.get(0); + } + + public void createNewLU(Integer customNumCollo, String customSerCollo, Runnable onComplete) { + MtbColt mtbColt = new MtbColt(); + mtbColt.initDefaultFields(); + mtbColt.setGestione(mDefaultGestioneOfLU) + .setSegno(mDefaultSegnoOfLU) + .setCodAnag(mDefaultCodAnagOfLU) + .setCodMdep(mDefaultCodMdepOfLU) + .setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE); + + if (customNumCollo != null) mtbColt.setNumCollo(customNumCollo); + if (!UtilityString.isNullOrEmpty(customSerCollo)) mtbColt.setSerCollo(customSerCollo); + + mColliMagazzinoRESTConsumer.saveCollo(mtbColt, value -> { + mtbColt + .setNumCollo(value.getNumCollo()) + .setDataCollo(value.getDataColloS()) + .setMtbColr(new ObservableArrayList<>()); + + this.mCurrentMtbColt = mtbColt; + + if (onComplete != null) onComplete.run(); + this.sendLUOpened(mtbColt); + }, this::sendError); + } + + + public void closeLU(boolean shouldPrint) { + if (mCurrentMtbColt == null) return; + + this.sendOnLoadingStarted(); + + mColliMagazzinoRESTConsumer.canLUBeDeleted(mCurrentMtbColt, canBeDeleted -> { + + if (canBeDeleted) { + deleteLU(() -> { + this.sendLUClosed(); + this.sendOnLoadingEnded(); + }); + } else { + this.sendOnNoteAggiuntiveRequired(noteAggiuntive -> { + + if (!UtilityString.isNullOrEmpty(noteAggiuntive)) { + this.mCurrentMtbColt.setAnnotazioni(noteAggiuntive); + } + + this.mColliMagazzinoRESTConsumer.updateDataFine(mCurrentMtbColt, () -> { + + if (shouldPrint) { + printCollo(mCurrentMtbColt, () -> { + postCloseOperations(mCurrentMtbColt, () -> { + this.sendLUClosed(); + this.sendOnLoadingEnded(); + }); + }); + } else { + postCloseOperations(mCurrentMtbColt, () -> { + this.sendLUClosed(); + this.sendOnLoadingEnded(); + }); + } + + }, this::sendError); + + }, () -> { + this.sendLUClosed(); + this.sendOnLoadingEnded(); + }); + } + }, this::sendError); + } + + private void deleteLU(Runnable onComplete) { + mColliMagazzinoRESTConsumer.deleteCollo(mCurrentMtbColt, () -> { + + this.mCurrentMtbColt = null; + if (onComplete != null) onComplete.run(); + + }, this::sendError); + } + + private void printCollo(MtbColt mtbColtToPrint, Runnable onComplete) { + this.sendLUPrintRequest(shouldPrint -> { + if (!shouldPrint) { + onComplete.run(); + } else { + this.mPrinterRESTConsumer.getAvailablePrinters(mDefaultCodMdepOfLU, PrinterRESTConsumer.Type.PRIMARIA, printerList -> { + if (printerList == null || printerList.size() == 0) { + this.sendError(new NoPrintersFoundException()); + onComplete.run(); + return; + } + singlePrint(mtbColtToPrint, printerList.get(0), onComplete, ex -> this.sendLUPrintError(ex, onComplete)); + }, this::sendError); + } + }); + } + + private void singlePrint(MtbColt mtbColtToPrint, String printerName, Runnable onComplete, RunnableArgs onFailed) { + ReportManager.getReportNameLUFromGestione(mtbColtToPrint.getGestioneEnum(), reportName -> { + + this.mPrinterRESTConsumer.printCollo( + printerName, + mtbColtToPrint, + 1, + reportName, onComplete, onFailed); + + }, onFailed); + } + + private void postCloseOperations(MtbColt mtbColt, Runnable onComplete) { + this.mColliRegistrati.add(mtbColt); + + Stream.of(this.mPickingList.getValue()) + .forEach(x -> { + List withdraws = x.getWithdrawRows(); + + for (int k = 0; k < withdraws.size(); k++) { + MtbColr withdrawRow = withdraws.get(k); + x.setQtaDoc(x.getQtaDoc().subtract(withdrawRow.getQtaCol())); + } + + x.getWithdrawRows().clear(); + + if (UtilityBigDecimal.equalsOrLowerThan(x.getQtaDoc(), BigDecimal.ZERO)) { + this.mPickingList.getValue().remove(x); + } + }); + + this.mPickingList.postValue(this.mPickingList.getValue()); + onComplete.run(); + } + + public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) { + + //Se non c'è una UL aperta + if (mCurrentMtbColt == null) { + + //Se è un'etichetta anonima + if (UtilityBarcode.isEtichettaAnonima(barcodeScanDTO)) { + //Se il collo non esiste allora lo creo associandolo a questa etichetta anonima + //invece se esiste apro un collo nuovo e cerco gli articoli presenti nell'ul + //dell'etichetta anonima +// this.executeEtichettaAnonimaNotOpenedLU(barcodeScanDTO, onComplete); + } else { +// this.processBarcodeNotOpenedLU(barcodeScanDTO, onComplete); + } + + } else { + if (UtilityBarcode.isEtichettaAnonima(barcodeScanDTO)) { + //Cerco gli articoli presenti nell'ul dell'etichetta anonima +// this.executeEtichettaLU(barcodeScanDTO.getStringValue(), onComplete); + + } else { +// this.processBarcodeAlreadyOpenedLU(barcodeScanDTO, onComplete); + } + } + } + + public void dispatchOrdineRow(final WithdrawableDtbDocr withdrawableDtbDocr) { + BigDecimal totalQtaDoc = withdrawableDtbDocr.getQtaDoc(); + BigDecimal totalNumCnfDoc = withdrawableDtbDocr.getNumCnf(); + BigDecimal qtaCnfDoc = withdrawableDtbDocr.getQtaCnf(); + + + + this.sendOnItemDispatched( + withdrawableDtbDocr.getMtbAart(), + totalNumCnfDoc, + qtaCnfDoc, + totalQtaDoc, + totalQtaDoc, + totalNumCnfDoc, + qtaCnfDoc, + withdrawableDtbDocr.getPartitaMag(), + withdrawableDtbDocr.getDataScadPartitaMagD(), + (pickedQuantityDTO, shouldCloseLU) -> { + + this.saveNewRow(withdrawableDtbDocr, + pickedQuantityDTO.getNumCnf(), + pickedQuantityDTO.getQtaCnf(), + pickedQuantityDTO.getQtaTot(), + pickedQuantityDTO.getPartitaMag(), + pickedQuantityDTO.getDataScad(), + shouldCloseLU); + }); + } + + public void dispatchRowEdit(final MtbColr mtbColrToEdit) { + + this.sendOnItemDispatched( + mtbColrToEdit.getMtbAart(), + mtbColrToEdit.getNumCnf(), + mtbColrToEdit.getQtaCnf(), + mtbColrToEdit.getQtaCol(), + null, + null, + null, + mtbColrToEdit.getPartitaMag(), + mtbColrToEdit.getDataScadPartitaD(), + (pickedQuantityDTO, shouldCloseLU) -> { + + this.saveEditedRow(mtbColrToEdit, + pickedQuantityDTO.getNumCnf(), + pickedQuantityDTO.getQtaCnf(), + pickedQuantityDTO.getQtaTot(), + pickedQuantityDTO.getPartitaMag(), + pickedQuantityDTO.getDataScad(), + shouldCloseLU); + }); + } + + + public void saveNewRow(WithdrawableDtbDocr withdrawableDtbDocr, BigDecimal numCnf, BigDecimal qtaCnf, BigDecimal qtaTot, String partitaMag, Date dataScad, boolean shouldCloseLU) { + this.sendOnLoadingStarted(); + + final MtbColr mtbColr = new MtbColr() + .setCodMart(withdrawableDtbDocr.getMtbAart().getCodMart()) + .setPartitaMag(partitaMag) + .setDataScadPartita(dataScad) + .setQtaCol(qtaTot) + .setQtaCnf(qtaCnf) + .setNumCnf(numCnf) + .setDescrizione(withdrawableDtbDocr.getMtbAart().getDescrizioneEstesa()) + .setDatetimeRow(UtilityDate.getDateInstance()) + + .setCodAnagDoc(withdrawableDtbDocr.getCodAnag()) + .setCodDtipDoc(withdrawableDtbDocr.getCodDtip()) + .setSerDoc(withdrawableDtbDocr.getSerDoc()) + .setNumDoc(withdrawableDtbDocr.getNumDoc()) + .setDataDoc(withdrawableDtbDocr.getDataDocS()) + .setIdRigaDoc(withdrawableDtbDocr.getIdRiga()); + + mtbColr.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE); + + MtbColt cloneMtbColt = (MtbColt) mCurrentMtbColt.clone(); + cloneMtbColt.setOperation(CommonModelConsts.OPERATION.UPDATE); + + cloneMtbColt.setMtbColr(new ObservableArrayList<>()); + cloneMtbColt.getMtbColr().add((MtbColr) mtbColr.clone()); + + boolean shouldPrint = true; + + //Se è l'unico articolo del collo (controllo se è uguale a 0 perché ancora non è stato aggiunto nella lista delle righe) + if (shouldCloseLU && mCurrentMtbColt.getMtbColr().size() == 0) { + shouldPrint = false; + } + + if (UtilityBigDecimal.equalsTo(numCnf, BigDecimal.ZERO) && UtilityBigDecimal.equalsTo(qtaTot, BigDecimal.ZERO)) { + this.sendOnLoadingEnded(); + + if (shouldCloseLU) closeLU(shouldPrint); + return; + } + + boolean finalShouldPrint = shouldPrint; + this.mColliMagazzinoRESTConsumer.saveCollo(cloneMtbColt, value -> { + + mtbColr + .setDataCollo(value.getDataColloS()) + .setNumCollo(value.getNumCollo()) + .setGestione(value.getGestione()) + .setSerCollo(value.getSerCollo()) + .setRiga(value.getMtbColr().get(0).getRiga()) + .setUntMis(withdrawableDtbDocr.getMtbAart().getUntMis()) + .setMtbAart(withdrawableDtbDocr.getMtbAart()); + + withdrawableDtbDocr.getWithdrawRows().add(mtbColr); + mCurrentMtbColt.getMtbColr().add(mtbColr); + + this.mPickingList.postValue(this.mPickingList.getValue()); + + this.sendOnRowSaved(); + this.sendOnLoadingEnded(); + + if (shouldCloseLU) closeLU(finalShouldPrint); + }, this::sendError); + } + + private void saveEditedRow(MtbColr mtbColrToUpdate, BigDecimal numCnf, BigDecimal qtaCnf, BigDecimal qtaTot, String partitaMag, Date dataScad, boolean shouldCloseLU) { + + this.sendOnLoadingStarted(); + + MtbColt mtbColt = new MtbColt() + .setNumCollo(mtbColrToUpdate.getNumCollo()) + .setDataCollo(mtbColrToUpdate.getDataColloS()) + .setSerCollo(mtbColrToUpdate.getSerCollo()) + .setGestione(mtbColrToUpdate.getGestione()) + .setMtbColr(new ObservableArrayList<>()); + mtbColt.setOperation(CommonModelConsts.OPERATION.NO_OP); + + final MtbColr mtbColr = (MtbColr) mtbColrToUpdate.clone(); + mtbColr.setOperation(CommonModelConsts.OPERATION.INSERT); + mtbColr.setRiga(null) + .setNumCnf(numCnf.subtract(mtbColrToUpdate.getNumCnf())) + .setQtaCnf(qtaCnf) + .setQtaCol(qtaTot.subtract(mtbColrToUpdate.getQtaCol())) + .setPartitaMag(partitaMag) + .setDataScadPartita(dataScad); + + mtbColt.getMtbColr().add(mtbColr); + + this.mColliMagazzinoRESTConsumer.saveCollo(mtbColt, (value) -> { + + mtbColr.setNumCnf(numCnf) + .setQtaCnf(qtaCnf) + .setQtaCol(qtaTot); + + Optional pickingObjectDTO = Stream.of(this.mPickingList.getValue()) + .filter(x -> Stream.of(x.getWithdrawRows()).anyMatch(y -> y == mtbColrToUpdate)) + .findSingle(); + + if (pickingObjectDTO.isPresent()) { + pickingObjectDTO.get().getWithdrawRows().remove(mtbColrToUpdate); + pickingObjectDTO.get().getWithdrawRows().add(mtbColr); + } + + this.mCurrentMtbColt.getMtbColr().remove(mtbColrToUpdate); + this.mCurrentMtbColt.getMtbColr().add(mtbColr); + + this.sendOnRowSaved(); + this.sendOnLoadingEnded(); + + }, this::sendError); + } + + public void deleteRow(MtbColr mtbColrToDelete) { + this.sendMtbColrDeleteRequest(canDelete -> { + if (canDelete) { + this.sendOnLoadingStarted(); + + MtbColt mtbColt = new MtbColt() + .setNumCollo(mtbColrToDelete.getNumCollo()) + .setDataCollo(mtbColrToDelete.getDataColloS()) + .setSerCollo(mtbColrToDelete.getSerCollo()) + .setGestione(mtbColrToDelete.getGestione()) + .setMtbColr(new ObservableArrayList<>()); + mtbColt.setOperation(CommonModelConsts.OPERATION.NO_OP); + + MtbColr mtbColr = (MtbColr) mtbColrToDelete.clone(); + mtbColr.setOperation(CommonModelConsts.OPERATION.INSERT); + mtbColr.setQtaCol(mtbColr.getQtaCol().multiply(new BigDecimal(-1))) + .setNumCnf(mtbColr.getNumCnf().multiply(new BigDecimal(-1))) + .setRiga(null); + + mtbColt.getMtbColr().add(mtbColr); + + this.mColliMagazzinoRESTConsumer.saveCollo(mtbColt, (value) -> { + + Optional pickingObjectDTO = Stream.of(this.mPickingList.getValue()) + .filter(x -> Stream.of(x.getWithdrawRows()).anyMatch(y -> y == mtbColrToDelete)) + .findSingle(); + + if (pickingObjectDTO.isPresent()) { + pickingObjectDTO.get().getWithdrawRows().remove(mtbColrToDelete); + } + + this.mCurrentMtbColt.getMtbColr().remove(mtbColrToDelete); + + this.sendOnRowSaved(); + this.sendOnLoadingEnded(); + + }, this::sendError); + } + }); + } + + + public MutableLiveData> getPickingList() { + return mPickingList; + } + + private void sendOnNoteAggiuntiveRequired(RunnableArgs onComplete, Runnable onAbort) { + if (this.mListener != null) this.mListener.onNoteAggiuntiveRequired(onComplete, onAbort); + } + + 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); + } + + private void sendLUOpened(MtbColt mtbColt) { + if (this.mListener != null) mListener.onLUOpened(mtbColt); + } + + private void sendLUClosed() { + if (this.mListener != null) mListener.onLUClosed(); + } + + private void sendLUPrintRequest(RunnableArgs onComplete) { + if (this.mListener != null) mListener.onLUPrintRequest(onComplete); + } + + private void sendLUPrintError(Exception ex, Runnable onComplete) { + if (this.mListener != null) mListener.onLUPrintError(ex, onComplete); + } + + private void sendMtbColrDeleteRequest(RunnableArgs onComplete) { + if (this.mListener != null) mListener.onMtbColrDeleteRequest(onComplete); + } + + private void sendOnItemDispatched(MtbAart mtbAart, + BigDecimal initialNumCnf, + BigDecimal initialQtaCnf, + BigDecimal initialQtaTot, + BigDecimal totalQtaAvailable, + BigDecimal totalNumCnfAvailable, + BigDecimal qtaCnfAvailable, + String partitaMag, + Date dataScad, + RunnableArgss onComplete) { + if (this.mListener != null) mListener.onItemDispatched(mtbAart, + initialNumCnf, + initialQtaCnf, + initialQtaTot, + totalQtaAvailable, + totalNumCnfAvailable, + qtaCnfAvailable, + partitaMag, + dataScad, + onComplete); + } + + private void sendOnRowSaved() { + if (this.mListener != null) mListener.onRowSaved(); + } + + + public PickingResiViewModel setListener(Listener listener) { + this.mListener = listener; + return this; + } + + public interface Listener extends ILUPrintListener, ILoadingListener, ILUBaseOperationsListener { + + void onNoteAggiuntiveRequired(RunnableArgs onComplete, Runnable onAbort); + + void onError(Exception ex); + + void onItemDispatched(MtbAart mtbAart, + BigDecimal initialNumCnf, + BigDecimal initialQtaCnf, + BigDecimal initialQtaTot, + BigDecimal totalQtaAvailable, + BigDecimal totalNumCnfAvailable, + BigDecimal qtaCnfAvailable, + String partitaMag, + Date dataScad, + RunnableArgss onComplete); + + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/core/PickingResiListAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/core/PickingResiListAdapter.java index 0da8eb22..13aef6b5 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/core/PickingResiListAdapter.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/core/PickingResiListAdapter.java @@ -1,197 +1,149 @@ package it.integry.integrywmsnative.gest.picking_resi.core; import android.content.Context; +import android.graphics.Color; import android.view.LayoutInflater; +import android.view.View; import android.view.ViewGroup; +import androidx.appcompat.app.AppCompatActivity; import androidx.databinding.DataBindingUtil; +import androidx.databinding.ObservableArrayList; import androidx.databinding.ObservableList; import androidx.recyclerview.widget.RecyclerView; -import com.annimon.stream.Stream; import com.zhukic.sectionedrecyclerview.SectionedRecyclerViewAdapter; -import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.expansion.OnListGeneralChangedCallback; import it.integry.integrywmsnative.core.expansion.RunnableArgs; -import it.integry.integrywmsnative.core.model.DtbDocr; -import it.integry.integrywmsnative.core.model.MtbColr; -import it.integry.integrywmsnative.core.settings.SettingsManager; -import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.core.utility.UtilityNumber; -import it.integry.integrywmsnative.core.utility.UtilityResources; import it.integry.integrywmsnative.core.utility.UtilityString; -import it.integry.integrywmsnative.databinding.UltimeConsegneMainListItemBinding; -import it.integry.integrywmsnative.databinding.UltimeConsegneMainListItemHeaderBinding; -import it.integry.integrywmsnative.gest.picking_resi.dto.WithdrawableDtbDocr; +import it.integry.integrywmsnative.databinding.PickingResiMainListItemBinding; +import it.integry.integrywmsnative.databinding.PickingResiMainListItemHeaderBinding; +import it.integry.integrywmsnative.gest.picking_resi.rest.WithdrawableDtbDocr; public class PickingResiListAdapter extends SectionedRecyclerViewAdapter { - private Context mContext; - - private List mDataset; - + private final List mDataset = new ArrayList<>(); private RunnableArgs mOnItemClicked; static class SubheaderHolder extends RecyclerView.ViewHolder { + PickingResiMainListItemHeaderBinding mBinding; - UltimeConsegneMainListItemHeaderBinding mBinding; - - SubheaderHolder(UltimeConsegneMainListItemHeaderBinding binding) { + SubheaderHolder(PickingResiMainListItemHeaderBinding binding) { super(binding.getRoot()); this.mBinding = binding; } - } static class SingleItemViewHolder extends RecyclerView.ViewHolder { + PickingResiMainListItemBinding mBinding; - UltimeConsegneMainListItemBinding mBinding; - - SingleItemViewHolder(UltimeConsegneMainListItemBinding binding) { + SingleItemViewHolder(PickingResiMainListItemBinding binding) { super(binding.getRoot()); this.mBinding = binding; } } - - public PickingResiListAdapter(Context context, ObservableList data) { + public PickingResiListAdapter(AppCompatActivity context, ObservableArrayList mutableDataSet) { this.mContext = context; - this.mDataset = new ArrayList<>(); - refreshData(data); - - data.addOnListChangedCallback(new ObservableList.OnListChangedCallback>() { + mutableDataSet.addOnListChangedCallback(new OnListGeneralChangedCallback() { @Override - public void onChanged(ObservableList sender) { - refreshData(sender); - } - - @Override - public void onItemRangeChanged(ObservableList sender, int positionStart, int itemCount) { - refreshData(sender); - } - - @Override - public void onItemRangeInserted(ObservableList sender, int positionStart, int itemCount) { - refreshData(sender); - } - - @Override - public void onItemRangeMoved(ObservableList sender, int fromPosition, int toPosition, int itemCount) { - refreshData(sender); - } - - @Override - public void onItemRangeRemoved(ObservableList sender, int positionStart, int itemCount) { - refreshData(sender); + public void onChanged(ObservableList sender) { + mDataset.clear(); + mDataset.addAll(sender); + notifyDataSetChanged(); + notifyDataChanged(); } }); } - private void refreshData(List data) { - this.mDataset.clear(); - this.mDataset.addAll(Stream.of(data) - .sortBy(x -> x.getNumDoc() + " " + x.getDataDocS() + " " + x.getCodDtip() + " " + x.getSerDoc() + " " + x.getCodAnag() + " " + x.getIdRiga()) - .toList()); - - this.notifyDataChanged(); - } - public void setOnItemClicked(RunnableArgs onItemClicked) { this.mOnItemClicked = onItemClicked; } @Override - public SingleItemViewHolder onCreateItemViewHolder(ViewGroup parent, int viewType) { - UltimeConsegneMainListItemBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.ultime_consegne_main_list__item, parent, false); - return new SingleItemViewHolder(binding); + public PickingResiListAdapter.SingleItemViewHolder onCreateItemViewHolder(ViewGroup parent, int viewType) { + PickingResiMainListItemBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.picking_resi_main_list__item, parent, false); + return new PickingResiListAdapter.SingleItemViewHolder(binding); } @Override - public SubheaderHolder onCreateSubheaderViewHolder(ViewGroup parent, int viewType) { - UltimeConsegneMainListItemHeaderBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.ultime_consegne_main_list__item_header, parent, false); - return new SubheaderHolder(binding); + public PickingResiListAdapter.SubheaderHolder onCreateSubheaderViewHolder(ViewGroup parent, int viewType) { + PickingResiMainListItemHeaderBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.picking_resi_main_list__item_header, parent, false); + return new PickingResiListAdapter.SubheaderHolder(binding); + } + + + @Override + public void onBindSubheaderViewHolder(PickingResiListAdapter.SubheaderHolder subheaderHolder, int nextItemPosition) { + PickingResiListModel pickingResiListModel = this.mDataset.get(nextItemPosition); + + subheaderHolder.mBinding.groupTitle.setVisibility(UtilityString.isNullOrEmpty(pickingResiListModel.getGroupTitle()) ? View.GONE : View.VISIBLE); + subheaderHolder.mBinding.groupTitle.setText(pickingResiListModel.getGroupTitle()); } @Override - public void onBindItemViewHolder(final SingleItemViewHolder holder, final int position) { - final WithdrawableDtbDocr dtbDocr = this.mDataset.get(position); + public void onBindItemViewHolder(final PickingResiListAdapter.SingleItemViewHolder holder, final int position) { + PickingResiListModel pickingResiListModel = this.mDataset.get(position); - BigDecimal qtaColEvasa = BigDecimal.ZERO; - BigDecimal numCnfColEvasa = BigDecimal.ZERO; - - for(MtbColr mtbColr : dtbDocr.getWithdrawRows()) { - qtaColEvasa = qtaColEvasa.add(mtbColr.getQtaCol()); - numCnfColEvasa = numCnfColEvasa.add(mtbColr.getNumCnf()); - } - - Float qtaDaEvadere = UtilityNumber.decimalToFloat(dtbDocr.getQtaDoc().subtract(qtaColEvasa)); - - holder.mBinding.badge1.setText(dtbDocr.getCodMart()); - holder.mBinding.descrizione.setText(UtilityString.isNullOrEmpty(dtbDocr.getDescrizioneEstesa()) ? dtbDocr.getDescrizioneEstesa() : dtbDocr.getDescrizione()); - - - - //Setting qty with unt_mis - if(!SettingsManager.iDB().isFlagForceAllToColli() && (dtbDocr.getMtbAart() == null || dtbDocr.getMtbAart().isFlagQtaCnfFissaBoolean())){ - holder.mBinding.qtaEvasa.setText(UtilityNumber.decimalToString(qtaColEvasa)); - holder.mBinding.qtaTot.setText(UtilityNumber.decimalToString(dtbDocr.getQtaDoc())); - holder.mBinding.untMis.setText(dtbDocr.getUntDoc()); - } else { - holder.mBinding.qtaEvasa.setText(UtilityNumber.decimalToString(numCnfColEvasa)); - holder.mBinding.qtaTot.setText(UtilityNumber.decimalToString(dtbDocr.getNumCnf())); - holder.mBinding.untMis.setText(UtilityResources.getString(R.string.unt_mis_col)); - } - - - - if (qtaDaEvadere <= 0 ) { + if (pickingResiListModel.getQtaEvasa().subtract(pickingResiListModel.getQtaTot()).floatValue() >= 0) { holder.mBinding.getRoot().setBackgroundColor(mContext.getResources().getColor(R.color.green_500_with_alpha)); - } else if (qtaDaEvadere > 0 && qtaColEvasa.floatValue() > 0) { + } else if (pickingResiListModel.getQtaEvasa().floatValue() > 0) { holder.mBinding.getRoot().setBackgroundColor(mContext.getResources().getColor(R.color.orange_600_with_alpha)); + } else if (position % 2 == 1) { + holder.mBinding.getRoot().setBackgroundColor(Color.WHITE); } else { - holder.mBinding.getRoot().setBackgroundColor(mContext.getResources().getColor(R.color.full_white)); + holder.mBinding.getRoot().setBackgroundColor(mContext.getResources().getColor(R.color.letturaFacilitataBG)); } + holder.mBinding.deactivatedOverBg.setVisibility(!pickingResiListModel.isActive() ? View.VISIBLE : View.GONE); + holder.mBinding.getRoot().setAlpha(!pickingResiListModel.isActive() ? 0.8f : 1); + holder.mBinding.badge1.setBackground(mContext.getResources().getDrawable(!pickingResiListModel.isActive() ? R.drawable.badge_gray_round_corner : R.drawable.badge1_round_corner)); + holder.mBinding.qtaEvasa.setTextColor(mContext.getResources().getColor(!pickingResiListModel.isActive() ? R.color.gray_600 : R.color.green_700)); + + holder.mBinding.descrizione.setText(pickingResiListModel.getDescrizione()); + holder.mBinding.descrizione.setTextColor(pickingResiListModel.isDescrizionePresente() ? Color.BLACK : Color.GRAY); + + + holder.mBinding.badge1.setText(pickingResiListModel.getBadge1()); + + holder.mBinding.qtaEvasa.setText(UtilityNumber.decimalToString(pickingResiListModel.getQtaEvasa())); + holder.mBinding.qtaTot.setText(UtilityNumber.decimalToString(pickingResiListModel.getQtaTot())); + + holder.mBinding.untMis.setText(pickingResiListModel.getUntMis()); + holder.mBinding.untMis.setVisibility(UtilityString.isNullOrEmpty(pickingResiListModel.getUntMis()) ? View.GONE : View.VISIBLE); + holder.mBinding.getRoot().setOnClickListener(v -> { - if(this.mOnItemClicked != null) this.mOnItemClicked.run(dtbDocr); + if (this.mOnItemClicked != null) + this.mOnItemClicked.run(pickingResiListModel.getOriginalModel()); }); - - } - - @Override - public void onBindSubheaderViewHolder(SubheaderHolder subheaderHolder, int nextItemPosition) { - DtbDocr nextDtbDocr = this.mDataset.get(nextItemPosition); - subheaderHolder.mBinding.descrizione.setText(nextDtbDocr.getCodDtip() + " - N° " + nextDtbDocr.getNumDoc() + " del " + UtilityDate.formatDate(nextDtbDocr.getDataDocD(), UtilityDate.COMMONS_DATE_FORMATS.DM_HUMAN)); } @Override public boolean onPlaceSubheaderBetweenItems(int position) { + if (getItemSize() == 1) return true; + else if (getItemSize() > 1) { + PickingResiListModel compare1 = this.mDataset.get(position); + PickingResiListModel compare2 = this.mDataset.get(position + 1); - DtbDocr compare1 = this.mDataset.get(position); - DtbDocr compare2 = this.mDataset.get(position + 1); - - if( !compare1.getDataDocS().equalsIgnoreCase(compare2.getDataDocS()) || - !compare1.getSerDoc().equalsIgnoreCase(compare2.getSerDoc()) || - !compare1.getNumDoc().equals(compare2.getNumDoc()) || - !compare1.getCodAnag().equalsIgnoreCase(compare2.getCodAnag()) || - !compare1.getCodDtip().equalsIgnoreCase(compare2.getCodDtip())) { - return true; + if (UtilityString.equalsIgnoreCase(compare1.getGroupTitle(), compare2.getGroupTitle())) { + return false; + } } - return false; + return true; } + @Override public int getItemSize() { return this.mDataset.size(); } - - - } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/core/PickingResiListModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/core/PickingResiListModel.java new file mode 100644 index 00000000..d5816c64 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/core/PickingResiListModel.java @@ -0,0 +1,103 @@ +package it.integry.integrywmsnative.gest.picking_resi.core; + +import java.math.BigDecimal; + +import it.integry.integrywmsnative.gest.picking_resi.rest.WithdrawableDtbDocr; + +public class PickingResiListModel { + + private String groupTitle; + + private String badge1; + + private String descrizione; + private boolean descrizionePresente; + private BigDecimal qtaEvasa; + private BigDecimal qtaTot; + private String untMis; + + private boolean active; + + private WithdrawableDtbDocr mOriginalModel; + + public String getGroupTitle() { + return groupTitle; + } + + public PickingResiListModel setGroupTitle(String groupTitle) { + this.groupTitle = groupTitle; + return this; + } + + public String getBadge1() { + return badge1; + } + + public PickingResiListModel setBadge1(String badge1) { + this.badge1 = badge1; + return this; + } + + public String getDescrizione() { + return descrizione; + } + + public PickingResiListModel setDescrizione(String descrizione) { + this.descrizione = descrizione; + return this; + } + + public boolean isDescrizionePresente() { + return descrizionePresente; + } + + public PickingResiListModel setDescrizionePresente(boolean descrizionePresente) { + this.descrizionePresente = descrizionePresente; + return this; + } + + public BigDecimal getQtaEvasa() { + return qtaEvasa; + } + + public PickingResiListModel setQtaEvasa(BigDecimal qtaEvasa) { + this.qtaEvasa = qtaEvasa; + return this; + } + + public BigDecimal getQtaTot() { + return qtaTot; + } + + public PickingResiListModel setQtaTot(BigDecimal qtaTot) { + this.qtaTot = qtaTot; + return this; + } + + public String getUntMis() { + return untMis; + } + + public PickingResiListModel setUntMis(String untMis) { + this.untMis = untMis; + return this; + } + + public boolean isActive() { + return active; + } + + public PickingResiListModel setActive(boolean active) { + this.active = active; + return this; + } + + public WithdrawableDtbDocr getOriginalModel() { + return mOriginalModel; + } + + public PickingResiListModel setOriginalModel(WithdrawableDtbDocr originalModel) { + this.mOriginalModel = originalModel; + return this; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/exceptions/DocumentsLoadException.java b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/exceptions/DocumentsLoadException.java new file mode 100644 index 00000000..be2b42f7 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/exceptions/DocumentsLoadException.java @@ -0,0 +1,10 @@ +package it.integry.integrywmsnative.gest.picking_resi.exceptions; + +public class DocumentsLoadException extends Exception { + + public DocumentsLoadException(Throwable cause) { + super("Errore durante il caricamento dei documenti"); + initCause(cause); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/rest/PickingResiRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/rest/PickingResiRESTConsumer.java new file mode 100644 index 00000000..a05850e4 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/rest/PickingResiRESTConsumer.java @@ -0,0 +1,232 @@ +package it.integry.integrywmsnative.gest.picking_resi.rest; + +import com.annimon.stream.Stream; +import com.google.gson.reflect.TypeToken; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import javax.inject.Inject; +import javax.inject.Singleton; + +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.model.DtbDocr; +import it.integry.integrywmsnative.core.model.MtbAart; +import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers.ISimpleOperationCallback; +import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer; +import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO; +import it.integry.integrywmsnative.core.utility.UtilityQuery; + +@Singleton +public class PickingResiRESTConsumer { + + + private final SystemRESTConsumer mSystemRestConsumer; + + @Inject + public PickingResiRESTConsumer(SystemRESTConsumer systemRESTConsumer) { + this.mSystemRestConsumer = systemRESTConsumer; + } + + public void loadDocRows(List documents, RunnableArgs> onComplete, RunnableArgs onFailed) { + List> filterCond = new ArrayList<>(); + + for(int i = 0; i < documents.size(); i++) { + HashMap filter = new HashMap<>(); + + filter.put("dtb_docr.data_doc", documents.get(i).getDataDocD()); + filter.put("dtb_docr.num_doc", documents.get(i).getNumDoc()); + filter.put("dtb_docr.ser_doc", documents.get(i).getSerDoc()); + filter.put("dtb_docr.cod_anag", documents.get(i).getCodAnag()); + filter.put("dtb_docr.cod_dtip", documents.get(i).getCodDtip()); + + filterCond.add(filter); + } + + String sql = "SELECT dtb_docr.[cod_anag]" + + " ,dtb_docr.[cod_dtip]" + + " ,dtb_docr.[data_doc]" + + " ,dtb_docr.[ser_doc]" + + " ,dtb_docr.[num_doc]" + + " ,dtb_docr.[id_riga]" + + " ,dtb_docr.[cod_mart]" + + " ,dtb_docr.[descrizione]" + + " ,dtb_docr.[unt_doc]" + + " ,(dtb_docr.[rap_conv] / dtb_docr.[rap_conv]) as rap_conv" + + " ,(dtb_docr.[qta_doc] * dtb_docr.[rap_conv]) - ISNULL(mtb_colr.qta_col, 0) as qta_doc" + + " ,dtb_docr.[val_unt]" + + " ,dtb_docr.[sconto5]" + + " ,dtb_docr.[sconto6]" + + " ,dtb_docr.[sconto7]" + + " ,dtb_docr.[sconto8]" + + " ,dtb_docr.[cod_aliq]" + + " ,dtb_docr.[perc_prov]" + + " ,dtb_docr.[val_prov]" + + " ,dtb_docr.[data_ord]" + + " ,dtb_docr.[num_ord]" + + " ,dtb_docr.[riga_ord]" + + " ,dtb_docr.[importo_riga]" + + " ,dtb_docr.[cod_col]" + + " ,dtb_docr.[cod_tagl]" + + " ,dtb_docr.[cod_jcom]" + + " ,dtb_docr.[cod_mdep]" + + " ,dtb_docr.[perc_gest]" + + " ,dtb_docr.[val_gest]" + + " ,dtb_docr.[partita_mag]" + + " ,dtb_docr.[val_unt_iva]" + + " ,dtb_docr.[qta_cnf]" + + " ,dtb_docr.[descrizione_estesa]" + + " ,dtb_docr.[costo_unt]" + + " ,dtb_docr.[perc_ispe]" + + " ,dtb_docr.[val_ispe]" + + " ,dtb_docr.[perc_promo]" + + " ,dtb_docr.[val_promo]" + + " ,dtb_docr.[perc_oneri]" + + " ,dtb_docr.[val_oneri]" + + " ,dtb_docr.[flag_evaso_forzato]" + + " ,dtb_docr.[cod_dtip_comp]" + + " ,dtb_docr.[data_doc_comp]" + + " ,dtb_docr.[ser_doc_comp]" + + " ,dtb_docr.[num_doc_comp]" + + " ,dtb_docr.[cod_promo]" + + " ,dtb_docr.[perc_prov2]" + + " ,dtb_docr.[val_prov2]" + + " ,dtb_docr.[cod_art_for]" + + " ,dtb_docr.[unt_doc2]" + + " ,dtb_docr.[qta_doc2]" + + " ,dtb_docr.[unt_doc3]" + + " ,dtb_docr.[qta_doc3]" + + " ,dtb_docr.[num_cnf]" + + " ,dtb_docr.[peso_lordo]" + + " ,dtb_docr.[posizione]" + + " ,dtb_docr.[cod_anag_comp]" + + " ,dtb_docr.[cod_mtip]" + + " ,dtb_docr.[matricola]" + + " ,dtb_docr.[data_iniz_comp]" + + " ,dtb_docr.[data_fine_comp]" + + " ,dtb_docr.[cod_kit]" + + " ,dtb_docr.[cod_alis]" + + " ,dtb_docr.[data_ins_row]" + + " ,dtb_docr.[note] " + + " ,dtb_doct.[gestione] " + + " ,mtb_partita_mag.[data_scad] as data_scad_partita_mag " + + "FROM dtb_docr " + + "INNER JOIN dtb_doct ON dtb_docr.num_doc = dtb_doct.num_doc AND dtb_docr.data_doc = dtb_doct.data_doc AND dtb_docr.cod_anag = dtb_doct.cod_anag AND dtb_docr.cod_dtip = dtb_doct.cod_dtip AND dtb_docr.ser_doc = dtb_doct.ser_doc " + + "INNER JOIN mtb_aart ON dtb_docr.cod_mart = mtb_aart.cod_mart " + + "LEFT OUTER JOIN mtb_partita_mag ON dtb_docr.cod_mart = mtb_partita_mag.cod_mart " + + " AND dtb_docr.partita_mag = mtb_partita_mag.partita_mag " + + "LEFT OUTER JOIN ctb_cont ON mtb_aart.cod_ccon_ricavi = ctb_cont.cod_ccon " + + "LEFT OUTER JOIN ctb_grup ON ctb_cont.cod_cgrp = ctb_grup.cod_cgrp " + + "LEFT OUTER JOIN (" + + " SELECT gestione," + + " cod_mart," + + " cod_col," + + " cod_tagl," + + " SUM(qta_col) as qta_col," + + " data_ord," + + " num_ord," + + " riga_ord," + + " partita_mag," + + " qta_cnf," + + " gestione_rif," + + " data_collo_rif," + + " ser_collo_rif," + + " num_collo_rif," + + " cod_jcom," + + " SUM(num_cnf) as num_cnf," + + " cod_anag_doc," + + " cod_dtip_doc," + + " data_doc," + + " ser_doc," + + " num_doc," + + " id_riga_doc" + + " FROM mtb_colr" + + " GROUP BY gestione," + + " cod_barre," + + " cod_mart," + + " cod_col," + + " cod_tagl," + + " data_ord," + + " num_ord," + + " riga_ord," + + " partita_mag," + + " qta_cnf," + + " gestione_rif," + + " data_collo_rif," + + " ser_collo_rif," + + " num_collo_rif," + + " cod_jcom," + + " cod_anag_doc," + + " cod_dtip_doc," + + " data_doc," + + " ser_doc," + + " num_doc," + + " id_riga_doc" + + " ) mtb_colr" + + " ON " + + " dtb_docr.cod_anag = mtb_colr.cod_anag_doc AND " + + " dtb_docr.cod_dtip = mtb_colr.cod_dtip_doc AND " + + " dtb_docr.ser_doc = mtb_colr.ser_doc AND " + + " dtb_docr.data_doc = mtb_colr.data_doc AND " + + " dtb_docr.num_doc = mtb_colr.num_doc AND " + + " dtb_docr.id_riga = mtb_colr.id_riga_doc " + + "WHERE " + + " (ctb_grup.sezione <> 1 OR ctb_grup.sezione IS NULL) AND " + + " dtb_docr.[qta_doc] - ISNULL(mtb_colr.qta_col, 0) > 0 AND" + + " ( " + + UtilityQuery.concatFieldListInWhereCond(filterCond) + + " ) " + + "ORDER BY cod_mart"; + + + Type typeOfObjectsList = new TypeToken>() {}.getType(); + this.mSystemRestConsumer.processSql(sql, typeOfObjectsList, new ISimpleOperationCallback>() { + @Override + public void onSuccess(ArrayList values) { + + if(values != null && values.size() > 0){ + List codMarts = Stream.of(values) + .map(DtbDocr::getCodMart) + .withoutNulls() + .distinct() + .toList(); + + ArticoloRESTConsumer.getByCodMart(codMarts, arts -> { + + if(arts != null && arts.size() > 0) { + for (DtbDocr value : values) { + + MtbAart foundMtbAart = null; + + List mtbAartStream = Stream.of(arts) + .filter(x -> x.getCodMart().equalsIgnoreCase(value.getCodMart())).toList(); + + if(mtbAartStream != null && mtbAartStream.size() > 0){ + foundMtbAart = mtbAartStream.get(0); + } + + value.setMtbAart(foundMtbAart); + } + + + if(onComplete != null) onComplete.run(values); + } + + }, onFailed); + + } else { + if(onComplete != null) onComplete.run(values); + } + } + + @Override + public void onFailed(Exception ex) { + if(onFailed != null) onFailed.run(ex); + } + }); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/dto/WithdrawableDtbDocr.java b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/rest/WithdrawableDtbDocr.java similarity index 92% rename from app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/dto/WithdrawableDtbDocr.java rename to app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/rest/WithdrawableDtbDocr.java index eb7d8110..08fabdd5 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/dto/WithdrawableDtbDocr.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/rest/WithdrawableDtbDocr.java @@ -1,4 +1,4 @@ -package it.integry.integrywmsnative.gest.picking_resi.dto; +package it.integry.integrywmsnative.gest.picking_resi.rest; import java.util.ArrayList; import java.util.List; diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi_OLD/PickingResiActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi_OLD/PickingResiActivity.java new file mode 100644 index 00000000..7aa43763 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi_OLD/PickingResiActivity.java @@ -0,0 +1,548 @@ +package it.integry.integrywmsnative.gest.picking_resi_OLD; + +import android.app.Dialog; +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.text.SpannableString; + +import androidx.databinding.DataBindingUtil; +import androidx.databinding.ObservableArrayList; +import androidx.databinding.ObservableField; +import androidx.databinding.ObservableList; +import androidx.recyclerview.widget.LinearLayoutManager; + +import com.annimon.stream.Stream; +import com.tfb.fbtoast.FBToast; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + +import it.integry.barcode_base_android_library.model.BarcodeScanDTO; +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.expansion.BaseActivity; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.model.CommonModelConsts; +import it.integry.integrywmsnative.core.model.MtbColr; +import it.integry.integrywmsnative.core.model.MtbColt; +import it.integry.integrywmsnative.core.report.ReportManager; +import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer; +import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO; +import it.integry.integrywmsnative.core.settings.SettingsManager; +import it.integry.integrywmsnative.core.utility.UtilityDate; +import it.integry.integrywmsnative.core.utility.UtilityExceptions; +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.ActivityPickingResiBinding; +import it.integry.integrywmsnative.gest.picking_resi_OLD.core.PickingResiListAdapter; +import it.integry.integrywmsnative.gest.picking_resi.rest.WithdrawableDtbDocr; +import it.integry.integrywmsnative.gest.ultime_consegne_cliente.rest.UltimeConsegneClienteRESTConsumer; +import it.integry.integrywmsnative.view.bottomsheet.interfaces.IOnColloClosedCallback; +import it.integry.integrywmsnative.view.bottomsheet.viewmodel.ArticoliInColloBottomSheetViewModel; +import it.integry.integrywmsnative.view.dialogs.ask_should_print.DialogAskShouldPrint; +import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper; +import it.integry.integrywmsnative.view.dialogs.input_quantity.DialogInputQuantity; +import it.integry.integrywmsnative.view.dialogs.input_quantity.QuantityDTO; +import it.integry.integrywmsnative.view.dialogs.note_aggiuntive_lu.NoteAggiuntiveLUDialog; + +public class PickingResiActivity extends BaseActivity implements IOnColloClosedCallback { + + private List mDocumentiResiList; + public ObservableList mDtbDocrList; + private final List mColliRegistrati = new ArrayList<>(); + + private ActivityPickingResiBinding mBinding; + private ArticoliInColloBottomSheetViewModel mArticoliInColloBottomSheetViewModel; + + public ObservableField currentMtbColt = new ObservableField<>(); + + private PickingResiListAdapter mAdapter; + + private int barcodeScannerIstanceID = -1; + + private String mActivityTitle; + private String mDefaultGestioneOfUL; + private String mDefaultCodAnagOfUL; + private Integer mDefaultSegnoOfUL; + + + public static void startActivity(Context context, String activityTitle, List documentoResoDTOList, Integer segno) { + String consegneCacheKey = DataCache.addItem(documentoResoDTOList); + + Intent intent = new Intent(context, PickingResiActivity.class); + intent.putExtra("activity_title", activityTitle); + intent.putExtra("key", consegneCacheKey); + intent.putExtra("segno", segno); + context.startActivity(intent); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mBinding = DataBindingUtil.setContentView(this, R.layout.activity_picking_resi); +// mBinding.setViewmodel(this); + + this.mDtbDocrList = new ObservableArrayList<>(); + +// mArticoliInColloBottomSheetViewModel = new ArticoliInColloBottomSheetViewModel(this, this.mBinding.bottomSheetInclude); +// mArticoliInColloBottomSheetViewModel.setOnCloseColloCallbackListener(this); +// mArticoliInColloBottomSheetViewModel.setOnItemEditedCallback(this::onItemEdited); +// mArticoliInColloBottomSheetViewModel.setOnItemDeletedCallback(this::onItemDeleted); + + + mDocumentiResiList = DataCache.retrieveItem(getIntent().getStringExtra("key")); + mDefaultSegnoOfUL = getIntent().getIntExtra("segno", +1); + + mActivityTitle = getIntent().getStringExtra("activity_title"); + + this.initView(); + + + } + + @Override + public boolean onSupportNavigateUp() { + onBackPressed(); + return true; + } + + @Override + public void onBackPressed() { + if(mArticoliInColloBottomSheetViewModel.isExpanded()){ + mArticoliInColloBottomSheetViewModel.collapse(); + } + else if(thereIsAnOpenedUL()) { + mArticoliInColloBottomSheetViewModel.closeCurrentUL(() -> { + BarcodeManager.removeCallback(barcodeScannerIstanceID); + super.onBackPressed(); + }); + + } + else { + BarcodeManager.removeCallback(barcodeScannerIstanceID); + super.onBackPressed(); + } + } + + private void initView() { + barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() + .setOnScanSuccessfull(this::onScanSuccessful) + .setOnScanFailed(ex -> UtilityExceptions.defaultException(this, ex, false))); + + + setSupportActionBar(this.mBinding.toolbar); + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + + getSupportActionBar().setTitle(mActivityTitle); + + this.mBinding.elevatedToolbar.setRecyclerView(this.mBinding.mainList); + + Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(this); + UltimeConsegneClienteRESTConsumer.loadDocRowFromConsegna(mDocumentiResiList, dtbDocrToPick -> { + progressDialog.dismiss(); + this.mDtbDocrList.addAll(dtbDocrToPick); + + try { + this.initDatiPicking(); + } catch (Exception ex) { + DialogSimpleMessageHelper.showSimpleErrorDialog(this, ex.getMessage()); + } + + this.initList(); + }, ex -> { + UtilityExceptions.defaultException(this, ex, progressDialog); + }); + } + + private void initList() { + + mAdapter = new PickingResiListAdapter(this, this.mDtbDocrList); + mAdapter.setOnItemClicked(this::onOrdineRowDispatch); + + this.mBinding.mainList.setLayoutManager(new LinearLayoutManager(this)); + this.mBinding.mainList.setAdapter(mAdapter); + } + + private void initDatiPicking() throws Exception { + List foundGestioni = Stream.of(this.mDocumentiResiList) + .map(DocumentoResoDTO::getGestione) + .distinct() + .withoutNulls() + .toList(); + + if(foundGestioni.size() > 1) { + throw new Exception("Sono stati caricati documenti con diverse gestioni"); + } else mDefaultGestioneOfUL = foundGestioni.get(0); + + + List foundCodAnags = Stream.of(this.mDocumentiResiList) + .map(DocumentoResoDTO::getCodAnag) + .distinct() + .toList(); + + if(foundCodAnags.size() > 1) { + throw new Exception("Sono stati caricati documenti con diversi codici anagrafici"); + } else mDefaultCodAnagOfUL = foundCodAnags.get(0); + + } + + + + + private void onScanSuccessful(BarcodeScanDTO data) { + + } + + public void createNewUL() { + this.createNewUL(null, null, null, false, true, null); + } + + public void createNewUL(Integer customNumCollo, String customSerCollo, Dialog progress, boolean disablePrint, boolean closeProgress, Runnable onComplete) { + this.mBinding.mainFab.close(true); + + if (progress == null){ + progress = UtilityProgress.createDefaultProgressDialog(this); + } + + MtbColt mtbColt = new MtbColt(); + mtbColt.initDefaultFields(); + mtbColt .setGestione(mDefaultGestioneOfUL) + .setSegno(mDefaultSegnoOfUL) + .setCodAnag(mDefaultCodAnagOfUL) + .setCodMdep(SettingsManager.i().getUserSession().getDepo().getCodMdep()) + .setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE); + + + if(customNumCollo != null) { + mtbColt.setNumCollo(customNumCollo); + } + + if(!UtilityString.isNullOrEmpty(customSerCollo)) { + mtbColt.setSerCollo(customSerCollo); + } + + + Dialog finalProgress = progress; + ColliMagazzinoRESTConsumer.saveColloStatic(mtbColt, value -> { + + value.setDisablePrint(disablePrint); + + setULToCurrentContext(value); + + if(closeProgress) finalProgress.dismiss(); + + FBToast.successToast(this, getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT); + + if(onComplete != null) onComplete.run(); + + }, ex -> { + UtilityExceptions.defaultException(this, ex, finalProgress); + }); + + } + + private void setULToCurrentContext(MtbColt mtbColt){ + if(mtbColt != null && mtbColt.getMtbColr() == null) { + mtbColt.setMtbColr(new ObservableArrayList<>()); + } + + this.currentMtbColt.set(mtbColt); + mArticoliInColloBottomSheetViewModel.mtbColt.set(mtbColt); + } + + + + + public void onOrdineRowDispatch(final WithdrawableDtbDocr item) { + if(currentMtbColt.get() != null){ + + List currentMtbColrs = item.getWithdrawRows(); + + BigDecimal qtaEvasaTotaleInMtbColr = BigDecimal.ZERO; + for (MtbColr mtbColr : currentMtbColrs) { + qtaEvasaTotaleInMtbColr.add(mtbColr.getQtaCol()); + } + + BigDecimal qtaDaEvadere = item.getQtaDoc().subtract(qtaEvasaTotaleInMtbColr); + if(qtaDaEvadere.floatValue() < 0) qtaDaEvadere = BigDecimal.ZERO; + + DialogInputQuantity.DTO dto = new DialogInputQuantity.DTO() + .setBatchLot(item.getPartitaMag()) + .setCodArtFor(item.getCodArtFor()) + .setMtbAart(item.getMtbAart()) + .setQtaDisponibile(qtaDaEvadere) + .setQtaTot(qtaDaEvadere) + .setQtaEvasa(qtaEvasaTotaleInMtbColr) + .setCanPartitaMagBeChanged(false) + .setMaxQta(qtaDaEvadere); + + + DialogInputQuantity.makeBase(this, dto, false, (quantityDTO, closeUL) -> { + onOrdineRowDispatched(item, quantityDTO, closeUL); + + }, null).show(); + } + } + + + + + private void onOrdineRowDispatched(WithdrawableDtbDocr item, QuantityDTO quantityDTO, boolean closeUL){ + final Dialog progress = UtilityProgress.createDefaultProgressDialog(this); + + final MtbColr mtbColr = new MtbColr() + .setCodMart(item.getCodMart()) + .setPartitaMag(UtilityString.empty2null(quantityDTO.batchLot.get())) + .setQtaCol(quantityDTO.qtaTot.getBigDecimal()) + .setQtaCnf(quantityDTO.qtaCnf.getBigDecimal()) + .setNumCnf(quantityDTO.numCnf.getBigDecimal()) + .setDescrizione(item.getDescrizioneEstesa()) + .setDatetimeRow(UtilityDate.getDateInstance()) + + .setCodAnagDoc(item.getCodAnag()) + .setCodDtipDoc(item.getCodDtip()) + .setSerDoc(item.getSerDoc()) + .setNumDoc(item.getNumDoc()) + .setDataDoc(item.getDataDocS()) + .setIdRigaDoc(item.getIdRiga()); +// .setCodJcom(item.getCodJcom()); + + + + mtbColr.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE); + + MtbColt cloneMtbColt = (MtbColt) currentMtbColt.get().clone(); + cloneMtbColt.setOperation(CommonModelConsts.OPERATION.NO_OP); + + cloneMtbColt.setMtbColr(new ObservableArrayList<>()); + cloneMtbColt.getMtbColr().add(mtbColr); + + ColliMagazzinoRESTConsumer.saveColloStatic(cloneMtbColt, value -> { + + mtbColr + .setDataCollo(value.getDataColloS()) + .setNumCollo(value.getNumCollo()) + .setGestione(value.getGestione()) + .setSerCollo(value.getSerCollo()) + .setRiga(value.getMtbColr().get(0).getRiga()) + .setUntMis(item.getMtbAart().getUntMis()) + .setMtbAart(item.getMtbAart()); + + item.getWithdrawRows().add(mtbColr); + + this.refreshDtbDocrItem(item); + + currentMtbColt.get().getMtbColr().add(mtbColr); + + //Chiamato removeListFilter perché cosi mi cancella tutti i dati di pick temporanei + removeListFilter(); + + FBToast.successToast(this, this.getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT); + + progress.dismiss(); + +// if(closeUL) onColloClosed(null); + }, ex -> { + UtilityExceptions.defaultException(this, ex, progress); + }); + } + + + @Override + public void onColloClosed(Runnable onComplete, boolean shouldPrint) { + if(thereIsAnOpenedUL()) { + + final Dialog progress = UtilityProgress.createDefaultProgressDialog(this); + progress.show(); + + if(thereIsAnyRowInUL()) { + NoteAggiuntiveLUDialog.make(this, noteString -> { + + MtbColt currentLU = currentMtbColt.get(); + + Runnable postNoteSave = () -> { + ColliMagazzinoRESTConsumer.updateDataFineStatic( + currentLU, + () -> printCollo(progress, currentMtbColt.get(), onComplete), + ex -> UtilityExceptions.defaultException(this, ex, progress)); + }; + + if(!UtilityString.isNullOrEmpty(noteString)) { + currentLU.setAnnotazioni(noteString); + + ColliMagazzinoRESTConsumer.saveColloStatic(currentLU, mtbColt -> { + postNoteSave.run(); + }, ex -> UtilityExceptions.defaultException(this, ex, progress)); + } else postNoteSave.run(); + + + }, () -> { + + }).show(); + } else { + deleteCollo(progress, onComplete); + } + + } else { + if(onComplete != null) onComplete.run(); + } + } + + private void onItemEdited(MtbColr mtbColrOriginal, MtbColr mtbColrEdited) { + for(int i = 0; i < mDtbDocrList.size(); i++) { + int foundIndex = mDtbDocrList.get(i).getWithdrawRows().indexOf(mtbColrOriginal); + + if(foundIndex >= 0){ + mDtbDocrList.get(i).getWithdrawRows().remove(foundIndex); + mDtbDocrList.get(i).getWithdrawRows().add(foundIndex, mtbColrEdited); + + refreshDtbDocrItem(this.mDtbDocrList.get(i)); + + break; + } + } + } + + private void onItemDeleted(MtbColr mtbColrDeleted) { + for(int i = 0; i < mDtbDocrList.size(); i++) { + int foundIndex = mDtbDocrList.get(i).getWithdrawRows().indexOf(mtbColrDeleted); + + if(foundIndex >= 0){ + mDtbDocrList.get(i).getWithdrawRows().remove(foundIndex); + + refreshDtbDocrItem(this.mDtbDocrList.get(i)); + + break; + } + } + } + + private void printCollo(Dialog progress, MtbColt mtbColtToPrint, Runnable onComplete) { + DialogAskShouldPrint.make(this, "Packing List", shouldPrint -> { + + if(shouldPrint) { + PrinterRESTConsumer.getAvailablePrintersStatic(SettingsManager.i().getUserSession().getDepo().getCodMdep(), PrinterRESTConsumer.Type.PRIMARIA, printerList -> { + + if (printerList.size() > 0) { + try { + singlePrint(mtbColtToPrint, printerList.get(0), () -> { + postCloseOperations(mtbColtToPrint, onComplete); + progress.dismiss(); + }, ex -> { + progress.dismiss(); + String errorMessage = ex.getMessage(); + DialogSimpleMessageHelper.makeErrorDialog( + this, + new SpannableString(errorMessage), + null, + null, + R.string.button_ignore_print, + () -> postCloseOperations(mtbColtToPrint, onComplete)).show(); + }); + + } catch (Exception ex) { + UtilityExceptions.defaultException(this, ex, progress); + postCloseOperations(mtbColtToPrint, onComplete); + } + } else { + progress.dismiss(); + String errorMessage = "Nessuna stampante configurata"; + DialogSimpleMessageHelper.makeWarningDialog(this, new SpannableString(errorMessage), null, () -> postCloseOperations(mtbColtToPrint, onComplete)).show(); + } + }, ex -> { + UtilityExceptions.defaultException(this, ex, progress); + }); + } else { + postCloseOperations(mtbColtToPrint, onComplete); + progress.dismiss(); + } + }).show(); + } + + + + private void singlePrint(MtbColt mtbColtToPrint, String printerName, Runnable onComplete, RunnableArgs onAbort) { + ReportManager.getReportNameLUFromGestione(mtbColtToPrint.getGestioneEnum(), reportName -> { + + PrinterRESTConsumer.printColloStatic( + printerName, + mtbColtToPrint, + 1, + reportName, onComplete, onAbort); + + }, onAbort); + } + + private void postCloseOperations(MtbColt generatedMtbColt, Runnable onComplete) { + this.mColliRegistrati.add(generatedMtbColt); + + setULToCurrentContext(null); + + for(int i = 0; i < this.mDtbDocrList.size(); i++) { + WithdrawableDtbDocr dtbDocr = this.mDtbDocrList.get(i); + + List withdraws = dtbDocr.getWithdrawRows(); + + for(int k = 0; k < withdraws.size(); k++) { + MtbColr withdrawRow = withdraws.get(k); + + dtbDocr.setQtaDoc(dtbDocr.getQtaDoc().subtract(withdrawRow.getQtaCol())); + } + + dtbDocr.getWithdrawRows().clear(); + + if(UtilityNumber.decimalToFloat(dtbDocr.getQtaDoc()) <= 0) { + this.mDtbDocrList.remove(dtbDocr); + i--; + } else this.refreshDtbDocrItem(dtbDocr); + } + + removeListFilter(); + + if(onComplete != null) onComplete.run(); + } + + + private void deleteCollo(Dialog progress, Runnable onComplete) { + + ColliMagazzinoRESTConsumer.deleteColloStatic(currentMtbColt.get(), () -> { + setULToCurrentContext(null); + + progress.dismiss(); + + + if(onComplete != null) onComplete.run(); + }, ex -> UtilityExceptions.defaultException(this, ex, progress) + ); + } + + + public boolean thereIsAnOpenedUL() { + return currentMtbColt.get() != null; + } + + public boolean thereIsAnyRowInUL() { + return currentMtbColt.get() != null && + currentMtbColt.get().getMtbColr() != null && + currentMtbColt.get().getMtbColr().size() > 0; + } + + + private void refreshDtbDocrItem(WithdrawableDtbDocr dtbDocr) { + int index = this.mDtbDocrList.indexOf(dtbDocr); + this.mDtbDocrList.remove(dtbDocr); + this.mDtbDocrList.add(index, dtbDocr); + } + + + public void removeListFilter() { + } + + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi_OLD/core/PickingResiListAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi_OLD/core/PickingResiListAdapter.java new file mode 100644 index 00000000..830943d7 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi_OLD/core/PickingResiListAdapter.java @@ -0,0 +1,197 @@ +package it.integry.integrywmsnative.gest.picking_resi_OLD.core; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.ViewGroup; + +import androidx.databinding.DataBindingUtil; +import androidx.databinding.ObservableList; +import androidx.recyclerview.widget.RecyclerView; + +import com.annimon.stream.Stream; +import com.zhukic.sectionedrecyclerview.SectionedRecyclerViewAdapter; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.model.DtbDocr; +import it.integry.integrywmsnative.core.model.MtbColr; +import it.integry.integrywmsnative.core.settings.SettingsManager; +import it.integry.integrywmsnative.core.utility.UtilityDate; +import it.integry.integrywmsnative.core.utility.UtilityNumber; +import it.integry.integrywmsnative.core.utility.UtilityResources; +import it.integry.integrywmsnative.core.utility.UtilityString; +import it.integry.integrywmsnative.databinding.PickingResiMainListItemBinding; +import it.integry.integrywmsnative.databinding.PickingResiMainListItemHeaderBinding; +import it.integry.integrywmsnative.gest.picking_resi.rest.WithdrawableDtbDocr; + +public class PickingResiListAdapter extends SectionedRecyclerViewAdapter { + + + private Context mContext; + + private List mDataset; + + private RunnableArgs mOnItemClicked; + + static class SubheaderHolder extends RecyclerView.ViewHolder { + + PickingResiMainListItemHeaderBinding mBinding; + + SubheaderHolder(PickingResiMainListItemHeaderBinding binding) { + super(binding.getRoot()); + this.mBinding = binding; + } + + } + + static class SingleItemViewHolder extends RecyclerView.ViewHolder { + + PickingResiMainListItemBinding mBinding; + + SingleItemViewHolder(PickingResiMainListItemBinding binding) { + super(binding.getRoot()); + this.mBinding = binding; + } + } + + + public PickingResiListAdapter(Context context, ObservableList data) { + this.mContext = context; + this.mDataset = new ArrayList<>(); + + refreshData(data); + + data.addOnListChangedCallback(new ObservableList.OnListChangedCallback>() { + @Override + public void onChanged(ObservableList sender) { + refreshData(sender); + } + + @Override + public void onItemRangeChanged(ObservableList sender, int positionStart, int itemCount) { + refreshData(sender); + } + + @Override + public void onItemRangeInserted(ObservableList sender, int positionStart, int itemCount) { + refreshData(sender); + } + + @Override + public void onItemRangeMoved(ObservableList sender, int fromPosition, int toPosition, int itemCount) { + refreshData(sender); + } + + @Override + public void onItemRangeRemoved(ObservableList sender, int positionStart, int itemCount) { + refreshData(sender); + } + }); + } + + private void refreshData(List data) { + this.mDataset.clear(); + this.mDataset.addAll(Stream.of(data) + .sortBy(x -> x.getNumDoc() + " " + x.getDataDocS() + " " + x.getCodDtip() + " " + x.getSerDoc() + " " + x.getCodAnag() + " " + x.getIdRiga()) + .toList()); + + this.notifyDataChanged(); + } + + public void setOnItemClicked(RunnableArgs onItemClicked) { + this.mOnItemClicked = onItemClicked; + } + + @Override + public SingleItemViewHolder onCreateItemViewHolder(ViewGroup parent, int viewType) { + PickingResiMainListItemBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.picking_resi_main_list__item, parent, false); + return new SingleItemViewHolder(binding); + } + + @Override + public SubheaderHolder onCreateSubheaderViewHolder(ViewGroup parent, int viewType) { + PickingResiMainListItemHeaderBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.picking_resi_main_list__item_header, parent, false); + return new SubheaderHolder(binding); + } + + @Override + public void onBindItemViewHolder(final SingleItemViewHolder holder, final int position) { + final WithdrawableDtbDocr dtbDocr = this.mDataset.get(position); + + BigDecimal qtaColEvasa = BigDecimal.ZERO; + BigDecimal numCnfColEvasa = BigDecimal.ZERO; + + for(MtbColr mtbColr : dtbDocr.getWithdrawRows()) { + qtaColEvasa = qtaColEvasa.add(mtbColr.getQtaCol()); + numCnfColEvasa = numCnfColEvasa.add(mtbColr.getNumCnf()); + } + + Float qtaDaEvadere = UtilityNumber.decimalToFloat(dtbDocr.getQtaDoc().subtract(qtaColEvasa)); + + holder.mBinding.badge1.setText(dtbDocr.getCodMart()); + holder.mBinding.descrizione.setText(UtilityString.isNullOrEmpty(dtbDocr.getDescrizioneEstesa()) ? dtbDocr.getDescrizioneEstesa() : dtbDocr.getDescrizione()); + + + + //Setting qty with unt_mis + if(!SettingsManager.iDB().isFlagForceAllToColli() && (dtbDocr.getMtbAart() == null || dtbDocr.getMtbAart().isFlagQtaCnfFissaBoolean())){ + holder.mBinding.qtaEvasa.setText(UtilityNumber.decimalToString(qtaColEvasa)); + holder.mBinding.qtaTot.setText(UtilityNumber.decimalToString(dtbDocr.getQtaDoc())); + holder.mBinding.untMis.setText(dtbDocr.getUntDoc()); + } else { + holder.mBinding.qtaEvasa.setText(UtilityNumber.decimalToString(numCnfColEvasa)); + holder.mBinding.qtaTot.setText(UtilityNumber.decimalToString(dtbDocr.getNumCnf())); + holder.mBinding.untMis.setText(UtilityResources.getString(R.string.unt_mis_col)); + } + + + + if (qtaDaEvadere <= 0 ) { + holder.mBinding.getRoot().setBackgroundColor(mContext.getResources().getColor(R.color.green_500_with_alpha)); + } else if (qtaDaEvadere > 0 && qtaColEvasa.floatValue() > 0) { + holder.mBinding.getRoot().setBackgroundColor(mContext.getResources().getColor(R.color.orange_600_with_alpha)); + } else { + holder.mBinding.getRoot().setBackgroundColor(mContext.getResources().getColor(R.color.full_white)); + } + + holder.mBinding.getRoot().setOnClickListener(v -> { + if(this.mOnItemClicked != null) this.mOnItemClicked.run(dtbDocr); + }); + + } + + @Override + public void onBindSubheaderViewHolder(SubheaderHolder subheaderHolder, int nextItemPosition) { + DtbDocr nextDtbDocr = this.mDataset.get(nextItemPosition); + subheaderHolder.mBinding.groupTitle.setText(nextDtbDocr.getCodDtip() + " - N° " + nextDtbDocr.getNumDoc() + " del " + UtilityDate.formatDate(nextDtbDocr.getDataDocD(), UtilityDate.COMMONS_DATE_FORMATS.DM_HUMAN)); + } + + @Override + public boolean onPlaceSubheaderBetweenItems(int position) { + + DtbDocr compare1 = this.mDataset.get(position); + DtbDocr compare2 = this.mDataset.get(position + 1); + + if( !compare1.getDataDocS().equalsIgnoreCase(compare2.getDataDocS()) || + !compare1.getSerDoc().equalsIgnoreCase(compare2.getSerDoc()) || + !compare1.getNumDoc().equals(compare2.getNumDoc()) || + !compare1.getCodAnag().equalsIgnoreCase(compare2.getCodAnag()) || + !compare1.getCodDtip().equalsIgnoreCase(compare2.getCodDtip())) { + return true; + } + + return false; + } + + @Override + public int getItemSize() { + return this.mDataset.size(); + } + + + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/helper/OrdineAcquistoPvHelper.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/helper/OrdineAcquistoPvHelper.java index 7f401c84..7d968e41 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/helper/OrdineAcquistoPvHelper.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/helper/OrdineAcquistoPvHelper.java @@ -3,7 +3,6 @@ package it.integry.integrywmsnative.gest.pv_ordini_acquisto.helper; import android.app.Activity; import java.util.ArrayList; -import java.util.Date; import java.util.List; import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloGriglia; @@ -16,6 +15,7 @@ import it.integry.integrywmsnative.core.data_store.db.repository.OrdineRepositor import it.integry.integrywmsnative.core.data_store.db.view_model.ArticoloDTO; import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.rest.consumers.PVOrdiniAcquistoRESTConsumer; +import it.integry.integrywmsnative.core.utility.UtilityDate; public class OrdineAcquistoPvHelper { @@ -67,7 +67,7 @@ public class OrdineAcquistoPvHelper { public void createNewOrder(Griglia griglia, RunnableArgs onSuccess, RunnableArgs onError) { Ordine ordine = new Ordine(); - ordine.setDataIns(new Date()); + ordine.setDataIns(UtilityDate.getDateInstance()); ordine.setIdGriglia(griglia.getGrigliaId()); mOrdineRepository.insert(ordine, id -> { ordine.setOrdineId(id); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneActivity.java index c38d50c1..4e8f5fca 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneActivity.java @@ -1,5 +1,6 @@ package it.integry.integrywmsnative.gest.spedizione; +import android.content.Context; import android.content.Intent; import android.content.res.Resources; import android.os.Bundle; @@ -44,6 +45,7 @@ import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.utility.UtilityBigDecimal; import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.core.utility.UtilityExceptions; +import it.integry.integrywmsnative.core.utility.UtilityResources; import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.core.utility.UtilityToast; import it.integry.integrywmsnative.databinding.ActivitySpedizioneBinding; @@ -96,6 +98,21 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo private final int PICK_UL_REQUEST = 1; + public static void startActivity(Context context, List ordini, List selectedOrders, List mtbColtList) { + Intent myIntent = new Intent(context, SpedizioneActivity.class); + + String keyPickingList = DataCache.addItem(ordini); + myIntent.putExtra("keyPickingList", keyPickingList); + + String keyTestateOrdini = DataCache.addItem(selectedOrders); + myIntent.putExtra("keyTestateOrdini", keyTestateOrdini); + + String keyColliRegistrati = DataCache.addItem(mtbColtList); + myIntent.putExtra("keyColliRegistrati", keyColliRegistrati); + + context.startActivity(myIntent); + } + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -249,7 +266,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo spedizioneListModel.setBadge2(x.getSitArtOrdDTO().getCodJcom()); if (SettingsManager.iDB().isFlagForceAllToColli() || (x.getMtbAart() == null || !x.getMtbAart().isFlagQtaCnfFissaBoolean())) { - spedizioneListModel.setUntMis("col"); + spedizioneListModel.setUntMis(UtilityResources.getString(R.string.unt_mis_col)); spedizioneListModel.setQtaTot(x.getSitArtOrdDTO().getNumCnfOrd()); spedizioneListModel.setQtaEvasa(numCnfWithdrawRows.getBigDecimalValue()); } else { @@ -287,7 +304,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo cloneModel.setSubDescrizione2(String.format(getString(R.string.lu_number_data_text), mtbColtToPick.getNumCollo(), UtilityDate.formatDate(mtbColtToPick.getDataColloD(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN))); if (SettingsManager.iDB().isFlagForceAllToColli() || (x.getMtbAart() == null || !x.getMtbAart().isFlagQtaCnfFissaBoolean())) { - cloneModel.setUntMis("col"); + cloneModel.setUntMis(UtilityResources.getString(R.string.unt_mis_col)); BigDecimal numCnfOrdToSubstract = UtilityBigDecimal.getLowerBetween(mtbColrToDispatch.getNumCnf(), numCnfOrdCounter); @@ -412,7 +429,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo spedizioneListModel.setBadge2(x.getSitArtOrdDTO().getCodJcom()); if (SettingsManager.iDB().isFlagForceAllToColli() || (x.getMtbAart() == null || !x.getMtbAart().isFlagQtaCnfFissaBoolean())) { - spedizioneListModel.setUntMis("col"); + spedizioneListModel.setUntMis(UtilityResources.getString(R.string.unt_mis_col)); spedizioneListModel.setQtaTot(x.getSitArtOrdDTO().getNumCnfOrd()); spedizioneListModel.setQtaEvasa(numCnfWithdrawRows.getBigDecimalValue()); } else { @@ -450,7 +467,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo cloneModel.setSubDescrizione2(String.format(getString(R.string.lu_number_data_text), mtbColtToPick.getNumCollo(), UtilityDate.formatDate(mtbColtToPick.getDataColloD(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN))); if (SettingsManager.iDB().isFlagForceAllToColli() || (x.getMtbAart() == null || !x.getMtbAart().isFlagQtaCnfFissaBoolean())) { - cloneModel.setUntMis("col"); + cloneModel.setUntMis(UtilityResources.getString(R.string.unt_mis_col)); BigDecimal numCnfOrdToSubstract = UtilityBigDecimal.getLowerBetween(mtbColrToDispatch.getNumCnf(), numCnfOrdCounter); 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 0d6b94d3..5bbad96b 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 @@ -1155,10 +1155,6 @@ public class SpedizioneViewModel { //Se è l'unico articolo del collo (controllo se è uguale a 0 perché ancora non è stato aggiunto nella lista delle righe) if (shouldCloseLU && mCurrentMtbColt.getMtbColr().size() == 0) { shouldPrint = false; -// if(UtilityString.isNullOrEmpty(cloneMtbColt.getCodTcol())) { -// cloneMtbColt.setCodTcol(pickingObjectDTO.getSitArtOrdDTO().getCodTcol()); -// cloneMtbColt.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE); -// } } @@ -1387,7 +1383,7 @@ public class SpedizioneViewModel { private void singlePrint(MtbColt mtbColtToPrint, String printerName, Runnable onComplete, RunnableArgs onFailed) { ReportManager.getReportNameLUFromGestione(mtbColtToPrint.getGestioneEnum(), reportName -> { - PrinterRESTConsumer.printColloStatic( + this.mPrinterRESTConsumer.printCollo( printerName, mtbColtToPrint, 1, @@ -1515,15 +1511,12 @@ public class SpedizioneViewModel { public interface Listener extends ILUPrintListener, ILoadingListener, ILUBaseOperationsListener { - void onLUPesoRequired(String codTcol, BigDecimal netWeightKG, BigDecimal grossWeightKG, RunnableArgsss onComplete); void onFilterApplied(String newValue); void onFilterRemoved(); - void onMtbColrDeleteRequest(RunnableArgs onComplete); - void onError(Exception ex); void onItemDispatched(PickingObjectDTO pickingObjectDTO, @@ -1544,8 +1537,6 @@ public class SpedizioneViewModel { Date dataScad, boolean canOverflowOrderQuantity, RunnableArgss onComplete); - - void onRowSaved(); } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/core/SpedizioneListAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/core/SpedizioneListAdapter.java index e949cd0a..bf2cd22f 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/core/SpedizioneListAdapter.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/core/SpedizioneListAdapter.java @@ -29,9 +29,8 @@ import it.integry.integrywmsnative.gest.spedizione.model.PickingObjectDTO; public class SpedizioneListAdapter extends SectionedRecyclerViewAdapter { - private Context mContext; - private List mDataset = new ArrayList<>(); + private final List mDataset = new ArrayList<>(); private RunnableArgs mOnItemClicked; diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/rest/UltimeConsegneClienteRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/rest/UltimeConsegneClienteRESTConsumer.java index 3d1fbf5d..53cc77a2 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/rest/UltimeConsegneClienteRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/rest/UltimeConsegneClienteRESTConsumer.java @@ -17,7 +17,7 @@ import it.integry.integrywmsnative.core.model.DtbDocr; import it.integry.integrywmsnative.core.model.MtbAart; import it.integry.integrywmsnative.core.utility.UtilityDB; import it.integry.integrywmsnative.core.utility.UtilityQuery; -import it.integry.integrywmsnative.gest.picking_resi.dto.WithdrawableDtbDocr; +import it.integry.integrywmsnative.gest.picking_resi.rest.WithdrawableDtbDocr; import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO; public class UltimeConsegneClienteRESTConsumer { diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/UltimiArriviFornitoreFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/UltimiArriviFornitoreFragment.java index 7c608c24..c2bb867d 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/UltimiArriviFornitoreFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/UltimiArriviFornitoreFragment.java @@ -1,40 +1,23 @@ package it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore; -import android.app.Dialog; import android.content.Context; import android.os.Bundle; import androidx.appcompat.widget.AppCompatTextView; import androidx.databinding.DataBindingUtil; import androidx.fragment.app.Fragment; -import androidx.recyclerview.widget.LinearLayoutManager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import com.annimon.stream.Optional; -import com.annimon.stream.Stream; - -import java.util.ArrayList; -import java.util.List; - import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.core.interfaces.IFilterableFragment; -import it.integry.integrywmsnative.core.model.GtbAnag; -import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO; import it.integry.integrywmsnative.core.interfaces.IScrollableFragment; import it.integry.integrywmsnative.core.interfaces.ITitledFragment; -import it.integry.integrywmsnative.core.settings.SettingsManager; -import it.integry.integrywmsnative.core.utility.UtilityExceptions; -import it.integry.integrywmsnative.core.utility.UtilityProgress; import it.integry.integrywmsnative.databinding.FragmentUltimiArriviFornitoreBinding; -import it.integry.integrywmsnative.gest.picking_resi.PickingResiActivity; -import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.core.UltimiArriviFornitoreListAdapter; import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.core.UltimiArriviFornitoreViewModel; -import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.dialog.DialogUltimiArriviFornitoreFiltroAvanzato; -import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.rest.UltimiArriviFornitoreRESTConsumer; import it.integry.integrywmsnative.ui.ElevatedToolbar; /** diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/core/UltimiArriviFornitoreViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/core/UltimiArriviFornitoreViewModel.java index ad4787de..7e60b3e9 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/core/UltimiArriviFornitoreViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/core/UltimiArriviFornitoreViewModel.java @@ -19,7 +19,7 @@ import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.core.utility.UtilityProgress; import it.integry.integrywmsnative.databinding.FragmentUltimiArriviFornitoreBinding; -import it.integry.integrywmsnative.gest.picking_resi.PickingResiActivity; +import it.integry.integrywmsnative.gest.picking_resi_OLD.PickingResiActivity; import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.dialog.DialogUltimiArriviFornitoreFiltroAvanzato; import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.rest.UltimiArriviFornitoreRESTConsumer; diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/vendita/MainVenditaFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/MainVenditaFragment.java index 996b442d..91ffa13c 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/vendita/MainVenditaFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/MainVenditaFragment.java @@ -2,7 +2,6 @@ package it.integry.integrywmsnative.gest.vendita; import android.app.Dialog; import android.content.Context; -import android.content.Intent; import android.os.Bundle; import android.text.Html; import android.text.SpannableString; @@ -25,13 +24,11 @@ import java.util.List; 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.expansion.RunnableArgs; import it.integry.integrywmsnative.core.interfaces.IFilterableFragment; import it.integry.integrywmsnative.core.interfaces.IScrollableFragment; import it.integry.integrywmsnative.core.interfaces.ISelectAllFragment; import it.integry.integrywmsnative.core.interfaces.ITitledFragment; -import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; import it.integry.integrywmsnative.core.rest.CommonRESTException; import it.integry.integrywmsnative.core.rest.consumers.OrdiniRESTConsumer; @@ -234,7 +231,7 @@ public class MainVenditaFragment extends Fragment implements ITitledFragment, IS + "
" + "" + alreadyRegisteredUL + " " + getActivity().getResources().getQuantityString(R.plurals.already_registered_lu, alreadyRegisteredUL)), null, - () -> startVenditaActivity(sitArtsDTO, selectedOrders, mtbColtList) + () -> SpedizioneActivity.startActivity(getActivity(), sitArtsDTO, selectedOrders, mtbColtList) ).show(); }, ex -> UtilityExceptions.defaultException(getActivity(), ex, progress)); @@ -350,19 +347,4 @@ public class MainVenditaFragment extends Fragment implements ITitledFragment, IS onComplete.run(); } } - - private void startVenditaActivity(List ordini, List selectedOrders, List mtbColtList) { - Intent myIntent = new Intent(getActivity(), SpedizioneActivity.class); - - String keyPickingList = DataCache.addItem(ordini); - myIntent.putExtra("keyPickingList", keyPickingList); - - String keyTestateOrdini = DataCache.addItem(selectedOrders); - myIntent.putExtra("keyTestateOrdini", keyTestateOrdini); - - String keyColliRegistrati = DataCache.addItem(mtbColtList); - myIntent.putExtra("keyColliRegistrati", keyColliRegistrati); - - getActivity().startActivity(myIntent); - } } diff --git a/app/src/main/java/it/integry/integrywmsnative/ui/adapter/SimpleAutoCompleteDropdownAdapter.java b/app/src/main/java/it/integry/integrywmsnative/ui/adapter/SimpleAutoCompleteDropdownAdapter.java index 14a5d571..f2e665d4 100644 --- a/app/src/main/java/it/integry/integrywmsnative/ui/adapter/SimpleAutoCompleteDropdownAdapter.java +++ b/app/src/main/java/it/integry/integrywmsnative/ui/adapter/SimpleAutoCompleteDropdownAdapter.java @@ -93,12 +93,14 @@ public class SimpleAutoCompleteDropdownAdapter extends ArrayAdapter { protected void publishResults(CharSequence constraint, FilterResults results) { // NOTE: this function is *always* called from the UI thread. - ArrayList filtered = (ArrayList) results.values; - notifyDataSetChanged(); - clear(); - for (int i = 0, l = filtered.size(); i < l; i++) - add(filtered.get(i)); - notifyDataSetInvalidated(); + if(constraint != null && constraint.length() > 2) { + ArrayList filtered = (ArrayList) results.values; + notifyDataSetChanged(); + clear(); + for (int i = 0, l = filtered.size(); i < l; i++) + add(filtered.get(i)); + notifyDataSetInvalidated(); + } } } diff --git a/app/src/main/res/layout/activity_picking_resi.xml b/app/src/main/res/layout/activity_picking_resi.xml index 9e2c9783..a435c364 100644 --- a/app/src/main/res/layout/activity_picking_resi.xml +++ b/app/src/main/res/layout/activity_picking_resi.xml @@ -4,9 +4,11 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> + + @@ -24,8 +26,7 @@ + android:layout_height="match_parent"> - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - + - - + diff --git a/app/src/main/res/layout/ultime_consegne_main_list__item.xml b/app/src/main/res/layout/picking_resi_main_list__item.xml similarity index 90% rename from app/src/main/res/layout/ultime_consegne_main_list__item.xml rename to app/src/main/res/layout/picking_resi_main_list__item.xml index 8cbc884b..b3bc48ef 100644 --- a/app/src/main/res/layout/ultime_consegne_main_list__item.xml +++ b/app/src/main/res/layout/picking_resi_main_list__item.xml @@ -9,6 +9,7 @@ android:focusable="true"> + android:gravity="end"> + + diff --git a/app/src/main/res/layout/ultime_consegne_main_list__item_header.xml b/app/src/main/res/layout/picking_resi_main_list__item_header.xml similarity index 93% rename from app/src/main/res/layout/ultime_consegne_main_list__item_header.xml rename to app/src/main/res/layout/picking_resi_main_list__item_header.xml index efda0d5e..6eecd206 100644 --- a/app/src/main/res/layout/ultime_consegne_main_list__item_header.xml +++ b/app/src/main/res/layout/picking_resi_main_list__item_header.xml @@ -10,7 +10,7 @@ android:background="@color/mainGreen">