diff --git a/app/build.gradle b/app/build.gradle index 83a38b6e..eddc9140 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -6,8 +6,8 @@ apply plugin: 'com.google.gms.google-services' android { - def appVersionCode = 226 - def appVersionName = '1.17.6' + def appVersionCode = 227 + def appVersionName = '1.17.7' signingConfigs { release { 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 35154d16..089702ba 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 @@ -150,6 +150,28 @@ public class Converters { } } + @BindingAdapter("binding") + public static void bindEditText(AutoCompleteTextView view, final ObservableField observableString) { + Pair, TextWatcherAdapter> pair = (Pair) view.getTag(R.id.bound_observable); + if (pair == null || pair.first != observableString) { + if (pair != null) { + view.removeTextChangedListener(pair.second); + } + TextWatcherAdapter watcher = new TextWatcherAdapter() { + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + observableString.set(s.toString()); + } + }; + view.setTag(R.id.bound_observable, new Pair<>(observableString, watcher)); + view.addTextChangedListener(watcher); + } + String newValue = observableString.get(); + if (!view.getText().toString().equals(newValue)) { + view.setText(newValue, false); + } + } + @BindingAdapter("binding") public static void bindTextInputEditText(TextInputEditText view, final BindableString bindableString) { Pair pair = (Pair) view.getTag(R.id.bound_observable); diff --git a/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColt.java b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColt.java index c5d04b8d..84ec9cb1 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColt.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColt.java @@ -385,6 +385,18 @@ public class MtbColt extends EntityBase { return dataVers; } + public Date getDataVersD() { + return UtilityDate.recognizeDateWithExceptionHandler(getDataVers()); + } + + public String getTimeVers() { + Date dataColloD = getDataVersD(); + + if(dataColloD != null){ + return UtilityDate.formatDate(dataColloD, UtilityDate.COMMONS_DATE_FORMATS.TIME); + } else return null; + } + public MtbColt setDataVers(String dataVers) { this.dataVers = dataVers; diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_detail/ProdRientroMerceOrderDetailFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_detail/ProdRientroMerceOrderDetailFragment.java index 2d89aaf2..916af520 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_detail/ProdRientroMerceOrderDetailFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_detail/ProdRientroMerceOrderDetailFragment.java @@ -9,12 +9,15 @@ import android.view.ViewGroup; import androidx.core.content.ContextCompat; import androidx.databinding.DataBindingUtil; import androidx.databinding.ObservableArrayList; +import androidx.databinding.ObservableField; import androidx.fragment.app.Fragment; import androidx.lifecycle.MutableLiveData; import androidx.recyclerview.widget.LinearLayoutManager; +import com.annimon.stream.Stream; import com.google.gson.reflect.TypeToken; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; @@ -22,6 +25,7 @@ import javax.inject.Inject; import it.integry.integrywmsnative.MainApplication; import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.expansion.AtomicBigDecimal; import it.integry.integrywmsnative.core.expansion.BaseFragment; import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.model.DtbOrdSteps; @@ -60,6 +64,12 @@ public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements private RunnableArgs onMtbColtClicked; + + public ObservableField sumLUNumber = new ObservableField<>(BigDecimal.ZERO); + public ObservableField sumColliNumber = new ObservableField<>(BigDecimal.ZERO); + public ObservableField sumNetKG = new ObservableField<>(BigDecimal.ZERO); + public ObservableField sumGrossKG = new ObservableField<>(BigDecimal.ZERO); + public ProdRientroMerceOrderDetailFragment() { // Required empty public constructor } @@ -124,6 +134,29 @@ public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements } private void refreshList(List mtbColts) { + if(mtbColts != null) { + sumLUNumber.set(new BigDecimal(mtbColts.size())); + + AtomicBigDecimal sumColli = new AtomicBigDecimal(BigDecimal.ZERO); + AtomicBigDecimal sumNet = new AtomicBigDecimal(BigDecimal.ZERO); + AtomicBigDecimal sumGross = new AtomicBigDecimal(BigDecimal.ZERO); + + Stream.of(mtbColts) + .forEach(x -> Stream.of(x.getMtbColr()).forEach(y -> { + sumColli.getAndAdd(y.getNumCnf()); + sumNet.getAndAdd(y.getPesoNettoKg()); + sumGross.getAndAdd(y.getPesoLordoKg()); + })); + sumColliNumber.set(sumColli.get()); + sumGrossKG.set(sumGross.get()); + sumNetKG.set(sumNet.get()); + } else { + sumLUNumber.set(BigDecimal.ZERO); + sumColliNumber.set(BigDecimal.ZERO); + sumGrossKG.set(BigDecimal.ZERO); + sumNetKG.set(BigDecimal.ZERO); + } + mAdapter.updateDataset(mtbColts); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_detail/ProdRientroMerceOrderDetailViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_detail/ProdRientroMerceOrderDetailViewModel.java index a7873262..bbadeb59 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_detail/ProdRientroMerceOrderDetailViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_detail/ProdRientroMerceOrderDetailViewModel.java @@ -46,7 +46,9 @@ public class ProdRientroMerceOrderDetailViewModel { this.mProdRientroMerceOrderDetailRESTConsumer.getMtbColtsOfOrder(currentOrder, mtbColts -> { for (MtbColt mtbColt : mtbColts) { - mtbColt.getMtbColr().get(0).setDescrizione(currentOrder.getDescrizioneProd()); + mtbColt.getMtbColr().get(0) + .setDescrizione(currentOrder.getDescrizioneProd()) + .setUntMis(currentOrder.getUntOrd()); } this.mtbColtsOfOrder.postValue(mtbColts); @@ -66,7 +68,7 @@ public class ProdRientroMerceOrderDetailViewModel { .setQtaCnf(pickedQuantityDTO.getPesoCollo()) .setQtaCol(pickedQuantityDTO.getPesoNetto()) .setCodJcom(currentOrder.getCodJcom()) - .setCodJfas(pickedQuantityDTO.getJtbFasi().getCodJfas()) + .setCodJfas(pickedQuantityDTO.getJtbFasi() != null ? pickedQuantityDTO.getJtbFasi().getCodJfas() : null) .setCodMart(currentOrder.getCodProd()) .setCodTcol(pickedQuantityDTO.getMtbTCol().getCodTcol()) .setDataCollo(new Date()) diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_list/ProdRientroMerceOrderListFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_list/ProdRientroMerceOrderListFragment.java index 24ea5663..1c81cd5b 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_list/ProdRientroMerceOrderListFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_list/ProdRientroMerceOrderListFragment.java @@ -106,7 +106,7 @@ public class ProdRientroMerceOrderListFragment extends Fragment { ComparatorCompat comparator = ComparatorCompat .comparing(OrdineLavorazioneDTO::getCodJfas) - .thenComparing(ComparatorCompat.comparing(ordineLavorazioneDTO -> ordineLavorazioneDTO.getDataInizProd() != null ? ordineLavorazioneDTO.getDataInizProd() : "zzzzzzzz")) + .thenComparing(ComparatorCompat.comparing(ordineLavorazioneDTO -> ordineLavorazioneDTO.getDataOrd() != null ? ordineLavorazioneDTO.getDataOrd() : "zzzzzzzz")).reversed() .thenComparing(ComparatorCompat.comparing(OrdineLavorazioneDTO::getNumOrd)); if(dataList == null) return new ArrayList<>(); diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_lu_prod/DialogInputLUProdView.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_lu_prod/DialogInputLUProdView.java index 34475764..9b6c620b 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_lu_prod/DialogInputLUProdView.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_lu_prod/DialogInputLUProdView.java @@ -9,6 +9,7 @@ import android.text.SpannableString; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.view.WindowManager; import android.widget.AdapterView; import androidx.annotation.NonNull; @@ -104,6 +105,7 @@ public class DialogInputLUProdView extends BaseDialogFragment implements DialogI public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setStyle(DialogFragment.STYLE_NORMAL, R.style.AppTheme_NewMaterial_Dialog_FullscreenDialog); + } @@ -131,6 +133,7 @@ public class DialogInputLUProdView extends BaseDialogFragment implements DialogI getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); getDialog().setCanceledOnTouchOutside(false); + getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); return mBindings.getRoot(); } @@ -333,6 +336,7 @@ public class DialogInputLUProdView extends BaseDialogFragment implements DialogI this.mViewModel.getLineeProd().observe(getViewLifecycleOwner(), lineeProd -> { this.enabledLineeProd.set(lineeProd != null && lineeProd.size() > 0); + this.mViewModel.setLineeProdRequired(lineeProd != null && lineeProd.size() > 0); lineeProdArrayAdapter = new DialogInputLULineeProdAdapter(getActivity(), R.layout.array_adapter_single_item, lineeProd); mBindings.filledExposedDropdownCodJfas.setAdapter(lineeProdArrayAdapter); diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_lu_prod/DialogInputLUProdViewModel.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_lu_prod/DialogInputLUProdViewModel.java index beb11faf..92c6a88a 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_lu_prod/DialogInputLUProdViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_lu_prod/DialogInputLUProdViewModel.java @@ -46,6 +46,7 @@ public class DialogInputLUProdViewModel { private MtbTCol internalTipoPed; private JtbFasi internalLineaProd; + private boolean isLineeProdRequired; private Listener mListener; @@ -218,6 +219,11 @@ public class DialogInputLUProdViewModel { return UtilityBigDecimal.multiply(this.internalNumCnf, this.internalPesoCollo.add(internalTaraCol)).add(taraPed); } + public DialogInputLUProdViewModel setLineeProdRequired(boolean lineeProdRequired) { + isLineeProdRequired = lineeProdRequired; + return this; + } + public boolean validate() { if (this.internalNumCnf == null || UtilityBigDecimal.equalsOrLowerThan(this.internalNumCnf, BigDecimal.ZERO)) { this.mListener.onError(new InvalidNumCnfQuantityException()); @@ -225,7 +231,7 @@ public class DialogInputLUProdViewModel { } else if (this.internalPesoLordo == null || UtilityBigDecimal.equalsOrLowerThan(this.internalPesoLordo, BigDecimal.ZERO)) { this.mListener.onError(new InvalidGrossWeightQuantityException()); return false; - } else if(this.internalLineaProd == null) { + } else if(this.internalLineaProd == null && isLineeProdRequired) { this.mListener.onError(new InvalidProductionLineException()); return false; } diff --git a/app/src/main/res/drawable/ic_pallet_96px.png b/app/src/main/res/drawable/ic_pallet_96px.png new file mode 100644 index 00000000..4a8f8c9b Binary files /dev/null and b/app/src/main/res/drawable/ic_pallet_96px.png differ diff --git a/app/src/main/res/drawable/ic_weight_kg_96px.png b/app/src/main/res/drawable/ic_weight_kg_96px.png new file mode 100644 index 00000000..0ae68dba Binary files /dev/null and b/app/src/main/res/drawable/ic_weight_kg_96px.png differ diff --git a/app/src/main/res/layout-land-hdpi/dialog_input_lu_prod.xml b/app/src/main/res/layout-land-hdpi/dialog_input_lu_prod.xml index 776865bc..c02e5843 100644 --- a/app/src/main/res/layout-land-hdpi/dialog_input_lu_prod.xml +++ b/app/src/main/res/layout-land-hdpi/dialog_input_lu_prod.xml @@ -4,7 +4,8 @@ xmlns:tools="http://schemas.android.com/tools"> - + + @@ -37,8 +38,8 @@ + android:background="@color/full_white" + android:orientation="vertical"> + android:scaleType="fitCenter" + android:src="@drawable/ic_erase_96" + android:tint="@android:color/white" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + android:layout_height="wrap_content"> + android:orientation="vertical"> - + android:ellipsize="end" + android:text="@{viewmodel.mtbAart.codMart}" + android:textColor="@color/colorPrimary" + tools:text="COD MART (Partita mag)" /> - - + android:layout_marginTop="4dp" + android:singleLine="false" + android:text="@{viewmodel.mtbAart.descrizioneEstesa}" + tools:text="RAD 25 D H/L 200 - 10 EL B BIANCO" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + diff --git a/app/src/main/res/layout/dialog_input_lu_prod.xml b/app/src/main/res/layout/dialog_input_lu_prod.xml index 05f57e04..a3cdb519 100644 --- a/app/src/main/res/layout/dialog_input_lu_prod.xml +++ b/app/src/main/res/layout/dialog_input_lu_prod.xml @@ -165,8 +165,8 @@ android:layout_height="wrap_content" android:hint="@string/pcks_x_ped" android:enabled="@{view.enabledNumCnf}" - android:imeOptions="actionDone" android:inputType="number" + android:nextFocusForward="@id/input_peso_lordo_text" app:binding="@{view.currentNumCnf}" /> diff --git a/app/src/main/res/layout/fragment_prod_rientro_merce_order_detail.xml b/app/src/main/res/layout/fragment_prod_rientro_merce_order_detail.xml index a943162b..9e59b93a 100644 --- a/app/src/main/res/layout/fragment_prod_rientro_merce_order_detail.xml +++ b/app/src/main/res/layout/fragment_prod_rientro_merce_order_detail.xml @@ -9,6 +9,7 @@ + @@ -183,221 +184,421 @@ - - - + + android:orientation="horizontal" + android:layout_alignParentStart="true" + android:layout_toStartOf="@id/totale_bancali_layout" + android:visibility="@{view.currentOrder.codAnag != null ? View.VISIBLE : View.GONE}"> + + - + android:layout_gravity="center_vertical" + android:orientation="vertical"> + android:text="Provenienza" + android:textAllCaps="true" + android:textAppearance="@style/AppTheme.NewMaterial.Text.ExtraSmall" + android:textStyle="bold" /> + + + + + + + + + + + + + + + + + android:text="Totale bancali" + android:textAllCaps="true" + android:textAppearance="@style/AppTheme.NewMaterial.Text.ExtraSmall" + android:textStyle="bold" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + android:text="Cliente" + android:textAllCaps="true" + android:textAppearance="@style/AppTheme.NewMaterial.Text.ExtraSmall" + android:textStyle="bold" /> + tools:text="GRUNDHOFER GBMH" /> + + - - - - - - - - - - - - - - - - - - - - - - - - - - - + android:layout_alignParentEnd="true" + android:layout_toEndOf="@id/cliente_layout" + android:gravity="end" + android:orientation="horizontal"> + android:layout_gravity="center_vertical" + android:gravity="end" + android:orientation="vertical"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + - - - - - + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - + android:paddingBottom="12dp"> + android:orientation="horizontal" + app:layout_constraintTop_toTopOf="parent"> - + + + android:paddingBottom="2dp" + android:text="@{mtbColt.mtbColr.get(0).numCnf.intValue() + ` col`}" + android:textStyle="bold" + tools:text="45 col" /> - + - + android:orientation="horizontal"> + + + + + + @@ -100,14 +136,14 @@ android:layout_height="wrap_content"> + android:visibility="@{UtilityString.isNullOrEmpty(mtbColt.codJfas) ? View.INVISIBLE : View.VISIBLE}" + tools:text="Linea: L3" />