Fix vari.

Implementato doppio tap per bloccare/sbloccare caselle di testo in DialogInputQuantity.
This commit is contained in:
Giuseppe Scorrano 2020-04-24 18:31:05 +02:00
parent 1f4f4729d0
commit bef0fa0184
14 changed files with 223 additions and 123 deletions

View File

@ -98,7 +98,7 @@ dependencies {
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta4'
implementation 'androidx.cardview:cardview:1.0.0'
implementation 'androidx.recyclerview:recyclerview:1.1.0'
implementation 'androidx.preference:preference:1.1.0'
implementation 'androidx.preference:preference:1.1.1'
implementation 'com.squareup.okhttp3:okhttp:4.5.0'
implementation 'com.squareup.retrofit2:retrofit:2.8.1'
implementation 'com.squareup.retrofit2:converter-gson:2.8.1'
@ -128,6 +128,7 @@ dependencies {
implementation 'com.fxn769:stash:1.2'
testImplementation 'junit:junit:4.13'
implementation 'com.github.zhukic:sectioned-recyclerview:1.2.3'
implementation 'com.github.pedromassango:doubleClick:3.0'
//SQLite ROOM
def room_version = "2.2.4"

View File

@ -1,10 +1,6 @@
package it.integry.integrywmsnative.core.model;
import android.os.Parcel;
import android.os.Parcelable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import it.integry.integrywmsnative.core.utility.UtilityString;
@ -91,9 +87,18 @@ public class MtbAart extends EntityBase{
private String codNcIntracee;
private String marchio;
private Integer sezione;
private UntMisRifPesoEnum untMisRifPeso;
private List<MtbUntMis> mtbUntMis;
public enum UntMisRifPesoEnum {
C,
M;
}
public MtbAart() {
this.type = "mtb_aart";
}
@ -805,4 +810,13 @@ public class MtbAart extends EntityBase{
this.mtbUntMis = mtbUntMis;
return this;
}
public UntMisRifPesoEnum getUntMisRifPeso() {
return untMisRifPeso;
}
public MtbAart setUntMisRifPeso(UntMisRifPesoEnum untMisRifPeso) {
this.untMisRifPeso = untMisRifPeso;
return this;
}
}

View File

@ -33,6 +33,13 @@ public class UtilityBigDecimal {
return lowerThan(input1, input2) ? input1 : input2;
}
public static BigDecimal getGreaterBetween(BigDecimal input1, BigDecimal input2) {
if(input1 == null) return input2;
if(input2 == null) return input1;
return greaterThan(input1, input2) ? input1 : input2;
}
public static BigDecimal divide(BigDecimal input1, BigDecimal divisor) {
if(divisor == null || equalsTo(divisor, BigDecimal.ZERO)) return null;

View File

@ -43,9 +43,11 @@ import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityProgress;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.core.utility.UtilityToast;
import it.integry.integrywmsnative.databinding.ActivitySpedizioneBinding;
import it.integry.integrywmsnative.gest.spedizione_new.core.SpedizioneListAdapter;
import it.integry.integrywmsnative.gest.spedizione_new.core.SpedizioneListModel;
import it.integry.integrywmsnative.gest.spedizione_new.exceptions.InvalidPesoKGException;
import it.integry.integrywmsnative.gest.spedizione_new.model.PickedQuantityDTO;
import it.integry.integrywmsnative.gest.spedizione_new.model.PickingObjectDTO;
import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaInevasoDTO;
@ -450,7 +452,12 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
public void onError(Exception ex) {
this.closeProgress();
UtilityExceptions.defaultException(this, ex, mCurrentProgress);
if(ex instanceof InvalidPesoKGException) {
UtilityToast.showToast(ex.getMessage());
} else {
UtilityExceptions.defaultException(this, ex, mCurrentProgress);
}
BarcodeManager.enable();
}

View File

@ -50,6 +50,7 @@ import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityPosizione;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.gest.spedizione_new.exceptions.CurrentMonoLUPositionIsNotCorrectException;
import it.integry.integrywmsnative.gest.spedizione_new.exceptions.InvalidPesoKGException;
import it.integry.integrywmsnative.gest.spedizione_new.exceptions.NoPrintersFoundException;
import it.integry.integrywmsnative.gest.spedizione_new.exceptions.OrdersLoadException;
import it.integry.integrywmsnative.gest.spedizione_new.exceptions.NoArtsFoundException;
@ -667,6 +668,9 @@ public class SpedizioneViewModel {
BigDecimal qtaDaEvadere = pickingObjectDTO.getSitArtOrdDTO().getQtaOrd().subtract(qtaColWithdrawRows.getBigDecimalValue());
BigDecimal qtaCnfDaEvadere = qtaCnfOrd;
numCnfDaEvadere = UtilityBigDecimal.getGreaterBetween(numCnfDaEvadere, BigDecimal.ZERO);
qtaDaEvadere = UtilityBigDecimal.getGreaterBetween(qtaDaEvadere, BigDecimal.ZERO);
BigDecimal numCnfDaPrelevare = null;
BigDecimal qtaColDaPrelevare = null;
BigDecimal qtaCnfDaPrelevare = null;
@ -718,11 +722,22 @@ public class SpedizioneViewModel {
PickDataDTO.ManualPickDTO manualPickDTO = pickingObjectDTO.getTempPickData().getManualPickDTO();
MtbAart mtbAart = pickingObjectDTO.getMtbAart();
qtaColDaPrelevare = manualPickDTO.getQtaTot();
numCnfDaPrelevare = manualPickDTO.getNumCnf();
if (mtbAart.isFlagQtaCnfFissaBoolean()) {
qtaCnfDaPrelevare = mtbAart.getQtaCnf();
if(manualPickDTO.isEanPeso()) {
if(mtbAart.getUntMisRifPeso() == MtbAart.UntMisRifPesoEnum.M) {
if (UtilityBigDecimal.equalsTo(mtbAart.getPesoKg(), BigDecimal.ZERO)) {
this.sendError(new InvalidPesoKGException());
} else {
qtaColDaPrelevare = UtilityBigDecimal.divide(qtaColDaPrelevare, mtbAart.getPesoKg());
}
}
}
} else if (qtaColDaPrelevare != null && numCnfDaPrelevare != null) {
qtaCnfDaPrelevare = UtilityBigDecimal.divide(qtaColDaPrelevare, numCnfDaPrelevare);
}
@ -1082,6 +1097,15 @@ public class SpedizioneViewModel {
// }
}
if(UtilityBigDecimal.equalsTo(numCnf, BigDecimal.ZERO) && UtilityBigDecimal.equalsTo(qtaTot, BigDecimal.ZERO)) {
resetMatchedRows();
this.sendOnLoadingEnded();
if (shouldCloseLU) closeLU(shouldPrint);
return;
}
boolean finalShouldPrint = shouldPrint;
mColliMagazzinoRESTConsumer.saveCollo(cloneMtbColt, value -> {

View File

@ -0,0 +1,7 @@
package it.integry.integrywmsnative.gest.spedizione_new.exceptions;
public class InvalidPesoKGException extends Exception {
public InvalidPesoKGException() {
super("Il campo Peso KG dell'articolo non è valido");
}
}

View File

@ -163,7 +163,7 @@ public class MainVenditaFragment extends Fragment implements ITitledFragment, IS
public void refreshOrdini(List<OrdineVenditaInevasoDTO> ordini){
mRenderedOrderList.clear();
mRenderedOrderList.addAll(ordini);
mRenderedOrderList.addAll(ordini != null ? ordini : new ArrayList<>());
}
private void initRecyclerView() {

View File

@ -14,7 +14,6 @@ import androidx.recyclerview.widget.RecyclerView;
import com.annimon.stream.Stream;
import com.zhukic.sectionedrecyclerview.SectionedRecyclerViewAdapter;
import java.util.HashMap;
import java.util.List;
import it.integry.integrywmsnative.R;
@ -130,7 +129,7 @@ public class MainListVenditaAdapter extends SectionedRecyclerViewAdapter<MainLis
if (ordine.isFlagEvaso()) {
holder.binding.emptyView.setBackgroundColor(ResourcesCompat.getColor(mContext.getResources(), R.color.mainGreen, null));
} else if (ordine.isExistCollo()) {
} else if (ordine.isExistColloBoolean()) {
holder.binding.emptyView.setBackgroundColor(ResourcesCompat.getColor(mContext.getResources(), R.color.colorPrimary, null));
} else {
holder.binding.emptyView.setBackgroundColor(ResourcesCompat.getColor(mContext.getResources(), android.R.color.transparent, null));

View File

@ -1,17 +1,12 @@
package it.integry.integrywmsnative.gest.vendita.dto;
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.di.BindableBoolean;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityLogger;
public class OrdineVenditaInevasoDTO {
@ -49,7 +44,7 @@ public class OrdineVenditaInevasoDTO {
private String codVzon;
private String ragSocOrdV;
private int colliRiservati;
private boolean existCollo;
private boolean existColloBoolean;
private boolean flagEvaso;
private String nomeAgente;
private String codJfas;
@ -385,12 +380,12 @@ public class OrdineVenditaInevasoDTO {
return this;
}
public boolean isExistCollo() {
return existCollo;
public boolean isExistColloBoolean() {
return existColloBoolean;
}
public OrdineVenditaInevasoDTO setExistCollo(boolean existCollo) {
this.existCollo = existCollo;
public OrdineVenditaInevasoDTO setExistColloBoolean(boolean existColloBoolean) {
this.existColloBoolean = existColloBoolean;
return this;
}

View File

@ -18,6 +18,8 @@ import androidx.databinding.ObservableField;
import androidx.fragment.app.DialogFragment;
import com.google.android.material.textfield.TextInputLayout;
import com.pedromassango.doubleclick.DoubleClick;
import com.pedromassango.doubleclick.DoubleClickListener;
import org.jetbrains.annotations.NotNull;
@ -218,6 +220,43 @@ public class DialogInputQuantityV2 extends DialogFragment implements DialogInput
}
}
});
//Init double taps
this.mBindings.inputNumCnfText.setOnClickListener(new DoubleClick(new DoubleClickListener() {
@Override
public void onSingleClick(View view) {
String a = "";
}
@Override
public void onDoubleClick(View view) {
mViewModel.blockedNumCnf.set(!mViewModel.blockedNumCnf.get());
}
}));
this.mBindings.inputQtaCnfText.setOnClickListener(new DoubleClick(new DoubleClickListener() {
@Override
public void onSingleClick(View view) {
String a = "";
}
@Override
public void onDoubleClick(View view) {
mViewModel.blockedQtaCnf.set(!mViewModel.blockedQtaCnf.get());
}
}));
this.mBindings.inputQtaTotText.setOnClickListener(new DoubleClick(new DoubleClickListener() {
@Override
public void onSingleClick(View view) {
String a = "";
}
@Override
public void onDoubleClick(View view) {
mViewModel.blockedQtaTot.set(!mViewModel.blockedQtaTot.get());
}
}));
}

View File

@ -1,125 +1,131 @@
<?xml version="1.0" encoding="utf-8"?>
<layout
xmlns:android="http://schemas.android.com/apk/res/android"
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable name="loginViewModel" type="it.integry.integrywmsnative.gest.login.viewmodel.LoginViewModel" />
<variable
name="loginViewModel"
type="it.integry.integrywmsnative.gest.login.viewmodel.LoginViewModel" />
</data>
<ScrollView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:fitsSystemWindows="true">
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:fitsSystemWindows="true">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="56dp"
android:paddingLeft="24dp"
android:paddingRight="24dp">
<ImageView android:src="@drawable/logo_integry_testo"
android:layout_width="wrap_content"
android:layout_height="72dp"
android:layout_marginBottom="24dp"
android:layout_gravity="center_horizontal" />
<!-- Username Label -->
<com.google.android.material.textfield.TextInputLayout
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
app:errorText="@{loginViewModel.usernameError}"
app:hintTextAppearance="@style/hint_text">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/input_username"
android:orientation="vertical"
android:paddingLeft="24dp"
android:paddingTop="56dp"
android:paddingRight="24dp">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="72dp"
android:layout_gravity="center_horizontal"
android:layout_marginBottom="24dp"
android:src="@drawable/logo_integry_testo" />
<!-- Username Label -->
<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textEmailAddress"
android:hint="Username"
app:binding="@{loginViewModel.username}"/>
</com.google.android.material.textfield.TextInputLayout>
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
app:errorText="@{loginViewModel.usernameError}"
app:hintTextAppearance="@style/hint_text"
style="@style/TextInputLayout.OutlinePrimary">
<!-- Password Label -->
<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
app:hintTextAppearance="@style/hint_text"
app:errorText="@{loginViewModel.passwordError}"
app:passwordToggleEnabled="true">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/input_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPassword"
android:hint="Password"
app:binding="@{loginViewModel.password}"/>
</com.google.android.material.textfield.TextInputLayout>
<androidx.appcompat.widget.AppCompatCheckBox
android:id="@+id/login_checkbox_custom_server"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/action_customize_server_settings"
android:enabled="@{loginViewModel.customSettingsCheckboxEnabled}"
app:checked="@{loginViewModel.customSettingsCheckboxChecked}"/>
<net.cachapa.expandablelayout.ExpandableLayout
android:id="@+id/login_layout_server_details"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/gray_detail_background"
app:el_duration="400"
app:el_expanded_bind="@{loginViewModel.customSettingsCheckboxChecked}"
android:paddingTop="6dp"
android:paddingBottom="12dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<!--Host Label-->
<com.google.android.material.textfield.TextInputLayout
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/input_username"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
app:errorText="@{loginViewModel.codAziendaError}"
app:hintTextAppearance="@style/hint_text">
android:hint="Username"
android:inputType="textEmailAddress"
app:binding="@{loginViewModel.username}" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/input_cod_azienda"
<!-- Password Label -->
<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
app:errorText="@{loginViewModel.passwordError}"
app:hintTextAppearance="@style/hint_text"
app:passwordToggleEnabled="true"
style="@style/TextInputLayout.OutlinePrimary">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/input_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Password"
android:inputType="textPassword"
app:binding="@{loginViewModel.password}" />
</com.google.android.material.textfield.TextInputLayout>
<androidx.appcompat.widget.AppCompatCheckBox
android:id="@+id/login_checkbox_custom_server"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:enabled="@{loginViewModel.customSettingsCheckboxEnabled}"
android:text="@string/action_customize_server_settings"
app:checked="@{loginViewModel.customSettingsCheckboxChecked}" />
<net.cachapa.expandablelayout.ExpandableLayout
android:id="@+id/login_layout_server_details"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="6dp"
android:paddingBottom="12dp"
app:el_duration="400"
app:el_expanded_bind="@{loginViewModel.customSettingsCheckboxChecked}">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<!--Host Label-->
<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text"
android:hint="Codice azienda"
app:binding="@{loginViewModel.codAzienda}"/>
</com.google.android.material.textfield.TextInputLayout>
android:layout_marginTop="8dp"
app:errorText="@{loginViewModel.codAziendaError}"
app:hintTextAppearance="@style/hint_text"
style="@style/TextInputLayout.OutlinePrimary">
</LinearLayout>
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/input_cod_azienda"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Codice azienda"
android:inputType="text"
app:binding="@{loginViewModel.codAzienda}" />
</com.google.android.material.textfield.TextInputLayout>
</net.cachapa.expandablelayout.ExpandableLayout>
</LinearLayout>
</net.cachapa.expandablelayout.ExpandableLayout>
<com.google.android.material.button.MaterialButton
android:id="@+id/btn_login"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
style="@style/Button.PrimaryFull"
android:text="@string/login"
android:enabled="@{loginViewModel.loginButtonEnabled}"
app:onClick="@{() -> loginViewModel.login(loginViewModel.validate())}"
android:layout_marginTop="24dp"
android:layout_marginBottom="24dp"/>
<com.google.android.material.button.MaterialButton
android:id="@+id/btn_login"
style="@style/Button.PrimaryFull"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:layout_marginBottom="24dp"
android:enabled="@{loginViewModel.loginButtonEnabled}"
android:text="@string/login"
app:onClick="@{() -> loginViewModel.login(loginViewModel.validate())}" />
</LinearLayout>
</ScrollView>
</androidx.appcompat.widget.LinearLayoutCompat>
</ScrollView>
</layout>

View File

@ -76,8 +76,7 @@
android:background="@drawable/ripple_effect"
app:singleClick="@{() -> spedizioneView.startManualSearch()}"
android:src="@drawable/ic_black_barcode"
android:tint="@color/colorPrimaryGray"
android:visibility="@{BuildConfig.DEBUG ? View.VISIBLE : View.GONE}" />
android:tint="@color/colorPrimaryGray" />
<androidx.appcompat.widget.AppCompatImageButton
@ -88,8 +87,7 @@
android:background="@drawable/ripple_effect"
app:singleClick="@{() -> spedizioneView.startCameraBarcode()}"
android:src="@drawable/ic_photo_camera_black_24dp"
android:tint="@color/colorPrimaryGray"
android:visibility="@{BuildConfig.DEBUG ? View.VISIBLE : View.GONE}" />
android:tint="@color/colorPrimaryGray" />
</androidx.appcompat.widget.Toolbar>

View File

@ -432,6 +432,7 @@
android:layout_height="wrap_content"
android:layout_weight="@{!viewmodel.mtbAart.flagQtaCnfFissaBoolean ? 1f : 1.5f}"
android:paddingEnd="4dp"
android:focusableInTouchMode="false"
android:enabled="@{view.enabledNumCnf}"
tools:layout_weight="1">
@ -453,6 +454,7 @@
android:layout_height="wrap_content"
android:layout_weight="1"
android:paddingEnd="4dp"
android:focusableInTouchMode="false"
android:enabled="@{view.enabledQtaCnf}"
android:visibility="@{!viewmodel.mtbAart.flagQtaCnfFissaBoolean ? View.VISIBLE : View.GONE}">
@ -474,6 +476,7 @@
android:layout_height="wrap_content"
android:layout_weight="@{!viewmodel.mtbAart.flagQtaCnfFissaBoolean ? 1f : 1.5f}"
android:enabled="@{view.enabledQtaTot}"
android:focusableInTouchMode="false"
tools:layout_weight="1">
<com.google.android.material.textfield.TextInputEditText

View File

@ -10,7 +10,7 @@ buildscript {
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.6.2'
classpath 'com.android.tools.build:gradle:3.6.3'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.google.gms:google-services:4.3.3'
classpath 'com.google.firebase:perf-plugin:1.3.1'