diff --git a/app/build.gradle b/app/build.gradle index 8279b966..9db9edb1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -6,8 +6,8 @@ apply plugin: 'com.google.gms.google-services' android { - def appVersionCode = 253 - def appVersionName = '1.21.1' + def appVersionCode = 254 + def appVersionName = '1.22.0' signingConfigs { release { @@ -134,7 +134,6 @@ dependencies { implementation 'com.github.cachapa:ExpandableLayout:2.9.2' implementation 'com.github.frankiesardo:linearlistview:1.0.1@aar' implementation 'com.github.fede87:StatusBarAlert:1.0.1' - implementation 'com.github.akshay2211:Stash:master' testImplementation 'junit:junit:4.13.2' implementation 'com.github.zhukic:sectioned-recyclerview:1.2.3' implementation 'com.github.pedromassango:doubleClick:3.0' diff --git a/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java b/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java index 6ad0f074..60078c14 100644 --- a/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java +++ b/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java @@ -19,6 +19,8 @@ import it.integry.integrywmsnative.gest.contenuto_bancale.ContenutoBancaleCompon import it.integry.integrywmsnative.gest.contenuto_bancale.ContenutoBancaleModule; import it.integry.integrywmsnative.gest.lista_bancali.ListaBancaliComponent; import it.integry.integrywmsnative.gest.lista_bancali.ListaBancaliModule; +import it.integry.integrywmsnative.gest.login.LoginComponent; +import it.integry.integrywmsnative.gest.login.LoginModule; import it.integry.integrywmsnative.gest.main.MainActivityComponent; import it.integry.integrywmsnative.gest.main.MainActivityModule; import it.integry.integrywmsnative.gest.main.MainFragmentComponent; @@ -76,6 +78,7 @@ import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCr RoomModule.class, SplashActivityModule.class, MainApplicationModule.class, + LoginModule.class, MainActivityModule.class, MainFragmentModule.class, MainAccettazioneModule.class, @@ -111,6 +114,7 @@ import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCr public interface MainApplicationComponent { SplashActivityComponent.Factory splashActivityComponent(); + LoginComponent.Factory loginActivityComponent(); MainActivityComponent.Factory mainActivityComponent(); MainFragmentComponent.Factory mainFragmentComponent(); MainAccettazioneComponent.Factory mainAccettazioneComponent(); diff --git a/app/src/main/java/it/integry/integrywmsnative/SplashActivity.java b/app/src/main/java/it/integry/integrywmsnative/SplashActivity.java index 8b870565..4af69432 100644 --- a/app/src/main/java/it/integry/integrywmsnative/SplashActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/SplashActivity.java @@ -1,5 +1,6 @@ package it.integry.integrywmsnative; +import android.content.Context; import android.content.Intent; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; @@ -38,6 +39,12 @@ public class SplashActivity extends BaseActivity implements MainContext.Listener private RunnableArgsss> onRequestPermissionResult; + public static void startActivity(Context context) { + Intent intent = new Intent(context, SplashActivity.class); + context.startActivity(intent); + } + + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); 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 612cc005..d882780d 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 @@ -551,6 +551,12 @@ public class Converters { } + @BindingAdapter("visibility") + public static void bindViewVisibility(View view, boolean bool) { + view.setVisibility(bool ? View.VISIBLE : View.GONE); + } + + @BindingAdapter({"reverse_visibility"}) public static void bindViewReverseVisibility(View view, final BindableBoolean bindableBoolean) { if (view.getTag(R.id.bound_observable) != bindableBoolean) { diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliMagazzinoRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliMagazzinoRESTConsumer.java index c9bf2a9e..7eb06e37 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliMagazzinoRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliMagazzinoRESTConsumer.java @@ -2,6 +2,7 @@ package it.integry.integrywmsnative.core.rest.consumers; import androidx.databinding.ObservableArrayList; +import com.annimon.stream.Optional; import com.annimon.stream.Stream; import com.google.gson.Gson; import com.google.gson.JsonObject; @@ -32,6 +33,7 @@ import it.integry.integrywmsnative.core.rest.model.DistribuzioneColloDTO; import it.integry.integrywmsnative.core.rest.model.RettificaULDTO; import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; import it.integry.integrywmsnative.core.rest.model.SpostaArtsTraULRequestDTO; +import it.integry.integrywmsnative.core.rest.model.VersamentoAutomaticoULResponseDTO; import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.utility.UtilityBarcode; import it.integry.integrywmsnative.core.utility.UtilityDate; @@ -646,4 +648,58 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer { }); } + + public void versamentoAutomaticoUL(MtbColt sourceMtbColt, RunnableArgs onComplete, RunnableArgs onFailed) { + MtbColt sourceMtbColtClone = (MtbColt) sourceMtbColt.clone(); + + for (int i = 0; i < sourceMtbColtClone.getMtbColr().size(); i++) { + sourceMtbColtClone.getMtbColr().get(i) + .setMtbAart(null) + .setMtbPartitaMag(null); + } + + ColliMagazzinoRESTConsumerService colliMagazzinoRESTConsumerService = RESTBuilder.getService(ColliMagazzinoRESTConsumerService.class); + colliMagazzinoRESTConsumerService.versamentoAutomaticoUL(sourceMtbColtClone).enqueue(new Callback<>() { + @Override + public void onResponse(Call> call, Response> response) { + analyzeAnswer(response, "versamentoAutomaticoUL", data -> { + var result = response.body().getDto(); + + List allMtbColr = new ArrayList<>(); + allMtbColr.addAll(result.getSuccess()); + allMtbColr.addAll(result.getFailed()); + + List codMarts = Stream.of(allMtbColr) + .map(x -> x.getCodMart().trim()) + .toList(); + + mArticoloRESTConsumer.getByCodMarts(codMarts, mtbAarts -> { + for (var mtbColr : allMtbColr) { + + MtbAart foundMtbAart = null; + + Optional mtbAartOpt = Stream.of(mtbAarts) + .filter(x -> x.getCodMart().equalsIgnoreCase(mtbColr.getCodMart())) + .findFirst(); + + if(mtbAartOpt.isPresent()){ + foundMtbAart = mtbAartOpt.get(); + } + + mtbColr.setMtbAart(foundMtbAart); + } + + onComplete.run(result); + }, onFailed); + + }, onFailed); + } + + @Override + public void onFailure(Call> call, Throwable t) { + if (onFailed != null) onFailed.run(new Exception(t)); + } + }); + } + } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliMagazzinoRESTConsumerService.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliMagazzinoRESTConsumerService.java index 5de74373..5d30dce7 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliMagazzinoRESTConsumerService.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliMagazzinoRESTConsumerService.java @@ -10,6 +10,7 @@ import it.integry.integrywmsnative.core.rest.model.DistribuzioneColloDTO; import it.integry.integrywmsnative.core.rest.model.RettificaULDTO; import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; import it.integry.integrywmsnative.core.rest.model.SpostaArtsTraULRequestDTO; +import it.integry.integrywmsnative.core.rest.model.VersamentoAutomaticoULResponseDTO; import retrofit2.Call; import retrofit2.http.Body; import retrofit2.http.GET; @@ -42,4 +43,7 @@ public interface ColliMagazzinoRESTConsumerService { @POST("wms/assegnaLottoSuColloScarico") Call> assegnaLottoSuColloScarico(@Body MtbColt mtbColt); + @POST("wms/versamentoAutomaticoUL") + Call> versamentoAutomaticoUL(@Body MtbColt mtbColt); + } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/SystemRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/SystemRESTConsumer.java index af2494ae..65cd40d4 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/SystemRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/SystemRESTConsumer.java @@ -100,7 +100,11 @@ public class SystemRESTConsumer extends _BaseRESTConsumer { } - public static void getAvailableCodMdeps(final RunnableArgs> onSuccess, RunnableArgs onFailed) { + public void getAvailableCodMdeps(final RunnableArgs> onSuccess, RunnableArgs onFailed) { + getAvailableCodMdepsStatic(onSuccess, onFailed); + } + + public static void getAvailableCodMdepsStatic(final RunnableArgs> onSuccess, RunnableArgs onFailed) { SystemRESTConsumerService service = RESTBuilder.getService(SystemRESTConsumerService.class); service.getAvailableCodMdeps().enqueue(new Callback<>() { diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/model/VersamentoAutomaticoULResponseDTO.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/model/VersamentoAutomaticoULResponseDTO.java new file mode 100644 index 00000000..6ababa07 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/model/VersamentoAutomaticoULResponseDTO.java @@ -0,0 +1,29 @@ +package it.integry.integrywmsnative.core.rest.model; + +import java.util.List; + +import it.integry.integrywmsnative.core.model.MtbColr; + +public class VersamentoAutomaticoULResponseDTO { + + private List success; + private List failed; + + public List getSuccess() { + return success; + } + + public VersamentoAutomaticoULResponseDTO setSuccess(List success) { + this.success = success; + return this; + } + + public List getFailed() { + return failed; + } + + public VersamentoAutomaticoULResponseDTO setFailed(List failed) { + this.failed = failed; + return this; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java b/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java index 7dc252b2..b32e234f 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java @@ -130,7 +130,7 @@ public class SettingsManager { } private static void loadAvailableCodMdeps(Runnable onComplete, RunnableArgs onFailed) { - SystemRESTConsumer.getAvailableCodMdeps(availableCodMdeps -> { + SystemRESTConsumer.getAvailableCodMdepsStatic(availableCodMdeps -> { dbSettingsModelIstance.setAvailableCodMdep(availableCodMdeps); if (availableCodMdeps == null || availableCodMdeps.size() == 0) { diff --git a/app/src/main/java/it/integry/integrywmsnative/core/settings/Stash.java b/app/src/main/java/it/integry/integrywmsnative/core/settings/Stash.java index b8200779..9b9dd969 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/settings/Stash.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/settings/Stash.java @@ -13,13 +13,19 @@ import java.lang.reflect.Type; import java.util.ArrayList; import java.util.Set; +/** + * Created by akshay on 01/03/18. + */ + public class Stash { private static Stash stash; + private static Context instance; private SharedPreferences sp; public static void init(Context context) { stash = new Stash(); + instance = context; if (stash.sp == null) { stash.sp = PreferenceManager.getDefaultSharedPreferences(context); } @@ -34,7 +40,7 @@ public class Stash { public static void put(String key, String value) { checkfornull(); try { - stash.sp.edit().putString(key, value).apply(); + stash.sp.edit().putString(key, value).commit(); } catch (Exception e) { e.printStackTrace(); } @@ -44,7 +50,7 @@ public class Stash { public static void put(String key, Set value) { checkfornull(); try { - stash.sp.edit().putStringSet(key, value).apply(); + stash.sp.edit().putStringSet(key, value).commit(); } catch (Exception e) { e.printStackTrace(); } @@ -54,7 +60,7 @@ public class Stash { public static void put(String key, int value) { checkfornull(); try { - stash.sp.edit().putInt(key, value).apply(); + stash.sp.edit().putInt(key, value).commit(); } catch (Exception e) { e.printStackTrace(); } @@ -64,7 +70,7 @@ public class Stash { public static void put(String key, long value) { checkfornull(); try { - stash.sp.edit().putLong(key, value).apply(); + stash.sp.edit().putLong(key, value).commit(); } catch (Exception e) { e.printStackTrace(); } @@ -74,7 +80,7 @@ public class Stash { public static void put(String key, float value) { checkfornull(); try { - stash.sp.edit().putFloat(key, value).apply(); + stash.sp.edit().putFloat(key, value).commit(); } catch (Exception e) { e.printStackTrace(); } @@ -84,7 +90,7 @@ public class Stash { public static void put(String key, boolean value) { checkfornull(); try { - stash.sp.edit().putBoolean(key, value).apply(); + stash.sp.edit().putBoolean(key, value).commit(); } catch (Exception e) { e.printStackTrace(); } @@ -95,7 +101,7 @@ public class Stash { checkfornull(); try { Gson gson = new GsonBuilder().create(); - stash.sp.edit().putString(key, gson.toJson(value).toString()).apply(); + stash.sp.edit().putString(key, gson.toJson(value)).commit(); } catch (Exception e) { e.printStackTrace(); } @@ -112,18 +118,26 @@ public class Stash { } } + public static String getString(String key) { + return getString(key, ""); + } + //getStringSet public static Set getStringSet(String key, Set defaultvalue) { checkfornull(); try { - return getStringSet(key, defaultvalue); + return stash.sp.getStringSet(key, defaultvalue); } catch (Exception e) { e.printStackTrace(); return defaultvalue; } } + public static Set getStringSet(String key) { + return getStringSet(key, null); + } + //getInt public static int getInt(String key, int defaultvalue) { checkfornull(); @@ -135,6 +149,10 @@ public class Stash { } } + public static int getInt(String key) { + return getInt(key, 0); + } + //getLong public static long getLong(String key, long defaultvalue) { checkfornull(); @@ -146,6 +164,10 @@ public class Stash { } } + public static long getLong(String key) { + return getLong(key, (long) 0); + } + //getFloat public static float getFloat(String key, float defaultvalue) { checkfornull(); @@ -157,6 +179,10 @@ public class Stash { } } + public static float getFloat(String key) { + return getFloat(key, 0.0f); + } + //getBoolean public static boolean getBoolean(String key, boolean defaultvalue) { checkfornull(); @@ -168,6 +194,10 @@ public class Stash { } } + public static boolean getBoolean(String key) { + return getBoolean(key, false); + } + //getObject public static Object getObject(String key, Class tClass) { checkfornull(); @@ -196,7 +226,7 @@ public class Stash { public static void clear(String key) { checkfornull(); try { - stash.sp.edit().remove(key).apply(); + stash.sp.edit().remove(key).commit(); } catch (Exception e) { e.printStackTrace(); } @@ -206,12 +236,22 @@ public class Stash { public static void clearAll() { checkfornull(); try { - stash.sp.edit().clear().apply(); + stash.sp.edit().clear().commit(); } catch (Exception e) { e.printStackTrace(); } } + public static void addListener(StashListener listener){ + checkfornull(); + stash.sp.registerOnSharedPreferenceChangeListener(listener); + } + + public static void removeListener(StashListener listener){ + checkfornull(); + stash.sp.unregisterOnSharedPreferenceChangeListener(listener); + } + private static class GenericType implements ParameterizedType { private Type type; @@ -238,4 +278,7 @@ public class Stash { // implement equals method too! (as per javadoc) } -} + public interface StashListener extends SharedPreferences.OnSharedPreferenceChangeListener { + + } +} \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingActivity.java index 4846afb9..30dbcaf0 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingActivity.java @@ -21,6 +21,8 @@ import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.Map; +import java.util.Objects; import javax.inject.Inject; @@ -33,6 +35,7 @@ import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; import it.integry.integrywmsnative.core.data_cache.DataCache; import it.integry.integrywmsnative.core.di.BindableBoolean; import it.integry.integrywmsnative.core.expansion.BaseActivity; +import it.integry.integrywmsnative.core.expansion.OnGeneralChangedCallback; import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgss; import it.integry.integrywmsnative.core.model.MtbAart; @@ -41,6 +44,7 @@ import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; import it.integry.integrywmsnative.core.report.ReportManager; import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer; +import it.integry.integrywmsnative.core.rest.model.VersamentoAutomaticoULResponseDTO; import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.utility.UtilityBigDecimal; import it.integry.integrywmsnative.core.utility.UtilityExceptions; @@ -50,20 +54,28 @@ import it.integry.integrywmsnative.core.utility.UtilityToast; import it.integry.integrywmsnative.databinding.ActivityAccettazioneOrdineInevasoBinding; import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO; import it.integry.integrywmsnative.gest.accettazione.dto.SitArtOrdDTO; -import it.integry.integrywmsnative.gest.accettazione_picking.ui.AccettazioneListAdapter; -import it.integry.integrywmsnative.gest.accettazione_picking.ui.AccettazioneListModel; import it.integry.integrywmsnative.gest.accettazione_picking.dto.AccettazioneOrdineInevasoOrderBy; import it.integry.integrywmsnative.gest.accettazione_picking.dto.PickingObjectDTO; +import it.integry.integrywmsnative.gest.accettazione_picking.filters.AccettazionePickingFiltroOrdineViewModel; +import it.integry.integrywmsnative.gest.accettazione_picking.filters.FilterCodArtLayoutView; +import it.integry.integrywmsnative.gest.accettazione_picking.filters.FilterDescrLayoutView; +import it.integry.integrywmsnative.gest.accettazione_picking.filters.FilterPosizioneLayoutView; import it.integry.integrywmsnative.gest.accettazione_picking.rest.RecoverMtbColt; +import it.integry.integrywmsnative.gest.accettazione_picking.ui.AccettazioneListAdapter; +import it.integry.integrywmsnative.gest.accettazione_picking.ui.AccettazioneListModel; import it.integry.integrywmsnative.gest.lista_bancali.ListaBancaliActivity; import it.integry.integrywmsnative.gest.spedizione.exceptions.InvalidPesoKGException; import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO; +import it.integry.integrywmsnative.ui.filter_chips.FilterChipDTO; +import it.integry.integrywmsnative.ui.filter_chips.FilterChipView; import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentView; import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentViewModel; +import it.integry.integrywmsnative.view.dialogs.ask_should_versamento_automatico_ul.DialogAskShouldVersamentoAutomaticoULView; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; -import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View; import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO; +import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View; import it.integry.integrywmsnative.view.dialogs.note_aggiuntive_lu.NoteAggiuntiveLUDialog; +import it.integry.integrywmsnative.view.dialogs.versamento_automatico_ul_done.DialogVersamentoAutomaticoULDoneView; public class AccettazionePickingActivity extends BaseActivity implements AccettazionePickingViewModel.Listener, BottomSheetFragmentLUContentViewModel.Listener, BottomSheetFragmentLUContentView.Listener { @@ -72,6 +84,8 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta @Inject AccettazionePickingViewModel mViewModel; + private final AccettazionePickingFiltroOrdineViewModel mAppliedFilterViewModel = new AccettazionePickingFiltroOrdineViewModel(); + private BottomSheetFragmentLUContentViewModel mBottomSheetFragmentLUContentViewModel; private final ObservableArrayList mAccettazioneMutableData = new ObservableArrayList<>(); @@ -123,6 +137,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta this.initVars(); this.initBarcodeReader(); this.initRecyclerView(); + this.initFilters(); String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep(); @@ -130,6 +145,158 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta mViewModel.init(mOrders, mSitArts, codMdep); } + private void initFilters() { + + var onPredicateChanged = new OnGeneralChangedCallback() { + @Override + public void run() { + refreshList(); + } + }; + + mAppliedFilterViewModel.getCurrentCodArtPredicate().addOnPropertyChangedCallback(onPredicateChanged); + mAppliedFilterViewModel.getCurrentDescrPredicate().addOnPropertyChangedCallback(onPredicateChanged); + mAppliedFilterViewModel.getCurrentPosPredicate().addOnPropertyChangedCallback(onPredicateChanged); + + List filterList = Stream.of(AccettazionePickingBindings.AVAILABLE_FILTERS.entrySet()) + .map(Map.Entry::getValue) + .sortBy(FilterChipDTO::getPosizione) + .toList(); + + for (FilterChipDTO filterChipDTO : filterList) { + + FilterChipView filterChipView = new FilterChipView( + this, + filterChipDTO.getFilterChipText(), + v -> initBottomSheetDialogFilter(filterChipDTO)); + + switch (filterChipDTO.getID()) { + case AccettazionePickingBindings.COD_ART_FILTER_ID: + mAppliedFilterViewModel.getCurrentCodArtPredicate().addOnPropertyChangedCallback(new OnGeneralChangedCallback() { + @Override + public void run() { + if (mAppliedFilterViewModel.getCurrentCodArtPredicate().get() == null) { + mViewModel.resetMatchedRows(); + filterChipView.disableCloseIcon(); + + mBindings.filterChipsGroup.removeView(filterChipView); + mBindings.filterChipsGroup.addView(filterChipView); + mBindings.filterChips.smoothScrollTo(0, 0); + } else { + filterChipView.enableCloseIcon(); + + mBindings.filterChipsGroup.removeView(filterChipView); + mBindings.filterChipsGroup.addView(filterChipView, 0); + mBindings.filterChips.smoothScrollTo(0, 0); + } + } + }); + filterChipView.setOnResetClicked(() -> mAppliedFilterViewModel.getCurrentCodArtPredicate().set(null)); + break; + case AccettazionePickingBindings.DESCR_FILTER_ID: + mAppliedFilterViewModel.getCurrentDescrPredicate().addOnPropertyChangedCallback(new OnGeneralChangedCallback() { + @Override + public void run() { + if (mAppliedFilterViewModel.getCurrentDescrPredicate().get() == null) { + mViewModel.resetMatchedRows(); + filterChipView.disableCloseIcon(); + + mBindings.filterChipsGroup.removeView(filterChipView); + mBindings.filterChipsGroup.addView(filterChipView); + mBindings.filterChips.smoothScrollTo(0, 0); + } else { + filterChipView.enableCloseIcon(); + + mBindings.filterChipsGroup.removeView(filterChipView); + mBindings.filterChipsGroup.addView(filterChipView, 0); + mBindings.filterChips.smoothScrollTo(0, 0); + } + } + }); + filterChipView.setOnResetClicked(() -> mAppliedFilterViewModel.getCurrentDescrPredicate().set(null)); + break; + case AccettazionePickingBindings.POS_FILTER_ID: + mAppliedFilterViewModel.getCurrentPosPredicate().addOnPropertyChangedCallback(new OnGeneralChangedCallback() { + @Override + public void run() { + if (mAppliedFilterViewModel.getCurrentPosPredicate().get() == null) { + mViewModel.resetMatchedRows(); + filterChipView.disableCloseIcon(); + + mBindings.filterChipsGroup.removeView(filterChipView); + mBindings.filterChipsGroup.addView(filterChipView); + mBindings.filterChips.smoothScrollTo(0, 0); + } else { + filterChipView.enableCloseIcon(); + + mBindings.filterChipsGroup.removeView(filterChipView); + mBindings.filterChipsGroup.addView(filterChipView, 0); + mBindings.filterChips.smoothScrollTo(0, 0); + } + } + }); + filterChipView.setOnResetClicked(() -> mAppliedFilterViewModel.getCurrentPosPredicate().set(null)); + break; + } + + this.mBindings.filterChipsGroup.addView(filterChipView); + } + } + + + private void initBottomSheetDialogFilter(FilterChipDTO filterChipDTO) { + + filterChipDTO + .getFilterLayoutView() + .setFilterName(filterChipDTO.getFilterChipText()) + .setContext(this); + + var filterLayoutView = filterChipDTO + .getFilterLayoutView(); + + switch (filterChipDTO.getID()) { + case AccettazionePickingBindings.COD_ART_FILTER_ID: + ((FilterCodArtLayoutView) filterLayoutView) + .setAll(mAppliedFilterViewModel.getAllCodArts()) + .setAvailable(mAppliedFilterViewModel.getAvailableCodArts()) + .setOnFilterApplied(mAppliedFilterViewModel::setCodArtFilter) + .setPreselected(Stream.of(Objects.requireNonNull(mViewModel.getPickingList().getValue())) + .filter(mAppliedFilterViewModel.getCurrentCodArtPredicate().get() == null ? + x -> false : + mAppliedFilterViewModel.getCurrentCodArtPredicate().get()) + .map(x -> x.getSitArtOrdDTO().getCodMart()) + .toList()); + break; + case AccettazionePickingBindings.DESCR_FILTER_ID: + ((FilterDescrLayoutView) filterLayoutView) + .setAll(mAppliedFilterViewModel.getAllDescrs()) + .setAvailable(mAppliedFilterViewModel.getAvailableDescrs()) + .setOnFilterApplied(mAppliedFilterViewModel::setDescrFilter) + .setPreselected(Stream.of(Objects.requireNonNull(mViewModel.getPickingList().getValue())) + .filter(mAppliedFilterViewModel.getCurrentDescrPredicate().get() == null ? + x -> false : + mAppliedFilterViewModel.getCurrentDescrPredicate().get()) + .map(x -> x.getSitArtOrdDTO().getDescrizioneEstesaArt()) + .toList()); + break; + case AccettazionePickingBindings.POS_FILTER_ID: + ((FilterPosizioneLayoutView) filterLayoutView) + .setAll(mAppliedFilterViewModel.getAllPos()) + .setAvailable(mAppliedFilterViewModel.getAvailablePos()) + .setOnFilterApplied(mAppliedFilterViewModel::setPosFilter) + .setPreselected(Stream.of(Objects.requireNonNull(mViewModel.getPickingList().getValue())) + .filter(mAppliedFilterViewModel.getCurrentPosPredicate().get() == null ? + x -> false : + mAppliedFilterViewModel.getCurrentPosPredicate().get()) + .map(x -> x.getMtbAart().getPosizione()) + .toList()); + break; + + } + + filterLayoutView.show(getSupportFragmentManager(), "TAG"); + } + @Override public boolean onSupportNavigateUp() { onBackPressed(); @@ -162,7 +329,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta // Handle item selection switch (item.getItemId()) { case R.id.action_filter: - showOrderDialog(); + showOrderByDialog(); return true; default: return super.onOptionsItemSelected(item); @@ -189,6 +356,8 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta this.mBindings.accettazionePickingList.setLayoutManager(new LinearLayoutManager(this)); this.mViewModel.getPickingList().observe(this, updatedData -> { + mAppliedFilterViewModel.init(updatedData); + refreshList(); }); @@ -198,9 +367,28 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta } private void refreshList() { - this.mAccettazioneMutableData.clear(); - this.mAccettazioneMutableData.addAll(convertDataModelToListModel(this.mViewModel.getPickingList().getValue())); - this.noItemsToPick.set(!isThereAnyItemToPick(this.mViewModel.getPickingList().getValue())); + //this.onLoadingStarted(); + + //new Thread(() -> { + + runOnUiThread(() -> { + List tmpList; + + if (mAppliedFilterViewModel != null) { + mAppliedFilterViewModel.applyAllTests(); + tmpList = mAppliedFilterViewModel.getMutableFilteredOrderList().getValue(); + } else { + tmpList = mViewModel.getPickingList().getValue(); + } + + var list = convertDataModelToListModel(tmpList); + + this.mAccettazioneMutableData.clear(); + this.mAccettazioneMutableData.addAll(list); + this.noItemsToPick.set(!isThereAnyItemToPick(tmpList)); + + //this.onLoadingEnded(); + }); } private List convertDataModelToListModel(List dataList) { @@ -228,17 +416,21 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta private List convertDataModelToListModel__CodArtForn(List dataList) { ArrayList list = new ArrayList<>(); Stream.of(dataList) - .sortBy(x -> x.getSitArtOrdDTO().getCodArtFor() + (UtilityString.isNullOrEmpty(x.getMtbAart().getDescrizioneEstesa()) ? "" : " - " + x.getMtbAart().getDescrizioneEstesa())) + .sortBy(x -> UtilityString.isNull(x.getSitArtOrdDTO().getCodArtFor(), x.getSitArtOrdDTO().getCodMart()) + + (UtilityString.isNullOrEmpty(x.getMtbAart().getDescrizioneEstesa()) ? "" : " - " + x.getMtbAart().getDescrizioneEstesa())) .forEach(x -> { AccettazioneListModel accettazioneListModel = new AccettazioneListModel(); accettazioneListModel.setActive(true); - accettazioneListModel.setGroupTitle(x.getSitArtOrdDTO().getCodArtFor() + (UtilityString.isNullOrEmpty(x.getMtbAart().getDescrizioneEstesa()) ? "" : " - " + x.getMtbAart().getDescrizioneEstesa())); + accettazioneListModel.setGroupTitle(UtilityString.isNull(x.getSitArtOrdDTO().getCodArtFor(), x.getSitArtOrdDTO().getCodMart()) + + (UtilityString.isNullOrEmpty(x.getMtbAart().getDescrizioneEstesa()) ? "" : " - " + x.getMtbAart().getDescrizioneEstesa())); accettazioneListModel.setBadge1(UtilityString.isNull(x.getSitArtOrdDTO().getCodJcom(), CommonConst.Config.COMMESSA_MAG)); accettazioneListModel.setBadge2(String.valueOf(x.getSitArtOrdDTO().getNumOrd())); accettazioneListModel.setDescrizione(x.getSitArtOrdDTO().getDescrizioneCommessa()); + if (x.getMtbAart() != null) + accettazioneListModel.setPosizione(x.getMtbAart().getPosizione()); //Calc Num CNF BigDecimal numCnfEvasa = BigDecimal.ZERO; @@ -295,12 +487,15 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta AccettazioneListModel accettazioneListModel = new AccettazioneListModel(); accettazioneListModel.setActive(true); - accettazioneListModel.setGroupTitle(x.getSitArtOrdDTO().getCodArtFor() + (UtilityString.isNullOrEmpty(x.getMtbAart().getDescrizioneEstesa()) ? "" : " - " + x.getMtbAart().getDescrizioneEstesa())); + accettazioneListModel.setGroupTitle(UtilityString.isNull(x.getSitArtOrdDTO().getCodArtFor(), x.getSitArtOrdDTO().getCodMart()) + + (UtilityString.isNullOrEmpty(x.getMtbAart().getDescrizioneEstesa()) ? "" : " - " + x.getMtbAart().getDescrizioneEstesa())); accettazioneListModel.setBadge1(UtilityString.isNull(x.getSitArtOrdDTO().getCodJcom(), CommonConst.Config.COMMESSA_MAG)); accettazioneListModel.setBadge2(String.valueOf(x.getSitArtOrdDTO().getNumOrd())); accettazioneListModel.setDescrizione(x.getSitArtOrdDTO().getDescrizioneCommessa()); + if (x.getMtbAart() != null) + accettazioneListModel.setPosizione(x.getMtbAart().getPosizione()); //Calc Num CNF BigDecimal numCnfEvasa = BigDecimal.ZERO; @@ -361,7 +556,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta accettazioneListModel.setGroupTitle(x.getSitArtOrdDTO().getCodJcom() + (!UtilityString.isNullOrEmpty(x.getSitArtOrdDTO().getDescrizioneCommessa()) ? " - " + x.getSitArtOrdDTO().getDescrizioneCommessa() : "")); - accettazioneListModel.setBadge1(x.getSitArtOrdDTO().getCodArtFor()); + accettazioneListModel.setBadge1(UtilityString.isNull(x.getSitArtOrdDTO().getCodArtFor(), x.getSitArtOrdDTO().getCodMart())); accettazioneListModel.setBadge2(String.valueOf(x.getSitArtOrdDTO().getNumOrd())); //Calc Num CNF @@ -405,6 +600,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta if (x.getMtbAart() != null) { accettazioneListModel.setDescrizione(x.getMtbAart().getDescrizioneEstesa()); + accettazioneListModel.setPosizione(x.getMtbAart().getPosizione()); } accettazioneListModel.setOriginalModel(x); @@ -420,7 +616,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta accettazioneListModel.setGroupTitle(UtilityString.isNull(x.getSitArtOrdDTO().getCodJcom(), CommonConst.Config.COMMESSA_MAG)); - accettazioneListModel.setBadge1(x.getSitArtOrdDTO().getCodArtFor()); + accettazioneListModel.setBadge1(UtilityString.isNull(x.getSitArtOrdDTO().getCodArtFor(), x.getSitArtOrdDTO().getCodMart())); accettazioneListModel.setBadge2(String.valueOf(x.getSitArtOrdDTO().getNumOrd())); @@ -514,8 +710,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta this.mViewModel.retrieveExistentLU(this::startListaBancaliRegistratiActivity); } - private void showOrderDialog() { - + private void showOrderByDialog() { AlertDialog dialog = new AlertDialog.Builder(this) .setTitle(this.getText(R.string.action_orderBy)) .setSingleChoiceItems(AccettazioneOrdineInevasoOrderBy.descriptions, mCurrentOrderBy.getVal(), (dialog12, which) -> { @@ -527,7 +722,6 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta dialog.show(); } - public void startListaBancaliRegistratiActivity(ArrayList mtbColts) { Intent myIntent = ListaBancaliActivity.createIntent(this, @@ -560,7 +754,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta null, R.string.button_ignore_print, onComplete) - .show(getSupportFragmentManager(), "tag"); + .show(getSupportFragmentManager(), "tag"); } @Override @@ -588,9 +782,19 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta this.mViewModel.closeLU(); } + @Override + public void onVersamentoAutomaticoULRequest(RunnableArgs onComplete) { + runOnUiThread(() -> { + DialogAskShouldVersamentoAutomaticoULView.newInstance(onComplete) + .show(getSupportFragmentManager(), "tag"); + }); + } + @Override public void onNoteAggiuntiveRequest(RunnableArgs onComplete) { - NoteAggiuntiveLUDialog.make(this, onComplete::run, () -> onComplete.run(null)).show(); + runOnUiThread(() -> { + NoteAggiuntiveLUDialog.make(this, onComplete).show(); + }); } @Override @@ -645,44 +849,72 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta @Override public void onRowSaved() { - FBToast.successToast(this, getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT); + runOnUiThread(() -> { + FBToast.successToast(this, getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT); + }); } @Override - public void onFilterApplied(String newValue) { - this.mBindings.filteredArtsInListExpandableLayout.expand(true); - this.mBindings.descriptionFilterText.setText(!UtilityString.isNullOrEmpty(newValue) ? newValue : ""); + public void onFilterCodMartApplied(String codMartToFilter) { + runOnUiThread(() -> { + var codMarts = new ArrayList(); + codMarts.add(codMartToFilter); + + this.mAppliedFilterViewModel.setCodArtFilter(codMarts); + }); } @Override - public void onFilterRemoved() { - mBindings.filteredArtsInListExpandableLayout.collapse(true); + public void onFilterPosizioneApplied(String posizioneToFilter) { + runOnUiThread(() -> { + var posizioni = new ArrayList(); + posizioni.add(posizioneToFilter); + + this.mAppliedFilterViewModel.setPosFilter(posizioni); + }); + } + + @Override + public void onULVersata(VersamentoAutomaticoULResponseDTO versamentoAutomaticoULResponseDTO, Runnable onComplete) { + + runOnUiThread(() -> { + DialogVersamentoAutomaticoULDoneView + .newInstance(versamentoAutomaticoULResponseDTO, onComplete) + .show(getSupportFragmentManager(), "tag"); + }); + } @Override public void onMtbColrDeleteRequest(RunnableArgs onComplete) { - String text = getResources().getString(R.string.alert_delete_mtb_colr); - DialogSimpleMessageView.makeWarningDialog(new SpannableString(text), - null, - () -> onComplete.run(true), - () -> onComplete.run(false) - ).show(getSupportFragmentManager(), "tag"); + runOnUiThread(() -> { + String text = getResources().getString(R.string.alert_delete_mtb_colr); + DialogSimpleMessageView.makeWarningDialog(new SpannableString(text), + null, + () -> onComplete.run(true), + () -> onComplete.run(false) + ).show(getSupportFragmentManager(), "tag"); + }); } @Override public void onLUOpened(MtbColt mtbColt) { - noLUPresent.set(false); - FBToast.successToast(this, getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT); + runOnUiThread(() -> { + noLUPresent.set(false); + FBToast.successToast(this, getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT); - this.mBottomSheetFragmentLUContentViewModel.setMtbColt(mtbColt); + this.mBottomSheetFragmentLUContentViewModel.setMtbColt(mtbColt); + }); } @Override public void onLUClosed() { - noLUPresent.set(true); - this.mBottomSheetFragmentLUContentViewModel.setMtbColt(null); + runOnUiThread(() -> { + noLUPresent.set(true); + this.mBottomSheetFragmentLUContentViewModel.setMtbColt(null); - if (this.mShouldCloseActivity) super.onBackPressed(); + if (this.mShouldCloseActivity) super.onBackPressed(); + }); } @Override diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingBindings.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingBindings.java new file mode 100644 index 00000000..3fdb02c2 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingBindings.java @@ -0,0 +1,37 @@ +package it.integry.integrywmsnative.gest.accettazione_picking; + +import java.util.HashMap; + +import it.integry.integrywmsnative.gest.accettazione_picking.filters.FilterCodArtLayoutView; +import it.integry.integrywmsnative.gest.accettazione_picking.filters.FilterDescrLayoutView; +import it.integry.integrywmsnative.gest.accettazione_picking.filters.FilterPosizioneLayoutView; +import it.integry.integrywmsnative.ui.filter_chips.FilterChipDTO; + +public class AccettazionePickingBindings { + + public static final int COD_ART_FILTER_ID = 0; + public static final int DESCR_FILTER_ID = 1; + public static final int POS_FILTER_ID = 2; + + public static final HashMap AVAILABLE_FILTERS = new HashMap<>() { + { + put(COD_ART_FILTER_ID, new FilterChipDTO() + .setID(COD_ART_FILTER_ID) + .setPosizione(0) + .setFilterChipText("Codice articolo") + .setFilterLayoutView(new FilterCodArtLayoutView())); + + put(DESCR_FILTER_ID, new FilterChipDTO() + .setID(DESCR_FILTER_ID) + .setPosizione(1) + .setFilterChipText("Descrizione articolo") + .setFilterLayoutView(new FilterDescrLayoutView())); + + put(POS_FILTER_ID, new FilterChipDTO() + .setID(POS_FILTER_ID) + .setPosizione(1) + .setFilterChipText("Posizione") + .setFilterLayoutView(new FilterPosizioneLayoutView())); + }}; + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingViewModel.java index cc6e5df7..d72c941b 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingViewModel.java @@ -42,11 +42,13 @@ import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsume import it.integry.integrywmsnative.core.rest.consumers.GestSetupRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer; import it.integry.integrywmsnative.core.rest.model.Ean13PesoModel; +import it.integry.integrywmsnative.core.rest.model.VersamentoAutomaticoULResponseDTO; import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.utility.UtilityBarcode; import it.integry.integrywmsnative.core.utility.UtilityBigDecimal; import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.core.utility.UtilityString; +import it.integry.integrywmsnative.core.utility.UtilityThread; import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO; import it.integry.integrywmsnative.gest.accettazione.dto.SitArtOrdDTO; import it.integry.integrywmsnative.gest.accettazione_picking.dto.HistoryMtbAartDTO; @@ -243,6 +245,10 @@ public class AccettazionePickingViewModel { this.executeEtichettaEanPeso(barcodeScanDTO, onComplete); + } else if (UtilityBarcode.isEtichettaPosizione(barcodeScanDTO)) { + //Applico filtro per posizione + this.executeEtichettaPosizione(barcodeScanDTO, onComplete); + } else if (UtilityBarcode.isEtichetta128(barcodeScanDTO)) { //Cerco tramite etichetta ean 128 (che può indicarmi un articolo o una UL) this.executeEtichettaEan128(barcodeScanDTO, onComplete); @@ -293,6 +299,15 @@ public class AccettazionePickingViewModel { }, this::sendError); } + private void executeEtichettaPosizione(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) { + + var optionalPos = Stream.of(SettingsManager.iDB().getAvailablePosizioni()) + .filter(x -> x.getPosizione().equalsIgnoreCase(barcodeScanDTO.getStringValue())) + .findFirst(); + + this.sendFilterPosizioneApplied(optionalPos.get().getPosizione()); + onComplete.run(); + } private void loadArticolo(String barcodeProd, PickDataDTO pickData, Runnable onComplete) { if (barcodeProd.length() == 14) { @@ -332,16 +347,14 @@ public class AccettazionePickingViewModel { } else if (matchedRows.size() == 1) { this.dispatchOrdineRow(matchedRows.get(0)); } else { - List pickingList = mPickingList.getValue(); + //So che il codMart sarà solo 1 + var firstCodMart = Stream.of(matchedRows) + .map(x -> x.getSitArtOrdDTO().getCodMart()) + .distinct() + .findFirst() + .get(); - for (int i = 0; i < pickingList.size(); i++) { - if (!matchedRows.contains(pickingList.get(i))) { - pickingList.get(i).setHidden(true); - } - } - - this.sendFilterApplied(null); - this.getPickingList().postValue(pickingList); + this.sendFilterCodMartApplied(firstCodMart); } } @@ -571,64 +584,67 @@ public class AccettazionePickingViewModel { public void saveNewRow(PickingObjectDTO pickingObjectDTO, BigDecimal numCnf, BigDecimal qtaCnf, BigDecimal qtaTot, String partitaMag, Date dataScad, boolean shouldCloseLU) { this.sendOnLoadingStarted(); - String gestioneRif = pickingObjectDTO.getSitArtOrdDTO().getGestioneEnum() == GestioneEnum.PRODUZIONE ? "L" : pickingObjectDTO.getSitArtOrdDTO().getGestione(); + UtilityThread.executeParallel(() -> { - final MtbColr mtbColr = new MtbColr() - .setCodMart(pickingObjectDTO.getMtbAart().getCodMart()) - .setPartitaMag(partitaMag) - .setDataScadPartita(dataScad) - .setQtaCol(qtaTot) - .setQtaCnf(qtaCnf) - .setNumCnf(numCnf) - .setGestioneRif(gestioneRif) - .setCodJcom(pickingObjectDTO.getSitArtOrdDTO().getCodJcom()) - .setDescrizione(pickingObjectDTO.getMtbAart().getDescrizioneEstesa()) - .setDatetimeRow(UtilityDate.getDateInstance()) - .setDataOrd(pickingObjectDTO.getSitArtOrdDTO().getDataOrd()) - .setNumOrd(pickingObjectDTO.getSitArtOrdDTO().getNumOrd()) - .setRigaOrd(pickingObjectDTO.getSitArtOrdDTO().getRigaOrd()); + String gestioneRif = pickingObjectDTO.getSitArtOrdDTO().getGestioneEnum() == GestioneEnum.PRODUZIONE ? "L" : pickingObjectDTO.getSitArtOrdDTO().getGestione(); + + final MtbColr mtbColr = new MtbColr() + .setCodMart(pickingObjectDTO.getMtbAart().getCodMart()) + .setPartitaMag(partitaMag) + .setDataScadPartita(dataScad) + .setQtaCol(qtaTot) + .setQtaCnf(qtaCnf) + .setNumCnf(numCnf) + .setGestioneRif(gestioneRif) + .setCodJcom(pickingObjectDTO.getSitArtOrdDTO().getCodJcom()) + .setDescrizione(pickingObjectDTO.getMtbAart().getDescrizioneEstesa()) + .setDatetimeRow(UtilityDate.getDateInstance()) + .setDataOrd(pickingObjectDTO.getSitArtOrdDTO().getDataOrd()) + .setNumOrd(pickingObjectDTO.getSitArtOrdDTO().getNumOrd()) + .setRigaOrd(pickingObjectDTO.getSitArtOrdDTO().getRigaOrd()); - this.addHistoryItem(mtbColr); + this.addHistoryItem(mtbColr); - mtbColr.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE); + mtbColr.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE); - MtbColt cloneMtbColt = (MtbColt) mCurrentMtbColt.clone(); - cloneMtbColt.setOperation(CommonModelConsts.OPERATION.UPDATE); + MtbColt cloneMtbColt = (MtbColt) mCurrentMtbColt.clone(); + cloneMtbColt.setOperation(CommonModelConsts.OPERATION.UPDATE); - cloneMtbColt.setMtbColr(new ObservableArrayList<>()); - cloneMtbColt.getMtbColr().add((MtbColr) mtbColr.clone()); + cloneMtbColt.setMtbColr(new ObservableArrayList<>()); + cloneMtbColt.getMtbColr().add((MtbColr) mtbColr.clone()); - if (UtilityBigDecimal.equalsTo(numCnf, BigDecimal.ZERO) && UtilityBigDecimal.equalsTo(qtaTot, BigDecimal.ZERO)) { - resetMatchedRows(); - this.sendOnLoadingEnded(); + if (UtilityBigDecimal.equalsTo(numCnf, BigDecimal.ZERO) && UtilityBigDecimal.equalsTo(qtaTot, BigDecimal.ZERO)) { + resetMatchedRows(); + this.sendOnLoadingEnded(); - if (shouldCloseLU) closeLU(); - return; - } + if (shouldCloseLU) closeLU(); + return; + } - mColliMagazzinoRESTConsumer.saveCollo(cloneMtbColt, value -> { + mColliMagazzinoRESTConsumer.saveCollo(cloneMtbColt, value -> { - mtbColr - .setDataCollo(value.getDataColloS()) - .setNumCollo(value.getNumCollo()) - .setGestione(value.getGestione()) - .setSerCollo(value.getSerCollo()) - .setRiga(value.getMtbColr().get(value.getMtbColr().size() - 1).getRiga()) - .setUntMis(pickingObjectDTO.getMtbAart().getUntMis()) - .setMtbAart(pickingObjectDTO.getMtbAart()); + mtbColr + .setDataCollo(value.getDataColloS()) + .setNumCollo(value.getNumCollo()) + .setGestione(value.getGestione()) + .setSerCollo(value.getSerCollo()) + .setRiga(value.getMtbColr().get(value.getMtbColr().size() - 1).getRiga()) + .setUntMis(pickingObjectDTO.getMtbAart().getUntMis()) + .setMtbAart(pickingObjectDTO.getMtbAart()); - pickingObjectDTO.getWithdrawMtbColrs().add(mtbColr); - mCurrentMtbColt.getMtbColr().add(mtbColr); + pickingObjectDTO.getWithdrawMtbColrs().add(mtbColr); + mCurrentMtbColt.getMtbColr().add(mtbColr); - //Chiamato removeListFilter perché cosi mi cancella tutti i dati di pick temporanei - resetMatchedRows(); + //Chiamato removeListFilter perché cosi mi cancella tutti i dati di pick temporanei + resetMatchedRows(); - this.sendOnRowSaved(); - this.sendOnLoadingEnded(); + this.sendOnRowSaved(); + this.sendOnLoadingEnded(); - if (shouldCloseLU) closeLU(); - }, this::sendError); + if (shouldCloseLU) closeLU(); + }, this::sendError); + }, false); } @@ -772,19 +788,40 @@ public class AccettazionePickingViewModel { } else { mColliMagazzinoRESTConsumer.updateDataFine(mCurrentMtbColt, () -> { - if (!mCurrentMtbColt.getDisablePrint()) { - printCollo(this::postCloseOperations); - } else { - postCloseOperations(); - } + Runnable onVersamentoCompleted = () -> { + if (!mCurrentMtbColt.getDisablePrint()) { + printCollo(this::postCloseOperations); + } else { + postCloseOperations(); + } + + this.sendLUClosed(); + this.sendOnLoadingEnded(); + }; + + sendVersamentoAutomaticoULRequest(response -> { + if (response) { + versaAutomaticamenteUL(onVersamentoCompleted); + } else { + onVersamentoCompleted.run(); + } + }); + - this.sendLUClosed(); - this.sendOnLoadingEnded(); }, this::sendError); } }, this::sendError); } + public void versaAutomaticamenteUL(Runnable onComplete) { + if (mCurrentMtbColt == null) return; + + mColliMagazzinoRESTConsumer.versamentoAutomaticoUL(mCurrentMtbColt, versamentoResult -> { + this.notifyVersamentoAutomaticoResult(versamentoResult, onComplete); + }, this::sendError); + } + + private void printCollo(Runnable onComplete) { MtbColt cloneMtbColt = (MtbColt) mCurrentMtbColt.clone(); cloneMtbColt.setGestione(cloneMtbColt.getGestioneEnum() == GestioneEnum.LAVORAZIONE ? GestioneEnum.PRODUZIONE : cloneMtbColt.getGestioneEnum()); @@ -816,12 +853,10 @@ public class AccettazionePickingViewModel { public void resetMatchedRows() { for (PickingObjectDTO pickingObjectDTO : this.mPickingList.getValue()) { pickingObjectDTO - .setTempPickData(null) - .setHidden(false); + .setTempPickData(null); } this.mPickingList.postValue(this.mPickingList.getValue()); - this.sendFilterRemoved(); } private void addHistoryItem(@NonNull MtbColr mtbColr) { @@ -857,6 +892,10 @@ public class AccettazionePickingViewModel { if (this.mListener != null) mListener.onLoadingEnded(); } + private void sendVersamentoAutomaticoULRequest(RunnableArgs onComplete) { + if (this.mListener != null) this.mListener.onVersamentoAutomaticoULRequest(onComplete); + } + private void sendOnNoteAggiuntiveRequest(RunnableArgs onComplete) { if (this.mListener != null) this.mListener.onNoteAggiuntiveRequest(onComplete); } @@ -925,26 +964,32 @@ public class AccettazionePickingViewModel { if (this.mListener != null) mListener.onRowSaved(); } - private void sendFilterApplied(String newValue) { - if (this.mListener != null) mListener.onFilterApplied(newValue); + private void sendFilterCodMartApplied(String codMart) { + if (this.mListener != null) mListener.onFilterCodMartApplied(codMart); } - private void sendFilterRemoved() { - if (this.mListener != null) mListener.onFilterRemoved(); + private void sendFilterPosizioneApplied(String posizione) { + if (this.mListener != null) mListener.onFilterPosizioneApplied(posizione); } private void sendMtbColrDeleteRequest(RunnableArgs onComplete) { if (this.mListener != null) mListener.onMtbColrDeleteRequest(onComplete); } - public AccettazionePickingViewModel setListeners(AccettazionePickingViewModel.Listener - listener) { + private void notifyVersamentoAutomaticoResult(VersamentoAutomaticoULResponseDTO versamentoAutomaticoULResponseDTO, Runnable onComplete) { + if (this.mListener != null) + mListener.onULVersata(versamentoAutomaticoULResponseDTO, onComplete); + } + + public AccettazionePickingViewModel setListeners(AccettazionePickingViewModel.Listener listener) { this.mListener = listener; return this; } public interface Listener extends ILoadingListener, ILUPrintListener, ILUBaseOperationsListener { + void onVersamentoAutomaticoULRequest(RunnableArgs onComplete); + void onNoteAggiuntiveRequest(RunnableArgs onComplete); void onError(Exception ex); @@ -969,9 +1014,11 @@ public class AccettazionePickingViewModel { boolean canOverflowQuantity, RunnableArgss onComplete); - void onFilterApplied(String newValue); + void onFilterCodMartApplied(String codMartToFilter); - void onFilterRemoved(); + void onFilterPosizioneApplied(String posizioneToFilter); + + void onULVersata(VersamentoAutomaticoULResponseDTO versamentoAutomaticoULResponseDTO, Runnable onComplete); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/filters/AccettazionePickingFiltroOrdineViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/filters/AccettazionePickingFiltroOrdineViewModel.java new file mode 100644 index 00000000..68fbcceb --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/filters/AccettazionePickingFiltroOrdineViewModel.java @@ -0,0 +1,174 @@ +package it.integry.integrywmsnative.gest.accettazione_picking.filters; + +import androidx.databinding.ObservableField; +import androidx.lifecycle.MutableLiveData; + +import com.annimon.stream.Stream; +import com.annimon.stream.function.Predicate; + +import java.util.List; +import java.util.Objects; + +import it.integry.integrywmsnative.core.utility.UtilityString; +import it.integry.integrywmsnative.gest.accettazione_picking.dto.PickingObjectDTO; + +public class AccettazionePickingFiltroOrdineViewModel { + + private final ObservableField> currentCodArtPredicate = new ObservableField<>(); + private final ObservableField> currentDescrPredicate = new ObservableField<>(); + private final ObservableField> currentPosPredicate = new ObservableField<>(); + + + private List initialOrderList; + private final MutableLiveData> currentFilteredOrderList = new MutableLiveData<>(); + + public void init(List initialList) { + this.initialOrderList = initialList; + this.currentFilteredOrderList.setValue(this.initialOrderList); + } + + public MutableLiveData> getMutableFilteredOrderList() { + return this.currentFilteredOrderList; + } + + + public void setCodArtFilter(List codArts) { + if (codArts == null || codArts.isEmpty()) currentCodArtPredicate.set(null); + else { + currentCodArtPredicate.set(o -> codArts.contains(o.getSitArtOrdDTO().getCodMart())); + } + } + + + public void setDescrFilter(List descrs) { + if (descrs == null || descrs.isEmpty()) currentDescrPredicate.set(null); + else { + currentDescrPredicate.set(o -> descrs.contains(o.getSitArtOrdDTO().getDescrizioneEstesaArt())); + } + } + + + public void setPosFilter(List pos) { + if (pos == null || pos.isEmpty()) currentPosPredicate.set(null); + else { + currentPosPredicate.set(o -> o.getMtbAart() != null && o.getMtbAart().getPosizione() == null ? pos.contains(null) : pos.contains(o.getMtbAart().getPosizione())); + } + } + + + public void applyAllTests() { + + List returnList = null; + + if (currentCodArtPredicate.get() == null && + currentDescrPredicate.get() == null && + currentPosPredicate.get() == null) { + returnList = this.initialOrderList; + } else { + Stream tmpStream = Stream.of(this.initialOrderList) + .filter(x -> + (currentCodArtPredicate.get() == null || (currentCodArtPredicate.get().test(x))) && + (currentDescrPredicate.get() == null || (currentDescrPredicate.get().test(x))) && + (currentPosPredicate.get() == null || (currentPosPredicate.get().test(x))) + ); + + returnList = tmpStream.toList(); + } + + this.currentFilteredOrderList.setValue(returnList); + } + + public ObservableField> getCurrentCodArtPredicate() { + return currentCodArtPredicate; + } + + public ObservableField> getCurrentDescrPredicate() { + return currentDescrPredicate; + } + + public ObservableField> getCurrentPosPredicate() { + return currentPosPredicate; + } + + public List getAllCodArts() { + return Stream + .of(Objects.requireNonNull(initialOrderList)) + .filter(x -> x.getSitArtOrdDTO().getCodMart() != null) + .sortBy(x -> x.getSitArtOrdDTO().getCodMart()) + .map(x -> x.getSitArtOrdDTO().getCodMart() != null ? x.getSitArtOrdDTO().getCodMart() : null) + .distinct() + .toList(); + } + + public List getAvailableCodArts() { + + if (currentDescrPredicate.get() == null && + currentPosPredicate.get() == null) { + return getAllCodArts(); + } else { + return Stream.of(this.initialOrderList) + .filter(x -> + (currentDescrPredicate.get() == null || (currentDescrPredicate.get().test(x))) && + (currentPosPredicate.get() == null || (currentPosPredicate.get().test(x))) + ) + .map(x -> x.getSitArtOrdDTO().getCodMart()) + .distinct() + .toList(); + } + } + + public List getAllDescrs() { + return Stream + .of(Objects.requireNonNull(initialOrderList)) + .filter(x -> x.getSitArtOrdDTO().getDescrizioneEstesaArt() != null) + .sortBy(x -> x.getSitArtOrdDTO().getDescrizioneEstesaArt()) + .map(x -> x.getSitArtOrdDTO().getDescrizioneEstesaArt() != null ? x.getSitArtOrdDTO().getDescrizioneEstesaArt() : null) + .distinct() + .toList(); + } + + public List getAvailableDescrs() { + + if (currentCodArtPredicate.get() == null && + currentPosPredicate.get() == null) { + return getAllDescrs(); + } else { + return Stream.of(this.initialOrderList) + .filter(x -> + (currentCodArtPredicate.get() == null || (currentCodArtPredicate.get().test(x))) && + (currentPosPredicate.get() == null || (currentPosPredicate.get().test(x))) + ) + .map(x -> x.getSitArtOrdDTO().getDescrizioneEstesaArt()) + .distinct() + .toList(); + } + } + + public List getAllPos() { + return Stream + .of(Objects.requireNonNull(initialOrderList)) + .filter(x -> x.getMtbAart() != null && x.getMtbAart().getPosizione() != null) + .sortBy(x -> UtilityString.isNull(x.getMtbAart().getPosizione(), "000000")) + .map(x -> x.getMtbAart().getPosizione() != null ? x.getMtbAart().getPosizione() : null) + .distinct() + .toList(); + } + + public List getAvailablePos() { + + if (currentCodArtPredicate.get() == null && + currentDescrPredicate.get() == null) { + return getAllPos(); + } else { + return Stream.of(this.initialOrderList) + .filter(x -> + (currentCodArtPredicate.get() == null || (currentCodArtPredicate.get().test(x))) && + (currentDescrPredicate.get() == null || (currentDescrPredicate.get().test(x))) + ) + .map(x -> x.getMtbAart().getPosizione()) + .distinct() + .toList(); + } + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/filters/FilterCodArtLayoutView.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/filters/FilterCodArtLayoutView.java new file mode 100644 index 00000000..67feac50 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/filters/FilterCodArtLayoutView.java @@ -0,0 +1,184 @@ +package it.integry.integrywmsnative.gest.accettazione_picking.filters; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.databinding.DataBindingUtil; +import androidx.lifecycle.MutableLiveData; + +import com.annimon.stream.ComparatorCompat; +import com.annimon.stream.Stream; +import com.ravikoradiya.liveadapter.LiveAdapter; + +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; +import java.util.Objects; + +import it.integry.integrywmsnative.BR; +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.di.BindableBoolean; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.utility.UtilityBoolean; +import it.integry.integrywmsnative.databinding.LayoutFilterCodArtBinding; +import it.integry.integrywmsnative.ui.filter_chips.FilterLayoutView; + +public class FilterCodArtLayoutView extends FilterLayoutView { + + protected LayoutFilterCodArtBinding mBindings; + + private List all; + private List available; + private List preselected = new ArrayList<>(); + private List hidden = new ArrayList<>(); + private final MutableLiveData> listModel = new MutableLiveData<>(); + + private RunnableArgs> onFilterApplied; + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + mBindings = DataBindingUtil.inflate(inflater, R.layout.layout_filter_cod_art, container, false); + this.mBindings.setView(this); + + refreshList(); + + this.setSearchView(this.mBindings.searchView, newFilter -> { + hidden = Stream.of(all) + .filter(x -> !x.toUpperCase(Locale.ROOT).contains(newFilter.toUpperCase(Locale.ROOT)) && + !x.toUpperCase(Locale.ROOT).contains(newFilter.toUpperCase(Locale.ROOT))) + .toList(); + + refreshList(); + }); + + + new LiveAdapter(listModel, getViewLifecycleOwner(), BR.item) + .map(ListModel.class, R.layout.layout_filter_cod_art__list_item) + .into(this.mBindings.recyclerview); + + return mBindings.getRoot(); + } + + + public void onConfirm() { + if (onFilterApplied == null) return; + + this.onFilterApplied.run(Stream.of(Objects.requireNonNull(listModel.getValue())) + .filter(x -> x.selected.get()) + .map(x -> x.originalModel) + .toList()); + + dismiss(); + } + + private void refreshList() { + ComparatorCompat c = + ComparatorCompat + .chain(new ComparatorCompat((x, y) -> UtilityBoolean.toInt(x.getSelected().get()) - UtilityBoolean.toInt(y.getSelected().get()))) + .thenComparing(new ComparatorCompat<>((x, y) -> UtilityBoolean.toInt(x.getEnabled().get()) - UtilityBoolean.toInt(y.getEnabled().get()))) + .thenComparing(new ComparatorCompat<>((x, y) -> y.getOriginalModel().compareToIgnoreCase(x.getOriginalModel()))) + .reversed(); + + + listModel.setValue(Stream.of(getAll()) + .filter(x -> !hidden.contains(x)) + .map(x -> { + var selectedBoolean = new BindableBoolean(preselected.contains(x)); + selectedBoolean.addOnPropertyChangedCallback(() -> { + if (selectedBoolean.get()) preselected.add(x); + else preselected.remove(x); + }); + + return new ListModel() + .setSelected(selectedBoolean) + .setEnabled(new BindableBoolean(available.contains(x))) + .setOriginalModel(x); + }) + .sorted(c) + .toList()); + } + + public List getAll() { + return all; + } + + public FilterCodArtLayoutView setAll(List all) { + this.all = all; + return this; + } + + public List getAvailable() { + return available; + } + + public FilterCodArtLayoutView setAvailable(List available) { + this.available = available; + return this; + } + + public List getPreselected() { + return preselected; + } + + public FilterCodArtLayoutView setPreselected(List preselected) { + this.preselected = preselected; + return this; + } + + public RunnableArgs> getOnFilterApplied() { + return onFilterApplied; + } + + public FilterCodArtLayoutView setOnFilterApplied(RunnableArgs> onFilterApplied) { + this.onFilterApplied = onFilterApplied; + return this; + } + + public List getHidden() { + return hidden; + } + + public FilterCodArtLayoutView setHidden(List hidden) { + this.hidden = hidden; + return this; + } + + public static class ListModel { + private BindableBoolean selected = new BindableBoolean(); + private BindableBoolean enabled = new BindableBoolean(); + private String originalModel; + + public BindableBoolean getSelected() { + return selected; + } + + public ListModel setSelected(BindableBoolean selected) { + this.selected = selected; + return this; + } + + public BindableBoolean getEnabled() { + return enabled; + } + + public ListModel setEnabled(BindableBoolean enabled) { + this.enabled = enabled; + return this; + } + + public String getOriginalModel() { + return originalModel; + } + + public ListModel setOriginalModel(String originalModel) { + this.originalModel = originalModel; + return this; + } + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/filters/FilterDescrLayoutView.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/filters/FilterDescrLayoutView.java new file mode 100644 index 00000000..2c21f806 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/filters/FilterDescrLayoutView.java @@ -0,0 +1,184 @@ +package it.integry.integrywmsnative.gest.accettazione_picking.filters; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.databinding.DataBindingUtil; +import androidx.lifecycle.MutableLiveData; + +import com.annimon.stream.ComparatorCompat; +import com.annimon.stream.Stream; +import com.ravikoradiya.liveadapter.LiveAdapter; + +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; +import java.util.Objects; + +import it.integry.integrywmsnative.BR; +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.di.BindableBoolean; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.utility.UtilityBoolean; +import it.integry.integrywmsnative.databinding.LayoutFilterDescrBinding; +import it.integry.integrywmsnative.ui.filter_chips.FilterLayoutView; + +public class FilterDescrLayoutView extends FilterLayoutView { + + protected LayoutFilterDescrBinding mBindings; + + private List all; + private List available; + private List preselected = new ArrayList<>(); + private List hidden = new ArrayList<>(); + private final MutableLiveData> listModel = new MutableLiveData<>(); + + private RunnableArgs> onFilterApplied; + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + mBindings = DataBindingUtil.inflate(inflater, R.layout.layout_filter_descr, container, false); + this.mBindings.setView(this); + + refreshList(); + + this.setSearchView(this.mBindings.searchView, newFilter -> { + hidden = Stream.of(all) + .filter(x -> !x.toUpperCase(Locale.ROOT).contains(newFilter.toUpperCase(Locale.ROOT)) && + !x.toUpperCase(Locale.ROOT).contains(newFilter.toUpperCase(Locale.ROOT))) + .toList(); + + refreshList(); + }); + + + new LiveAdapter(listModel, getViewLifecycleOwner(), BR.item) + .map(ListModel.class, R.layout.layout_filter_descr__list_item) + .into(this.mBindings.recyclerview); + + return mBindings.getRoot(); + } + + + public void onConfirm() { + if (onFilterApplied == null) return; + + this.onFilterApplied.run(Stream.of(Objects.requireNonNull(listModel.getValue())) + .filter(x -> x.selected.get()) + .map(x -> x.originalModel) + .toList()); + + dismiss(); + } + + private void refreshList() { + ComparatorCompat c = + ComparatorCompat + .chain(new ComparatorCompat((x, y) -> UtilityBoolean.toInt(x.getSelected().get()) - UtilityBoolean.toInt(y.getSelected().get()))) + .thenComparing(new ComparatorCompat<>((x, y) -> UtilityBoolean.toInt(x.getEnabled().get()) - UtilityBoolean.toInt(y.getEnabled().get()))) + .thenComparing(new ComparatorCompat<>((x, y) -> y.getOriginalModel().compareToIgnoreCase(x.getOriginalModel()))) + .reversed(); + + + listModel.setValue(Stream.of(getAll()) + .filter(x -> !hidden.contains(x)) + .map(x -> { + var selectedBoolean = new BindableBoolean(preselected.contains(x)); + selectedBoolean.addOnPropertyChangedCallback(() -> { + if (selectedBoolean.get()) preselected.add(x); + else preselected.remove(x); + }); + + return new ListModel() + .setSelected(selectedBoolean) + .setEnabled(new BindableBoolean(available.contains(x))) + .setOriginalModel(x); + }) + .sorted(c) + .toList()); + } + + public List getAll() { + return all; + } + + public FilterDescrLayoutView setAll(List all) { + this.all = all; + return this; + } + + public List getAvailable() { + return available; + } + + public FilterDescrLayoutView setAvailable(List available) { + this.available = available; + return this; + } + + public List getPreselected() { + return preselected; + } + + public FilterDescrLayoutView setPreselected(List preselected) { + this.preselected = preselected; + return this; + } + + public RunnableArgs> getOnFilterApplied() { + return onFilterApplied; + } + + public FilterDescrLayoutView setOnFilterApplied(RunnableArgs> onFilterApplied) { + this.onFilterApplied = onFilterApplied; + return this; + } + + public List getHidden() { + return hidden; + } + + public FilterDescrLayoutView setHidden(List hidden) { + this.hidden = hidden; + return this; + } + + public static class ListModel { + private BindableBoolean selected = new BindableBoolean(); + private BindableBoolean enabled = new BindableBoolean(); + private String originalModel; + + public BindableBoolean getSelected() { + return selected; + } + + public ListModel setSelected(BindableBoolean selected) { + this.selected = selected; + return this; + } + + public BindableBoolean getEnabled() { + return enabled; + } + + public ListModel setEnabled(BindableBoolean enabled) { + this.enabled = enabled; + return this; + } + + public String getOriginalModel() { + return originalModel; + } + + public ListModel setOriginalModel(String originalModel) { + this.originalModel = originalModel; + return this; + } + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/filters/FilterPosizioneLayoutView.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/filters/FilterPosizioneLayoutView.java new file mode 100644 index 00000000..19d96720 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/filters/FilterPosizioneLayoutView.java @@ -0,0 +1,186 @@ +package it.integry.integrywmsnative.gest.accettazione_picking.filters; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.databinding.DataBindingUtil; +import androidx.lifecycle.MutableLiveData; + +import com.annimon.stream.ComparatorCompat; +import com.annimon.stream.Stream; +import com.ravikoradiya.liveadapter.LiveAdapter; + +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; +import java.util.Objects; + +import it.integry.integrywmsnative.BR; +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.di.BindableBoolean; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.utility.UtilityBoolean; +import it.integry.integrywmsnative.core.utility.UtilityString; +import it.integry.integrywmsnative.databinding.LayoutFilterPosizioneBinding; +import it.integry.integrywmsnative.ui.filter_chips.FilterLayoutView; + +public class FilterPosizioneLayoutView extends FilterLayoutView { + + protected LayoutFilterPosizioneBinding mBindings; + + private List all; + private List available; + private List preselected = new ArrayList<>(); + private List hidden = new ArrayList<>(); + private final MutableLiveData> listModel = new MutableLiveData<>(); + + private RunnableArgs> onFilterApplied; + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + mBindings = DataBindingUtil.inflate(inflater, R.layout.layout_filter_posizione, container, false); + this.mBindings.setView(this); + + refreshList(); + + this.setSearchView(this.mBindings.searchView, newFilter -> { + hidden = Stream.of(all) + .filter(x -> !x.toUpperCase(Locale.ROOT).contains(newFilter.toUpperCase(Locale.ROOT)) && + !x.toUpperCase(Locale.ROOT).contains(newFilter.toUpperCase(Locale.ROOT))) + .toList(); + + refreshList(); + }); + + + new LiveAdapter(listModel, getViewLifecycleOwner(), BR.item) + .map(ListModel.class, R.layout.layout_filter_posizione__list_item) + .into(this.mBindings.recyclerview); + + return mBindings.getRoot(); + } + + + public void onConfirm() { + if (onFilterApplied == null) return; + + this.onFilterApplied.run(Stream.of(Objects.requireNonNull(listModel.getValue())) + .filter(x -> x.selected.get()) + .map(x -> x.originalModel) + .toList()); + + dismiss(); + } + + private void refreshList() { + ComparatorCompat c = + ComparatorCompat + .chain(new ComparatorCompat((x, y) -> UtilityBoolean.toInt(x.getSelected().get()) - UtilityBoolean.toInt(y.getSelected().get()))) + .thenComparing(new ComparatorCompat<>((x, y) -> UtilityBoolean.toInt(x.getEnabled().get()) - UtilityBoolean.toInt(y.getEnabled().get()))) + .thenComparing(new ComparatorCompat<>((x, y) -> + UtilityString.isNull(y.getOriginalModel(), "000000").compareToIgnoreCase(UtilityString.isNull(x.getOriginalModel(), "000000")))) + .reversed(); + + + listModel.setValue(Stream.of(getAll()) + .filter(x -> !hidden.contains(x)) + .map(x -> { + var selectedBoolean = new BindableBoolean(preselected.contains(x)); + selectedBoolean.addOnPropertyChangedCallback(() -> { + if (selectedBoolean.get()) preselected.add(x); + else preselected.remove(x); + }); + + return new ListModel() + .setSelected(selectedBoolean) + .setEnabled(new BindableBoolean(available.contains(x))) + .setOriginalModel(x); + }) + .sorted(c) + .toList()); + } + + public List getAll() { + return all; + } + + public FilterPosizioneLayoutView setAll(List all) { + this.all = all; + return this; + } + + public List getAvailable() { + return available; + } + + public FilterPosizioneLayoutView setAvailable(List available) { + this.available = available; + return this; + } + + public List getPreselected() { + return preselected; + } + + public FilterPosizioneLayoutView setPreselected(List preselected) { + this.preselected = preselected; + return this; + } + + public RunnableArgs> getOnFilterApplied() { + return onFilterApplied; + } + + public FilterPosizioneLayoutView setOnFilterApplied(RunnableArgs> onFilterApplied) { + this.onFilterApplied = onFilterApplied; + return this; + } + + public List getHidden() { + return hidden; + } + + public FilterPosizioneLayoutView setHidden(List hidden) { + this.hidden = hidden; + return this; + } + + public static class ListModel { + private BindableBoolean selected = new BindableBoolean(); + private BindableBoolean enabled = new BindableBoolean(); + private String originalModel; + + public BindableBoolean getSelected() { + return selected; + } + + public ListModel setSelected(BindableBoolean selected) { + this.selected = selected; + return this; + } + + public BindableBoolean getEnabled() { + return enabled; + } + + public ListModel setEnabled(BindableBoolean enabled) { + this.enabled = enabled; + return this; + } + + public String getOriginalModel() { + return originalModel; + } + + public ListModel setOriginalModel(String originalModel) { + this.originalModel = originalModel; + return this; + } + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/ui/AccettazioneListAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/ui/AccettazioneListAdapter.java index 6236a6bf..d5278bca 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/ui/AccettazioneListAdapter.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/ui/AccettazioneListAdapter.java @@ -114,7 +114,7 @@ public class AccettazioneListAdapter extends SectionedRecyclerViewAdapter availableProfiles) { + + this.onLoadingEnded(); + runOnUiThread(() -> DialogSimpleMessageView.makeSuccessDialog( + "Benvenuto", + Html.fromHtml("Ciao " + fullName + ", la Integry le augura di svolgere al meglio il suo lavoro"), + null, + () -> showProfileDBSelectionDialog(host, port, availableProfiles)) + .show(getSupportFragmentManager(), "tag")); + + } + + + @Override + public void onError(Exception ex) { + super.onError(ex); + loginButtonEnabled.set(true); + } + + private void showProfileDBSelectionDialog(final String host, final int port, final List availableProfiles) { + Runnable onComplete = () -> { + SettingsManager.update(); + + startSplashActivity(); + }; + + loginButtonEnabled.set(true); + + if (availableProfiles != null && availableProfiles.size() == 1) { + SettingsManager.i().getUserSession().setProfileDB(availableProfiles.get(0)); + + mViewmodel.loadDepo(codAzienda.get(), host, port, username.get(), password.get(), onComplete); + } else { + + // setup the alert builder + AlertDialog.Builder builder = new AlertDialog.Builder(this); + builder.setTitle(R.string.action_choose_profile_db); + + // add a list + String[] profiles = new String[availableProfiles.size()]; + profiles = availableProfiles + .toArray(profiles); + + builder.setItems(profiles, (dialog, which) -> { + SettingsManager.i().getUserSession().setProfileDB(availableProfiles.get(which)); + + mViewmodel.loadDepo(codAzienda.get(), host, port, username.get(), password.get(), onComplete); + }); + + // create and show the alert dialog + AlertDialog dialog = builder.create(); + dialog.show(); + } + } + + private void startSplashActivity() { + finish(); + SplashActivity.startActivity(this); + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/login/LoginComponent.java b/app/src/main/java/it/integry/integrywmsnative/gest/login/LoginComponent.java new file mode 100644 index 00000000..10ef1601 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/login/LoginComponent.java @@ -0,0 +1,14 @@ +package it.integry.integrywmsnative.gest.login; + +import dagger.Subcomponent; + +@Subcomponent +public interface LoginComponent { + + @Subcomponent.Factory + interface Factory { + LoginComponent create(); + } + + void inject(LoginActivity loginActivity); +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/login/LoginModule.java b/app/src/main/java/it/integry/integrywmsnative/gest/login/LoginModule.java new file mode 100644 index 00000000..55d76580 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/login/LoginModule.java @@ -0,0 +1,25 @@ +package it.integry.integrywmsnative.gest.login; + +import javax.inject.Singleton; + +import dagger.Module; +import dagger.Provides; +import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer; +import it.integry.integrywmsnative.gest.login.rest.LoginRESTConsumer; +import it.integry.integrywmsnative.gest.login.viewmodel.LoginViewModel; + +@Module(subcomponents = LoginComponent.class) +public class LoginModule { + + @Provides + @Singleton + LoginRESTConsumer provideLoginRESTConsumer() { + return new LoginRESTConsumer(); + } + + @Provides + LoginViewModel providesSpedizioneViewModel(SystemRESTConsumer systemRESTConsumer, LoginRESTConsumer loginRESTConsumer) { + return new LoginViewModel(systemRESTConsumer, loginRESTConsumer); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/login/core/LoginHelper.java b/app/src/main/java/it/integry/integrywmsnative/gest/login/core/LoginHelper.java deleted file mode 100644 index 9156a0b0..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/gest/login/core/LoginHelper.java +++ /dev/null @@ -1,112 +0,0 @@ -package it.integry.integrywmsnative.gest.login.core; - -import android.content.Context; -import android.util.Log; - -import it.integry.integrywmsnative.core.CommonConst; -import it.integry.integrywmsnative.core.rest.RESTBuilder; -import it.integry.integrywmsnative.core.rest.consumers.ISimpleOperationCallback; -import it.integry.integrywmsnative.core.rest.model.EsitoType; -import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; -import it.integry.integrywmsnative.gest.login.dto.LoginAziendaDTO; -import it.integry.integrywmsnative.gest.login.dto.LoginDTO; -import it.integry.integrywmsnative.gest.login.rest.LoginRESTConsumerService; -import retrofit2.Call; -import retrofit2.Callback; -import retrofit2.Response; - -public class LoginHelper { - - private Context mContext; - - private String mCodAzienda; - private String mUsername; - private String mPassword; - - public LoginHelper(Context context, String codAzienda, String username, String password){ - this.mContext = context; - - this.mCodAzienda = codAzienda; - this.mUsername = username; - this.mPassword = password; - } - - - public void retrieveServerData(final ISimpleOperationCallback callback){ - - String host = CommonConst.Login.Azienda.host; - int port = CommonConst.Login.Azienda.port; - - LoginRESTConsumerService service = RESTBuilder.getService(LoginRESTConsumerService.class, host, port, false, true); - service.loginAzienda(mCodAzienda).enqueue(new Callback>() { - @Override - public void onResponse(Call> call, Response> response) { - if(response.isSuccessful()) { - - if(response.body() != null) { - if(response.body().getEsito() == EsitoType.OK) { - callback.onSuccess(response.body().getDto()); - } else { - Log.e("LoginAzienda", response.body().getErrorMessage()); - callback.onFailed(new Exception(response.body().getErrorMessage())); - } - } else { - Log.e("LoginAzienda", response.message()); - callback.onFailed(new Exception(response.message())); - } - } else { - Log.e("LoginAzienda", "Status " + response.code() + ": " + response.message()); - callback.onFailed(new Exception("Status " + response.code() + ": " + response.message())); - } - } - - @Override - public void onFailure(Call> call, Throwable t) { - Log.e("LoginAzienda", t.toString()); - callback.onFailed(new Exception(t)); - } - }); - } - - - public void doLogin(String host, int port, final ISimpleOperationCallback callback){ - LoginRESTConsumerService service = RESTBuilder.getService(LoginRESTConsumerService.class, host, port, false); - service.login(mUsername, mPassword).enqueue(new Callback>() { - @Override - public void onResponse(Call> call, Response> response) { - - if(response.isSuccessful()) { - - if(response.body() != null) { - if(response.body().getEsito() == EsitoType.OK) { - callback.onSuccess(response.body().getDto()); - } else { - Log.e("Login", response.body().getErrorMessage()); - callback.onFailed(new Exception(response.body().getErrorMessage())); - } - } else { - Log.e("Login", response.message()); - callback.onFailed(new Exception(response.message())); - } - } else { - Log.e("Login", "Status " + response.code() + ": " + response.message()); - callback.onFailed(new Exception("Status " + response.code() + ": " + response.message())); - } - - - } - - @Override - public void onFailure(Call> call, final Throwable t) { - - Log.e("Login", t.toString()); - callback.onFailed(new Exception(t)); - - - - } - }); - } - - -} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/login/dto/LoginAziendaDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/login/dto/LoginAziendaDTO.java index 5b9cfe5c..062c0aae 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/login/dto/LoginAziendaDTO.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/login/dto/LoginAziendaDTO.java @@ -2,10 +2,54 @@ package it.integry.integrywmsnative.gest.login.dto; public class LoginAziendaDTO { - public String profileDb; - public String endpointRestApi; - public String phpApi; - public String repoPhoto; - public String endpointPvm; + private String profileDb; + private String endpointRestApi; + private String phpApi; + private String repoPhoto; + private String endpointPvm; + public String getProfileDb() { + return profileDb; + } + + public LoginAziendaDTO setProfileDb(String profileDb) { + this.profileDb = profileDb; + return this; + } + + public String getEndpointRestApi() { + return endpointRestApi; + } + + public LoginAziendaDTO setEndpointRestApi(String endpointRestApi) { + this.endpointRestApi = endpointRestApi; + return this; + } + + public String getPhpApi() { + return phpApi; + } + + public LoginAziendaDTO setPhpApi(String phpApi) { + this.phpApi = phpApi; + return this; + } + + public String getRepoPhoto() { + return repoPhoto; + } + + public LoginAziendaDTO setRepoPhoto(String repoPhoto) { + this.repoPhoto = repoPhoto; + return this; + } + + public String getEndpointPvm() { + return endpointPvm; + } + + public LoginAziendaDTO setEndpointPvm(String endpointPvm) { + this.endpointPvm = endpointPvm; + return this; + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/login/dto/LoginDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/login/dto/LoginDTO.java index c092456a..952c9853 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/login/dto/LoginDTO.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/login/dto/LoginDTO.java @@ -4,7 +4,24 @@ import java.util.List; public class LoginDTO { - public String full_name; - public List availableProfiles; + private String full_name; + private List availableProfiles; + public String getFull_name() { + return full_name; + } + + public LoginDTO setFull_name(String full_name) { + this.full_name = full_name; + return this; + } + + public List getAvailableProfiles() { + return availableProfiles; + } + + public LoginDTO setAvailableProfiles(List availableProfiles) { + this.availableProfiles = availableProfiles; + return this; + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/login/exception/InvalidServerCodAziendaException.java b/app/src/main/java/it/integry/integrywmsnative/gest/login/exception/InvalidServerCodAziendaException.java new file mode 100644 index 00000000..2991af27 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/login/exception/InvalidServerCodAziendaException.java @@ -0,0 +1,12 @@ +package it.integry.integrywmsnative.gest.login.exception; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.utility.UtilityResources; + +public class InvalidServerCodAziendaException extends Exception { + + public InvalidServerCodAziendaException(String codAzienda, Throwable cause) { + super(String.format(UtilityResources.getString(R.string.server_cod_azienda_not_valid), codAzienda), cause); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/login/exception/InvalidUserDepositException.java b/app/src/main/java/it/integry/integrywmsnative/gest/login/exception/InvalidUserDepositException.java new file mode 100644 index 00000000..fd789ff9 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/login/exception/InvalidUserDepositException.java @@ -0,0 +1,11 @@ +package it.integry.integrywmsnative.gest.login.exception; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.utility.UtilityResources; + +public class InvalidUserDepositException extends Exception { + + public InvalidUserDepositException() { + super(UtilityResources.getString(R.string.no_codmdep_available)); + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/login/exception/InvalidUsernameException.java b/app/src/main/java/it/integry/integrywmsnative/gest/login/exception/InvalidUsernameException.java new file mode 100644 index 00000000..d4af45a3 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/login/exception/InvalidUsernameException.java @@ -0,0 +1,11 @@ +package it.integry.integrywmsnative.gest.login.exception; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.utility.UtilityResources; + +public class InvalidUsernameException extends Exception { + + public InvalidUsernameException() { + super(UtilityResources.getString(R.string.username_error_not_valid)); + } +} \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/login/exception/ServerNotReachableException.java b/app/src/main/java/it/integry/integrywmsnative/gest/login/exception/ServerNotReachableException.java new file mode 100644 index 00000000..864bb212 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/login/exception/ServerNotReachableException.java @@ -0,0 +1,11 @@ +package it.integry.integrywmsnative.gest.login.exception; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.utility.UtilityResources; + +public class ServerNotReachableException extends Exception { + + public ServerNotReachableException(String host, int port, Throwable cause) { + super(String.format(UtilityResources.getString(R.string.server_not_reachable), host, port), cause); + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/login/rest/LoginRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/gest/login/rest/LoginRESTConsumer.java new file mode 100644 index 00000000..4693e2ea --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/login/rest/LoginRESTConsumer.java @@ -0,0 +1,61 @@ +package it.integry.integrywmsnative.gest.login.rest; + +import android.util.Log; + +import javax.inject.Singleton; + +import it.integry.integrywmsnative.core.CommonConst; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.rest.RESTBuilder; +import it.integry.integrywmsnative.core.rest.consumers._BaseRESTConsumer; +import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; +import it.integry.integrywmsnative.gest.login.dto.LoginAziendaDTO; +import it.integry.integrywmsnative.gest.login.dto.LoginDTO; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + +@Singleton +public class LoginRESTConsumer extends _BaseRESTConsumer { + + + public void retrieveServerData(String codAzienda, RunnableArgs onComplete, RunnableArgs onFailed){ + + String host = CommonConst.Login.Azienda.host; + int port = CommonConst.Login.Azienda.port; + + LoginRESTConsumerService service = RESTBuilder.getService(LoginRESTConsumerService.class, host, port, false, true); + service.loginAzienda(codAzienda).enqueue(new Callback<>() { + @Override + public void onResponse(Call> call, Response> response) { + analyzeAnswer(response, "LoginAzienda", onComplete, onFailed); + } + + @Override + public void onFailure(Call> call, Throwable t) { + Log.e("LoginAzienda", t.toString()); + onFailed.run(new Exception(t)); + } + }); + } + + + public void authenticate(String host, int port, String username, String password, RunnableArgs onComplete, RunnableArgs onFailed){ + LoginRESTConsumerService service = RESTBuilder.getService(LoginRESTConsumerService.class, host, port, false); + service.login(username, password).enqueue(new Callback<>() { + + @Override + public void onResponse(Call> call, Response> response) { + analyzeAnswer(response, "Login", onComplete, onFailed); + } + + @Override + public void onFailure(Call> call, final Throwable t) { + Log.e("Login", t.toString()); + onFailed.run(new Exception(t)); + } + }); + } + + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/login/viewmodel/LoginViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/login/viewmodel/LoginViewModel.java index 2f05a1d7..827c78ab 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/login/viewmodel/LoginViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/login/viewmodel/LoginViewModel.java @@ -1,167 +1,103 @@ package it.integry.integrywmsnative.gest.login.viewmodel; -import android.app.Dialog; -import android.content.Intent; -import android.text.Html; -import android.text.SpannableString; -import android.text.Spanned; - -import androidx.appcompat.app.AlertDialog; +import com.annimon.stream.Stream; import java.net.MalformedURLException; import java.net.URL; import java.util.List; -import it.integry.integrywmsnative.R; -import it.integry.integrywmsnative.SplashActivity; -import it.integry.integrywmsnative.core.di.BindableBoolean; -import it.integry.integrywmsnative.core.di.BindableString; -import it.integry.integrywmsnative.core.rest.consumers.ISimpleOperationCallback; +import javax.inject.Inject; + +import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener; import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer; import it.integry.integrywmsnative.core.settings.SettingsManager; -import it.integry.integrywmsnative.core.utility.UtilityProgress; import it.integry.integrywmsnative.core.utility.UtilityServer; import it.integry.integrywmsnative.core.utility.UtilityString; -import it.integry.integrywmsnative.gest.login.LoginActivity; -import it.integry.integrywmsnative.gest.login.core.LoginHelper; -import it.integry.integrywmsnative.gest.login.dto.LoginAziendaDTO; -import it.integry.integrywmsnative.gest.login.dto.LoginDTO; -import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; +import it.integry.integrywmsnative.gest.login.exception.InvalidServerCodAziendaException; +import it.integry.integrywmsnative.gest.login.exception.InvalidUserDepositException; +import it.integry.integrywmsnative.gest.login.exception.ServerNotReachableException; +import it.integry.integrywmsnative.gest.login.rest.LoginRESTConsumer; public class LoginViewModel { - public BindableString username = new BindableString(); - public BindableString password = new BindableString(); - public BindableString codAzienda = new BindableString(); - public BindableBoolean customSettingsCheckboxEnabled = new BindableBoolean(); - public BindableBoolean customSettingsCheckboxChecked = new BindableBoolean(); + private final SystemRESTConsumer mSystemRESTConsumer; + private final LoginRESTConsumer mLoginRESTConsumer; - public BindableBoolean loginButtonEnabled = new BindableBoolean(); + private Listener mListener; - - public BindableString usernameError = new BindableString(); - public BindableString passwordError = new BindableString(); - public BindableString codAziendaError = new BindableString(); - - - private LoginActivity mActivity; - - private Dialog mProgress; - - public LoginViewModel(LoginActivity activity) { - this.mActivity = activity; - - loginButtonEnabled.set(true); - - codAzienda.set(SettingsManager.i().getServer().getCodAzienda()); - - customSettingsCheckboxChecked.set(SettingsManager.i().getServer().getHost() == null); - customSettingsCheckboxEnabled.set(SettingsManager.i().getServer().getHost() != null); + @Inject + public LoginViewModel(SystemRESTConsumer systemRESTConsumer, LoginRESTConsumer loginRESTConsumer) { + this.mSystemRESTConsumer = systemRESTConsumer; + this.mLoginRESTConsumer = loginRESTConsumer; } - public boolean validate() { - if (username.isEmpty() || username.get().length() < 3) { - usernameError.set(mActivity.getText(R.string.username_error_not_valid).toString()); - return false; - } else usernameError.set(null); + public void login(String codAzienda, String username, String password) { + this.sendOnLoadingStarted(); - if (codAzienda.isEmpty() || codAzienda.get().length() < 3) { - codAziendaError.set(mActivity.getText(R.string.server_cod_azienda_not_valid).toString()); - return false; - } else codAziendaError.set(null); + mLoginRESTConsumer.retrieveServerData(codAzienda, value -> { - return true; - } + final String serverEndpoint = value.getEndpointRestApi(); + URL u; + try { + u = new URL(serverEndpoint); + } catch (final MalformedURLException e) { + e.printStackTrace(); + this.sendError(e); + return; + } - public void login(boolean areValidData) { - if (areValidData) { - loginButtonEnabled.set(false); + final String host = u.getHost(); + final int port = u.getPort(); - mProgress = UtilityProgress.createDefaultProgressDialog(mActivity); + UtilityServer.isEmsApiAvailable(host, port, value1 -> { - final LoginHelper loginHelper = new LoginHelper(mActivity, codAzienda.get(), username.get(), password.get()); + if (value1) { //Is online + mLoginRESTConsumer.authenticate(host, port, username, password, loginDTO -> { - loginHelper.retrieveServerData(new ISimpleOperationCallback() { + SettingsManager.iDB().setAvailableProfiles(loginDTO.getAvailableProfiles()); - @Override - public void onSuccess(LoginAziendaDTO value) { + SettingsManager.i().createUserSession(); + SettingsManager.i().getUser().setFullname(!UtilityString.isNullOrEmpty(loginDTO.getFull_name()) ? loginDTO.getFull_name() : username); - final String serverEndpoint = value.endpointRestApi; - - URL u; - try { - u = new URL(serverEndpoint); - } catch (final MalformedURLException e) { - e.printStackTrace(); - onLoginFailed(new SpannableString(e.toString())); - return; - } - - final String host = u.getHost(); - final int port = u.getPort(); - - UtilityServer.isEmsApiAvailable(host, port, value1 -> { - - if (value1) { //Is online - loginHelper.doLogin(host, port, new ISimpleOperationCallback() { - @Override - public void onSuccess(final LoginDTO loginDTO) { - - SettingsManager.iDB().setAvailableProfiles(loginDTO.availableProfiles); - - SettingsManager.i().createUserSession(); - SettingsManager.i().getUser().setFullname(!UtilityString.isNullOrEmpty(loginDTO.full_name) ? loginDTO.full_name : username.get()); - - - mActivity.runOnUiThread(() -> onLoginSuccess( - "Benvenuto", - Html.fromHtml("Ciao " + loginDTO.full_name + ", la Integry le augura di svolgere al meglio il suo lavoro"), - host, port, loginDTO.availableProfiles)); - - - } - - @Override - public void onFailed(final Exception ex) { - onLoginFailed(new SpannableString(ex.getMessage())); - } - }); - - - } else { //Is not online - onLoginFailed(Html.fromHtml(String.format(mActivity.getText(R.string.server_not_reachable).toString(), host, port))); + List availableProfiles = null; + if(loginDTO.getAvailableProfiles() != null && !loginDTO.getAvailableProfiles().isEmpty()) { + availableProfiles = Stream.of(loginDTO.getAvailableProfiles()) + .sorted() + .toList(); } - }); + this.sendOnLoginCompleted(host, port, loginDTO.getFull_name(), availableProfiles); + }, this::sendError); + + + } else { //Is not online + this.sendError(new ServerNotReachableException(host, port, null)); } - @Override - public void onFailed(Exception ex) { - onLoginFailed(Html.fromHtml(String.format(mActivity.getText(R.string.server_cod_azienda_not_valid).toString(), codAzienda.get()))); - } }); - - } + }, ex -> { + this.sendError(new InvalidServerCodAziendaException(codAzienda, ex)); + }); } - private void loadDepo(String host, int port, Runnable onComplete) { + public void loadDepo(String codAzienda, String host, int port, String username, String password, Runnable onComplete) { - SettingsManager.i().getServer().setCodAzienda(codAzienda.get()); + SettingsManager.i().getServer().setCodAzienda(codAzienda); SettingsManager.i().getServer().setHost(host); SettingsManager.i().getServer().setPort(port); - SettingsManager.i().getUser().setUsername(username.get()); - SettingsManager.i().getUser().setPassword(password.get()); + SettingsManager.i().getUser().setUsername(username); + SettingsManager.i().getUser().setPassword(password); - SystemRESTConsumer.getAvailableCodMdeps(availableCodMdeps -> { + this.mSystemRESTConsumer.getAvailableCodMdeps(availableCodMdeps -> { SettingsManager.iDB().setAvailableCodMdep(availableCodMdeps); if (availableCodMdeps == null || availableCodMdeps.size() == 0) { - onLoginFailed(Html.fromHtml(String.format(mActivity.getText(R.string.no_codmdep_available).toString()))); + this.sendError(new InvalidUserDepositException()); return; } @@ -169,72 +105,36 @@ public class LoginViewModel { if (onComplete != null) onComplete.run(); - }, ex -> { - //BOH - onLoginFailed(new SpannableString(ex.getMessage())); - }); + }, this::sendError); } - private void onLoginFailed(final Spanned message) { - mProgress.dismiss(); - loginButtonEnabled.set(true); - mActivity.runOnUiThread(() -> DialogSimpleMessageView.makeErrorDialog( - message, - null, - null) - .show(mActivity.getSupportFragmentManager(), "tag")); + private void sendOnLoadingStarted() { + if (this.mListener != null) mListener.onLoadingStarted(); } - - private void onLoginSuccess(final String title, final Spanned message, final String host, final int port, final List availableProfiles) { - mProgress.dismiss(); - mActivity.runOnUiThread(() -> DialogSimpleMessageView.makeSuccessDialog( - title, - message, - null, - () -> showProfileDBSelectionDialog(host, port, availableProfiles)) - .show(mActivity.getSupportFragmentManager(), "tag")); + private void sendOnLoadingEnded() { + if (this.mListener != null) mListener.onLoadingEnded(); } - private void showProfileDBSelectionDialog(final String host, final int port, final List availableProfiles) { - if (availableProfiles != null && availableProfiles.size() == 1) { - SettingsManager.i().getUserSession().setProfileDB(availableProfiles.get(0)); - - loadDepo(host, port, this::onLoginCompleted); - } else { - - // setup the alert builder - AlertDialog.Builder builder = new AlertDialog.Builder(mActivity); - builder.setTitle(R.string.action_choose_profile_db); - - // add a list - String[] profiles = new String[availableProfiles.size()]; - profiles = availableProfiles.toArray(profiles); - builder.setItems(profiles, (dialog, which) -> { - SettingsManager.i().getUserSession().setProfileDB(availableProfiles.get(which)); - - loadDepo(host, port, this::onLoginCompleted); - }); - - // create and show the alert dialog - AlertDialog dialog = builder.create(); - dialog.show(); - } + private void sendOnLoginCompleted(String host, int port, String fullName, List availableProfiles) { + if (this.mListener != null) + mListener.onLoginCompleted(host, port, fullName, availableProfiles); } - public void onLoginCompleted() { - loginButtonEnabled.set(true); - SettingsManager.update(); - - startSplashActivity(); + private void sendError(Exception ex) { + if (this.mListener != null) mListener.onError(ex); } + public LoginViewModel setListener(Listener listener) { + this.mListener = listener; + return this; + } - private void startSplashActivity() { - mActivity.finish(); - Intent myIntent = new Intent(mActivity, SplashActivity.class); - mActivity.startActivity(myIntent); + public interface Listener extends ILoadingListener { + void onError(Exception ex); + + void onLoginCompleted(String host, int port, String fullName, List availableProfiles); } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/OrdiniUscitaElencoFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/OrdiniUscitaElencoFragment.java index b79eadab..af2c9bba 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/OrdiniUscitaElencoFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/OrdiniUscitaElencoFragment.java @@ -262,7 +262,10 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF mAppliedFilterViewModel.getCurrentDataConsPredicate().addOnPropertyChangedCallback(onPredicateChanged); mAppliedFilterViewModel.getCurrentGruppoMercPredicate().addOnPropertyChangedCallback(onPredicateChanged); - List filterList = Stream.of(OrdiniUscitaElencoBindings.AVAILABLE_FILTERS.entrySet()).map(Map.Entry::getValue).sortBy(FilterChipDTO::getPosizione).toList(); + List filterList = Stream.of(OrdiniUscitaElencoBindings.AVAILABLE_FILTERS.entrySet()) + .map(Map.Entry::getValue) + .sortBy(FilterChipDTO::getPosizione) + .toList(); for (FilterChipDTO filterChipDTO : filterList) { @@ -848,8 +851,10 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF private void initMtbGrupsCache(Runnable onComplete) { var codMgrpArts = Stream.of(Objects.requireNonNull(this.mViewModel.getOrderList().getValue())) - .flatMap(x -> Stream.of(x.getAvailableClassMerc())) + .flatMap(x -> Stream.of(x.getAvailableClassMerc() != null ? x.getAvailableClassMerc() : new ArrayList<>())) .map(OrdineUscitaInevasoDTO.AvailableClassMerc::getCodMgrp) + .withoutNulls() + .distinct() .toList(); this.mArticoloRESTConsumer.getArtsGroups(codMgrpArts, mtbGrupCache -> { diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/VenditaFiltroOrdiniViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/VenditaFiltroOrdiniViewModel.java index 11629b15..e3f84f58 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/VenditaFiltroOrdiniViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/filters/VenditaFiltroOrdiniViewModel.java @@ -648,7 +648,10 @@ public class VenditaFiltroOrdiniViewModel { public List getAllGruppoMerc(List mtbGrupFullList) { var codMgrp = Stream.of(initialOrderList) - .flatMap(ordiniUscitaElencoDTO -> Stream.of(ordiniUscitaElencoDTO.getAvailableClassMerc())) + .flatMap(ordiniUscitaElencoDTO -> + Stream.of(ordiniUscitaElencoDTO.getAvailableClassMerc() != null ? + ordiniUscitaElencoDTO.getAvailableClassMerc() : + new ArrayList<>())) .map(OrdineUscitaInevasoDTO.AvailableClassMerc::getCodMgrp) .withoutNulls() .distinct() diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiActivity.java index 3d4cfb24..7607dec1 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiActivity.java @@ -276,8 +276,8 @@ public class PickingResiActivity extends BaseActivity implements BottomSheetFrag } @Override - public void onNoteAggiuntiveRequired(RunnableArgs onComplete, Runnable onAbort) { - NoteAggiuntiveLUDialog.make(this, onComplete, onAbort).show(); + public void onNoteAggiuntiveRequired(RunnableArgs onComplete) { + NoteAggiuntiveLUDialog.make(this, onComplete).show(); } @Override diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiViewModel.java index 9e4afb7d..be32fd1e 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiViewModel.java @@ -185,9 +185,6 @@ public class PickingResiViewModel { }, this::sendError); - }, () -> { - this.sendLUClosed(); - this.sendOnLoadingEnded(); }); } }, this::sendError); @@ -720,8 +717,8 @@ public class PickingResiViewModel { return mPickingList; } - private void sendOnNoteAggiuntiveRequired(RunnableArgs onComplete, Runnable onAbort) { - if (this.mListener != null) this.mListener.onNoteAggiuntiveRequired(onComplete, onAbort); + private void sendOnNoteAggiuntiveRequired(RunnableArgs onComplete) { + if (this.mListener != null) this.mListener.onNoteAggiuntiveRequired(onComplete); } private void sendOnLoadingStarted() { @@ -798,7 +795,7 @@ public class PickingResiViewModel { public interface Listener extends ILUPrintListener, ILoadingListener, ILUBaseOperationsListener { - void onNoteAggiuntiveRequired(RunnableArgs onComplete, Runnable onAbort); + void onNoteAggiuntiveRequired(RunnableArgs onComplete); void onError(Exception ex); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/rest/PickingResiRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/rest/PickingResiRESTConsumer.java index c06baf0a..159e227d 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/rest/PickingResiRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/rest/PickingResiRESTConsumer.java @@ -82,7 +82,7 @@ public class PickingResiRESTConsumer { if(onComplete != null) onComplete.run(values); - } + } else onComplete.run(new ArrayList<>()); }, onFailed); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/ui/PickingResiListAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/ui/PickingResiListAdapter.java index 4d8b3c29..b7af8dfe 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/ui/PickingResiListAdapter.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/ui/PickingResiListAdapter.java @@ -107,7 +107,7 @@ public class PickingResiListAdapter extends SectionedRecyclerViewAdapter sitArtOrdList, RunnableArgs> onComplete) { List codMarts = Stream.of(sitArtOrdList) - .map(SitArtOrdDTO::getCodMart) + .map(x -> x.getCodMart().trim()) .toList(); this.mArticoloRESTConsumer.getByCodMarts(codMarts, listMtbAarts -> { @@ -183,7 +183,7 @@ public class SpedizioneViewModel { MtbAart mtbAart = null; for (MtbAart mtbAartItem : listMtbAarts) { - if (mtbAartItem.getCodMart().equalsIgnoreCase(sitArtOrdDTO.getCodMart())) { + if (mtbAartItem.getCodMart().trim().equalsIgnoreCase(sitArtOrdDTO.getCodMart().trim())) { mtbAart = mtbAartItem; break; } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/ui/SpedizioneListAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/ui/SpedizioneListAdapter.java index 68fa2471..2fc84245 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/ui/SpedizioneListAdapter.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/ui/SpedizioneListAdapter.java @@ -124,7 +124,7 @@ public class SpedizioneListAdapter extends SectionedRecyclerViewAdapter 0) { + float parallaxDelta = expansionDelta * parallax; + for (int i = 0; i < getChildCount(); i++) { + View child = getChildAt(i); + if (orientation == HORIZONTAL) { + int direction = -1; + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1 && getLayoutDirection() == LAYOUT_DIRECTION_RTL) { + direction = 1; + } + child.setTranslationX(direction * parallaxDelta); + } else { + child.setTranslationY(-parallaxDelta); + } + } + } + + if (orientation == HORIZONTAL) { + setMeasuredDimension(width - expansionDelta, height); + } else { + setMeasuredDimension(width, height - expansionDelta); + } + } + + @Override + protected void onConfigurationChanged(Configuration newConfig) { + if (animator != null) { + animator.cancel(); + } + super.onConfigurationChanged(newConfig); + } + + /** + * Get expansion state + * + * @return one of {@link ExpandableLayout.State} + */ + public int getState() { + return state; + } + + public boolean isExpanded() { + return state == EXPANDING || state == EXPANDED; + } + + public void toggle() { + toggle(true); + } + + public void toggle(boolean animate) { + if (isExpanded()) { + collapse(animate); + } else { + expand(animate); + } + } + + public void expand() { + expand(true); + } + + public void expand(boolean animate) { + setExpanded(true, animate); + } + + public void collapse() { + collapse(true); + } + + public void collapse(boolean animate) { + setExpanded(false, animate); + } + + /** + * Convenience method - same as calling setExpanded(expanded, true) + */ + public void setExpanded(boolean expand) { + setExpanded(expand, true); + } + + public void setExpanded(boolean expand, boolean animate) { + if (expand == isExpanded()) { + return; + } + + int targetExpansion = expand ? 1 : 0; + if (animate) { + animateSize(targetExpansion); + } else { + setExpansion(targetExpansion); + } + } + + public int getDuration() { + return duration; + } + + public void setInterpolator(Interpolator interpolator) { + this.interpolator = interpolator; + } + + public void setDuration(int duration) { + this.duration = duration; + } + + public float getExpansion() { + return expansion; + } + + public void setExpansion(float expansion) { + if (this.expansion == expansion) { + return; + } + + // Infer state from previous value + float delta = expansion - this.expansion; + if (expansion == 0) { + state = COLLAPSED; + } else if (expansion == 1) { + state = EXPANDED; + } else if (delta < 0) { + state = COLLAPSING; + } else if (delta > 0) { + state = EXPANDING; + } + + setVisibility(state == COLLAPSED ? GONE : VISIBLE); + this.expansion = expansion; + requestLayout(); + + if (listener != null) { + listener.onExpansionUpdate(expansion, state); + } + } + + public float getParallax() { + return parallax; + } + + public void setParallax(float parallax) { + // Make sure parallax is between 0 and 1 + parallax = Math.min(1, Math.max(0, parallax)); + this.parallax = parallax; + } + + public int getOrientation() { + return orientation; + } + + public void setOrientation(int orientation) { + if (orientation < 0 || orientation > 1) { + throw new IllegalArgumentException("Orientation must be either 0 (horizontal) or 1 (vertical)"); + } + this.orientation = orientation; + } + + public void setOnExpansionUpdateListener(ExpandableLayout.OnExpansionUpdateListener listener) { + this.listener = listener; + } + + private void animateSize(int targetExpansion) { + if (animator != null) { + animator.cancel(); + animator = null; + } + + setLayerType(View.LAYER_TYPE_HARDWARE, null); + + animator = ValueAnimator.ofFloat(expansion, targetExpansion); + animator.setInterpolator(interpolator); + animator.setDuration(duration); + + animator.addUpdateListener(valueAnimator -> setExpansion((float) valueAnimator.getAnimatedValue())); + animator.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + super.onAnimationEnd(animation); + + setLayerType(View.LAYER_TYPE_NONE, null); + } + }); + + animator.addListener(new ExpandableLayout.ExpansionListener(targetExpansion)); + + animator.start(); + } + + public interface OnExpansionUpdateListener { + /** + * Callback for expansion updates + * + * @param expansionFraction Value between 0 (collapsed) and 1 (expanded) representing the the expansion progress + * @param state One of {@link ExpandableLayout.State} repesenting the current expansion state + */ + void onExpansionUpdate(float expansionFraction, int state); + } + + private class ExpansionListener implements Animator.AnimatorListener { + private int targetExpansion; + private boolean canceled; + + public ExpansionListener(int targetExpansion) { + this.targetExpansion = targetExpansion; + } + + @Override + public void onAnimationStart(Animator animation) { + state = targetExpansion == 0 ? COLLAPSING : EXPANDING; + } + + @Override + public void onAnimationEnd(Animator animation) { + if (!canceled) { + state = targetExpansion == 0 ? COLLAPSED : EXPANDED; + setExpansion(targetExpansion); + } + } + + @Override + public void onAnimationCancel(Animator animation) { + canceled = true; + } + + @Override + public void onAnimationRepeat(Animator animation) { + } + } +} + diff --git a/app/src/main/java/it/integry/integrywmsnative/ui/expandablelayout/FastOutSlowInInterpolator.java b/app/src/main/java/it/integry/integrywmsnative/ui/expandablelayout/FastOutSlowInInterpolator.java new file mode 100644 index 00000000..08647a29 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/ui/expandablelayout/FastOutSlowInInterpolator.java @@ -0,0 +1,45 @@ +package it.integry.integrywmsnative.ui.expandablelayout; + +public class FastOutSlowInInterpolator extends LookupTableInterpolator { + + /** + * Lookup table values sampled with x at regular intervals between 0 and 1 for a total of + * 201 points. + */ + private static final float[] VALUES = new float[] { + 0.0000f, 0.0001f, 0.0002f, 0.0005f, 0.0009f, 0.0014f, 0.0020f, + 0.0027f, 0.0036f, 0.0046f, 0.0058f, 0.0071f, 0.0085f, 0.0101f, + 0.0118f, 0.0137f, 0.0158f, 0.0180f, 0.0205f, 0.0231f, 0.0259f, + 0.0289f, 0.0321f, 0.0355f, 0.0391f, 0.0430f, 0.0471f, 0.0514f, + 0.0560f, 0.0608f, 0.0660f, 0.0714f, 0.0771f, 0.0830f, 0.0893f, + 0.0959f, 0.1029f, 0.1101f, 0.1177f, 0.1257f, 0.1339f, 0.1426f, + 0.1516f, 0.1610f, 0.1707f, 0.1808f, 0.1913f, 0.2021f, 0.2133f, + 0.2248f, 0.2366f, 0.2487f, 0.2611f, 0.2738f, 0.2867f, 0.2998f, + 0.3131f, 0.3265f, 0.3400f, 0.3536f, 0.3673f, 0.3810f, 0.3946f, + 0.4082f, 0.4217f, 0.4352f, 0.4485f, 0.4616f, 0.4746f, 0.4874f, + 0.5000f, 0.5124f, 0.5246f, 0.5365f, 0.5482f, 0.5597f, 0.5710f, + 0.5820f, 0.5928f, 0.6033f, 0.6136f, 0.6237f, 0.6335f, 0.6431f, + 0.6525f, 0.6616f, 0.6706f, 0.6793f, 0.6878f, 0.6961f, 0.7043f, + 0.7122f, 0.7199f, 0.7275f, 0.7349f, 0.7421f, 0.7491f, 0.7559f, + 0.7626f, 0.7692f, 0.7756f, 0.7818f, 0.7879f, 0.7938f, 0.7996f, + 0.8053f, 0.8108f, 0.8162f, 0.8215f, 0.8266f, 0.8317f, 0.8366f, + 0.8414f, 0.8461f, 0.8507f, 0.8551f, 0.8595f, 0.8638f, 0.8679f, + 0.8720f, 0.8760f, 0.8798f, 0.8836f, 0.8873f, 0.8909f, 0.8945f, + 0.8979f, 0.9013f, 0.9046f, 0.9078f, 0.9109f, 0.9139f, 0.9169f, + 0.9198f, 0.9227f, 0.9254f, 0.9281f, 0.9307f, 0.9333f, 0.9358f, + 0.9382f, 0.9406f, 0.9429f, 0.9452f, 0.9474f, 0.9495f, 0.9516f, + 0.9536f, 0.9556f, 0.9575f, 0.9594f, 0.9612f, 0.9629f, 0.9646f, + 0.9663f, 0.9679f, 0.9695f, 0.9710f, 0.9725f, 0.9739f, 0.9753f, + 0.9766f, 0.9779f, 0.9791f, 0.9803f, 0.9815f, 0.9826f, 0.9837f, + 0.9848f, 0.9858f, 0.9867f, 0.9877f, 0.9885f, 0.9894f, 0.9902f, + 0.9910f, 0.9917f, 0.9924f, 0.9931f, 0.9937f, 0.9944f, 0.9949f, + 0.9955f, 0.9960f, 0.9964f, 0.9969f, 0.9973f, 0.9977f, 0.9980f, + 0.9984f, 0.9986f, 0.9989f, 0.9991f, 0.9993f, 0.9995f, 0.9997f, + 0.9998f, 0.9999f, 0.9999f, 1.0000f, 1.0000f + }; + + public FastOutSlowInInterpolator() { + super(VALUES); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/ui/expandablelayout/LookupTableInterpolator.java b/app/src/main/java/it/integry/integrywmsnative/ui/expandablelayout/LookupTableInterpolator.java new file mode 100644 index 00000000..bcd182f2 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/ui/expandablelayout/LookupTableInterpolator.java @@ -0,0 +1,37 @@ +package it.integry.integrywmsnative.ui.expandablelayout; + +import android.view.animation.Interpolator; + +abstract class LookupTableInterpolator implements Interpolator { + + private final float[] mValues; + private final float mStepSize; + + public LookupTableInterpolator(float[] values) { + mValues = values; + mStepSize = 1f / (mValues.length - 1); + } + + @Override + public float getInterpolation(float input) { + if (input >= 1.0f) { + return 1.0f; + } + if (input <= 0f) { + return 0f; + } + + // Calculate index - We use min with length - 2 to avoid IndexOutOfBoundsException when + // we lerp (linearly interpolate) in the return statement + int position = Math.min((int) (input * (mValues.length - 1)), mValues.length - 2); + + // Calculate values to account for small offsets as the lookup table has discrete values + float quantized = position * mStepSize; + float diff = input - quantized; + float weight = diff / mStepSize; + + // Linearly interpolate between the table values + return mValues[position] + weight * (mValues[position + 1] - mValues[position]); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/bottom_sheet__lu_content/BottomSheetFragmentLUContentView.java b/app/src/main/java/it/integry/integrywmsnative/view/bottom_sheet__lu_content/BottomSheetFragmentLUContentView.java index db114b7b..fa959fbc 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/bottom_sheet__lu_content/BottomSheetFragmentLUContentView.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/bottom_sheet__lu_content/BottomSheetFragmentLUContentView.java @@ -77,12 +77,14 @@ public class BottomSheetFragmentLUContentView extends BottomSheetFragmentBaseVie this.mViewModel.getObservableMtbColt().addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() { @Override public void onPropertyChanged(Observable sender, int propertyId) { - if(mViewModel.getObservableMtbColt().get() != null) { + var mtbColt = mViewModel.getObservableMtbColt().get(); + + if(mtbColt != null) { initAdapter(); onMtbColrItemChanged(); - mViewModel.getObservableMtbColt().get().getMtbColr().addOnListChangedCallback(new OnListGeneralChangedCallback() { + mtbColt.getMtbColr().addOnListChangedCallback(new OnListGeneralChangedCallback() { @Override public void onChanged(ObservableList sender) { onMtbColrItemChanged(); diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_should_versamento_automatico_ul/DialogAskShouldVersamentoAutomaticoULView.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_should_versamento_automatico_ul/DialogAskShouldVersamentoAutomaticoULView.java new file mode 100644 index 00000000..f201a127 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_should_versamento_automatico_ul/DialogAskShouldVersamentoAutomaticoULView.java @@ -0,0 +1,75 @@ +package it.integry.integrywmsnative.view.dialogs.ask_should_versamento_automatico_ul; + +import android.content.DialogInterface; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.databinding.DataBindingUtil; + +import org.jetbrains.annotations.NotNull; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.expansion.BaseDialogFragment; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.databinding.DialogAskShouldVersamentoAutomaticoUlBinding; + +public class DialogAskShouldVersamentoAutomaticoULView extends BaseDialogFragment { + + private RunnableArgs mOnDismiss; + private DialogAskShouldVersamentoAutomaticoUlBinding mBindings; + + private boolean returnValue = false; + + public static DialogAskShouldVersamentoAutomaticoULView newInstance(@NotNull RunnableArgs onDismiss) { + return new DialogAskShouldVersamentoAutomaticoULView(onDismiss); + } + + private DialogAskShouldVersamentoAutomaticoULView(@NotNull RunnableArgs onDismiss) { + super(); + + this.mOnDismiss = onDismiss; + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + mBindings = DataBindingUtil.inflate(inflater, R.layout.dialog_ask_should_versamento_automatico_ul, container, false); + mBindings.setLifecycleOwner(this); + + getDialog().setCanceledOnTouchOutside(false); + getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); + + mBindings.setView(this); + + return mBindings.getRoot(); + } + + @Override + public void onDismiss(@NonNull DialogInterface dialog) { + super.onDismiss(dialog); + + if (mOnDismiss != null) { + this.mOnDismiss.run(returnValue); + } + } + + + public void confirm() { + this.returnValue = true; + dismiss(); + } + + public void abort() { + this.returnValue = false; + dismiss(); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/note_aggiuntive_lu/NoteAggiuntiveLUDialog.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/note_aggiuntive_lu/NoteAggiuntiveLUDialog.java index 1bc2546a..01f390d5 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/note_aggiuntive_lu/NoteAggiuntiveLUDialog.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/note_aggiuntive_lu/NoteAggiuntiveLUDialog.java @@ -10,21 +10,23 @@ import android.view.LayoutInflater; import androidx.databinding.DataBindingUtil; import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.utility.UtilityDialog; import it.integry.integrywmsnative.databinding.DialogNoteAggiuntiveNuovaUlBinding; public class NoteAggiuntiveLUDialog { private Dialog mDialog; - public static Dialog make(Context context, final RunnableArgs onComplete, final Runnable onAbort) { - return new NoteAggiuntiveLUDialog(context, onComplete, onAbort).mDialog; + public static Dialog make(Context context, final RunnableArgs onComplete) { + return new NoteAggiuntiveLUDialog(context, onComplete).mDialog; } - private NoteAggiuntiveLUDialog(Context context, final RunnableArgs onComplete, final Runnable onAbort){ + private NoteAggiuntiveLUDialog(Context context, final RunnableArgs onComplete){ LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE ); DialogNoteAggiuntiveNuovaUlBinding bindings = DataBindingUtil.inflate(inflater, R.layout.dialog_note_aggiuntive_nuova_ul, null, false); + mDialog = new Dialog(context); mDialog.setContentView(bindings.getRoot()); @@ -32,17 +34,14 @@ public class NoteAggiuntiveLUDialog { mDialog.setCancelable(false); mDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + UtilityDialog.setTo90PercentWidth(context, mDialog); + + bindings.buttonConfirm.setOnClickListener(v -> { mDialog.dismiss(); if(onComplete != null) onComplete.run(bindings.additionalNotesText.getText().toString()); }); - bindings.buttonAbort.setOnClickListener(v -> { - mDialog.dismiss(); - if(onAbort != null) onAbort.run(); - }); - - } } diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/versamento_automatico_ul_done/DialogVersamentoAutomaticoULDoneView.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/versamento_automatico_ul_done/DialogVersamentoAutomaticoULDoneView.java new file mode 100644 index 00000000..d54c7d2f --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/versamento_automatico_ul_done/DialogVersamentoAutomaticoULDoneView.java @@ -0,0 +1,170 @@ +package it.integry.integrywmsnative.view.dialogs.versamento_automatico_ul_done; + +import android.content.DialogInterface; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; +import android.os.Bundle; +import android.text.Html; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; +import androidx.databinding.DataBindingUtil; + +import org.jetbrains.annotations.NotNull; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.expansion.BaseDialogFragment; +import it.integry.integrywmsnative.core.rest.model.VersamentoAutomaticoULResponseDTO; +import it.integry.integrywmsnative.core.utility.UtilityDialog; +import it.integry.integrywmsnative.databinding.DialogVersamentoAutomaticoUlDoneBinding; + +public class DialogVersamentoAutomaticoULDoneView extends BaseDialogFragment { + + public final VersamentoAutomaticoULResponseDTO versamentoAutomaticoULResponseDTO; + private final Runnable mOnDismiss; + + private DialogVersamentoAutomaticoUlDoneBinding mBindings; + + public static DialogVersamentoAutomaticoULDoneView newInstance(@NotNull VersamentoAutomaticoULResponseDTO versamentoAutomaticoULResponseDTO, @NotNull Runnable onDismiss) { + return new DialogVersamentoAutomaticoULDoneView(versamentoAutomaticoULResponseDTO, onDismiss); + } + + private DialogVersamentoAutomaticoULDoneView(@NotNull VersamentoAutomaticoULResponseDTO versamentoAutomaticoULResponseDTO, @NotNull Runnable onDismiss) { + super(); + + this.versamentoAutomaticoULResponseDTO = versamentoAutomaticoULResponseDTO; + this.mOnDismiss = onDismiss; + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + mBindings = DataBindingUtil.inflate(inflater, R.layout.dialog_versamento_automatico_ul_done, container, false); + mBindings.setLifecycleOwner(this); + + getDialog().setCanceledOnTouchOutside(false); + getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); + + UtilityDialog.setTo95PercentWidth(requireContext(), this); + + mBindings.setView(this); + + this.initTitle(); + this.initContent(); + + return mBindings.getRoot(); + } + + @Override + public void onDismiss(@NonNull DialogInterface dialog) { + super.onDismiss(dialog); + + if (mOnDismiss != null) { + this.mOnDismiss.run(); + } + } + + + private void initTitle() { + int colorBackgroundTitle = -1; + + if (versamentoAutomaticoULResponseDTO.getFailed() == null || versamentoAutomaticoULResponseDTO.getFailed().isEmpty()) { + //SUCCESS + colorBackgroundTitle = ContextCompat.getColor(requireContext(), R.color.green_300); + } else { + //WARNING + colorBackgroundTitle = ContextCompat.getColor(requireContext(), R.color.yellow_600); + } + + + mBindings.base.setBackgroundColor(colorBackgroundTitle); + } + + private void initContent() { + String text; + + if (versamentoAutomaticoULResponseDTO.getFailed() == null || versamentoAutomaticoULResponseDTO.getFailed().isEmpty()) { + //SUCCESS + text = "Versamento completato con successo"; + } else { + //WARNING + text = "Il sistema non è riuscito a versare " + versamentoAutomaticoULResponseDTO.getFailed().size() + + " " + getResources().getQuantityString(R.plurals.articles, versamentoAutomaticoULResponseDTO.getFailed().size()) + ""; + } + + mBindings.descriptionText.setText(Html.fromHtml(text)); + + + + +// var notCompletedListAdapter = new BaseAdapter() { +// +// @Override +// public View getView(int position, View convertView, ViewGroup parent) { +// +// var mtbColr = versamentoAutomaticoULResponseDTO.getFailed().get(position); +// +// var inflater = LayoutInflater.from(requireContext()); +// DialogVersamentoAutomaticoUlDoneNotCompletedListItemBinding binding = null; +// +// if(convertView == null) { +// binding = DataBindingUtil.inflate(inflater, R.layout.dialog_versamento_automatico_ul_done__not_completed_list_item, parent, false); +// } else { +// binding = DataBindingUtil.findBinding(convertView); +// } +// +// binding.setItem(mtbColr); +// +// convertView = binding.getRoot(); +// +// //Setting qty with unt_mis +// if (!SettingsManager.iDB().isFlagForceAllToColli() && (mtbColr.getMtbAart() == null || mtbColr.getMtbAart().isFlagQtaCnfFissaBoolean())) { +// String text = UtilityNumber.decimalToString(mtbColr.getQtaCol()); +// +// +// if (mtbColr.getMtbAart() != null) { +// text += !UtilityString.isNullOrEmpty(mtbColr.getMtbAart().getUntMis()) ? "\n" + mtbColr.getMtbAart().getUntMis() : ""; +// } +// +// binding.qtaTextview.setText(text); +// } else { +// binding.qtaTextview.setText(UtilityNumber.decimalToString(mtbColr.getNumCnf()) + "\n" + UtilityResources.getString(R.string.unt_mis_col)); +// } +// +// return convertView; +// } +// +// @Override +// public long getItemId(int position) { +// return position; +// } +// +// @Override +// public Object getItem(int position) { +// return position; +// } +// +// @Override +// public int getCount() { +// return versamentoAutomaticoULResponseDTO.getFailed().size(); +// } +// }; +// +// +// mBindings.detailsNotCompletedList.setAdapter(notCompletedListAdapter); + + } + + +// public void toggleDetailVisibility() { +// mBindings.detailsContainer.toggle(true); +// } + + +} diff --git a/app/src/main/res/drawable/badge2_round_corner.xml b/app/src/main/res/drawable/badge2_round_corner.xml deleted file mode 100644 index 9ecc4c83..00000000 --- a/app/src/main/res/drawable/badge2_round_corner.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/badge_gray_round_corner.xml b/app/src/main/res/drawable/badge_round_corner.xml similarity index 81% rename from app/src/main/res/drawable/badge_gray_round_corner.xml rename to app/src/main/res/drawable/badge_round_corner.xml index 18455ca2..cd319ab1 100644 --- a/app/src/main/res/drawable/badge_gray_round_corner.xml +++ b/app/src/main/res/drawable/badge_round_corner.xml @@ -1,7 +1,7 @@ - + - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bottom_list_background_round16.xml b/app/src/main/res/drawable/bottom_list_background_round16.xml deleted file mode 100644 index f0bcdafd..00000000 --- a/app/src/main/res/drawable/bottom_list_background_round16.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/bottom_sheet_modal_background.xml b/app/src/main/res/drawable/bottom_sheet_modal_background.xml deleted file mode 100644 index 4d78ebff..00000000 --- a/app/src/main/res/drawable/bottom_sheet_modal_background.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/circleshape.xml b/app/src/main/res/drawable/circleshape.xml deleted file mode 100644 index 72a65f0a..00000000 --- a/app/src/main/res/drawable/circleshape.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/circular_background.xml b/app/src/main/res/drawable/circular_background.xml deleted file mode 100644 index 687539f0..00000000 --- a/app/src/main/res/drawable/circular_background.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/circular_background_alpha_7.xml b/app/src/main/res/drawable/circular_background_alpha_7.xml deleted file mode 100644 index d9c5e6c7..00000000 --- a/app/src/main/res/drawable/circular_background_alpha_7.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/dialog_card_child_bg.xml b/app/src/main/res/drawable/dialog_card_child_bg.xml new file mode 100644 index 00000000..970c1797 --- /dev/null +++ b/app/src/main/res/drawable/dialog_card_child_bg.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/fab_label_background.xml b/app/src/main/res/drawable/fab_label_background.xml deleted file mode 100644 index 0d8c05b1..00000000 --- a/app/src/main/res/drawable/fab_label_background.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/fast_scroll_thumb.xml b/app/src/main/res/drawable/fast_scroll_thumb.xml deleted file mode 100644 index 0f7e1449..00000000 --- a/app/src/main/res/drawable/fast_scroll_thumb.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_baseline_keyboard_arrow_down_24.xml b/app/src/main/res/drawable/ic_baseline_keyboard_arrow_down_24.xml new file mode 100644 index 00000000..1aeaa998 --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_keyboard_arrow_down_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/ic_error_white_24dp.xml b/app/src/main/res/drawable/ic_error_white_24dp.xml index 6cfb3cb6..1d14bc4a 100644 --- a/app/src/main/res/drawable/ic_error_white_24dp.xml +++ b/app/src/main/res/drawable/ic_error_white_24dp.xml @@ -1,5 +1,10 @@ - - + + diff --git a/app/src/main/res/drawable/ic_location_24.xml b/app/src/main/res/drawable/ic_location_24.xml new file mode 100644 index 00000000..e5383d72 --- /dev/null +++ b/app/src/main/res/drawable/ic_location_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/progress_bar_background.xml b/app/src/main/res/drawable/progress_bar_background.xml deleted file mode 100644 index 2fa1399b..00000000 --- a/app/src/main/res/drawable/progress_bar_background.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_gradient_top_shadow.xml b/app/src/main/res/drawable/shape_gradient_top_shadow.xml deleted file mode 100644 index 2d104223..00000000 --- a/app/src/main/res/drawable/shape_gradient_top_shadow.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/side_nav_bar.xml b/app/src/main/res/drawable/side_nav_bar.xml deleted file mode 100644 index 458b4b07..00000000 --- a/app/src/main/res/drawable/side_nav_bar.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - \ No newline at end of file diff --git a/app/src/main/res/layout-land-hdpi/dialog_input_quantity_v2.xml b/app/src/main/res/layout-land-hdpi/dialog_input_quantity_v2.xml index 9cdf90ca..a5bfb9f0 100644 --- a/app/src/main/res/layout-land-hdpi/dialog_input_quantity_v2.xml +++ b/app/src/main/res/layout-land-hdpi/dialog_input_quantity_v2.xml @@ -194,7 +194,7 @@ android:layout_gravity="center" android:layout_marginEnd="2dp" android:layout_weight="0.5" - android:background="@drawable/badge_gray_round_corner" + android:background="@drawable/badge_round_corner" android:backgroundTint="@color/green_600" android:orientation="vertical" android:padding="8dp" @@ -293,7 +293,7 @@ android:layout_gravity="center" android:layout_marginStart="2dp" android:layout_weight="0.5" - android:background="@drawable/badge_gray_round_corner" + android:background="@drawable/badge_round_corner" android:backgroundTint="@color/colorPrimary" android:orientation="vertical" android:padding="8dp" diff --git a/app/src/main/res/layout/accettazione_ordine_inevaso_main_list__group_item.xml b/app/src/main/res/layout/accettazione_ordine_inevaso_main_list__group_item.xml index 2d6ff5f1..8da22590 100644 --- a/app/src/main/res/layout/accettazione_ordine_inevaso_main_list__group_item.xml +++ b/app/src/main/res/layout/accettazione_ordine_inevaso_main_list__group_item.xml @@ -24,7 +24,8 @@ style="@style/AppTheme.NewMaterial.Text.Small" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:background="@drawable/badge1_round_corner" + android:background="@drawable/badge_round_corner" + android:backgroundTint="@color/colorPrimary" android:paddingLeft="6dp" android:paddingTop="2dp" android:paddingRight="6dp" @@ -39,7 +40,8 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="8dp" - android:background="@drawable/badge2_round_corner" + android:background="@drawable/badge_round_corner" + android:backgroundTint="@color/orange_600" android:paddingLeft="6dp" android:paddingTop="2dp" android:paddingRight="6dp" @@ -48,6 +50,37 @@ android:textStyle="bold" tools:text="BADGE 2" /> + + + + + + + @@ -117,12 +150,12 @@ + android:orientation="horizontal"> - - + android:layout_height="wrap_content" + android:background="@color/full_white" + android:minHeight="?attr/actionBarSize"> - + + + + android:scrollbars="none"> - + + - + + + + + + + + + + + + + + app:layout_constraintEnd_toStartOf="@id/guideline_empty_right" + app:layout_constraintStart_toEndOf="@id/guideline_empty_left" + app:layout_constraintTop_toTopOf="@id/guideline_empty_top"> - + android:adjustViewBounds="true" + android:src="@drawable/ic_playlist_add_check_24dp" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + android:text="@string/no_item_to_pick_text" + android:textColor="@android:color/black" + android:textSize="18sp" /> + - + - - + - + - + - + - + - - - - - diff --git a/app/src/main/res/layout/activity_contab_doc_interno_row__list_single_item.xml b/app/src/main/res/layout/activity_contab_doc_interno_row__list_single_item.xml index 8e99b660..8cadf3fc 100644 --- a/app/src/main/res/layout/activity_contab_doc_interno_row__list_single_item.xml +++ b/app/src/main/res/layout/activity_contab_doc_interno_row__list_single_item.xml @@ -75,7 +75,8 @@ + name="view" + type="it.integry.integrywmsnative.gest.login.LoginActivity" /> @@ -36,7 +36,7 @@ android:layout_height="wrap_content" android:layout_marginTop="8dp" android:layout_marginBottom="8dp" - app:errorText="@{loginViewModel.usernameError}" + app:errorText="@{view.usernameError}" app:hintTextAppearance="@style/hint_text" style="@style/TextInputLayout.OutlinePrimary"> @@ -46,7 +46,7 @@ android:layout_height="wrap_content" android:hint="Username" android:inputType="textEmailAddress" - app:binding="@{loginViewModel.username}" /> + app:binding="@{view.username}" /> @@ -55,7 +55,7 @@ android:layout_height="wrap_content" android:layout_marginTop="8dp" android:layout_marginBottom="8dp" - app:errorText="@{loginViewModel.passwordError}" + app:errorText="@{view.passwordError}" app:hintTextAppearance="@style/hint_text" app:passwordToggleEnabled="true" style="@style/TextInputLayout.OutlinePrimary"> @@ -66,16 +66,16 @@ android:layout_height="wrap_content" android:hint="Password" android:inputType="textPassword" - app:binding="@{loginViewModel.password}" /> + app:binding="@{view.password}" /> + app:checked="@{view.customSettingsCheckboxChecked}" /> + app:el_expanded_bind="@{view.customSettingsCheckboxChecked}"> @@ -106,7 +106,7 @@ android:layout_height="wrap_content" android:hint="Codice azienda" android:inputType="text" - app:binding="@{loginViewModel.codAzienda}" /> + app:binding="@{view.codAzienda}" /> @@ -121,9 +121,9 @@ android:layout_height="wrap_content" android:layout_marginTop="24dp" android:layout_marginBottom="24dp" - android:enabled="@{loginViewModel.loginButtonEnabled}" + android:enabled="@{view.loginButtonEnabled}" android:text="@string/login" - app:onClick="@{() -> loginViewModel.login(loginViewModel.validate())}" /> + app:onClick="@{() -> view.login()}" /> diff --git a/app/src/main/res/layout/bottom_sheet_fragment__lu_content.xml b/app/src/main/res/layout/bottom_sheet_fragment__lu_content.xml index 4569f54f..216fa25e 100644 --- a/app/src/main/res/layout/bottom_sheet_fragment__lu_content.xml +++ b/app/src/main/res/layout/bottom_sheet_fragment__lu_content.xml @@ -63,7 +63,7 @@ android:layout_width="24dp" android:layout_height="4dp" android:alpha="0.5" - android:background="@drawable/badge_gray_round_corner" + android:background="@drawable/badge_round_corner" android:backgroundTint="@android:color/white" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" @@ -138,241 +138,306 @@ android:layout_height="wrap_content" android:orientation="vertical"> - - - - + android:orientation="vertical"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + android:padding="15dp"> - - - + android:layout_height="wrap_content"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + android:orientation="vertical" + android:paddingTop="14dp"> + + + + + + + + + + + + + + - - - @@ -390,9 +455,9 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:background="#99000000" - android:visibility="gone" android:clickable="true" - android:focusable="true"/> + android:focusable="true" + android:visibility="gone" /> @@ -154,7 +156,7 @@ diff --git a/app/src/main/res/layout/dialog_ask_cliente__page1.xml b/app/src/main/res/layout/dialog_ask_cliente__page1.xml index 169cf0d5..34c2065a 100644 --- a/app/src/main/res/layout/dialog_ask_cliente__page1.xml +++ b/app/src/main/res/layout/dialog_ask_cliente__page1.xml @@ -20,7 +20,7 @@ android:id="@+id/title_text" android:layout_width="match_parent" android:layout_height="wrap_content" - style="@style/TextViewMaterial.DialogTitle" + style="@style/TextViewMaterial.Dialog.HeadlineText" android:text="@string/customer" android:gravity="center_horizontal"/> diff --git a/app/src/main/res/layout/dialog_ask_cliente__page2.xml b/app/src/main/res/layout/dialog_ask_cliente__page2.xml index e16c4c6a..4500a471 100644 --- a/app/src/main/res/layout/dialog_ask_cliente__page2.xml +++ b/app/src/main/res/layout/dialog_ask_cliente__page2.xml @@ -20,7 +20,7 @@ android:id="@+id/title_text" android:layout_width="match_parent" android:layout_height="wrap_content" - style="@style/TextViewMaterial.DialogTitle" + style="@style/TextViewMaterial.Dialog.HeadlineText" android:text="@string/recipient" android:gravity="center_horizontal"/> diff --git a/app/src/main/res/layout/dialog_ask_livello_of_position.xml b/app/src/main/res/layout/dialog_ask_livello_of_position.xml index f77965dd..f1e13a5d 100644 --- a/app/src/main/res/layout/dialog_ask_livello_of_position.xml +++ b/app/src/main/res/layout/dialog_ask_livello_of_position.xml @@ -49,7 +49,7 @@ android:id="@+id/title_text" android:layout_width="match_parent" android:layout_height="wrap_content" - style="@style/TextViewMaterial.DialogTitle" + style="@style/TextViewMaterial.Dialog.HeadlineText" android:text="@string/placement" android:gravity="center_horizontal"/> diff --git a/app/src/main/res/layout/dialog_ask_magazzino_prossimita.xml b/app/src/main/res/layout/dialog_ask_magazzino_prossimita.xml index e54f4be6..d08f7eb4 100644 --- a/app/src/main/res/layout/dialog_ask_magazzino_prossimita.xml +++ b/app/src/main/res/layout/dialog_ask_magazzino_prossimita.xml @@ -62,7 +62,7 @@ android:id="@+id/title_text" android:layout_width="match_parent" android:layout_height="wrap_content" - style="@style/TextViewMaterial.DialogTitle" + style="@style/TextViewMaterial.Dialog.HeadlineText" android:text="@string/production_line" android:gravity="center_horizontal"/> diff --git a/app/src/main/res/layout/dialog_ask_position_of_lu.xml b/app/src/main/res/layout/dialog_ask_position_of_lu.xml index 81eded53..696c15e4 100644 --- a/app/src/main/res/layout/dialog_ask_position_of_lu.xml +++ b/app/src/main/res/layout/dialog_ask_position_of_lu.xml @@ -50,7 +50,7 @@ android:id="@+id/title_text" android:layout_width="match_parent" android:layout_height="wrap_content" - style="@style/TextViewMaterial.DialogTitle" + style="@style/TextViewMaterial.Dialog.HeadlineText" android:text="@string/placement" android:gravity="center_horizontal"/> diff --git a/app/src/main/res/layout/dialog_ask_should_print.xml b/app/src/main/res/layout/dialog_ask_should_print.xml index 262086bf..4a2d6653 100644 --- a/app/src/main/res/layout/dialog_ask_should_print.xml +++ b/app/src/main/res/layout/dialog_ask_should_print.xml @@ -40,7 +40,7 @@ - + diff --git a/app/src/main/res/layout/dialog_ask_should_versamento_automatico_ul.xml b/app/src/main/res/layout/dialog_ask_should_versamento_automatico_ul.xml new file mode 100644 index 00000000..45d1eb30 --- /dev/null +++ b/app/src/main/res/layout/dialog_ask_should_versamento_automatico_ul.xml @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_base.xml b/app/src/main/res/layout/dialog_base.xml index d9d9947b..2090dcdb 100644 --- a/app/src/main/res/layout/dialog_base.xml +++ b/app/src/main/res/layout/dialog_base.xml @@ -55,7 +55,7 @@ diff --git a/app/src/main/res/layout/dialog_basket_lu__mtb_colr_model.xml b/app/src/main/res/layout/dialog_basket_lu__mtb_colr_model.xml index 00ed2e55..5e0d56e5 100644 --- a/app/src/main/res/layout/dialog_basket_lu__mtb_colr_model.xml +++ b/app/src/main/res/layout/dialog_basket_lu__mtb_colr_model.xml @@ -73,7 +73,8 @@ android:layout_alignParentEnd="true" android:paddingStart="6dp" android:paddingEnd="6dp" - android:background="@drawable/badge2_round_corner" + android:background="@drawable/badge_round_corner" + android:backgroundTint="@color/orange_600" android:textColor="@android:color/white" style="@style/AppTheme.NewMaterial.Text.Small" tools:text="PESO KG" /> @@ -119,7 +120,8 @@ android:id="@+id/qta_textview" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:background="@drawable/badge1_round_corner" + android:background="@drawable/badge_round_corner" + android:backgroundTint="@color/colorPrimary" android:gravity="center" android:paddingLeft="6dp" android:paddingTop="2dp" diff --git a/app/src/main/res/layout/dialog_basket_lu__mtb_colt_model.xml b/app/src/main/res/layout/dialog_basket_lu__mtb_colt_model.xml index 0b28f0d2..34f42761 100644 --- a/app/src/main/res/layout/dialog_basket_lu__mtb_colt_model.xml +++ b/app/src/main/res/layout/dialog_basket_lu__mtb_colt_model.xml @@ -42,7 +42,8 @@ android:gravity="center" android:text="@{mtbColt.numCollo.toString()}" tools:text="22222" - android:background="@drawable/badge1_round_corner" + android:background="@drawable/badge_round_corner" + android:backgroundTint="@color/colorPrimary" android:textColor="@android:color/white" android:paddingTop="2dp" android:paddingBottom="2dp" diff --git a/app/src/main/res/layout/dialog_choose_art_from_lista_art.xml b/app/src/main/res/layout/dialog_choose_art_from_lista_art.xml index 642fca76..8147e254 100644 --- a/app/src/main/res/layout/dialog_choose_art_from_lista_art.xml +++ b/app/src/main/res/layout/dialog_choose_art_from_lista_art.xml @@ -45,7 +45,7 @@ android:id="@+id/title_text" android:layout_width="match_parent" android:layout_height="wrap_content" - style="@style/TextViewMaterial.DialogTitle" + style="@style/TextViewMaterial.Dialog.HeadlineText" android:text="@string/dialog_choose_art_from_lista_art" android:gravity="center_horizontal"/> diff --git a/app/src/main/res/layout/dialog_choose_arts_from_lista_arts__item_model.xml b/app/src/main/res/layout/dialog_choose_arts_from_lista_arts__item_model.xml index 15abcf53..7fba3597 100644 --- a/app/src/main/res/layout/dialog_choose_arts_from_lista_arts__item_model.xml +++ b/app/src/main/res/layout/dialog_choose_arts_from_lista_arts__item_model.xml @@ -73,7 +73,8 @@ android:textStyle="bold" android:paddingStart="6dp" android:paddingEnd="6dp" - android:background="@drawable/badge2_round_corner" + android:background="@drawable/badge_round_corner" + android:backgroundTint="@color/orange_600" android:textColor="@android:color/white" android:layout_alignParentEnd="true" style="@style/AppTheme.NewMaterial.Text.Small" @@ -120,7 +121,8 @@ android:id="@+id/qta_textview" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:background="@drawable/badge1_round_corner" + android:background="@drawable/badge_round_corner" + android:backgroundTint="@color/colorPrimary" android:gravity="center" android:paddingLeft="6dp" android:paddingTop="2dp" diff --git a/app/src/main/res/layout/dialog_choose_arts_from_lista_arts_layout.xml b/app/src/main/res/layout/dialog_choose_arts_from_lista_arts_layout.xml index 5f578f2d..fcd78683 100644 --- a/app/src/main/res/layout/dialog_choose_arts_from_lista_arts_layout.xml +++ b/app/src/main/res/layout/dialog_choose_arts_from_lista_arts_layout.xml @@ -69,7 +69,7 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_custom_header.xml b/app/src/main/res/layout/dialog_custom_header.xml deleted file mode 100644 index f92f7db9..00000000 --- a/app/src/main/res/layout/dialog_custom_header.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_exception.xml b/app/src/main/res/layout/dialog_exception.xml index 6cd10b60..60863c6f 100644 --- a/app/src/main/res/layout/dialog_exception.xml +++ b/app/src/main/res/layout/dialog_exception.xml @@ -38,7 +38,7 @@ diff --git a/app/src/main/res/layout/dialog_input_general.xml b/app/src/main/res/layout/dialog_input_general.xml index 70a5a1c3..14456ed0 100644 --- a/app/src/main/res/layout/dialog_input_general.xml +++ b/app/src/main/res/layout/dialog_input_general.xml @@ -48,7 +48,7 @@ android:id="@+id/title_text" android:layout_width="match_parent" android:layout_height="wrap_content" - style="@style/TextViewMaterial.DialogTitle" + style="@style/TextViewMaterial.Dialog.HeadlineText" tools:text="Insert here" android:gravity="center_horizontal"/> diff --git a/app/src/main/res/layout/dialog_input_peso_lu.xml b/app/src/main/res/layout/dialog_input_peso_lu.xml index 74872b7e..9cde4db6 100644 --- a/app/src/main/res/layout/dialog_input_peso_lu.xml +++ b/app/src/main/res/layout/dialog_input_peso_lu.xml @@ -56,7 +56,7 @@ android:id="@+id/title_text" android:layout_width="match_parent" android:layout_height="wrap_content" - style="@style/TextViewMaterial.DialogTitle" + style="@style/TextViewMaterial.Dialog.HeadlineText" android:text="@string/action_insert_weight" android:gravity="center_horizontal"/> diff --git a/app/src/main/res/layout/dialog_input_quantity_to_return.xml b/app/src/main/res/layout/dialog_input_quantity_to_return.xml index 77844bc5..c367ab42 100644 --- a/app/src/main/res/layout/dialog_input_quantity_to_return.xml +++ b/app/src/main/res/layout/dialog_input_quantity_to_return.xml @@ -56,7 +56,7 @@ android:id="@+id/title_text" android:layout_width="match_parent" android:layout_height="wrap_content" - style="@style/TextViewMaterial.DialogTitle" + style="@style/TextViewMaterial.Dialog.HeadlineText" android:text="@string/action_insert_quantity" android:gravity="center_horizontal"/> diff --git a/app/src/main/res/layout/dialog_input_quantity_v2.xml b/app/src/main/res/layout/dialog_input_quantity_v2.xml index cc51b506..39a84a9c 100644 --- a/app/src/main/res/layout/dialog_input_quantity_v2.xml +++ b/app/src/main/res/layout/dialog_input_quantity_v2.xml @@ -205,7 +205,7 @@ android:layout_gravity="center" android:layout_marginEnd="2dp" android:layout_weight="0.5" - android:background="@drawable/badge_gray_round_corner" + android:background="@drawable/badge_round_corner" android:backgroundTint="@color/green_600" android:orientation="vertical" android:padding="8dp" @@ -304,7 +304,7 @@ android:layout_gravity="center" android:layout_marginStart="2dp" android:layout_weight="0.5" - android:background="@drawable/badge_gray_round_corner" + android:background="@drawable/badge_round_corner" android:backgroundTint="@color/colorPrimary" android:orientation="vertical" android:padding="8dp" diff --git a/app/src/main/res/layout/dialog_note_aggiuntive_nuova_ul.xml b/app/src/main/res/layout/dialog_note_aggiuntive_nuova_ul.xml index 4facf703..26ca4b05 100644 --- a/app/src/main/res/layout/dialog_note_aggiuntive_nuova_ul.xml +++ b/app/src/main/res/layout/dialog_note_aggiuntive_nuova_ul.xml @@ -1,131 +1,89 @@ - + + + + + - - + android:layout_gravity="center_horizontal" + android:orientation="vertical" + app:cardBackgroundColor="@color/light_blue_300" + app:cardCornerRadius="24dp" + app:cardElevation="0dp"> - - - - - + android:layout_margin="4dp" + android:padding="24dp" + android:background="@drawable/dialog_card_child_bg"> - - - - - - - - - - - - - - + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> - + android:layout_marginTop="16dp" + app:layout_constraintTop_toBottomOf="@id/title_text"> - + android:hint="@string/hint_additional_notes" + android:inputType="text" /> - - - + - - - - - - - - - - - - - - - - + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_ordine_produzione_filtro_avanzato.xml b/app/src/main/res/layout/dialog_ordine_produzione_filtro_avanzato.xml index 258c6c82..c421a0e4 100644 --- a/app/src/main/res/layout/dialog_ordine_produzione_filtro_avanzato.xml +++ b/app/src/main/res/layout/dialog_ordine_produzione_filtro_avanzato.xml @@ -36,7 +36,7 @@ android:id="@+id/title_text" android:layout_width="match_parent" android:layout_height="wrap_content" - style="@style/TextViewMaterial.DialogTitle" + style="@style/TextViewMaterial.Dialog.HeadlineText" android:text="@string/dialog_vendita_filtro_avanzato" android:gravity="center_horizontal" android:layout_marginBottom="12dp"/> diff --git a/app/src/main/res/layout/dialog_progress.xml b/app/src/main/res/layout/dialog_progress.xml index b87a57a9..53d8ac4a 100644 --- a/app/src/main/res/layout/dialog_progress.xml +++ b/app/src/main/res/layout/dialog_progress.xml @@ -31,7 +31,7 @@ android:id="@+id/title_text" android:layout_width="match_parent" android:layout_height="wrap_content" - style="@style/TextViewMaterial.DialogTitle" + style="@style/TextViewMaterial.Dialog.HeadlineText" android:text="@string/loading" android:gravity="center_horizontal"/> diff --git a/app/src/main/res/layout/dialog_pv_edit_articolo.xml b/app/src/main/res/layout/dialog_pv_edit_articolo.xml index 77f66825..7ae43a88 100644 --- a/app/src/main/res/layout/dialog_pv_edit_articolo.xml +++ b/app/src/main/res/layout/dialog_pv_edit_articolo.xml @@ -208,7 +208,7 @@ android:layout_gravity="center" android:layout_marginEnd="2dp" android:layout_weight="0.5" - android:background="@drawable/badge_gray_round_corner" + android:background="@drawable/badge_round_corner" android:backgroundTint="@color/green_600" android:orientation="vertical" android:padding="8dp"> @@ -307,7 +307,7 @@ android:layout_gravity="center" android:layout_marginStart="2dp" android:layout_weight="0.5" - android:background="@drawable/badge_gray_round_corner" + android:background="@drawable/badge_round_corner" android:backgroundTint="@color/colorPrimary" android:orientation="vertical" android:padding="8dp" diff --git a/app/src/main/res/layout/dialog_row_info_prod_fabbisogno_linee_prod.xml b/app/src/main/res/layout/dialog_row_info_prod_fabbisogno_linee_prod.xml index d95d0f2e..bea176ef 100644 --- a/app/src/main/res/layout/dialog_row_info_prod_fabbisogno_linee_prod.xml +++ b/app/src/main/res/layout/dialog_row_info_prod_fabbisogno_linee_prod.xml @@ -23,7 +23,7 @@ - + diff --git a/app/src/main/res/layout/dialog_scan_art.xml b/app/src/main/res/layout/dialog_scan_art.xml index f4612825..10577e4a 100644 --- a/app/src/main/res/layout/dialog_scan_art.xml +++ b/app/src/main/res/layout/dialog_scan_art.xml @@ -10,13 +10,13 @@ app:cardCornerRadius="12dp" app:cardElevation="0dp"> - - - - + @@ -72,9 +72,9 @@ android:layout_gravity="center_horizontal" android:text="@string/abort"/> - + - + diff --git a/app/src/main/res/layout/dialog_scan_codice_griglia.xml b/app/src/main/res/layout/dialog_scan_codice_griglia.xml index 6510708b..8448cfaa 100644 --- a/app/src/main/res/layout/dialog_scan_codice_griglia.xml +++ b/app/src/main/res/layout/dialog_scan_codice_griglia.xml @@ -45,7 +45,7 @@ android:id="@+id/title_text" android:layout_width="match_parent" android:layout_height="wrap_content" - style="@style/TextViewMaterial.DialogTitle" + style="@style/TextViewMaterial.Dialog.HeadlineText" android:text="@string/title_open_grid_pv" android:gravity="center_horizontal"/> diff --git a/app/src/main/res/layout/dialog_scan_or_create_lu.xml b/app/src/main/res/layout/dialog_scan_or_create_lu.xml index 79373b22..5f5539ac 100644 --- a/app/src/main/res/layout/dialog_scan_or_create_lu.xml +++ b/app/src/main/res/layout/dialog_scan_or_create_lu.xml @@ -62,7 +62,7 @@ android:id="@+id/title_text" android:layout_width="match_parent" android:layout_height="wrap_content" - style="@style/TextViewMaterial.DialogTitle" + style="@style/TextViewMaterial.Dialog.HeadlineText" android:text="@string/title_open_lu" android:gravity="center_horizontal"/> diff --git a/app/src/main/res/layout/dialog_select_doc_info.xml b/app/src/main/res/layout/dialog_select_doc_info.xml index d64695cf..72e2f6d7 100644 --- a/app/src/main/res/layout/dialog_select_doc_info.xml +++ b/app/src/main/res/layout/dialog_select_doc_info.xml @@ -35,7 +35,7 @@ diff --git a/app/src/main/res/layout/dialog_ultimi_arrivi_fornitore_filtro_avanzato.xml b/app/src/main/res/layout/dialog_ultimi_arrivi_fornitore_filtro_avanzato.xml index 40d22f62..da065392 100644 --- a/app/src/main/res/layout/dialog_ultimi_arrivi_fornitore_filtro_avanzato.xml +++ b/app/src/main/res/layout/dialog_ultimi_arrivi_fornitore_filtro_avanzato.xml @@ -37,7 +37,7 @@ android:id="@+id/title_text" android:layout_width="match_parent" android:layout_height="wrap_content" - style="@style/TextViewMaterial.DialogTitle" + style="@style/TextViewMaterial.Dialog.HeadlineText" android:text="@string/dialog_vendita_filtro_avanzato" android:gravity="center_horizontal" android:layout_marginBottom="12dp"/> diff --git a/app/src/main/res/layout/dialog_vendita_filtro_avanzato.xml b/app/src/main/res/layout/dialog_vendita_filtro_avanzato.xml index ee289fa4..db13d298 100644 --- a/app/src/main/res/layout/dialog_vendita_filtro_avanzato.xml +++ b/app/src/main/res/layout/dialog_vendita_filtro_avanzato.xml @@ -37,7 +37,7 @@ android:id="@+id/title_text" android:layout_width="match_parent" android:layout_height="wrap_content" - style="@style/TextViewMaterial.DialogTitle" + style="@style/TextViewMaterial.Dialog.HeadlineText" android:text="@string/dialog_vendita_filtro_avanzato" android:gravity="center_horizontal" android:layout_marginBottom="12dp"/> diff --git a/app/src/main/res/layout/dialog_versamento_automatico_ul_done.xml b/app/src/main/res/layout/dialog_versamento_automatico_ul_done.xml new file mode 100644 index 00000000..fc03339d --- /dev/null +++ b/app/src/main/res/layout/dialog_versamento_automatico_ul_done.xml @@ -0,0 +1,157 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_versamento_automatico_ul_done__not_completed_list_item.xml b/app/src/main/res/layout/dialog_versamento_automatico_ul_done__not_completed_list_item.xml new file mode 100644 index 00000000..503abf70 --- /dev/null +++ b/app/src/main/res/layout/dialog_versamento_automatico_ul_done__not_completed_list_item.xml @@ -0,0 +1,151 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_yes_no.xml b/app/src/main/res/layout/dialog_yes_no.xml index f17b5a42..745284ae 100644 --- a/app/src/main/res/layout/dialog_yes_no.xml +++ b/app/src/main/res/layout/dialog_yes_no.xml @@ -41,7 +41,7 @@ android:id="@+id/title_text" android:layout_width="match_parent" android:layout_height="wrap_content" - style="@style/TextViewMaterial.DialogTitle" + style="@style/TextViewMaterial.Dialog.HeadlineText" android:text="Title here" android:gravity="center_horizontal"/> diff --git a/app/src/main/res/layout/fragment_choose_ords_lav_from_list__item_model.xml b/app/src/main/res/layout/fragment_choose_ords_lav_from_list__item_model.xml index 2b2ccbcd..6f1115b2 100644 --- a/app/src/main/res/layout/fragment_choose_ords_lav_from_list__item_model.xml +++ b/app/src/main/res/layout/fragment_choose_ords_lav_from_list__item_model.xml @@ -78,7 +78,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentEnd="true" - android:background="@drawable/badge2_round_corner" + android:background="@drawable/badge_round_corner" android:backgroundTint="@{context.getColor(listModel.selected.get() ? R.color.orange_600 : R.color.gray_500)}" android:paddingStart="6dp" android:paddingEnd="6dp" @@ -137,7 +137,7 @@ style="@style/AppTheme.NewMaterial.Text.Small" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:background="@drawable/badge1_round_corner" + android:background="@drawable/badge_round_corner" android:backgroundTint="@{context.getColor(listModel.selected.get() ? R.color.colorPrimary : R.color.gray_500)}" android:gravity="center" android:paddingLeft="6dp" diff --git a/app/src/main/res/layout/fragment_main_rettifica_giacenze.xml b/app/src/main/res/layout/fragment_main_rettifica_giacenze.xml index 99bf8da1..005bb94e 100644 --- a/app/src/main/res/layout/fragment_main_rettifica_giacenze.xml +++ b/app/src/main/res/layout/fragment_main_rettifica_giacenze.xml @@ -52,7 +52,8 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" - android:background="@drawable/badge1_round_corner"> + android:background="@drawable/badge_round_corner" + android:backgroundTint="@color/colorPrimary"> - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_main_ultime_consegne_cliente__list_single_item.xml b/app/src/main/res/layout/fragment_main_ultime_consegne_cliente__list_single_item.xml index 4e6b7b12..a72ed5ef 100644 --- a/app/src/main/res/layout/fragment_main_ultime_consegne_cliente__list_single_item.xml +++ b/app/src/main/res/layout/fragment_main_ultime_consegne_cliente__list_single_item.xml @@ -31,7 +31,8 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" tools:text="BADGE 1" - android:background="@drawable/badge1_round_corner" + android:background="@drawable/badge_round_corner" + android:backgroundTint="@color/colorPrimary" android:textColor="@android:color/white" android:paddingTop="2dp" android:paddingBottom="2dp" diff --git a/app/src/main/res/layout/fragment_ordini_a_pv__list_single_item.xml b/app/src/main/res/layout/fragment_ordini_a_pv__list_single_item.xml deleted file mode 100644 index 99dc168f..00000000 --- a/app/src/main/res/layout/fragment_ordini_a_pv__list_single_item.xml +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file 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 9e59b93a..1eb6787a 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 @@ -133,7 +133,7 @@ tools:text="28 maggio 2021" /> diff --git a/app/src/main/res/layout/fragment_pv_articoli_ordine_acquisto__list_single_item.xml b/app/src/main/res/layout/fragment_pv_articoli_ordine_acquisto__list_single_item.xml index f221198b..47c0bf98 100644 --- a/app/src/main/res/layout/fragment_pv_articoli_ordine_acquisto__list_single_item.xml +++ b/app/src/main/res/layout/fragment_pv_articoli_ordine_acquisto__list_single_item.xml @@ -75,7 +75,8 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/layout_filter_cod_art__list_item.xml b/app/src/main/res/layout/layout_filter_cod_art__list_item.xml new file mode 100644 index 00000000..6a3d78c5 --- /dev/null +++ b/app/src/main/res/layout/layout_filter_cod_art__list_item.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/layout_filter_descr.xml b/app/src/main/res/layout/layout_filter_descr.xml new file mode 100644 index 00000000..973b2c76 --- /dev/null +++ b/app/src/main/res/layout/layout_filter_descr.xml @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/layout_filter_descr__list_item.xml b/app/src/main/res/layout/layout_filter_descr__list_item.xml new file mode 100644 index 00000000..296a24b3 --- /dev/null +++ b/app/src/main/res/layout/layout_filter_descr__list_item.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/layout_filter_posizione.xml b/app/src/main/res/layout/layout_filter_posizione.xml new file mode 100644 index 00000000..2ef04cb5 --- /dev/null +++ b/app/src/main/res/layout/layout_filter_posizione.xml @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/layout_filter_posizione__list_item.xml b/app/src/main/res/layout/layout_filter_posizione__list_item.xml new file mode 100644 index 00000000..ea461c7e --- /dev/null +++ b/app/src/main/res/layout/layout_filter_posizione__list_item.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/lista_bancali_list_model.xml b/app/src/main/res/layout/lista_bancali_list_model.xml index 61be3a47..d3382ba4 100644 --- a/app/src/main/res/layout/lista_bancali_list_model.xml +++ b/app/src/main/res/layout/lista_bancali_list_model.xml @@ -47,7 +47,8 @@ android:gravity="center" android:text="@{mtbColt.numCollo.toString()}" tools:text="22222" - android:background="@drawable/badge1_round_corner" + android:background="@drawable/badge_round_corner" + android:backgroundTint="@color/colorPrimary" android:textColor="@android:color/white" android:paddingTop="2dp" android:paddingBottom="2dp" diff --git a/app/src/main/res/layout/lista_contenuto_bancale_list_model.xml b/app/src/main/res/layout/lista_contenuto_bancale_list_model.xml index 89751e87..d275f5d9 100644 --- a/app/src/main/res/layout/lista_contenuto_bancale_list_model.xml +++ b/app/src/main/res/layout/lista_contenuto_bancale_list_model.xml @@ -1,5 +1,6 @@ - @@ -21,145 +22,149 @@ type="it.integry.integrywmsnative.core.model.MtbColr" /> - - - + + - - - - - - - - - - - - - - - - - - - - - - + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + tools:text="COD MART" /> - + + + + + + + + + + + + + + + + + + app:layout_constraintTop_toBottomOf="@id/linearLayout"> @@ -167,7 +172,7 @@ @@ -205,7 +210,7 @@ + android:background="@color/green_600" /> + android:textStyle="bold" + tools:text="5230" /> + android:layout_marginTop="2dp" + android:orientation="horizontal"> + android:textStyle="bold" + tools:text="V" /> @@ -290,16 +295,16 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{UtilityDate.formatDate(mtbColr.dataColloRifD, "dd MMM yy")}" - tools:text="02 mar 2020" android:textColor="@android:color/black" - android:textStyle="bold" /> + android:textStyle="bold" + tools:text="02 mar 2020" /> + android:layout_marginTop="2dp" + android:orientation="horizontal"> + android:textStyle="bold" + tools:text="UL" /> diff --git a/app/src/main/res/layout/lista_picking_libero_list_model.xml b/app/src/main/res/layout/lista_picking_libero_list_model.xml index c17fbc09..b9a30bcb 100644 --- a/app/src/main/res/layout/lista_picking_libero_list_model.xml +++ b/app/src/main/res/layout/lista_picking_libero_list_model.xml @@ -52,7 +52,8 @@ android:layout_alignParentEnd="true" android:paddingStart="6dp" android:paddingEnd="6dp" - android:background="@drawable/badge2_round_corner" + android:background="@drawable/badge_round_corner" + android:backgroundTint="@color/orange_600" android:textColor="@android:color/white" style="@style/AppTheme.NewMaterial.Text.Small" tools:text="PESO KG" /> @@ -99,7 +100,8 @@ android:id="@+id/qta_textview" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:background="@drawable/badge1_round_corner" + android:background="@drawable/badge_round_corner" + android:backgroundTint="@color/colorPrimary" android:gravity="center" android:paddingLeft="6dp" android:paddingTop="2dp" diff --git a/app/src/main/res/layout/lista_rettifica_giacenze_model.xml b/app/src/main/res/layout/lista_rettifica_giacenze_model.xml index 69e7354a..50883ad9 100644 --- a/app/src/main/res/layout/lista_rettifica_giacenze_model.xml +++ b/app/src/main/res/layout/lista_rettifica_giacenze_model.xml @@ -71,7 +71,8 @@ android:layout_alignParentEnd="true" android:paddingStart="6dp" android:paddingEnd="6dp" - android:background="@drawable/badge2_round_corner" + android:background="@drawable/badge_round_corner" + android:backgroundTint="@color/orange_600" android:textColor="@android:color/white" style="@style/AppTheme.NewMaterial.Text.Small" tools:text="PESO KG" /> @@ -117,7 +118,8 @@ android:id="@+id/qta_textview" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:background="@drawable/badge1_round_corner" + android:background="@drawable/badge_round_corner" + android:backgroundTint="@color/colorPrimary" android:gravity="center" android:paddingLeft="6dp" android:paddingTop="2dp" diff --git a/app/src/main/res/layout/picking_resi_main_list__item.xml b/app/src/main/res/layout/picking_resi_main_list__item.xml index b6166418..381974ab 100644 --- a/app/src/main/res/layout/picking_resi_main_list__item.xml +++ b/app/src/main/res/layout/picking_resi_main_list__item.xml @@ -24,7 +24,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" tools:text="BADGE 1" - android:background="@drawable/badge1_round_corner" + android:background="@drawable/badge_round_corner" android:textColor="@android:color/white" android:paddingTop="2dp" android:paddingBottom="2dp" diff --git a/app/src/main/res/layout/single_filter_chip_view.xml b/app/src/main/res/layout/single_filter_chip_view.xml deleted file mode 100644 index a8e0c866..00000000 --- a/app/src/main/res/layout/single_filter_chip_view.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/spedizione_main_list__group_item.xml b/app/src/main/res/layout/spedizione_main_list__group_item.xml index 038eb6dd..7fa4bef0 100644 --- a/app/src/main/res/layout/spedizione_main_list__group_item.xml +++ b/app/src/main/res/layout/spedizione_main_list__group_item.xml @@ -25,7 +25,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" tools:text="BADGE 1" - android:background="@drawable/badge1_round_corner" + android:background="@drawable/badge_round_corner" android:textColor="@android:color/white" android:paddingTop="2dp" android:paddingBottom="2dp" @@ -150,7 +150,8 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" tools:text="BADGE 2" - android:background="@drawable/badge2_round_corner" + android:background="@drawable/badge_round_corner" + android:backgroundTint="@color/orange_600" android:textColor="@android:color/white" android:paddingTop="2dp" android:paddingBottom="2dp" @@ -173,8 +174,8 @@ android:layout_height="wrap_content" android:layout_alignTop="@id/content_view_child" android:layout_alignBottom="@id/content_view_child" - android:background="@android:color/black" - android:alpha="0.15" /> + android:alpha="0.15" + android:background="@android:color/black" /> \ No newline at end of file diff --git a/app/src/main/res/layout/vendita_ordine_inevaso_main_list_child_group_model.xml b/app/src/main/res/layout/vendita_ordine_inevaso_main_list_child_group_model.xml deleted file mode 100644 index 772d9417..00000000 --- a/app/src/main/res/layout/vendita_ordine_inevaso_main_list_child_group_model.xml +++ /dev/null @@ -1,164 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/vendita_ordine_inevaso_main_list_model.xml b/app/src/main/res/layout/vendita_ordine_inevaso_main_list_model.xml deleted file mode 100644 index 1c255128..00000000 --- a/app/src/main/res/layout/vendita_ordine_inevaso_main_list_model.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/menu/activity_main_drawer.xml b/app/src/main/res/menu/activity_main_drawer.xml deleted file mode 100644 index b3a72221..00000000 --- a/app/src/main/res/menu/activity_main_drawer.xml +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/menu/activity_vendita_ordine_inevaso.xml b/app/src/main/res/menu/activity_vendita_ordine_inevaso.xml deleted file mode 100644 index fe187c0c..00000000 --- a/app/src/main/res/menu/activity_vendita_ordine_inevaso.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/app/src/main/res/menu/fragment_vendita.xml b/app/src/main/res/menu/fragment_vendita.xml deleted file mode 100644 index 49d50b40..00000000 --- a/app/src/main/res/menu/fragment_vendita.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - diff --git a/app/src/main/res/menu/main.xml b/app/src/main/res/menu/main.xml deleted file mode 100644 index 0e9a98a0..00000000 --- a/app/src/main/res/menu/main.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index da7c2a0f..ea39924b 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -64,6 +64,11 @@ L\'UL selezionata è già agganciata ad un documento per cui non può essere utilizzata Stai caricando una UL di vendita. Sei sicuro di voler continuare? + Continua + + Versamento automatico + Effettuare il versamento automatico degli articoli presenti nelle loro posizioni di default? + Magazzino @@ -104,6 +109,7 @@ Ordini Dettagli + Numero Data Posizione Preparato da diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml deleted file mode 100644 index 612ad49d..00000000 --- a/app/src/main/res/values/arrays.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - @color/green_500 - @color/green_500 - @color/green_500 - @color/green_500 - @color/green_500 - @color/green_500 - @color/green_500 - @color/green_500 - @color/green_500 - - - - Primary - Secondary - - - \ No newline at end of file diff --git a/app/src/main/res/values/buttons_style.xml b/app/src/main/res/values/buttons_style.xml index cbdc7199..ab5ce6a4 100644 --- a/app/src/main/res/values/buttons_style.xml +++ b/app/src/main/res/values/buttons_style.xml @@ -3,20 +3,20 @@ - @@ -26,22 +26,22 @@ diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index a0ae114a..4959bd0d 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -82,7 +82,14 @@ + #B3E5FC + #81D4FA #4fc3f7 + #29B6F6 + #03A9F4 + #039BE5 + #0288D1 + #0277BD #88FB8C00 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2ad1b2a6..cef9b618 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -82,6 +82,12 @@ Info LU\'s info + Continue + + + Versamento automatico + Effettuare il versamento automatico degli articoli presenti nelle loro posizioni di default? + Recover LU @@ -99,6 +105,7 @@ Orders Details + Number Date Position Prepared by diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 87ff63f8..3191c452 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -40,11 +40,11 @@ - diff --git a/app/src/main/res/values/textview_style.xml b/app/src/main/res/values/textview_style.xml index bc914317..323ae6f7 100644 --- a/app/src/main/res/values/textview_style.xml +++ b/app/src/main/res/values/textview_style.xml @@ -5,9 +5,22 @@ @font/product_sans_regular - + + + + + + \ No newline at end of file diff --git a/waterfall_toolbar/.gitignore b/waterfall_toolbar/.gitignore deleted file mode 100644 index 796b96d1..00000000 --- a/waterfall_toolbar/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build diff --git a/waterfall_toolbar/build.gradle b/waterfall_toolbar/build.gradle deleted file mode 100644 index ad3e5229..00000000 --- a/waterfall_toolbar/build.gradle +++ /dev/null @@ -1,41 +0,0 @@ -apply plugin: 'com.android.library' -apply plugin: 'kotlin-android' - -android { - compileSdkVersion 28 - - - - defaultConfig { - minSdkVersion 21 - targetSdkVersion 27 - versionCode 1 - versionName "1.0" - - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - - } - - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - } - } - -} - -dependencies { - implementation fileTree(include: ['*.jar'], dir: 'libs') - // google - implementation 'androidx.cardview:cardview:1.0.0' - implementation 'com.google.android.material:material:1.1.0-alpha02' - implementation 'androidx.appcompat:appcompat:1.1.0-alpha01' - testImplementation 'junit:junit:4.12' - androidTestImplementation 'androidx.test:runner:1.1.1' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" -} -repositories { - mavenCentral() -} diff --git a/waterfall_toolbar/proguard-rules.pro b/waterfall_toolbar/proguard-rules.pro deleted file mode 100644 index f1b42451..00000000 --- a/waterfall_toolbar/proguard-rules.pro +++ /dev/null @@ -1,21 +0,0 @@ -# Add project specific ProGuard rules here. -# You can control the set of applied configuration files using the -# proguardFiles setting in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} - -# Uncomment this to preserve the line number information for -# debugging stack traces. -#-keepattributes SourceFile,LineNumberTable - -# If you keep the line number information, uncomment this to -# hide the original source file name. -#-renamesourcefileattribute SourceFile diff --git a/waterfall_toolbar/src/androidTest/java/it/integry/plugins/waterfalltoolbar/ExampleInstrumentedTest.java b/waterfall_toolbar/src/androidTest/java/it/integry/plugins/waterfalltoolbar/ExampleInstrumentedTest.java deleted file mode 100644 index bb422285..00000000 --- a/waterfall_toolbar/src/androidTest/java/it/integry/plugins/waterfalltoolbar/ExampleInstrumentedTest.java +++ /dev/null @@ -1,26 +0,0 @@ -package it.integry.plugins.waterfalltoolbar; - -import android.content.Context; -import androidx.test.InstrumentationRegistry; -import androidx.test.runner.AndroidJUnit4; - -import org.junit.Test; -import org.junit.runner.RunWith; - -import static org.junit.Assert.*; - -/** - * Instrumented test, which will execute on an Android device. - * - * @see Testing documentation - */ -@RunWith(AndroidJUnit4.class) -public class ExampleInstrumentedTest { - @Test - public void useAppContext() { - // Context of the app under test. - Context appContext = InstrumentationRegistry.getTargetContext(); - - assertEquals("it.integry.plugins.waterfall_toolbar.test", appContext.getPackageName()); - } -} diff --git a/waterfall_toolbar/src/main/AndroidManifest.xml b/waterfall_toolbar/src/main/AndroidManifest.xml deleted file mode 100644 index db52527f..00000000 --- a/waterfall_toolbar/src/main/AndroidManifest.xml +++ /dev/null @@ -1,2 +0,0 @@ - diff --git a/waterfall_toolbar/src/main/java/it/integry/plugins/waterfalltoolbar/DimensionUnits.kt b/waterfall_toolbar/src/main/java/it/integry/plugins/waterfalltoolbar/DimensionUnits.kt deleted file mode 100644 index 9873c5c7..00000000 --- a/waterfall_toolbar/src/main/java/it/integry/plugins/waterfalltoolbar/DimensionUnits.kt +++ /dev/null @@ -1,19 +0,0 @@ -package it.integry.plugins.waterfalltoolbar - -var density: Float? = null - -data class Dp(var value: Float) { - fun toPx(): Px { - val innerDensity: Float = density ?: throw NullPointerException( - "You must set density before using DimensionUnits classes.") - return Px((value * innerDensity + 0.5f).toInt()) - } -} - -data class Px(var value: Int) { - fun toDp(): Dp { - val innerDensity: Float = density ?: throw NullPointerException( - "You must set density before using DimensionUnits classes.") - return Dp(value / innerDensity + 0.5f) - } -} \ No newline at end of file diff --git a/waterfall_toolbar/src/main/java/it/integry/plugins/waterfalltoolbar/WaterfallToolbar.kt b/waterfall_toolbar/src/main/java/it/integry/plugins/waterfalltoolbar/WaterfallToolbar.kt deleted file mode 100644 index 95511285..00000000 --- a/waterfall_toolbar/src/main/java/it/integry/plugins/waterfalltoolbar/WaterfallToolbar.kt +++ /dev/null @@ -1,353 +0,0 @@ -package it.integry.plugins.waterfalltoolbar - -import android.content.Context -import android.os.Build -import android.os.Parcel -import android.os.Parcelable -import androidx.annotation.RequiresApi -import androidx.core.widget.NestedScrollView -import android.util.AttributeSet -import android.view.View -import android.view.ViewTreeObserver -import android.widget.ScrollView -import androidx.recyclerview.widget.RecyclerView - -/** - * Created by Hugo Castelani - * Date: 19/09/17 - * Time: 19:30 - */ - -open class WaterfallToolbar : androidx.cardview.widget.CardView { - init { - // set density to be able to use DimensionUnits - // this code must run before all the signings using DimensionUnits - if (density == null) density = resources.displayMetrics.density - } - - /** - * The recycler view whose scroll is going to be listened - */ - var recyclerView: androidx.recyclerview.widget.RecyclerView? = null - set(value) { - field = value - addRecyclerViewScrollListener() - } - - var recyclerViewScrollListener : RecyclerView.OnScrollListener = object : RecyclerView.OnScrollListener() { - override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { - super.onScrolled(recyclerView, dx, dy) - // real position must always get updated - realPosition.value = realPosition.value + dy - mutualScrollListenerAction() - } - } - - /** - * The scroll view whose scroll is going to be listened - */ - var scrollView: ScrollView? = null - set(value) { - field = value - addScrollViewScrollListener() - } - - var scrollViewScrollListener : ViewTreeObserver.OnScrollChangedListener = ViewTreeObserver.OnScrollChangedListener { - // real position must always get updated - if(scrollView != null) { - realPosition.value = scrollView!!.scrollY - mutualScrollListenerAction() - } - } - - /** - * The scroll view whose scroll is going to be listened - */ - var nestedScrollView: NestedScrollView? = null - set(value) { - field = value - if (value != null) addNestedScrollViewScrollListener() - } - - var nestedScrollViewScrollListener : ViewTreeObserver.OnScrollChangedListener = ViewTreeObserver.OnScrollChangedListener { - // real position must always get updated - if(nestedScrollView != null) { - realPosition.value = nestedScrollView!!.scrollY - mutualScrollListenerAction() - } - } - - /** - * The three variables ahead are null safe, since they are always set - * at least once in init() and a null value can't be assigned to them - * after that. So all the "!!" involving them below are fully harmless. - */ - - /** - * The elevation with which the toolbar starts - */ - var initialElevation: Px? = null - set(value) { - if (value != null) { - field = value - - // got to update elevation in case this value have - // been set in a running and visible activity - if (isSetup) adjustCardElevation() - - } else throw NullPointerException("This field cannot be null.") - } - - /** - * The elevation the toolbar gets when it reaches final scroll elevation - */ - var finalElevation: Px? = null - set(value) { - if (value != null) { - field = value - - // got to update elevation in case this value have - // been set in a running and visible activity - if (isSetup) adjustCardElevation() - - } else throw NullPointerException("This field cannot be null.") - } - - /** - * The percentage of the screen's height that is - * going to be scrolled to reach the final elevation - */ - var scrollFinalPosition: Int? = null - set(value) { - if (value != null) { - val screenHeight = resources.displayMetrics.heightPixels - field = Math.round(screenHeight * (value / 100.0f)) - - // got to update elevation in case this value have - // been set in a running and visible activity - if (isSetup) adjustCardElevation() - - } else throw NullPointerException("This field cannot be null.") - } - - /** - * Dimension units (dp and pixel) auxiliary - */ - - - /** - * Values related to Waterfall Toolbar behavior in their default forms - */ - val defaultInitialElevation = Dp(0f).toPx() - val defaultFinalElevation = Dp(4f).toPx() - val defaultScrollFinalElevation = 12 - - /** - * Auxiliary that indicates if the view is already setup - */ - private var isSetup: Boolean = false - - /** - * Position in which toolbar must be to reach expected shadow - */ - private var orthodoxPosition = Px(0) - - /** - * Recycler/scroll view real position - */ - private var realPosition = Px(0) - - constructor(context: Context) : super(context) { - init(context, null) - } - - constructor(context: Context, attrs: AttributeSet) : super(context, attrs) { - init(context, attrs) - } - - constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int?) - : super(context, attrs, defStyleAttr!!) { - init(context, attrs) - } - - fun resetElevation() { - realPosition = Px(0) - cardElevation = 0f - } - - fun resetAll() { - resetElevation() - - removeNestedScrollViewScrollListener() - nestedScrollView = null - - removeRecyclerViewScrollListener() - recyclerView = null - - removeScrollViewScrollListener() - scrollView = null - } - - private fun init(context: Context?, attrs: AttributeSet?) { - // leave card corners square - radius = 0f - - if (context != null && attrs != null) { - val typedArray = context.obtainStyledAttributes(attrs, R.styleable.WaterfallToolbar) - - val rawInitialElevation = typedArray.getDimensionPixelSize( - R.styleable.WaterfallToolbar_initial_elevation, defaultInitialElevation.value) - - val rawFinalElevation = typedArray.getDimensionPixelSize( - R.styleable.WaterfallToolbar_final_elevation, defaultFinalElevation.value) - - scrollFinalPosition = typedArray.getInteger( - R.styleable.WaterfallToolbar_scroll_final_elevation, defaultScrollFinalElevation) - - this.initialElevation = Px(rawInitialElevation) - this.finalElevation = Px(rawFinalElevation) - - typedArray.recycle() - - } else { - - initialElevation = defaultInitialElevation - finalElevation = defaultFinalElevation - scrollFinalPosition = defaultScrollFinalElevation - } - - adjustCardElevation() // just to make sure card elevation is set - - isSetup = true - } - - private fun addRecyclerViewScrollListener() { - recyclerView?.addOnScrollListener(recyclerViewScrollListener) - } - - private fun removeRecyclerViewScrollListener() { - recyclerView?.removeOnScrollListener(recyclerViewScrollListener) - } - - private fun addScrollViewScrollListener() { - scrollView?.viewTreeObserver?.addOnScrollChangedListener(scrollViewScrollListener) - } - - private fun removeScrollViewScrollListener() { - scrollView?.viewTreeObserver?.removeOnScrollChangedListener(scrollViewScrollListener) - } - - private fun addNestedScrollViewScrollListener() { - nestedScrollView?.viewTreeObserver?.addOnScrollChangedListener(nestedScrollViewScrollListener) - } - - private fun removeNestedScrollViewScrollListener() { - nestedScrollView?.viewTreeObserver?.removeOnScrollChangedListener(nestedScrollViewScrollListener) - } - - /** - * These lines are common in both scroll listeners, so they are better joined - */ - private fun mutualScrollListenerAction() { - // orthodoxPosition can't be higher than scrollFinalPosition because - // the last one holds the position in which shadow reaches ideal size - - if (realPosition.value <= scrollFinalPosition!!) { - orthodoxPosition.value = realPosition.value - } else { - orthodoxPosition.value = scrollFinalPosition!! - } - - adjustCardElevation() - } - - /** - * Speed up the card elevation setting - */ - private fun adjustCardElevation() { - cardElevation = calculateElevation().value.toFloat() - } - - /** - * Calculates the elevation based on given attributes and scroll - * @return New calculated elevation - */ - private fun calculateElevation(): Px { - // getting back to rule of three: - // finalElevation = scrollFinalPosition - // newElevation = orthodoxPosition - var newElevation: Int = finalElevation!!.value * orthodoxPosition.value / scrollFinalPosition!! - - // avoid values under minimum value - if (newElevation < initialElevation!!.value) newElevation = initialElevation!!.value - - return Px(newElevation) - } - - /** - * Saves the view's current dynamic state in a parcelable object - * @return A parcelable with the saved data - */ - override fun onSaveInstanceState(): Parcelable? { - val savedState = SavedState(super.onSaveInstanceState() as Parcelable) - - savedState.elevation = cardElevation.toInt() - savedState.orthodoxPosition = orthodoxPosition - savedState.realPosition = realPosition - - return savedState - } - - /** - * Restore the view's dynamic state - * @param state The frozen state that had previously been returned by onSaveInstanceState() - */ - override fun onRestoreInstanceState(state: Parcelable) { - if (state is SavedState) { - super.onRestoreInstanceState(state.superState) - - // setting card elevation doesn't work until view is created - post { - // it's safe to use "!!" here, since savedState will - // always store values properly set in onSaveInstanceState() - - cardElevation = state.elevation!!.toFloat() - orthodoxPosition = state.orthodoxPosition!! - realPosition = state.realPosition!! - } - - } else { - - super.onRestoreInstanceState(state) - } - } - - /** - * Custom parcelable to store this view's dynamic state - */ - private class SavedState : View.BaseSavedState { - var elevation: Int? = null - var orthodoxPosition: Px? = null - var realPosition: Px? = null - - internal constructor(source: Parcel) : super(source) - - @RequiresApi(api = Build.VERSION_CODES.N) - internal constructor(source: Parcel, loader: ClassLoader) : super(source, loader) - - internal constructor(superState: Parcelable) : super(superState) - - companion object { - @JvmField - internal val CREATOR: Parcelable.Creator = object : Parcelable.Creator { - override fun createFromParcel(source: Parcel): SavedState { - return SavedState(source) - } - - override fun newArray(size: Int): Array { - return arrayOfNulls(size) - } - } - } - } -} \ No newline at end of file diff --git a/waterfall_toolbar/src/main/res/values/attrs.xml b/waterfall_toolbar/src/main/res/values/attrs.xml deleted file mode 100644 index 0ebd5c33..00000000 --- a/waterfall_toolbar/src/main/res/values/attrs.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/waterfall_toolbar/src/main/res/values/strings.xml b/waterfall_toolbar/src/main/res/values/strings.xml deleted file mode 100644 index 9d09a55c..00000000 --- a/waterfall_toolbar/src/main/res/values/strings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - Waterfall Toolbar - diff --git a/waterfall_toolbar/src/test/java/it/integry/plugins/waterfalltoolbar/ExampleUnitTest.java b/waterfall_toolbar/src/test/java/it/integry/plugins/waterfalltoolbar/ExampleUnitTest.java deleted file mode 100644 index cf8582fa..00000000 --- a/waterfall_toolbar/src/test/java/it/integry/plugins/waterfalltoolbar/ExampleUnitTest.java +++ /dev/null @@ -1,17 +0,0 @@ -package it.integry.plugins.waterfalltoolbar; - -import org.junit.Test; - -import static org.junit.Assert.*; - -/** - * Example local unit test, which will execute on the development machine (host). - * - * @see Testing documentation - */ -public class ExampleUnitTest { - @Test - public void addition_isCorrect() { - assertEquals(4, 2 + 2); - } -} \ No newline at end of file