diff --git a/app/src/main/java/it/integry/integrywmsnative/core/di/Converters.java b/app/src/main/java/it/integry/integrywmsnative/core/di/Converters.java index ba1eb28a..dd96450d 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/di/Converters.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/di/Converters.java @@ -402,20 +402,20 @@ public class Converters { } -// @BindingAdapter("visibility") -// public static void bindView(View view, final ObservableField bindableBoolean) { -// if (view.getTag(R.id.bound_observable) != bindableBoolean) { -// view.setTag(R.id.bound_observable, bindableBoolean); -// } -// bindableBoolean.addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() { -// @Override -// public void onPropertyChanged(Observable sender, int propertyId) { -// view.setVisibility(bindableBoolean.get() ? View.VISIBLE : View.GONE); -// } -// }); -// -// view.setVisibility(bindableBoolean.get() ? View.VISIBLE : View.GONE); -// } + @BindingAdapter("visibility") + public static void bindView(View view, final ObservableField bindableBoolean) { + if (view.getTag(R.id.bound_observable) != bindableBoolean) { + view.setTag(R.id.bound_observable, bindableBoolean); + } + bindableBoolean.addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() { + @Override + public void onPropertyChanged(Observable sender, int propertyId) { + view.setVisibility(bindableBoolean.get() ? View.VISIBLE : View.GONE); + } + }); + + view.setVisibility(bindableBoolean.get() ? View.VISIBLE : View.GONE); + } @BindingAdapter("android:layout_weight") diff --git a/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColr.java b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColr.java index 50940f48..8d71598a 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColr.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColr.java @@ -1,18 +1,10 @@ package it.integry.integrywmsnative.core.model; -import android.os.Parcel; -import android.os.Parcelable; - import java.math.BigDecimal; -import java.text.ParseException; -import java.text.SimpleDateFormat; import java.util.Date; import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; import it.integry.integrywmsnative.core.utility.UtilityDate; -import it.integry.integrywmsnative.core.utility.UtilityExceptions; -import it.integry.integrywmsnative.core.utility.UtilityLogger; -import it.integry.integrywmsnative.core.utility.UtilityString; public class MtbColr extends EntityBase { @@ -59,7 +51,7 @@ public class MtbColr extends EntityBase { private MtbAart mtbAart; - private MtbPartitaMag rifPartitaMag; + private MtbPartitaMag mtbPartitaMag; public MtbColr() { type = "mtb_colr"; @@ -419,12 +411,12 @@ public class MtbColr extends EntityBase { } - public MtbPartitaMag getRifPartitaMag() { - return rifPartitaMag; + public MtbPartitaMag getMtbPartitaMag() { + return mtbPartitaMag; } - public MtbColr setRifPartitaMag(MtbPartitaMag rifPartitaMag) { - this.rifPartitaMag = rifPartitaMag; + public MtbColr setMtbPartitaMag(MtbPartitaMag mtbPartitaMag) { + this.mtbPartitaMag = mtbPartitaMag; return this; } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliMagazzinoRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliMagazzinoRESTConsumer.java index c346291f..c31c1bb6 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliMagazzinoRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliMagazzinoRESTConsumer.java @@ -1,8 +1,5 @@ package it.integry.integrywmsnative.core.rest.consumers; -import android.app.Dialog; -import android.content.Context; - import androidx.databinding.ObservableArrayList; import com.annimon.stream.Stream; @@ -11,7 +8,6 @@ import com.google.gson.JsonObject; import com.google.gson.reflect.TypeToken; import org.jetbrains.annotations.NotNull; -import org.json.JSONObject; import java.lang.reflect.Type; import java.math.BigDecimal; @@ -39,7 +35,6 @@ import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.utility.UtilityBarcode; import it.integry.integrywmsnative.core.utility.UtilityDate; -import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.core.utility.UtilityQuery; import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavorazioneDTO; @@ -55,7 +50,7 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer { for (int i = 0; i < mtbColtToSave.getMtbColr().size(); i++) { mtbColtToSave.getMtbColr().get(i) .setMtbAart(null) - .setRifPartitaMag(null); + .setMtbPartitaMag(null); } EntityRESTConsumer.processEntity(mtbColtToSave, callback, MtbColt.class); @@ -76,7 +71,7 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer { mtbColtToSaveClone.getMtbColr().add( ((MtbColr) mtbColtToSave.getMtbColr().get(i).clone()) .setMtbAart(null) - .setRifPartitaMag(null)); + .setMtbPartitaMag(null)); } EntityRESTConsumer.processEntity(mtbColtToSaveClone, new ISimpleOperationCallback() { @@ -102,7 +97,7 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer { for (int i = 0; i < mtbColt.getMtbColr().size(); i++) { mtbColt.getMtbColr().get(i) .setMtbAart(null) - .setRifPartitaMag(null); + .setMtbPartitaMag(null); } } @@ -673,7 +668,7 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer { public static void creaRettificaCollo(MtbColr sourceMtbColrOriginal, BigDecimal newNumCnf, BigDecimal newQtaTot, Runnable onComplete, RunnableArgs onFailed) { MtbColr sourceMtbColr = (MtbColr) sourceMtbColrOriginal.clone(); - sourceMtbColr.setRifPartitaMag(null); + sourceMtbColr.setMtbPartitaMag(null); sourceMtbColr.setMtbAart(null); RettificaULDTO rettificaULDTO = new RettificaULDTO() diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoFragment.java index a7c7e308..1433b571 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoFragment.java @@ -6,6 +6,8 @@ import android.content.Context; import android.os.Bundle; import androidx.appcompat.widget.AppCompatTextView; +import androidx.core.content.ContextCompat; +import androidx.databinding.ObservableList; import androidx.fragment.app.Fragment; import android.view.LayoutInflater; @@ -13,11 +15,14 @@ import android.view.View; import android.view.ViewGroup; import androidx.databinding.DataBindingUtil; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; import com.tfb.fbtoast.FBToast; import java.math.BigDecimal; import java.util.Date; +import java.util.List; import javax.inject.Inject; @@ -27,12 +32,14 @@ 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.di.BindableBoolean; +import it.integry.integrywmsnative.core.expansion.OnListGeneralChangedCallback; import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgss; import it.integry.integrywmsnative.core.interfaces.IPoppableActivity; import it.integry.integrywmsnative.core.interfaces.IScrollableFragment; import it.integry.integrywmsnative.core.interfaces.ITitledFragment; 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.settings.SettingsManager; @@ -40,6 +47,7 @@ import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.core.utility.UtilityProgress; import it.integry.integrywmsnative.core.utility.UtilityToast; import it.integry.integrywmsnative.databinding.FragmentPickingLiberoBinding; +import it.integry.integrywmsnative.gest.picking_libero.core.PickingLiberoListAdapter; import it.integry.integrywmsnative.gest.picking_libero.viewmodel.PickingLiberoViewModel; import it.integry.integrywmsnative.gest.spedizione_new.exceptions.InvalidPesoKGException; import it.integry.integrywmsnative.gest.spedizione_new.model.PickedQuantityDTO; @@ -47,6 +55,7 @@ import it.integry.integrywmsnative.gest.spedizione_new.model.PickingObjectDTO; import it.integry.integrywmsnative.ui.ElevatedToolbar; import it.integry.integrywmsnative.view.dialogs.DialogConsts; import it.integry.integrywmsnative.view.dialogs.ask_cliente.DialogAskCliente; +import it.integry.integrywmsnative.view.dialogs.choose_arts_from_lista_arts.DialogChooseArtsFromListaArts; import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2; import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO; @@ -69,6 +78,8 @@ public class PickingLiberoFragment extends Fragment implements ITitledFragment, private ElevatedToolbar mToolbar; private AppCompatTextView mToolbarTitleText; + private PickingLiberoListAdapter mAdapter; + private int barcodeScannerIstanceID = -1; private Dialog mCurrentProgress; @@ -118,15 +129,11 @@ public class PickingLiberoFragment extends Fragment implements ITitledFragment, mBindings.setLifecycleOwner(this); mBindings.setView(this); -// barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() -// .setOnScanSuccessfull(mViewModel.onScanSuccessfull) -// .setOnScanFailed(ex -> UtilityExceptions.defaultException(getActivity(), ex, false))); - - mToolbar.setRecyclerView(mBindings.pickingLiberoMainList); this.initVars(); this.initBarcodeReader(); + this.initRecyclerView(); boolean flagAskCliente = SettingsManager.iDB().isFlagAskClienteInPickingLibero(); mViewModel.init(flagAskCliente); @@ -137,9 +144,10 @@ public class PickingLiberoFragment extends Fragment implements ITitledFragment, private void initVars() { this.thereIsAnOpenedUL.addOnPropertyChangedCallback(() -> { this.thereIsntAnOpenedUL.set(!thereIsntAnOpenedUL.get()); + this.thereIsAnOpenULWithoutRows.set(!thereIsAnyRowInUL.get() && thereIsAnOpenedUL.get()); }); this.thereIsAnyRowInUL.addOnPropertyChangedCallback(() -> { - this.thereIsAnOpenULWithoutRows.set(!thereIsAnyRowInUL.get()); + this.thereIsAnOpenULWithoutRows.set(!thereIsAnyRowInUL.get() && thereIsAnOpenedUL.get()); }); } @@ -149,6 +157,29 @@ public class PickingLiberoFragment extends Fragment implements ITitledFragment, .setOnScanFailed(ex -> UtilityExceptions.defaultException(getActivity(), ex, false))); } + + private void initRecyclerView() { + mBindings.pickingLiberoMainList.setNestedScrollingEnabled(false); + + mBindings.pickingLiberoMainList.setHasFixedSize(true); + + mBindings.pickingLiberoMainList.setLayoutManager(new LinearLayoutManager(getActivity())); + + DividerItemDecoration itemDecorator = new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL); + itemDecorator.setDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.divider)); + mBindings.pickingLiberoMainList.addItemDecoration(itemDecorator); + } + + private void initAdapter() { + mAdapter = new PickingLiberoListAdapter(getActivity(), mViewModel.getCurrentMtbColt().getMtbColr()); + mBindings.pickingLiberoMainList.setAdapter(mAdapter); + } + + private void destroyAdapter() { + mAdapter = null; + mBindings.pickingLiberoMainList.setAdapter(null); + } + private RunnableArgs onScanSuccessful = data -> { BarcodeManager.disable(); @@ -169,6 +200,7 @@ public class PickingLiberoFragment extends Fragment implements ITitledFragment, } public void closeLU() { + destroyAdapter(); this.mViewModel.closeLU(); } @@ -217,14 +249,25 @@ public class PickingLiberoFragment extends Fragment implements ITitledFragment, @Override public void onLUOpened(MtbColt mtbColt) { + initAdapter(); + thereIsAnOpenedUL.set(true); thereIsAnyRowInUL.set(mtbColt.getMtbColr().size() > 0, true); + mtbColt.getMtbColr().addOnListChangedCallback(new OnListGeneralChangedCallback() { + @Override + public void onChanged(ObservableList sender) { + thereIsAnyRowInUL.set(mtbColt.getMtbColr().size() > 0, true); + } + }); + FBToast.successToast(getActivity(), getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT); } @Override public void onLUClosed() { + destroyAdapter(); + thereIsAnyRowInUL.set(false); thereIsAnOpenedUL.set(false); } @@ -253,6 +296,15 @@ public class PickingLiberoFragment extends Fragment implements ITitledFragment, }).show(); } + @Override + public void onArtSelectionRequest(List mtbColrsToPick, RunnableArgs> onComplete, Runnable onAbort) { + DialogChooseArtsFromListaArts.make(getActivity(), mtbColrsToPick, onComplete, () -> { + onAbort.run(); + BarcodeManager.enable(); + }) + .show(); + } + @Override public void onItemDispatched( PickingObjectDTO pickingObjectDTO, @@ -266,6 +318,8 @@ public class PickingLiberoFragment extends Fragment implements ITitledFragment, String partitaMag, Date dataScad, boolean canOverflowOrderQuantity, + boolean canPartitaMagBeChanged, + boolean canLUBeClosed, RunnableArgss onComplete) { DialogInputQuantityV2DTO dialogInputQuantityV2DTO = new DialogInputQuantityV2DTO() @@ -278,7 +332,9 @@ public class PickingLiberoFragment extends Fragment implements ITitledFragment, .setQtaCnfToBeTaken(qtaCnfToBeTaken) .setPartitaMag(partitaMag) .setDataScad(dataScad) - .setCanOverflowOrderQuantity(canOverflowOrderQuantity); + .setCanOverflowOrderQuantity(canOverflowOrderQuantity) + .setCanPartitaMagBeChanged(canPartitaMagBeChanged) + .setCanLUBeClosed(canLUBeClosed); DialogInputQuantityV2 .newInstance(dialogInputQuantityV2DTO, (resultDTO, shouldCloseLU) -> { diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoViewModelNEW.java b/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoViewModelNEW.java index 67788b7b..22b6d0f1 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoViewModelNEW.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoViewModelNEW.java @@ -4,8 +4,13 @@ import android.app.Dialog; import androidx.databinding.ObservableArrayList; +import com.annimon.stream.Stream; + import java.math.BigDecimal; +import java.util.ArrayList; import java.util.Date; +import java.util.Iterator; +import java.util.List; import javax.inject.Inject; @@ -55,10 +60,10 @@ public class PickingLiberoViewModelNEW { @Inject - public PickingLiberoViewModelNEW( ArticoloRESTConsumer articoloRESTConsumer, - ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer, - PrinterRESTConsumer printerRESTConsumer, - BarcodeRESTConsumer barcodeRESTConsumer) { + public PickingLiberoViewModelNEW(ArticoloRESTConsumer articoloRESTConsumer, + ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer, + PrinterRESTConsumer printerRESTConsumer, + BarcodeRESTConsumer barcodeRESTConsumer) { this.mArticoloRESTConsumer = articoloRESTConsumer; this.mColliMagazzinoRESTConsumer = colliMagazzinoRESTConsumer; this.mPrinterRESTConsumer = printerRESTConsumer; @@ -71,8 +76,8 @@ public class PickingLiberoViewModelNEW { } - public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO, Runnable onComplete){ - if(this.mCurrentMtbColt == null) { + public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) { + if (this.mCurrentMtbColt == null) { this.createNewLU(null, null, () -> { executeEtichettaBehaviour(barcodeScanDTO, onComplete); }); @@ -82,15 +87,15 @@ public class PickingLiberoViewModelNEW { } private void executeEtichettaBehaviour(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) { - if(UtilityBarcode.isEtichettaAnonima(barcodeScanDTO)){ + if (UtilityBarcode.isEtichettaAnonima(barcodeScanDTO)) { //Cerco gli articoli presenti nell'ul dell'etichetta anonima this.executeEtichettaLU(barcodeScanDTO.getStringValue(), onComplete); - } else if(UtilityBarcode.isEtichetta128(barcodeScanDTO)) { + } else if (UtilityBarcode.isEtichetta128(barcodeScanDTO)) { //Cerco tramite etichetta ean 128 (che può indicarmi una UL) this.executeEtichettaEan128(barcodeScanDTO, onComplete); - } else if(UtilityBarcode.isEanPeso(barcodeScanDTO)) { + } else if (UtilityBarcode.isEanPeso(barcodeScanDTO)) { //Cerco tramite etichetta ean 128 (che può indicarmi un articolo o una UL) this.executeEtichettaEanPeso(barcodeScanDTO, onComplete); @@ -112,9 +117,9 @@ public class PickingLiberoViewModelNEW { private void executeEtichettaLU(String sscc, Runnable onComplete) { mColliMagazzinoRESTConsumer.getBySSCC(sscc, true, false, mtbColtScanned -> { - if(mtbColtScanned == null) { + if (mtbColtScanned == null) { this.sendError(new NoLUFoundException()); - } else if((mtbColtScanned.getGestioneEnum() == GestioneEnum.ACQUISTO || mtbColtScanned.getGestioneEnum() == GestioneEnum.LAVORAZIONE) && mtbColtScanned.getSegno() > 0) { + } else if ((mtbColtScanned.getGestioneEnum() == GestioneEnum.ACQUISTO || mtbColtScanned.getGestioneEnum() == GestioneEnum.LAVORAZIONE) && mtbColtScanned.getSegno() > 0) { pickMerceULtoUL(mtbColtScanned, onComplete); } else { this.sendError(new NoLUFoundException()); @@ -128,16 +133,17 @@ public class PickingLiberoViewModelNEW { String barcodeProd = null; - if(!UtilityString.isNullOrEmpty(ean128Model.Sscc)) barcodeProd = ean128Model.Sscc; - if(!UtilityString.isNullOrEmpty(ean128Model.Gtin)) barcodeProd = ean128Model.Gtin; - if(!UtilityString.isNullOrEmpty(ean128Model.Content)) barcodeProd = ean128Model.Content; + if (!UtilityString.isNullOrEmpty(ean128Model.Sscc)) barcodeProd = ean128Model.Sscc; + if (!UtilityString.isNullOrEmpty(ean128Model.Gtin)) barcodeProd = ean128Model.Gtin; + if (!UtilityString.isNullOrEmpty(ean128Model.Content)) + barcodeProd = ean128Model.Content; - if(!UtilityString.isNullOrEmpty(barcodeProd)) { + if (!UtilityString.isNullOrEmpty(barcodeProd)) { - if(!UtilityString.isNullOrEmpty(ean128Model.Sscc)){ + if (!UtilityString.isNullOrEmpty(ean128Model.Sscc)) { this.executeEtichettaLU(ean128Model.Sscc, onComplete); - } else if(!UtilityString.isNullOrEmpty(barcodeProd)) { + } else if (!UtilityString.isNullOrEmpty(barcodeProd)) { if (barcodeProd.startsWith("0") || barcodeProd.startsWith("9")) { barcodeProd = barcodeProd.substring(1); } @@ -155,15 +161,16 @@ public class PickingLiberoViewModelNEW { } private void loadArticolo(String barcodeProd, Ean128Model ean128Model, Runnable onComplete) { - if(barcodeProd.length() == 14) { + if (barcodeProd.length() == 14) { // barcodeProd = UtilityBarcode.convertITF14toNeutral(barcodeProd); barcodeProd = UtilityBarcode.convertITF14toEAN13(barcodeProd); } mArticoloRESTConsumer.getByBarcodeProd(barcodeProd, mtbAartList -> { - if(mtbAartList != null && mtbAartList.size() > 0) { + if (mtbAartList != null && mtbAartList.size() > 0) { this.dispatchArt(mtbAartList.get(0), ean128Model); + onComplete.run(); } else { this.sendError(new NoResultFromBarcodeException()); @@ -174,7 +181,7 @@ public class PickingLiberoViewModelNEW { public void createNewLU(Integer customNumCollo, String customSerCollo, Runnable onComplete) { - if(this.mFlagAskCliente) { + if (this.mFlagAskCliente) { this.sendLUClienteRequired(vtbDest -> { createNewLU_PostClienteAsk(customNumCollo, customSerCollo, vtbDest, onComplete); }, onComplete); @@ -186,19 +193,19 @@ public class PickingLiberoViewModelNEW { private void createNewLU_PostClienteAsk(Integer customNumCollo, String customSerCollo, VtbDest vtbDest, Runnable onComplete) { MtbColt mtbColt = new MtbColt(); mtbColt.initDefaultFields(); - mtbColt .setGestione(GestioneEnum.VENDITA) + mtbColt.setGestione(GestioneEnum.VENDITA) .setSegno(-1) .setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE); - if(customNumCollo != null) { + if (customNumCollo != null) { mtbColt.setNumCollo(customNumCollo); } - if(!UtilityString.isNullOrEmpty(customSerCollo)) { + if (!UtilityString.isNullOrEmpty(customSerCollo)) { mtbColt.setSerCollo(customSerCollo); } - if(vtbDest != null) { + if (vtbDest != null) { mtbColt.setCodAnag(vtbDest.getCodAnag()); mtbColt.setCodVdes(vtbDest.getCodVdes()); } @@ -216,7 +223,7 @@ public class PickingLiberoViewModelNEW { }, this::sendError); } - private void dispatchArt(MtbAart mtbAart, Ean128Model ean128Model){ + private void dispatchArt(MtbAart mtbAart, Ean128Model ean128Model) { PickingObjectDTO pickingObjectDTO = new PickingObjectDTO() .setMtbAart(mtbAart) .setTempPickData(PickDataDTO.fromEan128(ean128Model)); @@ -264,7 +271,7 @@ public class PickingLiberoViewModelNEW { initialQtaTot = UtilityBigDecimal.multiply(initialNumCnf, initialQtaCnf); } - if(numCnfDaPrelevare == null && qtaColDaPrelevare == null && initialNumCnf == null && initialQtaTot == null) { + if (numCnfDaPrelevare == null && qtaColDaPrelevare == null && initialNumCnf == null && initialQtaTot == null) { initialNumCnf = BigDecimal.ONE; initialQtaCnf = mtbAart.getQtaCnf(); initialQtaTot = UtilityBigDecimal.multiply(initialNumCnf, initialQtaCnf); @@ -283,6 +290,8 @@ public class PickingLiberoViewModelNEW { partitaMag, dataScad, false, + true, + true, (pickedQuantityDTO, shouldCloseLU) -> { this.saveNewRow(pickingObjectDTO, pickedQuantityDTO.getNumCnf(), @@ -295,14 +304,134 @@ public class PickingLiberoViewModelNEW { } - - - - private void pickMerceULtoUL(MtbColt sourceMtbColt, Runnable onComplete) { + List mtbColrsToPick = Stream.of(sourceMtbColt.getMtbColr()) + .filter(x -> UtilityBigDecimal.greaterThan(x.getQtaCol(), BigDecimal.ZERO)) + .toList(); + + this.sendArtSelectionRequest(mtbColrsToPick, pickedAarts -> { + List destNewMtbColr = new ArrayList<>(); + + if (pickedAarts.size() > 0) { + askQuantities(pickedAarts.iterator(), destNewMtbColr, () -> { + if (destNewMtbColr.size() > 0) { + MtbColt clonedTestata = (MtbColt) this.mCurrentMtbColt.clone(); + clonedTestata.setOperation(CommonModelConsts.OPERATION.UPDATE); + + ObservableArrayList mtbColrObservableField = new ObservableArrayList<>(); + + for (int i = 0; i < destNewMtbColr.size(); i++) { + MtbColr cloneMtbColr = (MtbColr) destNewMtbColr.get(i).clone(); + + cloneMtbColr.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE); + + cloneMtbColr + .setGestioneRif(cloneMtbColr.getGestione()) + .setGestione((String) null) + + .setSerColloRif(cloneMtbColr.getSerCollo()) + .setSerCollo(null) + + .setNumColloRif(cloneMtbColr.getNumCollo()) + .setNumCollo(null) + + .setDataColloRif(cloneMtbColr.getDataColloS()) + .setDataCollo(null) + + .setPesoLordoKg(null) + .setPesoNettoKg(null); + + mtbColrObservableField.add(cloneMtbColr); + } + + clonedTestata.setMtbColr(mtbColrObservableField); + + this.sendOnLoadingStarted(); + + mColliMagazzinoRESTConsumer.saveCollo(clonedTestata, value -> { + for (int i = 0; i < mtbColrObservableField.size(); i++) { + + mtbColrObservableField.get(i) + .setDataCollo(value.getDataColloS()) + .setNumCollo(value.getNumCollo()) + .setGestione(value.getGestione()) + .setSerCollo(value.getSerCollo()); + + mCurrentMtbColt.getMtbColr().add(mtbColrObservableField.get(i)); + } + + this.sendOnRowSaved(); + this.sendOnLoadingEnded(); + + onComplete.run(); + }, this::sendError); + } + }, onComplete); + } else { + onComplete.run(); + } + }, this::sendOnLoadingEnded); } + private void askQuantities(Iterator sourceMtbColrs, List destMtbColr, Runnable onComplete, Runnable onAbort) { + if (sourceMtbColrs.hasNext()) { + askSingleQuantity(sourceMtbColrs.next(), mtbColr -> { + destMtbColr.add(mtbColr); + askQuantities(sourceMtbColrs, destMtbColr, onComplete, onAbort); + }, onAbort); + } else { + onComplete.run(); + } + } + + private void askSingleQuantity(MtbColr mtbColr, RunnableArgs onComplete, Runnable onAbort) { + + MtbColt sourceMtbColt = new MtbColt() + .setNumCollo(mtbColr.getNumCollo()) + .setGestione(mtbColr.getGestione()) + .setDataCollo(mtbColr.getDataColloD()) + .setSerCollo(mtbColr.getSerCollo()) + .setMtbColr(new ObservableArrayList<>()); + + sourceMtbColt + .getMtbColr() + .add(mtbColr); + + PickingObjectDTO pickingObjectDTO = new PickingObjectDTO() + .setMtbAart(mtbColr.getMtbAart()) + .setTempPickData( + new PickDataDTO() + .setSourceMtbColt(sourceMtbColt)); + + + this.sendOnItemDispatched( + pickingObjectDTO, + pickingObjectDTO.getMtbAart(), + mtbColr.getNumCnf(), + mtbColr.getQtaCnf(), + mtbColr.getQtaCol(), + null, + null, + null, + mtbColr.getPartitaMag(), + mtbColr.getDataScadPartitaD(), + false, + false, + false, + (pickedQuantityDTO, shouldCloseLU) -> { + + mtbColr + .setPartitaMag(pickedQuantityDTO.getPartitaMag()) + .setDataScadPartita(pickedQuantityDTO.getDataScad()) + .setQtaCol(pickedQuantityDTO.getQtaTot()) + .setQtaCnf(pickedQuantityDTO.getQtaCnf()) + .setNumCnf(pickedQuantityDTO.getNumCnf()) + .setDatetimeRow(UtilityDate.getDateInstance()); + + onComplete.run(mtbColr); + }); + } public void saveNewRow(PickingObjectDTO pickingObjectDTO, BigDecimal numCnf, BigDecimal qtaCnf, BigDecimal qtaTot, String partitaMag, Date dataScad, boolean shouldCloseLU) { @@ -326,7 +455,7 @@ public class PickingLiberoViewModelNEW { cloneMtbColt.setMtbColr(new ObservableArrayList()); cloneMtbColt.getMtbColr().add((MtbColr) mtbColr.clone()); - if(UtilityBigDecimal.equalsTo(numCnf, BigDecimal.ZERO) && UtilityBigDecimal.equalsTo(qtaTot, BigDecimal.ZERO)) { + if (UtilityBigDecimal.equalsTo(numCnf, BigDecimal.ZERO) && UtilityBigDecimal.equalsTo(qtaTot, BigDecimal.ZERO)) { this.sendOnLoadingEnded(); return; } @@ -352,10 +481,36 @@ public class PickingLiberoViewModelNEW { public void closeLU() { + if (mCurrentMtbColt == null) return; + this.sendOnLoadingStarted(); + + mColliMagazzinoRESTConsumer.canLUBeDeleted(mCurrentMtbColt, canBeDeleted -> { + if (canBeDeleted) { + deleteLU(() -> { + this.sendLUClosed(); + this.sendOnLoadingEnded(); + + this.mCurrentMtbColt = null; + }); + } else { + mColliMagazzinoRESTConsumer.updateDataFine(mCurrentMtbColt, () -> { + this.sendLUClosed(); + this.sendOnLoadingEnded(); + + this.mCurrentMtbColt = null; + }, this::sendError); + } + }, this::sendError); } + private void deleteLU(Runnable onComplete) { + mColliMagazzinoRESTConsumer.deleteCollo(mCurrentMtbColt, () -> { + this.mCurrentMtbColt = null; + if (onComplete != null) onComplete.run(); + }, this::sendError); + } private void sendOnLoadingStarted() { @@ -367,15 +522,23 @@ public class PickingLiberoViewModelNEW { } private void sendError(Exception ex) { - if(this.mListener != null) mListener.onError(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 sendLUClienteRequired(RunnableArgs onComplete, Runnable onAbort) { - if(this.mListener != null) mListener.onLUClienteRequired(onComplete, onAbort); + if (this.mListener != null) mListener.onLUClienteRequired(onComplete, onAbort); + } + + private void sendArtSelectionRequest(List mtbColrsToPick, RunnableArgs> onComplete, Runnable onAbort) { + if (this.mListener != null) mListener.onArtSelectionRequest(mtbColrsToPick, onComplete, onAbort); } private void sendOnItemDispatched(PickingObjectDTO pickingObjectDTO, @@ -389,6 +552,8 @@ public class PickingLiberoViewModelNEW { String partitaMag, Date dataScad, boolean canOverflowOrderQuantity, + boolean canPartitaMagBeChanged, + boolean canLUBeClosed, RunnableArgss onComplete) { if (this.mListener != null) mListener.onItemDispatched(pickingObjectDTO, mtbAart, @@ -401,6 +566,8 @@ public class PickingLiberoViewModelNEW { partitaMag, dataScad, canOverflowOrderQuantity, + canPartitaMagBeChanged, + canLUBeClosed, onComplete); } @@ -426,6 +593,8 @@ public class PickingLiberoViewModelNEW { void onLUClienteRequired(RunnableArgs onComplete, Runnable onAbort); + void onArtSelectionRequest(List mtbColrsToPick, RunnableArgs> onComplete, Runnable onAbort); + /*void onLUPrintRequest(RunnableArgs onComplete); void onLUPrintError(Exception ex, Runnable onComplete); @@ -447,6 +616,8 @@ public class PickingLiberoViewModelNEW { String partitaMag, Date dataScad, boolean canOverflowOrderQuantity, + boolean canPartitaMagBeChanged, + boolean canLUBeClosed, RunnableArgss onComplete); void onRowSaved(); @@ -454,4 +625,9 @@ public class PickingLiberoViewModelNEW { } + + public MtbColt getCurrentMtbColt() { + return mCurrentMtbColt; + } + } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/core/PickingLiberoListAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/core/PickingLiberoListAdapter.java index a7e89664..e3c1b699 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/core/PickingLiberoListAdapter.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/core/PickingLiberoListAdapter.java @@ -8,7 +8,11 @@ import androidx.databinding.DataBindingUtil; import androidx.databinding.ObservableArrayList; import androidx.databinding.ObservableList; import androidx.recyclerview.widget.RecyclerView; + +import java.util.ArrayList; + import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.expansion.OnListGeneralChangedCallback; import it.integry.integrywmsnative.core.interfaces.IRecyclerItemClicked; import it.integry.integrywmsnative.core.model.MtbColr; import it.integry.integrywmsnative.core.settings.SettingsManager; @@ -16,16 +20,16 @@ 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.ListaPickingLiberoListModelBinding; +import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentListAdapter; public class PickingLiberoListAdapter extends RecyclerView.Adapter{ - protected Context mContext; - protected ObservableArrayList mDataset; - - private IRecyclerItemClicked mOnItemClickListener; + private Context mContext; + private ArrayList mDataset; + private OnItemClickListener mOnItemClickListener; public class ViewHolder extends RecyclerView.ViewHolder { - private ListaPickingLiberoListModelBinding mViewDataBinding; + protected ListaPickingLiberoListModelBinding mViewDataBinding; public ViewHolder(ListaPickingLiberoListModelBinding v) { @@ -55,12 +59,16 @@ public class PickingLiberoListAdapter extends RecyclerView.Adapter myDataset, IRecyclerItemClicked onItemClickListener) { + public PickingLiberoListAdapter(Context context, ObservableArrayList myDataset) { mContext = context; mDataset = myDataset; - mOnItemClickListener = onItemClickListener; - myDataset.addOnListChangedCallback(onListChangedCallback); + myDataset.addOnListChangedCallback(new OnListGeneralChangedCallback() { + @Override + public void onChanged(ObservableList sender) { + notifyDataSetChanged(); + } + }); } @Override @@ -78,9 +86,11 @@ public class PickingLiberoListAdapter extends RecyclerView.Adapter { if(mOnItemClickListener != null) { - mOnItemClickListener.onItemClick(item, position); + mOnItemClickListener.onItemClick(holder.mViewDataBinding.getMtbColr()); } }); + + holder.mViewDataBinding.executePendingBindings(); } @Override @@ -94,33 +104,13 @@ public class PickingLiberoListAdapter extends RecyclerView.Adapter>(){ - - @Override - public void onChanged(ObservableList sender) { - notifyDataSetChanged(); - } - - @Override - public void onItemRangeChanged(ObservableList sender, int positionStart, int itemCount) { - notifyDataSetChanged(); - } - - @Override - public void onItemRangeInserted(ObservableList sender, int positionStart, int itemCount) { - notifyDataSetChanged(); - } - - @Override - public void onItemRangeMoved(ObservableList sender, int fromPosition, int toPosition, int itemCount) { - notifyDataSetChanged(); - } - - @Override - public void onItemRangeRemoved(ObservableList sender, int positionStart, int itemCount) { - notifyDataSetChanged(); - } - }; + interface OnItemClickListener { + void onItemClick(MtbColr item); + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/viewmodel/PickingLiberoViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/viewmodel/PickingLiberoViewModel.java index f257eda2..88f68c3d 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/viewmodel/PickingLiberoViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/viewmodel/PickingLiberoViewModel.java @@ -180,7 +180,7 @@ public class PickingLiberoViewModel implements IRecyclerItemClicked { } private void initAdapter() { - mAdapter = new PickingLiberoListAdapter(mContext, mtbColt.get().getMtbColr(), this); + mAdapter = new PickingLiberoListAdapter(mContext, mtbColt.get().getMtbColr()); mBinding.pickingLiberoMainList.setAdapter(mAdapter); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_versamento_materiale/viewmodel/ProdVersamentoMaterialViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_versamento_materiale/viewmodel/ProdVersamentoMaterialViewModel.java index 59d9e214..70a13b3e 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_versamento_materiale/viewmodel/ProdVersamentoMaterialViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_versamento_materiale/viewmodel/ProdVersamentoMaterialViewModel.java @@ -22,7 +22,6 @@ import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; import it.integry.integrywmsnative.core.exception.DateNotRecognizedException; import it.integry.integrywmsnative.core.exception.TimeNotRecognizedException; -import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.interfaces.IPoppableActivity; import it.integry.integrywmsnative.core.model.MtbAart; import it.integry.integrywmsnative.core.model.MtbColr; @@ -76,7 +75,7 @@ public class ProdVersamentoMaterialViewModel { mMtbColr = mtbColr; mBinding.descrArt.setText(mtbColr.getDescrizione()); mBinding.codArt.setText(mtbColr.getCodMart()); - mBinding.batch.setText(mtbColr.getPartitaMag() + ((mtbColr.getRifPartitaMag() != null) ? " - "+ mtbColr.getRifPartitaMag().getDescrizione() : "")); + mBinding.batch.setText(mtbColr.getPartitaMag() + ((mtbColr.getMtbPartitaMag() != null) ? " - "+ mtbColr.getMtbPartitaMag().getDescrizione() : "")); if (!SettingsManager.iDB().isFlagForceAllToColli() && (mtbColr.getMtbAart() == null || mtbColr.getMtbAart().isFlagQtaCnfFissaBoolean())) { String text = UtilityNumber.decimalToString(mtbColr.getQtaCol()); diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_arts_from_lista_arts/DialogChooseArtsFromListaArts.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_arts_from_lista_arts/DialogChooseArtsFromListaArts.java index a1ab2d9b..de1e8a77 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_arts_from_lista_arts/DialogChooseArtsFromListaArts.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_arts_from_lista_arts/DialogChooseArtsFromListaArts.java @@ -76,20 +76,6 @@ public class DialogChooseArtsFromListaArts { binding.setFilterStatus(filterStatus); binding.emptyView.setVisibility(listaMtbColr != null && listaMtbColr.size() > 0 ? View.GONE : View.VISIBLE); -// AlertDialog.Builder builder = new AlertDialog.Builder(context); -// builder.setPositiveButton(context.getResources().getText(R.string.confirm), (dialog, which) -> { -// mDialog.dismiss(); -// onPositiveClick(); -// }); -// builder.setNegativeButton(context.getResources().getText(R.string.abort), (dialog, which) -> { -// mDialog.dismiss(); -// onNegativeClick();Z -// }); -// -// builder.setView(binding.getRoot()); -// -// mDialog = builder.create(); - mDialog = new Dialog(context); mDialog.setContentView(binding.getRoot()); diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2.java index 6fd66002..aa1f8e4b 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2.java @@ -51,6 +51,9 @@ public class DialogInputQuantityV2 extends DialogFragment implements DialogInput public ObservableField enabledQtaCnf = new ObservableField<>(true); public ObservableField enabledQtaTot = new ObservableField<>(true); + public ObservableField enabledChangePartitaMag = new ObservableField<>(true); + public ObservableField enabledLUCloseButton = new ObservableField<>(true); + public Context context; private DialogInputQuantityV2Binding mBindings; @@ -260,6 +263,10 @@ public class DialogInputQuantityV2 extends DialogFragment implements DialogInput mViewModel.blockedQtaTot.set(!mViewModel.blockedQtaTot.get()); } })); + + + this.enabledChangePartitaMag.set(this.mDialogInputQuantityV2DTO.isCanPartitaMagBeChanged()); + this.enabledLUCloseButton.set(this.mDialogInputQuantityV2DTO.isCanLUBeClosed()); } diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2DTO.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2DTO.java index 1c88094f..dff95e00 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2DTO.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2DTO.java @@ -25,6 +25,9 @@ public class DialogInputQuantityV2DTO { private BigDecimal totalNumCnfAvailable; private BigDecimal qtaCnfAvailable; + private boolean canPartitaMagBeChanged; + private boolean canLUBeClosed; + private String partitaMag; private Date dataScad; @@ -147,6 +150,24 @@ public class DialogInputQuantityV2DTO { return this; } + public boolean isCanPartitaMagBeChanged() { + return canPartitaMagBeChanged; + } + + public DialogInputQuantityV2DTO setCanPartitaMagBeChanged(boolean canPartitaMagBeChanged) { + this.canPartitaMagBeChanged = canPartitaMagBeChanged; + return this; + } + + public boolean isCanLUBeClosed() { + return canLUBeClosed; + } + + public DialogInputQuantityV2DTO setCanLUBeClosed(boolean canLUBeClosed) { + this.canLUBeClosed = canLUBeClosed; + return this; + } + public String getPartitaMag() { return partitaMag; } diff --git a/app/src/main/res/layout/dialog_input_quantity_v2.xml b/app/src/main/res/layout/dialog_input_quantity_v2.xml index 4a3d2c1d..df1fde98 100644 --- a/app/src/main/res/layout/dialog_input_quantity_v2.xml +++ b/app/src/main/res/layout/dialog_input_quantity_v2.xml @@ -380,6 +380,7 @@ style="@style/TextInputLayout.OutlinePrimary" android:layout_width="0dp" android:layout_height="wrap_content" + android:enabled="@{view.enabledChangePartitaMag}" android:layout_weight="@{viewmodel.shouldAskDataScad || viewmodel.shouldShowDataScad ? 1f : 2f}" android:paddingEnd="4dp" tools:layout_weight="1"> @@ -400,6 +401,7 @@ style="@style/TextInputLayout.OutlinePrimary" android:layout_width="0dp" android:layout_height="wrap_content" + android:enabled="@{view.enabledChangePartitaMag}" android:visibility="@{viewmodel.shouldAskDataScad || viewmodel.shouldShowDataScad ? View.VISIBLE : View.GONE}" android:layout_weight="1"> @@ -498,7 +500,8 @@ android:layout_height="wrap_content" android:layout_margin="16dp" android:orientation="horizontal" - android:weightSum="1"> + android:weightSum="1" + android:gravity="center_horizontal">