diff --git a/app/src/main/java/it/integry/integrywmsnative/core/model/MvwSitArtUdcDetInventario.java b/app/src/main/java/it/integry/integrywmsnative/core/model/MvwSitArtUdcDetInventario.java index 189a8ac4..51ad1be9 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/model/MvwSitArtUdcDetInventario.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/model/MvwSitArtUdcDetInventario.java @@ -2,6 +2,7 @@ package it.integry.integrywmsnative.core.model; import java.math.BigDecimal; import java.time.LocalDate; +import java.util.Date; import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.core.utility.UtilityNumber; @@ -41,6 +42,7 @@ public class MvwSitArtUdcDetInventario { private String codJfas; private MtbAart mtbAart; private Integer numOrd; + private Date dataOrd; public String getGestione() { return gestione; @@ -317,4 +319,13 @@ public class MvwSitArtUdcDetInventario { .setPesoLordoKg(getPesoLordoKg()) .setUntMis(getUntMis()); } + + public Date getDataOrd() { + return dataOrd; + } + + public MvwSitArtUdcDetInventario setDataOrd(Date dataOrd) { + this.dataOrd = dataOrd; + return this; + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/articoli_in_giacenza/ArticoliInGiacenzaViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/articoli_in_giacenza/ArticoliInGiacenzaViewModel.java index d5304559..43563ce5 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/articoli_in_giacenza/ArticoliInGiacenzaViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/articoli_in_giacenza/ArticoliInGiacenzaViewModel.java @@ -10,7 +10,6 @@ import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingL import it.integry.integrywmsnative.core.model.MtbDepoPosizione; import it.integry.integrywmsnative.core.model.MvwSitArtUdcDetInventario; import it.integry.integrywmsnative.core.services.inventario.InventarioService; -import it.integry.integrywmsnative.gest.prod_riposizionamento_da_prod.dto.ArtsInGiacenzaDTO; public class ArticoliInGiacenzaViewModel { private final InventarioService mInventarioService; diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_riposizionamento_da_prod/ProdRiposizionamentoDaProdFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_riposizionamento_da_prod/ProdRiposizionamentoDaProdFragment.java index 10d579ca..c8a67912 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_riposizionamento_da_prod/ProdRiposizionamentoDaProdFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_riposizionamento_da_prod/ProdRiposizionamentoDaProdFragment.java @@ -32,7 +32,6 @@ import it.integry.integrywmsnative.core.expansion.OnGeneralChangedCallback; import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.interfaces.ISearchableFragment; import it.integry.integrywmsnative.core.interfaces.ITitledFragment; -import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.model.MtbDepoPosizione; import it.integry.integrywmsnative.core.model.MvwSitArtUdcDetInventario; import it.integry.integrywmsnative.core.utility.UtilityExceptions; @@ -212,7 +211,7 @@ public class ProdRiposizionamentoDaProdFragment extends BaseFragment implements } - public void onInfoClick(List item) { + public void onInfoClick(ArtsInGiacenzaDTO item) { try { DialogInfoGiacenzaView.newInstance(item).show(getChildFragmentManager(), DialogInfoGiacenzaView.class.getName()); } catch (Exception e) { diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_riposizionamento_da_prod/ProdRiposizionamentoDaProdViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_riposizionamento_da_prod/ProdRiposizionamentoDaProdViewModel.java index f22dd800..005f12a4 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_riposizionamento_da_prod/ProdRiposizionamentoDaProdViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_riposizionamento_da_prod/ProdRiposizionamentoDaProdViewModel.java @@ -6,6 +6,7 @@ import com.annimon.stream.Optional; import com.annimon.stream.Stream; import java.math.BigDecimal; +import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.List; @@ -13,8 +14,6 @@ import java.util.Map; import java.util.Objects; import java.util.stream.Collectors; -import javax.inject.Inject; - import it.integry.barcode_base_android_library.model.BarcodeScanDTO; import it.integry.integrywmsnative.core.exception.NoLUFoundException; import it.integry.integrywmsnative.core.exception.ScannedPositionNotExistException; @@ -32,6 +31,7 @@ import it.integry.integrywmsnative.core.utility.UtilityBarcode; import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.gest.prod_riposizionamento_da_prod.dto.ArtsInGiacenzaDTO; +import it.integry.integrywmsnative.gest.prod_riposizionamento_da_prod.dto.StatoArtInventarioDTO; public class ProdRiposizionamentoDaProdViewModel { private final SoundAlertService mSoundAlertService; @@ -41,6 +41,7 @@ public class ProdRiposizionamentoDaProdViewModel { private final MutableLiveData> itemsInventario = new MutableLiveData<>(); private final MutableLiveData mtbColtMutableLiveData = new MutableLiveData<>(); private final MutableLiveData> mMvwSitArtUdcDetInventarioLiveData = new MutableLiveData<>(); + private final MutableLiveData> mStatoArticoli = new MutableLiveData<>(); private Listener mListener; public ProdRiposizionamentoDaProdViewModel(GiacenzaRESTConsumer giacenzaRESTConsumer, BarcodeRESTConsumer barcodeRESTConsumer, ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer, SoundAlertService soundAlertService) { @@ -100,6 +101,12 @@ public class ProdRiposizionamentoDaProdViewModel { mMvwSitArtUdcDetInventarioLiveData.setValue(mvwSitArtUdcDetInventario); + List statoArticolo = Stream.of(Objects.requireNonNull(itemsInventario.getValue())) + .flatMap(x -> Stream.of(x.getStatoArtInventario())) + .toList(); + + mStatoArticoli.setValue(statoArticolo); + boolean isPresent = Stream.of(mvwSitArtUdcDetInventario) .anyMatch(x -> x.getGestione().equals(mtbColt.getGestione()) && @@ -161,6 +168,18 @@ public class ProdRiposizionamentoDaProdViewModel { .map(MvwSitArtUdcDetInventario::getNumCnf) .reduce(BigDecimal.ZERO, BigDecimal::add); + List statoArticoli = mStatoArticoli.getValue(); + + if (statoArticoli == null) + statoArticoli = new ArrayList<>(); + + StatoArtInventarioDTO statoArticolo = Stream.of(statoArticoli) + .filter(x -> x.getCodProd().equalsIgnoreCase(dtoList.get(0).getCodMart()) && + Objects.equals(x.getNumOrd(), dtoList.get(0).getNumOrd()) && + Objects.equals(x.getDataOrd(), dtoList.get(0).getDataOrd()) + ) + .findFirstOrElse(null); + return new ArtsInGiacenzaDTO() .setCodMart(dtoList.get(0).getCodMart()) .setPartitaMag(dtoList.get(0).getPartitaMag()) @@ -169,6 +188,7 @@ public class ProdRiposizionamentoDaProdViewModel { .setNumOrd(dtoList.get(0).getNumOrd()) .setNumCnf(totalNumCnf) .setCount(dtoList.size()) + .setStatoArtInventario(statoArticolo) .setMvwSitArtUdcDetInventarioDTO(dtoList); }) .sorted(Comparator.comparing(ArtsInGiacenzaDTO::getPosizione)) diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_riposizionamento_da_prod/dialogs/info_giacenza/DialogInfoGiacenzaView.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_riposizionamento_da_prod/dialogs/info_giacenza/DialogInfoGiacenzaView.java index 4bbb9f6c..cb5916bd 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_riposizionamento_da_prod/dialogs/info_giacenza/DialogInfoGiacenzaView.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_riposizionamento_da_prod/dialogs/info_giacenza/DialogInfoGiacenzaView.java @@ -5,6 +5,7 @@ import android.content.Context; import android.content.DialogInterface; import android.os.Bundle; import android.view.LayoutInflater; +import android.view.View; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -13,6 +14,7 @@ import com.annimon.stream.Stream; import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.ravikoradiya.liveadapter.LiveAdapter; +import java.util.ArrayList; import java.util.List; import javax.inject.Inject; @@ -21,8 +23,10 @@ import it.integry.integrywmsnative.BR; import it.integry.integrywmsnative.MainApplication; import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.core.expansion.BaseDialogFragment; -import it.integry.integrywmsnative.core.model.MvwSitArtUdcDetInventario; import it.integry.integrywmsnative.databinding.DialogInfoGiacenzaBinding; +import it.integry.integrywmsnative.databinding.DialogInfoGiacenzaSituazioneArticoloBinding; +import it.integry.integrywmsnative.gest.prod_riposizionamento_da_prod.dto.ArtsInGiacenzaDTO; +import it.integry.integrywmsnative.gest.prod_riposizionamento_da_prod.dto.StatoArtInventarioDTO; import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.info_situazione_articolo.ui.DialogInfoSituazioneArticoloAvailableListItem; public class DialogInfoGiacenzaView extends BaseDialogFragment { @@ -31,13 +35,13 @@ public class DialogInfoGiacenzaView extends BaseDialogFragment { private DialogInfoGiacenzaBinding mBindings; private Context mContext; - private List item; + private ArtsInGiacenzaDTO item; - public static DialogInfoGiacenzaView newInstance(List item) { + public static DialogInfoGiacenzaView newInstance(ArtsInGiacenzaDTO item) { return new DialogInfoGiacenzaView(item); } - public DialogInfoGiacenzaView(List item) { + public DialogInfoGiacenzaView(ArtsInGiacenzaDTO item) { this.item = item; } @@ -78,17 +82,47 @@ public class DialogInfoGiacenzaView extends BaseDialogFragment { this.onLoadingEnded(); } - private void initAvailableItemsList(List availableItems) { - if(availableItems == null || availableItems.isEmpty()) + private void initAvailableItemsList(ArtsInGiacenzaDTO availableItems) { + if (availableItems == null) return; - var itemList = Stream.of(availableItems) - .map(DialogInfoSituazioneArticoloAvailableListItem::fromMvwSitArtUdcDetInventario) + var listItem = Stream.of(availableItems) + .flatMap(x -> Stream.of(x.getMvwSitArtUdcDetInventarioDTO()) + .map(DialogInfoSituazioneArticoloAvailableListItem::fromMvwSitArtUdcDetInventario) + ) .toList(); - new LiveAdapter(itemList, BR.item) + List statoArticolo = null; + StatoArtInventarioDTO statoArtInventario = availableItems.getStatoArtInventario(); + if (statoArtInventario != null) { + statoArticolo = Stream.of(statoArtInventario).toList(); + + if ((statoArtInventario.pedArrivoIsLessThenZero() || statoArtInventario.colliArrivoIsLessThenZero()) && + (statoArtInventario.pedMagIsLessThenZero() || statoArtInventario.colliMagIsLessThenZero())) { + this.mBindings.situazioneArticolo.setVisibility(View.GONE); + } + } else { + this.mBindings.situazioneArticolo.setVisibility(View.GONE); + } + + new LiveAdapter(listItem, BR.item) .map(DialogInfoSituazioneArticoloAvailableListItem.class, R.layout.dialog_info_giacenza_list_item) .into(this.mBindings.availableList); + + new LiveAdapter(statoArticolo, BR.item) + .map(StatoArtInventarioDTO.class, R.layout.dialog_info_giacenza_situazione_articolo) + .into(this.mBindings.situazioneArticolo); } + @Override + public void onLoadingStarted() { + this.mBindings.loadingView.setVisibility(View.VISIBLE); + this.mBindings.listItem.setVisibility(View.GONE); + } + + @Override + public void onLoadingEnded() { + this.mBindings.loadingView.setVisibility(View.GONE); + this.mBindings.listItem.setVisibility(View.VISIBLE); + } } \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_riposizionamento_da_prod/dto/ArtsInGiacenzaDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_riposizionamento_da_prod/dto/ArtsInGiacenzaDTO.java index 11ea91a8..c400cc98 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_riposizionamento_da_prod/dto/ArtsInGiacenzaDTO.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_riposizionamento_da_prod/dto/ArtsInGiacenzaDTO.java @@ -1,6 +1,7 @@ package it.integry.integrywmsnative.gest.prod_riposizionamento_da_prod.dto; import java.math.BigDecimal; +import java.util.Date; import java.util.List; import it.integry.integrywmsnative.core.model.MvwSitArtUdcDetInventario; @@ -13,7 +14,9 @@ public class ArtsInGiacenzaDTO { private String posizione; private BigDecimal numCnf; private Integer numOrd; + private Date dataOrd; private Integer count; + private StatoArtInventarioDTO statoArtInventario; private List mvwSitArtUdcDetInventarioDTO; public String getCodMart() { @@ -92,4 +95,22 @@ public class ArtsInGiacenzaDTO { this.numOrd = numOrd; return this; } + + public StatoArtInventarioDTO getStatoArtInventario() { + return statoArtInventario; + } + + public ArtsInGiacenzaDTO setStatoArtInventario(StatoArtInventarioDTO statoArtInventario) { + this.statoArtInventario = statoArtInventario; + return this; + } + + public Date getDataOrd() { + return dataOrd; + } + + public ArtsInGiacenzaDTO setDataOrd(Date dataOrd) { + this.dataOrd = dataOrd; + return this; + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_riposizionamento_da_prod/dto/StatoArtInventarioDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_riposizionamento_da_prod/dto/StatoArtInventarioDTO.java new file mode 100644 index 00000000..55a4ff2c --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_riposizionamento_da_prod/dto/StatoArtInventarioDTO.java @@ -0,0 +1,183 @@ +package it.integry.integrywmsnative.gest.prod_riposizionamento_da_prod.dto; + +import java.math.BigDecimal; +import java.util.Date; + +public class StatoArtInventarioDTO { + private String codProd; + private Integer numOrd; + private Date dataOrd; + private String untMis; + private BigDecimal qtaProd; + private BigDecimal colliProd; + private BigDecimal pedProd; + private BigDecimal qtaInArrivo; + private BigDecimal colliArrivo; + private BigDecimal pedArrivo; + private BigDecimal qtaLinea; + private BigDecimal colliLinea; + private Integer pedLinea; + private BigDecimal qtaMag; + private BigDecimal colliMag; + private Integer pedMag; + + public String getCodProd() { + return codProd; + } + + public StatoArtInventarioDTO setCodProd(String codProd) { + this.codProd = codProd; + return this; + } + + public Integer getNumOrd() { + return numOrd; + } + + public StatoArtInventarioDTO setNumOrd(Integer numOrd) { + this.numOrd = numOrd; + return this; + } + + public String getUntMis() { + return untMis; + } + + public StatoArtInventarioDTO setUntMis(String untMis) { + this.untMis = untMis; + return this; + } + + public BigDecimal getQtaProd() { + return qtaProd; + } + + public StatoArtInventarioDTO setQtaProd(BigDecimal qtaProd) { + this.qtaProd = qtaProd; + return this; + } + + public BigDecimal getColliProd() { + return colliProd; + } + + public StatoArtInventarioDTO setColliProd(BigDecimal colliProd) { + this.colliProd = colliProd; + return this; + } + + public BigDecimal getPedProd() { + return pedProd; + } + + public StatoArtInventarioDTO setPedProd(BigDecimal pedProd) { + this.pedProd = pedProd; + return this; + } + + public BigDecimal getQtaInArrivo() { + return qtaInArrivo; + } + + public StatoArtInventarioDTO setQtaInArrivo(BigDecimal qtaInArrivo) { + this.qtaInArrivo = qtaInArrivo; + return this; + } + + public BigDecimal getColliArrivo() { + return colliArrivo; + } + + public StatoArtInventarioDTO setColliArrivo(BigDecimal colliArrivo) { + this.colliArrivo = colliArrivo; + return this; + } + + public BigDecimal getPedArrivo() { + return pedArrivo; + } + + public StatoArtInventarioDTO setPedArrivo(BigDecimal pedArrivo) { + this.pedArrivo = pedArrivo; + return this; + } + + public BigDecimal getQtaLinea() { + return qtaLinea; + } + + public StatoArtInventarioDTO setQtaLinea(BigDecimal qtaLinea) { + this.qtaLinea = qtaLinea; + return this; + } + + public BigDecimal getColliLinea() { + return colliLinea; + } + + public StatoArtInventarioDTO setColliLinea(BigDecimal colliLinea) { + this.colliLinea = colliLinea; + return this; + } + + public Integer getPedLinea() { + return pedLinea; + } + + public StatoArtInventarioDTO setPedLinea(Integer pedLinea) { + this.pedLinea = pedLinea; + return this; + } + + public BigDecimal getQtaMag() { + return qtaMag; + } + + public StatoArtInventarioDTO setQtaMag(BigDecimal qtaMag) { + this.qtaMag = qtaMag; + return this; + } + + public BigDecimal getColliMag() { + return colliMag; + } + + public StatoArtInventarioDTO setColliMag(BigDecimal colliMag) { + this.colliMag = colliMag; + return this; + } + + public Integer getPedMag() { + return pedMag; + } + + public StatoArtInventarioDTO setPedMag(Integer pedMag) { + this.pedMag = pedMag; + return this; + } + + public Date getDataOrd() { + return dataOrd; + } + + public StatoArtInventarioDTO setDataOrd(Date dataOrd) { + this.dataOrd = dataOrd; + return this; + } + + public boolean pedArrivoIsLessThenZero(){ + return this.pedArrivo.compareTo(BigDecimal.ZERO) < 0; + } + + public boolean colliArrivoIsLessThenZero(){ + return this.colliArrivo.compareTo(BigDecimal.ZERO) <= 0; + } + + public boolean pedMagIsLessThenZero(){ + return this.pedMag < 0; + } + + public boolean colliMagIsLessThenZero(){ + return this.colliMag.compareTo(BigDecimal.ZERO) <= 0; + } +} diff --git a/app/src/main/res/layout/dialog_info_giacenza.xml b/app/src/main/res/layout/dialog_info_giacenza.xml index 90228fbe..8dcfb051 100644 --- a/app/src/main/res/layout/dialog_info_giacenza.xml +++ b/app/src/main/res/layout/dialog_info_giacenza.xml @@ -24,11 +24,28 @@ style="@style/MaterialAlertDialog.Material3.Title.Text.CenterStacked" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginBottom="16dp" + android:layout_marginBottom="8dp" android:gravity="center_horizontal" android:text="Situazione articolo" /> + + + + + + @@ -37,21 +54,40 @@ android:layout_height="wrap_content" android:orientation="vertical"> + + + + - - + app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" + tools:itemCount="5" + tools:listitem="@layout/dialog_info_giacenza_list_item" /> - - diff --git a/app/src/main/res/layout/dialog_info_giacenza_list_item.xml b/app/src/main/res/layout/dialog_info_giacenza_list_item.xml index f691706e..7609120b 100644 --- a/app/src/main/res/layout/dialog_info_giacenza_list_item.xml +++ b/app/src/main/res/layout/dialog_info_giacenza_list_item.xml @@ -81,7 +81,7 @@ android:layout_width="12dp" android:layout_height="12dp" android:src="@drawable/ic_location_24" - android:tint="@android:color/black" + android:tint="@android:color/white" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintTop_toTopOf="parent" /> @@ -89,6 +89,7 @@ style="@style/AppTheme.NewMaterial.Text.Small" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:textColor="@android:color/white" android:layout_marginStart="4dp" android:text="@{item.posizione}" app:layout_constraintStart_toEndOf="@id/position_label_icon" @@ -106,7 +107,8 @@ android:backgroundTint="@color/red_300" android:gravity="center_vertical" android:orientation="horizontal" - android:visibility="@{item.codJcom != null ? View.VISIBLE : View.GONE}"> + android:visibility="@{item.codJcom != null ? View.VISIBLE : View.GONE}" + tools:visibility="invisible"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/prod_riposizionamento_da_prod__list_item.xml b/app/src/main/res/layout/prod_riposizionamento_da_prod__list_item.xml index 228eb750..1d693f4a 100644 --- a/app/src/main/res/layout/prod_riposizionamento_da_prod__list_item.xml +++ b/app/src/main/res/layout/prod_riposizionamento_da_prod__list_item.xml @@ -192,7 +192,7 @@ android:backgroundTint="@color/colorPrimary" android:clickable="true" android:focusable="true" - android:onClick="@{() -> view.onInfoClick(item.getMvwSitArtUdcDetInventarioDTO())}" + android:onClick="@{() -> view.onInfoClick(item)}" android:scaleType="fitCenter" />