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

View File

@ -4,6 +4,7 @@ import android.databinding.BindingAdapter;
import android.databinding.BindingConversion;
import android.support.design.widget.TextInputEditText;
import android.support.v4.util.Pair;
import android.support.v7.widget.AppCompatTextView;
import android.util.Log;
import android.view.View;
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")
public static void bindTextInputEditText(TextInputEditText view, final BindableFloat bindableFloat) {
DecimalFormatSymbols otherSymbols = new DecimalFormatSymbols(Locale.getDefault());

View File

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

View File

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

View File

@ -1,6 +1,7 @@
package it.integry.integrywmsnative.view.dialogs.input_quantity;
import android.app.AlertDialog;
import android.app.DatePickerDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.res.ColorStateList;
@ -10,8 +11,10 @@ import android.databinding.ViewDataBinding;
import android.graphics.Color;
import android.os.Handler;
import android.os.SystemClock;
import android.support.design.widget.TextInputEditText;
import android.support.design.widget.TextInputLayout;
import android.support.v4.content.ContextCompat;
import android.support.v7.widget.AppCompatTextView;
import android.text.SpannableString;
import android.util.Log;
import android.view.LayoutInflater;
@ -20,12 +23,19 @@ import android.view.View;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
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.MainApplication;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.REST.consumers.ISimpleOperationCallback;
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.view.dialogs.DialogSimpleMessageHelper;
import it.integry.integrywmsnative.view.dialogs.IButtonDialogAction;
@ -34,6 +44,8 @@ public class DialogInputQuantity {
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) {
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;
}
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;
quantityDTO.qtaEvasa.set(qtaEvasa);
@ -106,7 +121,14 @@ public class DialogInputQuantity {
quantityDTO.qtaTot.set(qtaDaEvadere);
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){
String errorMessage = mContext.getText(R.string.wrong_quantity_input).toString();
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.support.v4.content.ContextCompat;
import java.util.Date;
import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.di.BindableBoolean;
@ -12,6 +14,9 @@ import it.integry.integrywmsnative.core.di.BindableString;
public class QuantityDTO {
public BindableString batchLot = new BindableString();
public BindableString expireDateString = new BindableString();
public Date expireDate = null;
public BindableFloat numCnf = new BindableFloat();
public BindableFloat qtaCnf = new BindableFloat();

View File

@ -156,22 +156,75 @@
</LinearLayout>
<android.support.design.widget.TextInputLayout
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:enabled="@{quantityViewModel.canPartitaMagBeChanged}"
app:hintTextAppearance="@style/hint_text">
android:layout_height="wrap_content">
<android.support.design.widget.TextInputEditText
android:id="@+id/input_partita_mag"
android:layout_width="match_parent"
<android.support.constraint.Guideline
android:id="@+id/guideline_partita_data"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="textNoSuggestions"
android:hint="@string/batch_lot"
app:binding="@{quantityViewModel.batchLot}"/>
</android.support.design.widget.TextInputLayout>
android:orientation="vertical"
app:layout_constraintGuide_percent="0.50"/>
<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
android:layout_width="match_parent"

View File

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

View File

@ -90,6 +90,7 @@
<string name="to_dispatch">To dispatch</string>
<string name="batch_lot">Batch lot</string>
<string name="expire_date">Expire date</string>
<string name="num_pcks">Pcks num</string>
<string name="qty_x_pck">Qty x pck</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.
buildscript {
ext.kotlin_version = '1.2.71'
ext{
kotlin_version = '1.2.71'
kotlin_version = '1.3.0'
gradle_version = '3.2.1'
}