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 81dfd7dc..4b53dc02 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 @@ -58,4 +58,22 @@ public class ColliMagazzinoRESTConsumer { } + public static void updateRiga(MtbColr mtbColrToUpdate, Runnable onComplete, RunnableArgs onFailed){ + + mtbColrToUpdate.setOperation(CommonModelConsts.OPERATION.UPDATE); + + EntityRESTConsumer.processEntity(mtbColrToUpdate, new ISimpleOperationCallback() { + @Override + public void onSuccess(MtbColr value) { + if(onComplete != null) onComplete.run(); + } + + @Override + public void onFailed(Exception ex) { + if(onFailed != null) onFailed.run(ex); + } + }, MtbColr.class); + + } + } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/di/BindableFloat.java b/app/src/main/java/it/integry/integrywmsnative/core/di/BindableFloat.java index c33301c9..44993c4e 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/di/BindableFloat.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/di/BindableFloat.java @@ -13,7 +13,11 @@ public class BindableFloat extends BaseObservable { } public Float get(boolean defaultIfNull) { - return value == null && defaultIfNull ? 0 : value; + + if(value == null){ + if(defaultIfNull) return 0f; + else return null; + } else return value; } public void set(Float value) { diff --git a/app/src/main/java/it/integry/integrywmsnative/core/di/Converters.java b/app/src/main/java/it/integry/integrywmsnative/core/di/Converters.java index 41b5475e..0ec54f26 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 @@ -2,6 +2,7 @@ package it.integry.integrywmsnative.core.di; import android.databinding.BindingAdapter; import android.databinding.BindingConversion; +import android.support.constraint.Guideline; import android.support.design.widget.TextInputEditText; import android.support.v4.util.Pair; import android.support.v7.widget.AppCompatTextView; @@ -138,11 +139,7 @@ public class Converters { public static void bindRadioGroup(RadioGroup view, final BindableBoolean bindableBoolean) { if (view.getTag(R.id.bound_observable) != bindableBoolean) { view.setTag(R.id.bound_observable, bindableBoolean); - view.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { - @Override public void onCheckedChanged(RadioGroup group, int checkedId) { - bindableBoolean.set(checkedId == group.getChildAt(1).getId()); - } - }); + view.setOnCheckedChangeListener((group, checkedId) -> bindableBoolean.set(checkedId == group.getChildAt(1).getId())); } Boolean newValue = bindableBoolean.get(); ((RadioButton) view.getChildAt(newValue ? 1 : 0)).setChecked(true); @@ -152,12 +149,7 @@ public class Converters { public static void bindCheckbox(CheckBox view, final BindableBoolean bindableBoolean) { if (view.getTag(R.id.bound_observable) != bindableBoolean) { view.setTag(R.id.bound_observable, bindableBoolean); - view.setOnCheckedChangeListener(new CheckBox.OnCheckedChangeListener() { - @Override - public void onCheckedChanged(CompoundButton compoundButton, boolean b) { - bindableBoolean.set(b); - } - }); + view.setOnCheckedChangeListener((compoundButton, b) -> bindableBoolean.set(b)); } Boolean newValue = bindableBoolean.get(); view.setChecked(newValue); @@ -165,10 +157,11 @@ public class Converters { @BindingAdapter({"app:onClick"}) public static void bindOnClick(View view, final Runnable runnable) { - view.setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { - runnable.run(); - } - }); + view.setOnClickListener(v -> runnable.run()); + } + + @BindingAdapter({"app:layout_constraintGuide_percent"}) + public static void bindFloatPercetageOnGuideline(View view, final float percentage) { + ((Guideline)view).setGuidelinePercent(percentage); } } \ No newline at end of file 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 f7eba3ec..d5616ad7 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 @@ -43,6 +43,8 @@ public class MtbColr extends EntityBase implements Parcelable { private String descrizione; private String untMis; + private MtbAart mtbAart; + public MtbColr() { type = "mtb_colr"; } @@ -118,6 +120,8 @@ public class MtbColr extends EntityBase implements Parcelable { } else { numCnf = new BigDecimal(in.readFloat()); } + + in.readParcelable(MtbAart.class.getClassLoader()); } @Override @@ -199,6 +203,8 @@ public class MtbColr extends EntityBase implements Parcelable { dest.writeByte((byte) 1); dest.writeFloat(numCnf.floatValue()); } + + dest.writeParcelable(mtbAart, flags); } @Override @@ -546,4 +552,14 @@ public class MtbColr extends EntityBase implements Parcelable { this.untMis = untMis; return this; } + + + public MtbAart getMtbAart() { + return mtbAart; + } + + public MtbColr setMtbAart(MtbAart mtbAart) { + this.mtbAart = mtbAart; + return this; + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/dto/OrdineAccettazioneDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/dto/OrdineAccettazioneDTO.java index 1cf743f9..c06c57f0 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/dto/OrdineAccettazioneDTO.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/dto/OrdineAccettazioneDTO.java @@ -43,7 +43,7 @@ public class OrdineAccettazioneDTO implements Parcelable { public String descrizioneCommessa; public MtbAart mtbAart; public PickingObjectDTO[] colliAssociati; - public boolean hidden = false; + public Boolean hidden = null; public String partitaMag; public String codArtFor; public String descrizioneEstesa; @@ -96,7 +96,7 @@ public class OrdineAccettazioneDTO implements Parcelable { return colliAssociati; } - public boolean isHidden() { + public Boolean isHidden() { return hidden; } @@ -237,7 +237,7 @@ public class OrdineAccettazioneDTO implements Parcelable { ragSocCom = in.readString(); descrizioneCommessa = in.readString(); mtbAart = (MtbAart) in.readValue(MtbAart.class.getClassLoader()); - hidden = in.readByte() != 0x00; + hidden = in.readByte() == 0x00 ? null : in.readByte() != 0x00; partitaMag = in.readString(); codArtFor = in.readString(); descrizioneEstesa = in.readString(); @@ -272,7 +272,12 @@ public class OrdineAccettazioneDTO implements Parcelable { dest.writeString(ragSocCom); dest.writeString(descrizioneCommessa); dest.writeValue(mtbAart); - dest.writeByte((byte) (hidden ? 0x01 : 0x00)); + if (hidden == null) { + dest.writeByte((byte) (0x00)); + } else { + dest.writeByte((byte) (0x01)); + dest.writeByte((byte) (hidden ? 0x01 : 0x00)); + } dest.writeString(partitaMag); dest.writeString(codArtFor); dest.writeString(descrizioneEstesa); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/core/AccettazioneOrdineInevasoHelper.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/core/AccettazioneOrdineInevasoHelper.java index 64f5b672..d04b81bf 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/core/AccettazioneOrdineInevasoHelper.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/core/AccettazioneOrdineInevasoHelper.java @@ -61,7 +61,7 @@ public class AccettazioneOrdineInevasoHelper { } - public List> getOrdiniRaggruppatiPerCodArtForn(List mDataset){ + public List> getOrdiniRaggruppatiPerCodArtForn(List mDataset, boolean forceHiddenCheck){ List codArtForns = new ArrayList<>(); for(int i = 0; i < mDataset.size(); i++){ @@ -86,9 +86,12 @@ public class AccettazioneOrdineInevasoHelper { List tmpList = Stream.of(mDataset).filter(x -> x.getCodArtFor() != null && x.getCodArtFor().equalsIgnoreCase(codArtForn)).toList(); for(int i = 0; i < tmpList.size(); i++){ - if(tmpList.get(i).getQtaDaEvadere().floatValue() <= 0){ - tmpList.remove(i); - i--; + if(tmpList.get(i).isHidden() == null || forceHiddenCheck) { + if (tmpList.get(i).getQtaDaEvadere().floatValue() <= 0) { + tmpList.get(i).setHidden(true); + //tmpList.remove(i); + //i--; + } else tmpList.get(i).setHidden(false); } } @@ -101,7 +104,7 @@ public class AccettazioneOrdineInevasoHelper { } - public List> getOrdiniRaggruppatiPerDescrArt(List mDataset){ + public List> getOrdiniRaggruppatiPerDescrArt(List mDataset, boolean forceHiddenCheck){ List descrArtForns = new ArrayList<>(); for(int i = 0; i < mDataset.size(); i++){ @@ -120,9 +123,12 @@ public class AccettazioneOrdineInevasoHelper { List tmpList = Stream.of(mDataset).filter(x -> x.getDescrizioneEstesa() != null && x.getDescrizioneEstesa().equalsIgnoreCase(descrArtForn)).toList(); for(int i = 0; i < tmpList.size(); i++){ - if(tmpList.get(i).getQtaDaEvadere().floatValue() <= 0){ - tmpList.remove(i); - i--; + if(tmpList.get(i).isHidden() == null || forceHiddenCheck) { + if (tmpList.get(i).getQtaDaEvadere().floatValue() <= 0) { + tmpList.get(i).setHidden(true); + //tmpList.remove(i); + //i--; + } else tmpList.get(i).setHidden(false); } } @@ -140,7 +146,7 @@ public class AccettazioneOrdineInevasoHelper { public String ragSocCom = ""; } - public List> getOrdiniRaggruppatiPerRagSocCommessa(List mDataset) { + public List> getOrdiniRaggruppatiPerRagSocCommessa(List mDataset, boolean forceHiddenCheck) { List commessaList = new ArrayList<>(); commessaList.add(new RaggruppaPerCommessaUtilDTO()); @@ -180,9 +186,12 @@ public class AccettazioneOrdineInevasoHelper { List tmpList = Stream.of(mDataset).filter(x -> x.getCodJcom().equalsIgnoreCase(dto.codJcom)).toList(); for(int i = 0; i < tmpList.size(); i++){ - if(tmpList.get(i).getQtaDaEvadere().floatValue() <= 0){ - tmpList.remove(i); - i--; + if(tmpList.get(i).isHidden() == null || forceHiddenCheck) { + if (tmpList.get(i).getQtaDaEvadere().floatValue() <= 0) { + tmpList.get(i).setHidden(true); + //tmpList.remove(i); + //i--; + } else tmpList.get(i).setHidden(false); } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/core/MainListOrdineAccettazioneAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/core/MainListOrdineAccettazioneAdapter.java index dc9aa3e3..3af40712 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/core/MainListOrdineAccettazioneAdapter.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/core/MainListOrdineAccettazioneAdapter.java @@ -12,6 +12,8 @@ import android.view.ViewGroup; import android.widget.LinearLayout; import android.widget.TextView; +import com.annimon.stream.Stream; + import java.util.ArrayList; import java.util.List; @@ -28,7 +30,8 @@ import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.dto.Accettaz public class MainListOrdineAccettazioneAdapter extends RecyclerView.Adapter { protected Context mContext; - protected ObservableArrayList mDataset; + protected List mDataset; + protected ObservableArrayList mObservableDataset; protected IOnOrdineRowDispatchCallback mOrdineRowDispatch; private static final Pools.SynchronizedPool sPool = new Pools.SynchronizedPool(200); @@ -48,9 +51,11 @@ public class MainListOrdineAccettazioneAdapter extends RecyclerView.Adapter
myDataset) { mContext = context; - mDataset = myDataset; + mObservableDataset = myDataset; - myDataset.addOnListChangedCallback(onListChangedCallback); + + mDataset = Stream.of(mObservableDataset).filter(x -> !x.isHidden()).toList(); + mObservableDataset.addOnListChangedCallback(onListChangedCallback); } public void setOnOrdineRowDispatchCallback(IOnOrdineRowDispatchCallback ordineRowDispatch) { @@ -60,28 +65,37 @@ public class MainListOrdineAccettazioneAdapter extends RecyclerView.Adapter
>() { @Override public void onChanged(ObservableList sender) { + refreshNotHiddenElements(); notifyDataSetChanged(); } @Override public void onItemRangeChanged(ObservableList sender, int positionStart, int itemCount) { + refreshNotHiddenElements(); notifyDataSetChanged(); } @Override public void onItemRangeInserted(ObservableList sender, int positionStart, int itemCount) { + refreshNotHiddenElements(); notifyDataSetChanged(); } @Override public void onItemRangeMoved(ObservableList sender, int fromPosition, int toPosition, int itemCount) { + refreshNotHiddenElements(); notifyDataSetChanged(); } @Override public void onItemRangeRemoved(ObservableList sender, int positionStart, int itemCount) { + refreshNotHiddenElements(); notifyDataSetChanged(); } + + private void refreshNotHiddenElements() { + mDataset = Stream.of(mObservableDataset).filter(x -> !x.isHidden()).toList(); + } }; @@ -115,69 +129,73 @@ public class MainListOrdineAccettazioneAdapter extends RecyclerView.Adapter
subset = mDataset.get(position).rows; + int visibleElementsCounter = 0; + for(int i = 0; i < subset.size(); i++) { final AccettazioneOrdineInevasoListViewModel.SubItem rowItem = subset.get(i); + if(!rowItem.getOriginalModel().isHidden()) { + visibleElementsCounter++; - View groupModelViewPool = (View) sPool.acquire(); - if(groupModelViewPool == null){ - groupModelViewPool = LayoutInflater.from(mContext) - .inflate(R.layout.accettazione_ordine_inevaso_main_list___cod_art_for_group_model, holder.mLinearLayoutGroupItemContainer, false); - } - - - View groupModelView = groupModelViewPool; - holder.pool.add(groupModelView); - - if(rowItem.getQtaRiservata().equals(rowItem.getQtaOrdinata())) { - groupModelView.setBackgroundColor(mContext.getResources().getColor(R.color.green_500_with_alpha)); - } else if(rowItem.getQtaRiservata().floatValue() > 0) { - groupModelView.setBackgroundColor(mContext.getResources().getColor(R.color.orange_600_with_alpha)); - } else if(i % 2 == 1) { - groupModelView.setBackgroundColor(mContext.getResources().getColor(R.color.letturaFacilitataBG)); - } else { - groupModelView.setBackgroundColor(Color.WHITE); - } - - - final TextView badge1 = groupModelView.findViewById(R.id.accettazione_ordine_inevaso_main_list_group_item_badge1); - badge1.setText(rowItem.getBadge1()); - - final TextView badge2 = groupModelView.findViewById(R.id.accettazione_ordine_inevaso_main_list_group_item_badge2); - badge2.setText(rowItem.getBadge2()); - - - final TextView descrizione = groupModelView.findViewById(R.id.accettazione_ordine_inevaso_main_list_group_item_descrizione); - - String descrizioneString = rowItem.getDescrizione(); - int descrizioneColor = Color.BLACK; - - if(UtilityString.isNullOrEmpty(descrizioneString)) { - descrizioneString = mContext.getString(R.string.no_description); - descrizioneColor = Color.GRAY; - } else if(descrizioneString.equalsIgnoreCase(CommonConst.Config.COMMESSA_MAG)){ - descrizioneString = mContext.getString(R.string.stock); - } - - descrizione.setText(descrizioneString); - descrizione.setTextColor(descrizioneColor); - - final TextView qtaEvasa = groupModelView.findViewById(R.id.accettazione_ordine_inevaso_main_list_group_item_qta_evasa); - qtaEvasa.setText(UtilityNumber.decimalToString(rowItem.getQtaRiservata())); - - final TextView qtaTot = groupModelView.findViewById(R.id.accettazione_ordine_inevaso_main_list_group_item_qta_tot); - qtaTot.setText(UtilityNumber.decimalToString(rowItem.getQtaOrdinata())); - - - groupModelView.setOnClickListener(view -> { - if(mOrdineRowDispatch != null){ - mOrdineRowDispatch.onOrdineRowDispatch(rowItem.getOriginalModel()); + View groupModelViewPool = (View) sPool.acquire(); + if (groupModelViewPool == null) { + groupModelViewPool = LayoutInflater.from(mContext) + .inflate(R.layout.accettazione_ordine_inevaso_main_list___cod_art_for_group_model, holder.mLinearLayoutGroupItemContainer, false); } - }); - holder.mLinearLayoutGroupItemContainer.addView(groupModelView); + View groupModelView = groupModelViewPool; + holder.pool.add(groupModelView); + + if (rowItem.getQtaRiservata().subtract(rowItem.getQtaOrdinata()).floatValue() >= 0 ) { + groupModelView.setBackgroundColor(mContext.getResources().getColor(R.color.green_500_with_alpha)); + } else if (rowItem.getQtaRiservata().floatValue() > 0) { + groupModelView.setBackgroundColor(mContext.getResources().getColor(R.color.orange_600_with_alpha)); + } else if (visibleElementsCounter % 2 == 1) { + groupModelView.setBackgroundColor(mContext.getResources().getColor(R.color.letturaFacilitataBG)); + } else { + groupModelView.setBackgroundColor(Color.WHITE); + } + + + final TextView badge1 = groupModelView.findViewById(R.id.accettazione_ordine_inevaso_main_list_group_item_badge1); + badge1.setText(rowItem.getBadge1()); + + final TextView badge2 = groupModelView.findViewById(R.id.accettazione_ordine_inevaso_main_list_group_item_badge2); + badge2.setText(rowItem.getBadge2()); + + + final TextView descrizione = groupModelView.findViewById(R.id.accettazione_ordine_inevaso_main_list_group_item_descrizione); + + String descrizioneString = rowItem.getDescrizione(); + int descrizioneColor = Color.BLACK; + + if (UtilityString.isNullOrEmpty(descrizioneString)) { + descrizioneString = mContext.getString(R.string.no_description); + descrizioneColor = Color.GRAY; + } else if (descrizioneString.equalsIgnoreCase(CommonConst.Config.COMMESSA_MAG)) { + descrizioneString = mContext.getString(R.string.stock); + } + + descrizione.setText(descrizioneString); + descrizione.setTextColor(descrizioneColor); + + final TextView qtaEvasa = groupModelView.findViewById(R.id.accettazione_ordine_inevaso_main_list_group_item_qta_evasa); + qtaEvasa.setText(UtilityNumber.decimalToString(rowItem.getQtaRiservata())); + + final TextView qtaTot = groupModelView.findViewById(R.id.accettazione_ordine_inevaso_main_list_group_item_qta_tot); + qtaTot.setText(UtilityNumber.decimalToString(rowItem.getQtaOrdinata())); + + + groupModelView.setOnClickListener(view -> { + if (mOrdineRowDispatch != null) { + mOrdineRowDispatch.onOrdineRowDispatch(rowItem.getOriginalModel()); + } + }); + + holder.mLinearLayoutGroupItemContainer.addView(groupModelView); + } } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/dto/AccettazioneOrdineInevasoListViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/dto/AccettazioneOrdineInevasoListViewModel.java index eab30c8e..b32a76fc 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/dto/AccettazioneOrdineInevasoListViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/dto/AccettazioneOrdineInevasoListViewModel.java @@ -1,5 +1,7 @@ package it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.dto; +import com.annimon.stream.Stream; + import java.math.BigDecimal; import java.util.List; @@ -14,6 +16,11 @@ public class AccettazioneOrdineInevasoListViewModel { public String descrizioneGroup; public List rows; + public boolean isHidden(){ + if(rows == null || rows.size() == 0) return true; + return Stream.of(rows).filter(x -> x.originalModel.isHidden() != null && !x.originalModel.isHidden()).count() == 0; + } + public static class SubItem { private String badge1; diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/viewmodel/AccettazioneOnOrdineInevasoViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/viewmodel/AccettazioneOnOrdineInevasoViewModel.java index 65ad6d48..fe28cfcc 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/viewmodel/AccettazioneOnOrdineInevasoViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/viewmodel/AccettazioneOnOrdineInevasoViewModel.java @@ -1,14 +1,11 @@ package it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.viewmodel; import android.app.ProgressDialog; -import android.content.DialogInterface; -import android.content.Intent; import android.databinding.ObservableArrayList; import android.databinding.ObservableField; import android.support.v7.app.AlertDialog; import android.support.v7.widget.LinearLayoutManager; import android.text.SpannableString; -import android.widget.Toast; import com.annimon.stream.Stream; @@ -17,16 +14,12 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; -import br.com.zbra.androidlinq.delegate.Selector; import it.integry.integrywmsnative.BR; import it.integry.integrywmsnative.R; -import it.integry.integrywmsnative.core.REST.CommonRESTException; import it.integry.integrywmsnative.core.REST.consumers.ColliMagazzinoRESTConsumer; import it.integry.integrywmsnative.core.REST.consumers.GestSetupRESTConsumer; import it.integry.integrywmsnative.core.REST.consumers.ISimpleOperationCallback; -import it.integry.integrywmsnative.core.REST.consumers.ISingleValueOperationCallback; import it.integry.integrywmsnative.core.REST.consumers.PrinterRESTConsumer; -import it.integry.integrywmsnative.core.coollection.Coollection; import it.integry.integrywmsnative.core.model.CommonModelConsts; import it.integry.integrywmsnative.core.model.MtbColr; import it.integry.integrywmsnative.core.model.MtbColt; @@ -34,7 +27,6 @@ import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; import it.integry.integrywmsnative.core.report.ReportManager; import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.utility.UtilityExceptions; -import it.integry.integrywmsnative.core.utility.UtilityLogger; import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneDTO; import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.AccettazioneOrdineInevasoActivity; @@ -44,8 +36,6 @@ import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.core.MainLis import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.dto.AccettazioneOrdineInevasoOrderBy; import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.rest.OrdineAccettazioneInevasoRESTConsumerService; import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.views.NoteAggiuntiveNuovaULDialog; -import it.integry.integrywmsnative.gest.lista_bancali.ListaBancaliActivity; -import it.integry.integrywmsnative.gest.login.LoginActivity; import it.integry.integrywmsnative.ui.StatusBarAlert; import it.integry.integrywmsnative.view.bottomsheet.interfaces.IOnColloClosedCallback; import it.integry.integrywmsnative.view.bottomsheet.viewmodel.ArticoliInColloBottomSheetViewModel; @@ -85,8 +75,8 @@ public class AccettazioneOnOrdineInevasoViewModel implements IOnColloClosedCallb private void init(){ mArticoliInColloBottomSheetViewModel.setOnCloseColloCallbackListener(this); - mArticoliInColloBottomSheetViewModel.setOnItemDeletedCallback(this::refreshOrderBy); - mArticoliInColloBottomSheetViewModel.setOnItemEditedCallback(this::refreshOrderBy); + mArticoliInColloBottomSheetViewModel.setOnItemDeletedCallback(() -> this.refreshOrderBy(false)); + mArticoliInColloBottomSheetViewModel.setOnItemEditedCallback(() -> this.refreshOrderBy(false)); groupedOrdini = new ArrayList<>(); for (OrdineAccettazioneDTO ordine : mOrders){ @@ -95,7 +85,7 @@ public class AccettazioneOnOrdineInevasoViewModel implements IOnColloClosedCallb helper = new AccettazioneOrdineInevasoHelper(mActivity); - groupedRighe = helper.getOrdiniRaggruppatiPerCodArtForn(groupedOrdini); + groupedRighe = helper.getOrdiniRaggruppatiPerCodArtForn(groupedOrdini, true); initRecyclerView(groupedRighe); } @@ -119,17 +109,17 @@ public class AccettazioneOnOrdineInevasoViewModel implements IOnColloClosedCallb mActivity.bindings.accettazioneOrdineMainList.setAdapter(mAdapter); } - public void refreshOrderBy(){ + public void refreshOrderBy(boolean forceHiddenCheck){ switch (currentOrderBy){ case COD_ART_FOR: - groupedRighe = helper.getOrdiniRaggruppatiPerCodArtForn(groupedOrdini); + groupedRighe = helper.getOrdiniRaggruppatiPerCodArtForn(groupedOrdini, forceHiddenCheck); break; case DESCR_ART: - groupedRighe = helper.getOrdiniRaggruppatiPerDescrArt(groupedOrdini); + groupedRighe = helper.getOrdiniRaggruppatiPerDescrArt(groupedOrdini, forceHiddenCheck); break; case RAG_SOC_COM: - groupedRighe = helper.getOrdiniRaggruppatiPerRagSocCommessa(groupedOrdini); + groupedRighe = helper.getOrdiniRaggruppatiPerRagSocCommessa(groupedOrdini, forceHiddenCheck); break; default: @@ -146,7 +136,28 @@ public class AccettazioneOnOrdineInevasoViewModel implements IOnColloClosedCallb } public void recoverUL(MtbColt recoveredMtbColt){ + + for(int i = 0; i < recoveredMtbColt.getMtbColr().size(); i++){ + + MtbColr currentMtbColr = recoveredMtbColt.getMtbColr().get(i); + + List foundRows = Stream.of(groupedOrdini) + .filter(x -> x.getNumOrd() == currentMtbColr.getNumOrd() && + x.getRigaOrd() == currentMtbColr.getRigaOrd()&& + x.getDataOrd().equals(currentMtbColr.getDataOrdD())) + .toList(); + + if(foundRows != null && foundRows.size() > 0){ + OrdineAccettazioneDTO.Riga currentRow = foundRows.get(0); + + currentRow.setHidden(false); + currentRow.setQtaRiservate(currentRow.getQtaRiservate().subtract(currentMtbColr.getQtaCol())); + } + + } + setULToCurrentContext(recoveredMtbColt); + refreshOrderBy(false); } @@ -155,7 +166,7 @@ public class AccettazioneOnOrdineInevasoViewModel implements IOnColloClosedCallb AlertDialog dialog = new AlertDialog.Builder(mActivity) .setTitle(mActivity.getText(R.string.action_orderBy)) .setSingleChoiceItems(AccettazioneOrdineInevasoOrderBy.descriptions, currentOrderBy.getVal(), (dialog12, which) -> currentOrderBy = AccettazioneOrdineInevasoOrderBy.Enum.fromInt(which)) - .setPositiveButton("Ok", (dialog1, which) -> refreshOrderBy()) + .setPositiveButton("Ok", (dialog1, which) -> refreshOrderBy(true)) .create(); dialog.show(); } @@ -434,7 +445,7 @@ public class AccettazioneOnOrdineInevasoViewModel implements IOnColloClosedCallb } } - refreshOrderBy(); + refreshOrderBy(true); } @@ -457,7 +468,18 @@ public class AccettazioneOnOrdineInevasoViewModel implements IOnColloClosedCallb float qtaEvasa = item.qtaRiservate + qtaEvasaInMtbColr; - DialogInputQuantity.makeBase(mActivity, item, qtaEvasa, true, value -> onOrdineRowDispatched(item, value)).show(); + BigDecimal qtaDaEvadere = item.getQtaOrd().subtract(new BigDecimal(qtaEvasa)).subtract(item.getQtaEvasa()); + + DialogInputQuantity.DTO dto = new DialogInputQuantity.DTO() + .setBatchLot(item.getPartitaMag()) + .setCodArtFor(item.getCodArtFor()) + .setMtbAart(item.getMtbAart()) + .setQtaOrd(item.getQtaOrd()) + .setQtaDaEvadere(qtaDaEvadere) + .setQtaEvasa(new BigDecimal(qtaEvasa)) + .setCanPartitaMagBeChanged(true); + + DialogInputQuantity.makeBase(mActivity, dto, true, value -> onOrdineRowDispatched(item, value)).show(); } } @@ -495,10 +517,13 @@ public class AccettazioneOnOrdineInevasoViewModel implements IOnColloClosedCallb .setGestione(value.getGestione()) .setSerCollo(value.getSerCollo()) .setRiga(value.getMtbColr().get(0).getRiga()) - .setUntMis(item.getMtbAart().untMis); + .setUntMis(item.getMtbAart().untMis) + .setMtbAart(item.getMtbAart()); + + //item.setQtaRiservate(item.getQtaRiservate().add(mtbColr.getQtaCol())); mArticoliInColloBottomSheetViewModel.mtbColt.get().getMtbColr().add(mtbColr); - refreshOrderBy(); + refreshOrderBy(false); new StatusBarAlert.Builder(mActivity) .autoHide(true) diff --git a/app/src/main/java/it/integry/integrywmsnative/view/bottomsheet/viewmodel/ArticoliInColloBottomSheetViewModel.java b/app/src/main/java/it/integry/integrywmsnative/view/bottomsheet/viewmodel/ArticoliInColloBottomSheetViewModel.java index d7790f3d..2ced9461 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/bottomsheet/viewmodel/ArticoliInColloBottomSheetViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/bottomsheet/viewmodel/ArticoliInColloBottomSheetViewModel.java @@ -4,6 +4,7 @@ import android.app.ProgressDialog; import android.content.Context; import android.databinding.DataBindingUtil; import android.databinding.Observable; +import android.databinding.ObservableArrayList; import android.databinding.ObservableField; import android.databinding.ObservableList; import android.databinding.ViewDataBinding; @@ -15,25 +16,26 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; -import android.widget.Toast; - -import com.linearlistview.LinearListView; import java.lang.ref.WeakReference; +import java.math.BigDecimal; import it.integry.integrywmsnative.BR; import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.core.REST.consumers.ColliMagazzinoRESTConsumer; +import it.integry.integrywmsnative.core.REST.consumers.ISimpleOperationCallback; 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.utility.UtilityExceptions; import it.integry.integrywmsnative.core.utility.UtilityNumber; import it.integry.integrywmsnative.databinding.FragmentArticoliInColloBottomSheetBinding; +import it.integry.integrywmsnative.ui.StatusBarAlert; import it.integry.integrywmsnative.view.bottomsheet.ArticoliInColloBottomSheetHelper; import it.integry.integrywmsnative.view.bottomsheet.interfaces.IOnColloClosedCallback; -import it.integry.integrywmsnative.view.bottomsheet.interfaces.IOnSimpleListChangedCallback; import it.integry.integrywmsnative.view.dialogs.DialogSimpleMessageHelper; +import it.integry.integrywmsnative.view.dialogs.input_quantity.DialogInputQuantity; public class ArticoliInColloBottomSheetViewModel { @@ -157,9 +159,35 @@ public class ArticoliInColloBottomSheetViewModel { MtbColr itemToEdit = mtbColt.get().getMtbColr().get(position); + mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED); + DialogInputQuantity.DTO dto = new DialogInputQuantity.DTO() + .setBatchLot(itemToEdit.getPartitaMag()) + .setQtaDaEvadere(null) + .setQtaOrd(null) + .setMtbAart(itemToEdit.getMtbAart()) + .setCanPartitaMagBeChanged(false) + .setQtaTot(itemToEdit.getQtaCol()) + .setMaxQta(itemToEdit.getQtaCol()); - if(this.mOnItemEditedCallback != null) this.mOnItemEditedCallback.run(); + DialogInputQuantity.makeBase(mContext, dto, false, quantityDTO -> { + + final ProgressDialog progress = ProgressDialog.show(mContext, mContext.getText(R.string.waiting), + mContext.getText(R.string.loading) + " ...", true); + + itemToEdit.setQtaCol(new BigDecimal(quantityDTO.qtaTot.get())); + + ColliMagazzinoRESTConsumer.updateRiga(itemToEdit, () ->{ + mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED); + + progress.dismiss(); + mtbColt.get().getMtbColr().set(position, itemToEdit); + + if(mOnItemEditedCallback != null) mOnItemEditedCallback.run(); + }, + ex -> UtilityExceptions.defaultException(mContext, ex, progress)); + + }).show(); } private void onItemDelete(int position) { diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity/DialogInputQuantity.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity/DialogInputQuantity.java index e3182466..2f746752 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity/DialogInputQuantity.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity/DialogInputQuantity.java @@ -19,6 +19,7 @@ import android.view.inputmethod.InputMethodManager; import android.widget.Button; import android.widget.EditText; +import java.math.BigDecimal; import java.util.Calendar; import java.util.GregorianCalendar; @@ -26,19 +27,112 @@ import it.integry.integrywmsnative.BR; import it.integry.integrywmsnative.MainApplication; import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.core.REST.consumers.ISingleValueOperationCallback; +import it.integry.integrywmsnative.core.model.MtbAart; import it.integry.integrywmsnative.core.utility.UtilityDate; -import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneDTO; import it.integry.integrywmsnative.view.dialogs.DialogSimpleMessageHelper; public class DialogInputQuantity { + public static class DTO { + public MtbAart mtbAart; + public String batchLot; + public BigDecimal qtaDaEvadere; + public BigDecimal qtaOrd; + public BigDecimal qtaTot; + public BigDecimal qtaEvasa; + public BigDecimal maxQta; + public String codArtFor; + public boolean canPartitaMagBeChanged; + + public MtbAart getMtbAart() { + return mtbAart; + } + + public DTO setMtbAart(MtbAart mtbAart) { + this.mtbAart = mtbAart; + return this; + } + + public String getBatchLot() { + return batchLot; + } + + public DTO setBatchLot(String batchLot) { + this.batchLot = batchLot; + return this; + } + + public BigDecimal getQtaDaEvadere() { + return qtaDaEvadere; + } + + public DTO setQtaDaEvadere(BigDecimal qtaDaEvadere) { + this.qtaDaEvadere = qtaDaEvadere; + return this; + } + + public BigDecimal getQtaOrd() { + return qtaOrd; + } + + public DTO setQtaOrd(BigDecimal qtaOrd) { + this.qtaOrd = qtaOrd; + return this; + } + + public BigDecimal getQtaTot() { + return qtaTot; + } + + public DTO setQtaTot(BigDecimal qtaTot) { + this.qtaTot = qtaTot; + return this; + } + + public BigDecimal getQtaEvasa() { + return qtaEvasa; + } + + public DTO setQtaEvasa(BigDecimal qtaEvasa) { + this.qtaEvasa = qtaEvasa; + return this; + } + + public BigDecimal getMaxQta() { + return maxQta; + } + + public DTO setMaxQta(BigDecimal maxQta) { + this.maxQta = maxQta; + return this; + } + + public String getCodArtFor() { + return codArtFor; + } + + public DTO setCodArtFor(String codArtFor) { + this.codArtFor = codArtFor; + return this; + } + + public boolean getCanPartitaMagBeChanged() { + return canPartitaMagBeChanged; + } + + public DTO setCanPartitaMagBeChanged(boolean canPartitaMagBeChanged) { + this.canPartitaMagBeChanged = canPartitaMagBeChanged; + return this; + } + } + private static ColorStateList originalColorStateList = null; private static String scadenzaString = "Scadenza"; private static AlertDialog currentAlert; - public static AlertDialog makeBase(final Context context, OrdineAccettazioneDTO.Riga articoloItem, final float qtaEvasa, boolean canOverflowQuantity, final ISingleValueOperationCallback dialogCallback) { + public static AlertDialog makeBase(final Context context, final DTO dto, boolean canOverflowQuantity, final ISingleValueOperationCallback dialogCallback) { LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE ); @@ -60,11 +154,11 @@ public class DialogInputQuantity { final QuantityDTO quantityDTO = new QuantityDTO(); quantityDTO.canOverflowQuantity = canOverflowQuantity; - setupQuantities(articoloItem, quantityDTO, qtaEvasa); + setupQuantities(dto, quantityDTO); setupQuantityListener(quantityDTO, txlInputNumDiCnf, txlInputQtaPerCnf, txlInputQtaTot); - contentView.setVariable(BR.viewmodel, articoloItem); + contentView.setVariable(BR.viewmodel, dto); contentView.setVariable(BR.quantityViewModel, quantityDTO); final AlertDialog.Builder alertDialog = new AlertDialog.Builder(context) @@ -105,23 +199,34 @@ public class DialogInputQuantity { } - private static void setupQuantities(OrdineAccettazioneDTO.Riga articoloItem, QuantityDTO quantityDTO, float qtaEvasa){ - float qtaDaEvadere = articoloItem.getQtaDaEvadere().floatValue(); + private static void setupQuantities(DTO dto, QuantityDTO quantityDTO){ + if(dto.getQtaTot() != null) quantityDTO.qtaTot.set(dto.getQtaTot().floatValue()); + if(dto.getMaxQta() != null) quantityDTO.maxQta = dto.getMaxQta().floatValue(); + + float qtaDaEvadere = dto.qtaDaEvadere != null ? dto.qtaDaEvadere.floatValue() : 0f; if (qtaDaEvadere < 0) qtaDaEvadere = 0; - quantityDTO.qtaEvasa.set(qtaEvasa); - quantityDTO.qtaDaEvadere.set(qtaDaEvadere); + quantityDTO.qtaEvasa.set(dto.qtaEvasa != null ? dto.qtaEvasa.floatValue() : null); + if(qtaDaEvadere > 0) quantityDTO.qtaDaEvadere.set(qtaDaEvadere); - quantityDTO.batchLot.set(articoloItem.partitaMag); - quantityDTO.qtaCnf.set(articoloItem.mtbAart.qtaCnf.floatValue()); - quantityDTO.qtaTot.set(qtaDaEvadere); - quantityDTO.numCnf.set(qtaDaEvadere / quantityDTO.qtaCnf.get()); + quantityDTO.batchLot.set(dto.batchLot); + if(quantityDTO.qtaCnf.get(false) == null) { + quantityDTO.qtaCnf.set(dto.mtbAart.qtaCnf.floatValue()); + } + if(quantityDTO.qtaTot.get(false) == null) { + quantityDTO.qtaTot.set(qtaDaEvadere); + } + if(quantityDTO.numCnf.get(false) == null) { + quantityDTO.numCnf.set(quantityDTO.qtaTot.get() / quantityDTO.qtaCnf.get()); + } - quantityDTO.shouldAskDataScad.set(articoloItem.mtbAart.isFlagTracciabilita() && articoloItem.mtbAart.getGgScadPartita() != null && articoloItem.mtbAart.getGgScadPartita() > 0); + quantityDTO.canPartitaMagBeChanged.set(dto.getCanPartitaMagBeChanged()); - if(quantityDTO.expireDate == null && articoloItem.mtbAart.getGgScadPartita() != null && articoloItem.mtbAart.getGgScadPartita() > 0) { + quantityDTO.shouldAskDataScad.set(dto.mtbAart.isFlagTracciabilita() && dto.mtbAart.getGgScadPartita() != null && dto.mtbAart.getGgScadPartita() > 0); + + if(quantityDTO.expireDate == null && dto.mtbAart.getGgScadPartita() != null && dto.mtbAart.getGgScadPartita() > 0) { Calendar c = Calendar.getInstance(); - c.add(Calendar.DATE, articoloItem.mtbAart.getGgScadPartita()); // number of days to add + c.add(Calendar.DATE, dto.mtbAart.getGgScadPartita()); // number of days to add quantityDTO.expireDate = c.getTime(); } diff --git a/app/src/main/res/layout/dialog_input_quantity_articolo.xml b/app/src/main/res/layout/dialog_input_quantity_articolo.xml index 6b312cf8..cf094ea1 100644 --- a/app/src/main/res/layout/dialog_input_quantity_articolo.xml +++ b/app/src/main/res/layout/dialog_input_quantity_articolo.xml @@ -7,7 +7,7 @@ + type="it.integry.integrywmsnative.view.dialogs.input_quantity.DialogInputQuantity.DTO"/> @@ -43,7 +43,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:ellipsize="end" - android:text='@{(viewmodel.codArtFor != null ? viewmodel.codArtFor : viewmodel.mtbAart.codMart) + (viewmodel.partitaMag != null ? " (" + viewmodel.partitaMag + ")" : "") }' + android:text='@{(viewmodel.codArtFor != null ? viewmodel.codArtFor : viewmodel.mtbAart.codMart) + (viewmodel.batchLot != null ? " (" + viewmodel.batchLot + ")" : "") }' android:textColor="#000" android:textSize="18sp" android:textStyle="bold" @@ -99,6 +99,7 @@ @@ -106,6 +107,7 @@ + app:layout_constraintGuide_percent='@{quantityViewModel.shouldAskDataScad.get() == false ? 1.0f : 0.5f}'/>