Implementato bottom sheet per le action di modifica/delete riga in collo.

Implementata data scad in DialogInputQuantity.
This commit is contained in:
Giuseppe Scorrano 2018-11-16 19:24:04 +01:00
parent 5a6582fbff
commit 26361912f4
11 changed files with 169 additions and 42 deletions

Binary file not shown.

View File

@ -33,6 +33,7 @@ dependencies {
androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', { androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations' exclude group: 'com.android.support', module: 'support-annotations'
}) })
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'com.orhanobut:logger:2.2.0' implementation 'com.orhanobut:logger:2.2.0'
implementation 'com.android.support:appcompat-v7:27.1.1' implementation 'com.android.support:appcompat-v7:27.1.1'
@ -47,6 +48,7 @@ dependencies {
implementation 'org.parceler:parceler-api:1.1.10' implementation 'org.parceler:parceler-api:1.1.10'
annotationProcessor 'org.parceler:parceler:1.1.10' annotationProcessor 'org.parceler:parceler:1.1.10'
implementation 'com.annimon:stream:1.2.1' implementation 'com.annimon:stream:1.2.1'
//MVVM //MVVM
implementation 'android.arch.lifecycle:extensions:1.1.1' implementation 'android.arch.lifecycle:extensions:1.1.1'
annotationProcessor "android.arch.lifecycle:compiler:1.1.1" annotationProcessor "android.arch.lifecycle:compiler:1.1.1"
@ -58,9 +60,11 @@ dependencies {
implementation 'com.jakewharton:butterknife:8.8.1' implementation 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1' annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
implementation 'br.com.zbra:android-linq:1.1.0' implementation 'br.com.zbra:android-linq:1.1.0'
//FAB //FAB
//implementation 'com.getbase:floatingactionbutton:1.10.1' //implementation 'com.getbase:floatingactionbutton:1.10.1'
implementation 'com.github.clans:fab:1.6.4' implementation 'com.github.clans:fab:1.6.4'
//CUSTOM VIEWS //CUSTOM VIEWS
implementation 'de.hdodenhof:circleimageview:2.2.0' implementation 'de.hdodenhof:circleimageview:2.2.0'
implementation 'net.cachapa.expandablelayout:expandablelayout:2.9.2' implementation 'net.cachapa.expandablelayout:expandablelayout:2.9.2'
@ -70,6 +74,8 @@ dependencies {
implementation 'com.fxn769:stash:1.2' implementation 'com.fxn769:stash:1.2'
testImplementation 'junit:junit:4.12' testImplementation 'junit:junit:4.12'
implementation project(':waterfall_toolbar') implementation project(':waterfall_toolbar')
implementation 'com.mikhaellopez:lazydatepicker:1.0.0'
} }
repositories { repositories {
mavenCentral() mavenCentral()

View File

@ -4,6 +4,7 @@ import android.databinding.BindingAdapter;
import android.databinding.BindingConversion; import android.databinding.BindingConversion;
import android.support.design.widget.TextInputEditText; import android.support.design.widget.TextInputEditText;
import android.support.v4.util.Pair; import android.support.v4.util.Pair;
import android.support.v7.widget.AppCompatTextView;
import android.util.Log; import android.util.Log;
import android.view.View; import android.view.View;
import android.widget.CheckBox; import android.widget.CheckBox;
@ -73,6 +74,27 @@ public class Converters {
} }
} }
@BindingAdapter("app:binding")
public static void bindTextView(AppCompatTextView view, final BindableString bindableString) {
Pair<BindableString, TextWatcherAdapter> pair = (Pair) view.getTag(R.id.bound_observable);
if (pair == null || pair.first != bindableString) {
if (pair != null) {
view.removeTextChangedListener(pair.second);
}
TextWatcherAdapter watcher = new TextWatcherAdapter() {
@Override public void onTextChanged(CharSequence s, int start, int before, int count) {
bindableString.set(s.toString());
}
};
view.setTag(R.id.bound_observable, new Pair<>(bindableString, watcher));
view.addTextChangedListener(watcher);
}
String newValue = bindableString.get();
if (!view.getText().toString().equals(newValue)) {
view.setText(newValue);
}
}
@BindingAdapter("app:binding") @BindingAdapter("app:binding")
public static void bindTextInputEditText(TextInputEditText view, final BindableFloat bindableFloat) { public static void bindTextInputEditText(TextInputEditText view, final BindableFloat bindableFloat) {
DecimalFormatSymbols otherSymbols = new DecimalFormatSymbols(Locale.getDefault()); DecimalFormatSymbols otherSymbols = new DecimalFormatSymbols(Locale.getDefault());

View File

@ -370,9 +370,6 @@ public class AccettazioneOnOrdineInevasoViewModel implements IOnColloClosedCallb
UtilityExceptions.defaultException(mActivity, ex, progress); UtilityExceptions.defaultException(mActivity, ex, progress);
} }
}); });
} }
@ -457,8 +454,7 @@ public class AccettazioneOnOrdineInevasoViewModel implements IOnColloClosedCallb
x -> x.getCodMart().equalsIgnoreCase(item.mtbAart.codMart) && x -> x.getCodMart().equalsIgnoreCase(item.mtbAart.codMart) &&
x.getNumOrd() == item.numOrd && x.getNumOrd() == item.numOrd &&
(x.getCodJcom() != null && x.getCodJcom().equalsIgnoreCase(item.codJcom)) && (x.getCodJcom() != null && x.getCodJcom().equalsIgnoreCase(item.codJcom)) &&
x.getRigaOrd() == item.rigaOrd x.getRigaOrd() == item.rigaOrd).toList();
).toList();
float qtaEvasaInMtbColr = 0; float qtaEvasaInMtbColr = 0;
for (MtbColr mtbColr : filteredMtbColrs) { for (MtbColr mtbColr : filteredMtbColrs) {
@ -479,6 +475,7 @@ public class AccettazioneOnOrdineInevasoViewModel implements IOnColloClosedCallb
final MtbColr mtbColr = new MtbColr() final MtbColr mtbColr = new MtbColr()
.setCodMart(item.mtbAart.codMart) .setCodMart(item.mtbAart.codMart)
.setPartitaMag(quantityDTO.batchLot.get()) .setPartitaMag(quantityDTO.batchLot.get())
.setDataScadPartita(quantityDTO.expireDate)
.setQtaCol(new BigDecimal(quantityDTO.qtaTot.get())) .setQtaCol(new BigDecimal(quantityDTO.qtaTot.get()))
.setDescrizione(item.descrizioneEstesa) .setDescrizione(item.descrizioneEstesa)
.setNumOrd(item.numOrd) .setNumOrd(item.numOrd)

View File

@ -61,17 +61,14 @@ public class MainFragment extends Fragment {
private void init(){ private void init(){
ServerStatusChecker.getIstance().addCallback(new ISingleValueOperationCallback<Boolean>() { ServerStatusChecker.getIstance().addCallback(value -> {
@Override if(value && mNoConnectionLayout.isExpanded()){
public void onResult(Boolean value) {
if(value && mNoConnectionLayout.isExpanded()){
collapseNoConnectionLayout(); collapseNoConnectionLayout();
} else if(!value && !mNoConnectionLayout.isExpanded()){ } else if(!value && !mNoConnectionLayout.isExpanded()){
expandNoConnectionLayout(); expandNoConnectionLayout();
}
} }
}); });
@ -80,21 +77,11 @@ public class MainFragment extends Fragment {
} }
private void collapseNoConnectionLayout(){ private void collapseNoConnectionLayout(){
getActivity().runOnUiThread(new Runnable() { if(getActivity() != null) getActivity().runOnUiThread(() -> mNoConnectionLayout.collapse(true));
@Override
public void run() {
mNoConnectionLayout.collapse(true);
}
});
} }
private void expandNoConnectionLayout(){ private void expandNoConnectionLayout(){
getActivity().runOnUiThread(new Runnable() { if(getActivity() != null) getActivity().runOnUiThread(() -> mNoConnectionLayout.expand(true));
@Override
public void run() {
mNoConnectionLayout.expand(true);
}
});
} }

View File

@ -1,6 +1,7 @@
package it.integry.integrywmsnative.view.dialogs.input_quantity; package it.integry.integrywmsnative.view.dialogs.input_quantity;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.app.DatePickerDialog;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.res.ColorStateList; import android.content.res.ColorStateList;
@ -10,8 +11,10 @@ import android.databinding.ViewDataBinding;
import android.graphics.Color; import android.graphics.Color;
import android.os.Handler; import android.os.Handler;
import android.os.SystemClock; import android.os.SystemClock;
import android.support.design.widget.TextInputEditText;
import android.support.design.widget.TextInputLayout; import android.support.design.widget.TextInputLayout;
import android.support.v4.content.ContextCompat; import android.support.v4.content.ContextCompat;
import android.support.v7.widget.AppCompatTextView;
import android.text.SpannableString; import android.text.SpannableString;
import android.util.Log; import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
@ -20,12 +23,19 @@ import android.view.View;
import android.view.WindowManager; import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager; import android.view.inputmethod.InputMethodManager;
import android.widget.Button; import android.widget.Button;
import android.widget.DatePicker;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import it.integry.integrywmsnative.BR; import it.integry.integrywmsnative.BR;
import it.integry.integrywmsnative.MainApplication; import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.REST.consumers.ISimpleOperationCallback; import it.integry.integrywmsnative.core.REST.consumers.ISimpleOperationCallback;
import it.integry.integrywmsnative.core.REST.consumers.ISingleValueOperationCallback; import it.integry.integrywmsnative.core.REST.consumers.ISingleValueOperationCallback;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneDTO; import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneDTO;
import it.integry.integrywmsnative.view.dialogs.DialogSimpleMessageHelper; import it.integry.integrywmsnative.view.dialogs.DialogSimpleMessageHelper;
import it.integry.integrywmsnative.view.dialogs.IButtonDialogAction; import it.integry.integrywmsnative.view.dialogs.IButtonDialogAction;
@ -34,6 +44,8 @@ public class DialogInputQuantity {
private static ColorStateList originalColorStateList = null; private static ColorStateList originalColorStateList = null;
private static String scadenzaString = "Scadenza";
public static AlertDialog makeBase(final Context context, OrdineAccettazioneDTO.Riga articoloItem, final float qtaEvasa, final ISingleValueOperationCallback<QuantityDTO> dialogCallback) { public static AlertDialog makeBase(final Context context, OrdineAccettazioneDTO.Riga articoloItem, final float qtaEvasa, final ISingleValueOperationCallback<QuantityDTO> dialogCallback) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE ); LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE );
@ -90,12 +102,15 @@ public class DialogInputQuantity {
}); });
}); });
initDatePicker(context, quantityDTO, contentView.getRoot().findViewById(R.id.input_data_scad));
return alert; return alert;
} }
private static void setupQuantities(OrdineAccettazioneDTO.Riga articoloItem, QuantityDTO quantityDTO, float qtaEvasa){ private static void setupQuantities(OrdineAccettazioneDTO.Riga articoloItem, QuantityDTO quantityDTO, float qtaEvasa){
float qtaDaEvadere = articoloItem.qtaOrd - qtaEvasa; float qtaDaEvadere = articoloItem.getQtaDaEvadere().floatValue();
if (qtaDaEvadere < 0) qtaDaEvadere = 0; if (qtaDaEvadere < 0) qtaDaEvadere = 0;
quantityDTO.qtaEvasa.set(qtaEvasa); quantityDTO.qtaEvasa.set(qtaEvasa);
@ -106,7 +121,14 @@ public class DialogInputQuantity {
quantityDTO.qtaTot.set(qtaDaEvadere); quantityDTO.qtaTot.set(qtaDaEvadere);
quantityDTO.numCnf.set(qtaDaEvadere / quantityDTO.qtaCnf.get()); quantityDTO.numCnf.set(qtaDaEvadere / quantityDTO.qtaCnf.get());
quantityDTO.shouldAskDataScad.set(articoloItem.mtbAart.isFlagTracciabilita() && articoloItem.mtbAart.ggScadPartita != null && articoloItem.mtbAart.ggScadPartita > 0); quantityDTO.shouldAskDataScad.set(articoloItem.mtbAart.isFlagTracciabilita() && articoloItem.mtbAart.getGgScadPartita() != null && articoloItem.mtbAart.getGgScadPartita() > 0);
if(quantityDTO.expireDate == null && articoloItem.mtbAart.getGgScadPartita() != null && articoloItem.mtbAart.getGgScadPartita() > 0) {
Calendar c = Calendar.getInstance();
c.add(Calendar.DATE, articoloItem.mtbAart.getGgScadPartita()); // number of days to add
quantityDTO.expireDate = c.getTime();
}
} }
@ -243,13 +265,47 @@ public class DialogInputQuantity {
} }
private static void initDatePicker(Context context, QuantityDTO quantityDTO, AppCompatTextView textInputLayout) {
quantityDTO.expireDateString.set(scadenzaString);
if(quantityDTO.expireDate != null) {
quantityDTO.expireDateString.set(UtilityDate.formatDate(quantityDTO.expireDate, UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN));
}
Runnable onTextClicked = () -> {
// Get Current Date
Calendar c = Calendar.getInstance();
if(quantityDTO.expireDate != null) {
c.setTime(quantityDTO.expireDate);
}
int mYear = c.get(Calendar.YEAR);
int mMonth = c.get(Calendar.MONTH);
int mDay = c.get(Calendar.DAY_OF_MONTH);
DatePickerDialog datePickerDialog = new DatePickerDialog(context,
(view, year, month, day) -> {
quantityDTO.expireDate = new GregorianCalendar(year, month, day).getTime();
quantityDTO.expireDateString.set(UtilityDate.formatDate(quantityDTO.expireDate, UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN));
}, mYear, mMonth, mDay);
datePickerDialog.show();
};
textInputLayout.setOnClickListener(v -> onTextClicked.run());
}
private static void showQuantityErrorDialog(Context mContext){ private static void showQuantityErrorDialog(Context mContext){
String errorMessage = mContext.getText(R.string.wrong_quantity_input).toString(); String errorMessage = mContext.getText(R.string.wrong_quantity_input).toString();
DialogSimpleMessageHelper.makeErrorDialog(mContext, new SpannableString(errorMessage), null, null).show(); DialogSimpleMessageHelper.makeErrorDialog(mContext, new SpannableString(errorMessage), null, null).show();
} }
} }

View File

@ -3,6 +3,8 @@ package it.integry.integrywmsnative.view.dialogs.input_quantity;
import android.graphics.Color; import android.graphics.Color;
import android.support.v4.content.ContextCompat; import android.support.v4.content.ContextCompat;
import java.util.Date;
import it.integry.integrywmsnative.MainApplication; import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.di.BindableBoolean; import it.integry.integrywmsnative.core.di.BindableBoolean;
@ -12,6 +14,9 @@ import it.integry.integrywmsnative.core.di.BindableString;
public class QuantityDTO { public class QuantityDTO {
public BindableString batchLot = new BindableString(); public BindableString batchLot = new BindableString();
public BindableString expireDateString = new BindableString();
public Date expireDate = null;
public BindableFloat numCnf = new BindableFloat(); public BindableFloat numCnf = new BindableFloat();
public BindableFloat qtaCnf = new BindableFloat(); public BindableFloat qtaCnf = new BindableFloat();

View File

@ -156,22 +156,75 @@
</LinearLayout> </LinearLayout>
<android.support.constraint.ConstraintLayout
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content">
android:enabled="@{quantityViewModel.canPartitaMagBeChanged}"
app:hintTextAppearance="@style/hint_text">
<android.support.design.widget.TextInputEditText <android.support.constraint.Guideline
android:id="@+id/input_partita_mag" android:id="@+id/guideline_partita_data"
android:layout_width="match_parent" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:inputType="textNoSuggestions" android:orientation="vertical"
android:hint="@string/batch_lot" app:layout_constraintGuide_percent="0.50"/>
app:binding="@{quantityViewModel.batchLot}"/>
</android.support.design.widget.TextInputLayout>
<android.support.design.widget.TextInputLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:enabled="@{quantityViewModel.canPartitaMagBeChanged}"
app:hintTextAppearance="@style/hint_text"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/guideline_partita_data"
android:nextFocusRight="@+id/input_data_scad">
<android.support.design.widget.TextInputEditText
android:id="@+id/input_partita_mag"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textNoSuggestions"
android:hint="@string/batch_lot"
app:binding="@{quantityViewModel.batchLot}"/>
</android.support.design.widget.TextInputLayout>
<android.support.v7.widget.AppCompatTextView
android:id="@+id/input_data_scad"
android:layout_width="0dp"
android:layout_height="wrap_content"
tools:text="11 nov 2018"
android:textSize="16sp"
android:enabled="@{quantityViewModel.shouldAskDataScad.get()}"
app:binding="@{quantityViewModel.expireDateString}"
app:layout_constraintStart_toEndOf="@id/guideline_partita_data"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<!--<android.support.design.widget.TextInputLayout-->
<!--android:id="@+id/input_data_scad_layout"-->
<!--android:layout_width="0dp"-->
<!--android:layout_height="wrap_content"-->
<!--android:enabled="@{quantityViewModel.shouldAskDataScad.get()}"-->
<!--app:hintTextAppearance="@style/hint_text"-->
<!--app:layout_constraintStart_toEndOf="@id/guideline_partita_data"-->
<!--app:layout_constraintEnd_toEndOf="parent">-->
<!--<android.support.design.widget.TextInputEditText-->
<!--android:id="@+id/input_data_scad"-->
<!--android:layout_width="match_parent"-->
<!--android:layout_height="wrap_content"-->
<!--android:inputType="textNoSuggestions"-->
<!--android:hint="@string/expire_date"-->
<!--app:binding="@{quantityViewModel.expireDate}"/>-->
<!--</android.support.design.widget.TextInputLayout>-->
</android.support.constraint.ConstraintLayout>
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"

View File

@ -84,6 +84,7 @@
<string name="to_dispatch">Da evadere</string> <string name="to_dispatch">Da evadere</string>
<string name="batch_lot">Lotto</string> <string name="batch_lot">Lotto</string>
<string name="expire_date">Data scad</string>
<string name="num_pcks">Num cnf</string> <string name="num_pcks">Num cnf</string>
<string name="qty_x_pck"><![CDATA[Qtà x cnf]]></string> <string name="qty_x_pck"><![CDATA[Qtà x cnf]]></string>
<string name="tot_qty"><![CDATA[Qtà tot]]></string> <string name="tot_qty"><![CDATA[Qtà tot]]></string>

View File

@ -90,6 +90,7 @@
<string name="to_dispatch">To dispatch</string> <string name="to_dispatch">To dispatch</string>
<string name="batch_lot">Batch lot</string> <string name="batch_lot">Batch lot</string>
<string name="expire_date">Expire date</string>
<string name="num_pcks">Pcks num</string> <string name="num_pcks">Pcks num</string>
<string name="qty_x_pck">Qty x pck</string> <string name="qty_x_pck">Qty x pck</string>
<string name="tot_qty">Tot qty</string> <string name="tot_qty">Tot qty</string>

View File

@ -1,9 +1,8 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules. // Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript { buildscript {
ext.kotlin_version = '1.2.71'
ext{ ext{
kotlin_version = '1.2.71' kotlin_version = '1.3.0'
gradle_version = '3.2.1' gradle_version = '3.2.1'
} }