From 26361912f4b5d7c38dd72fa93e6accb357603253 Mon Sep 17 00:00:00 2001 From: Giuseppe Scorrano Date: Fri, 16 Nov 2018 19:24:04 +0100 Subject: [PATCH] Implementato bottom sheet per le action di modifica/delete riga in collo. Implementata data scad in DialogInputQuantity. --- .idea/caches/build_file_checksums.ser | Bin 667 -> 667 bytes app/build.gradle | 6 ++ .../integrywmsnative/core/di/Converters.java | 22 +++++ .../AccettazioneOnOrdineInevasoViewModel.java | 7 +- .../gest/main/MainFragment.java | 27 ++---- .../input_quantity/DialogInputQuantity.java | 62 +++++++++++++- .../dialogs/input_quantity/QuantityDTO.java | 5 ++ .../layout/dialog_input_quantity_articolo.xml | 77 +++++++++++++++--- app/src/main/res/values-it/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + build.gradle | 3 +- 11 files changed, 169 insertions(+), 42 deletions(-) diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index 0c52a498c6eb136fd14020e5104fb5160d21989a..ee7cd526bf7575a0dbca772e8fc01d74077d4575 100644 GIT binary patch delta 57 zcmV-90LK5D1)Bwsmj!1I7(9%ToOckkB2Yz{?yqR`M@uqCV}opyBLR*OqOA(HLCt=4 P1pf;uoXM`GlfePnjd2)L delta 57 zcmV-90LK5D1)Bwsmj!0?4-7hyoOck9z^OjRDtmDpmrXCCL2#3kBLR*O<5kv8f|~dP PpoO?jMeeWolfePntmzr@ diff --git a/app/build.gradle b/app/build.gradle index f429e6dc..03dbf57d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -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() 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 a56bb22a..41b5475e 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 @@ -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 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()); 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 ea691bb2..ee42445b 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 @@ -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) diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/main/MainFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/main/MainFragment.java index a9ca7dde..e5960280 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/main/MainFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/main/MainFragment.java @@ -61,17 +61,14 @@ public class MainFragment extends Fragment { private void init(){ - ServerStatusChecker.getIstance().addCallback(new ISingleValueOperationCallback() { - @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)); } 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 5c8e393b..fcaf5719 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 @@ -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 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(); - } } diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity/QuantityDTO.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity/QuantityDTO.java index 6588082d..ef1aa7a4 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity/QuantityDTO.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity/QuantityDTO.java @@ -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(); 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 c034239d..a78c8c3d 100644 --- a/app/src/main/res/layout/dialog_input_quantity_articolo.xml +++ b/app/src/main/res/layout/dialog_input_quantity_articolo.xml @@ -156,22 +156,75 @@ - - + android:layout_height="wrap_content"> - - + android:orientation="vertical" + app:layout_constraintGuide_percent="0.50"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Da evadere Lotto + Data scad Num cnf diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f833010c..5f9167db 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -90,6 +90,7 @@ To dispatch Batch lot + Expire date Pcks num Qty x pck Tot qty diff --git a/build.gradle b/build.gradle index 60f43deb..bd1e2300 100644 --- a/build.gradle +++ b/build.gradle @@ -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' }