Finish v1.22.0(254)

This commit is contained in:
Giuseppe Scorrano 2022-01-25 11:15:20 +01:00
commit 981a42cd7e
153 changed files with 4227 additions and 2327 deletions

View File

@ -6,8 +6,8 @@ apply plugin: 'com.google.gms.google-services'
android { android {
def appVersionCode = 253 def appVersionCode = 254
def appVersionName = '1.21.1' def appVersionName = '1.22.0'
signingConfigs { signingConfigs {
release { release {
@ -134,7 +134,6 @@ dependencies {
implementation 'com.github.cachapa:ExpandableLayout:2.9.2' implementation 'com.github.cachapa:ExpandableLayout:2.9.2'
implementation 'com.github.frankiesardo:linearlistview:1.0.1@aar' implementation 'com.github.frankiesardo:linearlistview:1.0.1@aar'
implementation 'com.github.fede87:StatusBarAlert:1.0.1' implementation 'com.github.fede87:StatusBarAlert:1.0.1'
implementation 'com.github.akshay2211:Stash:master'
testImplementation 'junit:junit:4.13.2' testImplementation 'junit:junit:4.13.2'
implementation 'com.github.zhukic:sectioned-recyclerview:1.2.3' implementation 'com.github.zhukic:sectioned-recyclerview:1.2.3'
implementation 'com.github.pedromassango:doubleClick:3.0' implementation 'com.github.pedromassango:doubleClick:3.0'

View File

@ -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.contenuto_bancale.ContenutoBancaleModule;
import it.integry.integrywmsnative.gest.lista_bancali.ListaBancaliComponent; import it.integry.integrywmsnative.gest.lista_bancali.ListaBancaliComponent;
import it.integry.integrywmsnative.gest.lista_bancali.ListaBancaliModule; 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.MainActivityComponent;
import it.integry.integrywmsnative.gest.main.MainActivityModule; import it.integry.integrywmsnative.gest.main.MainActivityModule;
import it.integry.integrywmsnative.gest.main.MainFragmentComponent; import it.integry.integrywmsnative.gest.main.MainFragmentComponent;
@ -76,6 +78,7 @@ import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCr
RoomModule.class, RoomModule.class,
SplashActivityModule.class, SplashActivityModule.class,
MainApplicationModule.class, MainApplicationModule.class,
LoginModule.class,
MainActivityModule.class, MainActivityModule.class,
MainFragmentModule.class, MainFragmentModule.class,
MainAccettazioneModule.class, MainAccettazioneModule.class,
@ -111,6 +114,7 @@ import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCr
public interface MainApplicationComponent { public interface MainApplicationComponent {
SplashActivityComponent.Factory splashActivityComponent(); SplashActivityComponent.Factory splashActivityComponent();
LoginComponent.Factory loginActivityComponent();
MainActivityComponent.Factory mainActivityComponent(); MainActivityComponent.Factory mainActivityComponent();
MainFragmentComponent.Factory mainFragmentComponent(); MainFragmentComponent.Factory mainFragmentComponent();
MainAccettazioneComponent.Factory mainAccettazioneComponent(); MainAccettazioneComponent.Factory mainAccettazioneComponent();

View File

@ -1,5 +1,6 @@
package it.integry.integrywmsnative; package it.integry.integrywmsnative;
import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.pm.PackageInfo; import android.content.pm.PackageInfo;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
@ -38,6 +39,12 @@ public class SplashActivity extends BaseActivity implements MainContext.Listener
private RunnableArgsss<Integer, String[], List<Integer>> onRequestPermissionResult; private RunnableArgsss<Integer, String[], List<Integer>> onRequestPermissionResult;
public static void startActivity(Context context) {
Intent intent = new Intent(context, SplashActivity.class);
context.startActivity(intent);
}
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);

View File

@ -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"}) @BindingAdapter({"reverse_visibility"})
public static void bindViewReverseVisibility(View view, final BindableBoolean bindableBoolean) { public static void bindViewReverseVisibility(View view, final BindableBoolean bindableBoolean) {
if (view.getTag(R.id.bound_observable) != bindableBoolean) { if (view.getTag(R.id.bound_observable) != bindableBoolean) {

View File

@ -2,6 +2,7 @@ package it.integry.integrywmsnative.core.rest.consumers;
import androidx.databinding.ObservableArrayList; import androidx.databinding.ObservableArrayList;
import com.annimon.stream.Optional;
import com.annimon.stream.Stream; import com.annimon.stream.Stream;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.google.gson.JsonObject; 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.RettificaULDTO;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.core.rest.model.SpostaArtsTraULRequestDTO; 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.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityBarcode; import it.integry.integrywmsnative.core.utility.UtilityBarcode;
import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.core.utility.UtilityDate;
@ -646,4 +648,58 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer {
}); });
} }
public void versamentoAutomaticoUL(MtbColt sourceMtbColt, RunnableArgs<VersamentoAutomaticoULResponseDTO> onComplete, RunnableArgs<Exception> 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<ServiceRESTResponse<VersamentoAutomaticoULResponseDTO>> call, Response<ServiceRESTResponse<VersamentoAutomaticoULResponseDTO>> response) {
analyzeAnswer(response, "versamentoAutomaticoUL", data -> {
var result = response.body().getDto();
List<MtbColr> allMtbColr = new ArrayList<>();
allMtbColr.addAll(result.getSuccess());
allMtbColr.addAll(result.getFailed());
List<String> codMarts = Stream.of(allMtbColr)
.map(x -> x.getCodMart().trim())
.toList();
mArticoloRESTConsumer.getByCodMarts(codMarts, mtbAarts -> {
for (var mtbColr : allMtbColr) {
MtbAart foundMtbAart = null;
Optional<MtbAart> 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<ServiceRESTResponse<VersamentoAutomaticoULResponseDTO>> call, Throwable t) {
if (onFailed != null) onFailed.run(new Exception(t));
}
});
}
} }

View File

@ -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.RettificaULDTO;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.core.rest.model.SpostaArtsTraULRequestDTO; import it.integry.integrywmsnative.core.rest.model.SpostaArtsTraULRequestDTO;
import it.integry.integrywmsnative.core.rest.model.VersamentoAutomaticoULResponseDTO;
import retrofit2.Call; import retrofit2.Call;
import retrofit2.http.Body; import retrofit2.http.Body;
import retrofit2.http.GET; import retrofit2.http.GET;
@ -42,4 +43,7 @@ public interface ColliMagazzinoRESTConsumerService {
@POST("wms/assegnaLottoSuColloScarico") @POST("wms/assegnaLottoSuColloScarico")
Call<ServiceRESTResponse<MtbColt>> assegnaLottoSuColloScarico(@Body MtbColt mtbColt); Call<ServiceRESTResponse<MtbColt>> assegnaLottoSuColloScarico(@Body MtbColt mtbColt);
@POST("wms/versamentoAutomaticoUL")
Call<ServiceRESTResponse<VersamentoAutomaticoULResponseDTO>> versamentoAutomaticoUL(@Body MtbColt mtbColt);
} }

View File

@ -100,7 +100,11 @@ public class SystemRESTConsumer extends _BaseRESTConsumer {
} }
public static void getAvailableCodMdeps(final RunnableArgs<List<AvailableCodMdepsDTO>> onSuccess, RunnableArgs<Exception> onFailed) { public void getAvailableCodMdeps(final RunnableArgs<List<AvailableCodMdepsDTO>> onSuccess, RunnableArgs<Exception> onFailed) {
getAvailableCodMdepsStatic(onSuccess, onFailed);
}
public static void getAvailableCodMdepsStatic(final RunnableArgs<List<AvailableCodMdepsDTO>> onSuccess, RunnableArgs<Exception> onFailed) {
SystemRESTConsumerService service = RESTBuilder.getService(SystemRESTConsumerService.class); SystemRESTConsumerService service = RESTBuilder.getService(SystemRESTConsumerService.class);
service.getAvailableCodMdeps().enqueue(new Callback<>() { service.getAvailableCodMdeps().enqueue(new Callback<>() {

View File

@ -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<MtbColr> success;
private List<MtbColr> failed;
public List<MtbColr> getSuccess() {
return success;
}
public VersamentoAutomaticoULResponseDTO setSuccess(List<MtbColr> success) {
this.success = success;
return this;
}
public List<MtbColr> getFailed() {
return failed;
}
public VersamentoAutomaticoULResponseDTO setFailed(List<MtbColr> failed) {
this.failed = failed;
return this;
}
}

View File

@ -130,7 +130,7 @@ public class SettingsManager {
} }
private static void loadAvailableCodMdeps(Runnable onComplete, RunnableArgs<Exception> onFailed) { private static void loadAvailableCodMdeps(Runnable onComplete, RunnableArgs<Exception> onFailed) {
SystemRESTConsumer.getAvailableCodMdeps(availableCodMdeps -> { SystemRESTConsumer.getAvailableCodMdepsStatic(availableCodMdeps -> {
dbSettingsModelIstance.setAvailableCodMdep(availableCodMdeps); dbSettingsModelIstance.setAvailableCodMdep(availableCodMdeps);
if (availableCodMdeps == null || availableCodMdeps.size() == 0) { if (availableCodMdeps == null || availableCodMdeps.size() == 0) {

View File

@ -13,13 +13,19 @@ import java.lang.reflect.Type;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Set; import java.util.Set;
/**
* Created by akshay on 01/03/18.
*/
public class Stash { public class Stash {
private static Stash stash; private static Stash stash;
private static Context instance;
private SharedPreferences sp; private SharedPreferences sp;
public static void init(Context context) { public static void init(Context context) {
stash = new Stash(); stash = new Stash();
instance = context;
if (stash.sp == null) { if (stash.sp == null) {
stash.sp = PreferenceManager.getDefaultSharedPreferences(context); stash.sp = PreferenceManager.getDefaultSharedPreferences(context);
} }
@ -34,7 +40,7 @@ public class Stash {
public static void put(String key, String value) { public static void put(String key, String value) {
checkfornull(); checkfornull();
try { try {
stash.sp.edit().putString(key, value).apply(); stash.sp.edit().putString(key, value).commit();
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -44,7 +50,7 @@ public class Stash {
public static void put(String key, Set<String> value) { public static void put(String key, Set<String> value) {
checkfornull(); checkfornull();
try { try {
stash.sp.edit().putStringSet(key, value).apply(); stash.sp.edit().putStringSet(key, value).commit();
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -54,7 +60,7 @@ public class Stash {
public static void put(String key, int value) { public static void put(String key, int value) {
checkfornull(); checkfornull();
try { try {
stash.sp.edit().putInt(key, value).apply(); stash.sp.edit().putInt(key, value).commit();
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -64,7 +70,7 @@ public class Stash {
public static void put(String key, long value) { public static void put(String key, long value) {
checkfornull(); checkfornull();
try { try {
stash.sp.edit().putLong(key, value).apply(); stash.sp.edit().putLong(key, value).commit();
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -74,7 +80,7 @@ public class Stash {
public static void put(String key, float value) { public static void put(String key, float value) {
checkfornull(); checkfornull();
try { try {
stash.sp.edit().putFloat(key, value).apply(); stash.sp.edit().putFloat(key, value).commit();
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -84,7 +90,7 @@ public class Stash {
public static void put(String key, boolean value) { public static void put(String key, boolean value) {
checkfornull(); checkfornull();
try { try {
stash.sp.edit().putBoolean(key, value).apply(); stash.sp.edit().putBoolean(key, value).commit();
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -95,7 +101,7 @@ public class Stash {
checkfornull(); checkfornull();
try { try {
Gson gson = new GsonBuilder().create(); 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) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -112,18 +118,26 @@ public class Stash {
} }
} }
public static String getString(String key) {
return getString(key, "");
}
//getStringSet //getStringSet
public static Set<String> getStringSet(String key, Set<String> defaultvalue) { public static Set<String> getStringSet(String key, Set<String> defaultvalue) {
checkfornull(); checkfornull();
try { try {
return getStringSet(key, defaultvalue); return stash.sp.getStringSet(key, defaultvalue);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
return defaultvalue; return defaultvalue;
} }
} }
public static Set<String> getStringSet(String key) {
return getStringSet(key, null);
}
//getInt //getInt
public static int getInt(String key, int defaultvalue) { public static int getInt(String key, int defaultvalue) {
checkfornull(); checkfornull();
@ -135,6 +149,10 @@ public class Stash {
} }
} }
public static int getInt(String key) {
return getInt(key, 0);
}
//getLong //getLong
public static long getLong(String key, long defaultvalue) { public static long getLong(String key, long defaultvalue) {
checkfornull(); checkfornull();
@ -146,6 +164,10 @@ public class Stash {
} }
} }
public static long getLong(String key) {
return getLong(key, (long) 0);
}
//getFloat //getFloat
public static float getFloat(String key, float defaultvalue) { public static float getFloat(String key, float defaultvalue) {
checkfornull(); checkfornull();
@ -157,6 +179,10 @@ public class Stash {
} }
} }
public static float getFloat(String key) {
return getFloat(key, 0.0f);
}
//getBoolean //getBoolean
public static boolean getBoolean(String key, boolean defaultvalue) { public static boolean getBoolean(String key, boolean defaultvalue) {
checkfornull(); checkfornull();
@ -168,6 +194,10 @@ public class Stash {
} }
} }
public static boolean getBoolean(String key) {
return getBoolean(key, false);
}
//getObject //getObject
public static <T> Object getObject(String key, Class<?> tClass) { public static <T> Object getObject(String key, Class<?> tClass) {
checkfornull(); checkfornull();
@ -196,7 +226,7 @@ public class Stash {
public static void clear(String key) { public static void clear(String key) {
checkfornull(); checkfornull();
try { try {
stash.sp.edit().remove(key).apply(); stash.sp.edit().remove(key).commit();
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -206,12 +236,22 @@ public class Stash {
public static void clearAll() { public static void clearAll() {
checkfornull(); checkfornull();
try { try {
stash.sp.edit().clear().apply(); stash.sp.edit().clear().commit();
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); 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 static class GenericType implements ParameterizedType {
private Type type; private Type type;
@ -238,4 +278,7 @@ public class Stash {
// implement equals method too! (as per javadoc) // implement equals method too! (as per javadoc)
} }
public interface StashListener extends SharedPreferences.OnSharedPreferenceChangeListener {
}
} }

View File

@ -21,6 +21,8 @@ import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Objects;
import javax.inject.Inject; 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.data_cache.DataCache;
import it.integry.integrywmsnative.core.di.BindableBoolean; import it.integry.integrywmsnative.core.di.BindableBoolean;
import it.integry.integrywmsnative.core.expansion.BaseActivity; 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.RunnableArgs;
import it.integry.integrywmsnative.core.expansion.RunnableArgss; import it.integry.integrywmsnative.core.expansion.RunnableArgss;
import it.integry.integrywmsnative.core.model.MtbAart; 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.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.report.ReportManager; import it.integry.integrywmsnative.core.report.ReportManager;
import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer; 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.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal; import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
import it.integry.integrywmsnative.core.utility.UtilityExceptions; 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.databinding.ActivityAccettazioneOrdineInevasoBinding;
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO; import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO;
import it.integry.integrywmsnative.gest.accettazione.dto.SitArtOrdDTO; 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.AccettazioneOrdineInevasoOrderBy;
import it.integry.integrywmsnative.gest.accettazione_picking.dto.PickingObjectDTO; 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.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.lista_bancali.ListaBancaliActivity;
import it.integry.integrywmsnative.gest.spedizione.exceptions.InvalidPesoKGException; import it.integry.integrywmsnative.gest.spedizione.exceptions.InvalidPesoKGException;
import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO; 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.BottomSheetFragmentLUContentView;
import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentViewModel; 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.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.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.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 { public class AccettazionePickingActivity extends BaseActivity implements AccettazionePickingViewModel.Listener, BottomSheetFragmentLUContentViewModel.Listener, BottomSheetFragmentLUContentView.Listener {
@ -72,6 +84,8 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
@Inject @Inject
AccettazionePickingViewModel mViewModel; AccettazionePickingViewModel mViewModel;
private final AccettazionePickingFiltroOrdineViewModel mAppliedFilterViewModel = new AccettazionePickingFiltroOrdineViewModel();
private BottomSheetFragmentLUContentViewModel mBottomSheetFragmentLUContentViewModel; private BottomSheetFragmentLUContentViewModel mBottomSheetFragmentLUContentViewModel;
private final ObservableArrayList<AccettazioneListModel> mAccettazioneMutableData = new ObservableArrayList<>(); private final ObservableArrayList<AccettazioneListModel> mAccettazioneMutableData = new ObservableArrayList<>();
@ -123,6 +137,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
this.initVars(); this.initVars();
this.initBarcodeReader(); this.initBarcodeReader();
this.initRecyclerView(); this.initRecyclerView();
this.initFilters();
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep(); String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
@ -130,6 +145,158 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
mViewModel.init(mOrders, mSitArts, codMdep); 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<FilterChipDTO> 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 @Override
public boolean onSupportNavigateUp() { public boolean onSupportNavigateUp() {
onBackPressed(); onBackPressed();
@ -162,7 +329,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
// Handle item selection // Handle item selection
switch (item.getItemId()) { switch (item.getItemId()) {
case R.id.action_filter: case R.id.action_filter:
showOrderDialog(); showOrderByDialog();
return true; return true;
default: default:
return super.onOptionsItemSelected(item); return super.onOptionsItemSelected(item);
@ -189,6 +356,8 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
this.mBindings.accettazionePickingList.setLayoutManager(new LinearLayoutManager(this)); this.mBindings.accettazionePickingList.setLayoutManager(new LinearLayoutManager(this));
this.mViewModel.getPickingList().observe(this, updatedData -> { this.mViewModel.getPickingList().observe(this, updatedData -> {
mAppliedFilterViewModel.init(updatedData);
refreshList(); refreshList();
}); });
@ -198,9 +367,28 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
} }
private void refreshList() { private void refreshList() {
this.mAccettazioneMutableData.clear(); //this.onLoadingStarted();
this.mAccettazioneMutableData.addAll(convertDataModelToListModel(this.mViewModel.getPickingList().getValue()));
this.noItemsToPick.set(!isThereAnyItemToPick(this.mViewModel.getPickingList().getValue())); //new Thread(() -> {
runOnUiThread(() -> {
List<PickingObjectDTO> 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<AccettazioneListModel> convertDataModelToListModel(List<PickingObjectDTO> dataList) { private List<AccettazioneListModel> convertDataModelToListModel(List<PickingObjectDTO> dataList) {
@ -228,17 +416,21 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
private List<AccettazioneListModel> convertDataModelToListModel__CodArtForn(List<PickingObjectDTO> dataList) { private List<AccettazioneListModel> convertDataModelToListModel__CodArtForn(List<PickingObjectDTO> dataList) {
ArrayList<AccettazioneListModel> list = new ArrayList<>(); ArrayList<AccettazioneListModel> list = new ArrayList<>();
Stream.of(dataList) 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 -> { .forEach(x -> {
AccettazioneListModel accettazioneListModel = new AccettazioneListModel(); AccettazioneListModel accettazioneListModel = new AccettazioneListModel();
accettazioneListModel.setActive(true); 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.setBadge1(UtilityString.isNull(x.getSitArtOrdDTO().getCodJcom(), CommonConst.Config.COMMESSA_MAG));
accettazioneListModel.setBadge2(String.valueOf(x.getSitArtOrdDTO().getNumOrd())); accettazioneListModel.setBadge2(String.valueOf(x.getSitArtOrdDTO().getNumOrd()));
accettazioneListModel.setDescrizione(x.getSitArtOrdDTO().getDescrizioneCommessa()); accettazioneListModel.setDescrizione(x.getSitArtOrdDTO().getDescrizioneCommessa());
if (x.getMtbAart() != null)
accettazioneListModel.setPosizione(x.getMtbAart().getPosizione());
//Calc Num CNF //Calc Num CNF
BigDecimal numCnfEvasa = BigDecimal.ZERO; BigDecimal numCnfEvasa = BigDecimal.ZERO;
@ -295,12 +487,15 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
AccettazioneListModel accettazioneListModel = new AccettazioneListModel(); AccettazioneListModel accettazioneListModel = new AccettazioneListModel();
accettazioneListModel.setActive(true); 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.setBadge1(UtilityString.isNull(x.getSitArtOrdDTO().getCodJcom(), CommonConst.Config.COMMESSA_MAG));
accettazioneListModel.setBadge2(String.valueOf(x.getSitArtOrdDTO().getNumOrd())); accettazioneListModel.setBadge2(String.valueOf(x.getSitArtOrdDTO().getNumOrd()));
accettazioneListModel.setDescrizione(x.getSitArtOrdDTO().getDescrizioneCommessa()); accettazioneListModel.setDescrizione(x.getSitArtOrdDTO().getDescrizioneCommessa());
if (x.getMtbAart() != null)
accettazioneListModel.setPosizione(x.getMtbAart().getPosizione());
//Calc Num CNF //Calc Num CNF
BigDecimal numCnfEvasa = BigDecimal.ZERO; 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.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())); accettazioneListModel.setBadge2(String.valueOf(x.getSitArtOrdDTO().getNumOrd()));
//Calc Num CNF //Calc Num CNF
@ -405,6 +600,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
if (x.getMtbAart() != null) { if (x.getMtbAart() != null) {
accettazioneListModel.setDescrizione(x.getMtbAart().getDescrizioneEstesa()); accettazioneListModel.setDescrizione(x.getMtbAart().getDescrizioneEstesa());
accettazioneListModel.setPosizione(x.getMtbAart().getPosizione());
} }
accettazioneListModel.setOriginalModel(x); 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.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())); accettazioneListModel.setBadge2(String.valueOf(x.getSitArtOrdDTO().getNumOrd()));
@ -514,8 +710,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
this.mViewModel.retrieveExistentLU(this::startListaBancaliRegistratiActivity); this.mViewModel.retrieveExistentLU(this::startListaBancaliRegistratiActivity);
} }
private void showOrderDialog() { private void showOrderByDialog() {
AlertDialog dialog = new AlertDialog.Builder(this) AlertDialog dialog = new AlertDialog.Builder(this)
.setTitle(this.getText(R.string.action_orderBy)) .setTitle(this.getText(R.string.action_orderBy))
.setSingleChoiceItems(AccettazioneOrdineInevasoOrderBy.descriptions, mCurrentOrderBy.getVal(), (dialog12, which) -> { .setSingleChoiceItems(AccettazioneOrdineInevasoOrderBy.descriptions, mCurrentOrderBy.getVal(), (dialog12, which) -> {
@ -527,7 +722,6 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
dialog.show(); dialog.show();
} }
public void startListaBancaliRegistratiActivity(ArrayList<RecoverMtbColt> mtbColts) { public void startListaBancaliRegistratiActivity(ArrayList<RecoverMtbColt> mtbColts) {
Intent myIntent = ListaBancaliActivity.createIntent(this, Intent myIntent = ListaBancaliActivity.createIntent(this,
@ -560,7 +754,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
null, null,
R.string.button_ignore_print, R.string.button_ignore_print,
onComplete) onComplete)
.show(getSupportFragmentManager(), "tag"); .show(getSupportFragmentManager(), "tag");
} }
@Override @Override
@ -588,9 +782,19 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
this.mViewModel.closeLU(); this.mViewModel.closeLU();
} }
@Override
public void onVersamentoAutomaticoULRequest(RunnableArgs<Boolean> onComplete) {
runOnUiThread(() -> {
DialogAskShouldVersamentoAutomaticoULView.newInstance(onComplete)
.show(getSupportFragmentManager(), "tag");
});
}
@Override @Override
public void onNoteAggiuntiveRequest(RunnableArgs<String> onComplete) { public void onNoteAggiuntiveRequest(RunnableArgs<String> onComplete) {
NoteAggiuntiveLUDialog.make(this, onComplete::run, () -> onComplete.run(null)).show(); runOnUiThread(() -> {
NoteAggiuntiveLUDialog.make(this, onComplete).show();
});
} }
@Override @Override
@ -645,44 +849,72 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
@Override @Override
public void onRowSaved() { 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 @Override
public void onFilterApplied(String newValue) { public void onFilterCodMartApplied(String codMartToFilter) {
this.mBindings.filteredArtsInListExpandableLayout.expand(true); runOnUiThread(() -> {
this.mBindings.descriptionFilterText.setText(!UtilityString.isNullOrEmpty(newValue) ? newValue : ""); var codMarts = new ArrayList<String>();
codMarts.add(codMartToFilter);
this.mAppliedFilterViewModel.setCodArtFilter(codMarts);
});
} }
@Override @Override
public void onFilterRemoved() { public void onFilterPosizioneApplied(String posizioneToFilter) {
mBindings.filteredArtsInListExpandableLayout.collapse(true); runOnUiThread(() -> {
var posizioni = new ArrayList<String>();
posizioni.add(posizioneToFilter);
this.mAppliedFilterViewModel.setPosFilter(posizioni);
});
}
@Override
public void onULVersata(VersamentoAutomaticoULResponseDTO versamentoAutomaticoULResponseDTO, Runnable onComplete) {
runOnUiThread(() -> {
DialogVersamentoAutomaticoULDoneView
.newInstance(versamentoAutomaticoULResponseDTO, onComplete)
.show(getSupportFragmentManager(), "tag");
});
} }
@Override @Override
public void onMtbColrDeleteRequest(RunnableArgs<Boolean> onComplete) { public void onMtbColrDeleteRequest(RunnableArgs<Boolean> onComplete) {
String text = getResources().getString(R.string.alert_delete_mtb_colr); runOnUiThread(() -> {
DialogSimpleMessageView.makeWarningDialog(new SpannableString(text), String text = getResources().getString(R.string.alert_delete_mtb_colr);
null, DialogSimpleMessageView.makeWarningDialog(new SpannableString(text),
() -> onComplete.run(true), null,
() -> onComplete.run(false) () -> onComplete.run(true),
).show(getSupportFragmentManager(), "tag"); () -> onComplete.run(false)
).show(getSupportFragmentManager(), "tag");
});
} }
@Override @Override
public void onLUOpened(MtbColt mtbColt) { public void onLUOpened(MtbColt mtbColt) {
noLUPresent.set(false); runOnUiThread(() -> {
FBToast.successToast(this, getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT); noLUPresent.set(false);
FBToast.successToast(this, getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT);
this.mBottomSheetFragmentLUContentViewModel.setMtbColt(mtbColt); this.mBottomSheetFragmentLUContentViewModel.setMtbColt(mtbColt);
});
} }
@Override @Override
public void onLUClosed() { public void onLUClosed() {
noLUPresent.set(true); runOnUiThread(() -> {
this.mBottomSheetFragmentLUContentViewModel.setMtbColt(null); noLUPresent.set(true);
this.mBottomSheetFragmentLUContentViewModel.setMtbColt(null);
if (this.mShouldCloseActivity) super.onBackPressed(); if (this.mShouldCloseActivity) super.onBackPressed();
});
} }
@Override @Override

View File

@ -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<Integer, FilterChipDTO> 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()));
}};
}

View File

@ -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.GestSetupRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer;
import it.integry.integrywmsnative.core.rest.model.Ean13PesoModel; 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.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityBarcode; import it.integry.integrywmsnative.core.utility.UtilityBarcode;
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal; import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityString; 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.OrdineAccettazioneInevasoDTO;
import it.integry.integrywmsnative.gest.accettazione.dto.SitArtOrdDTO; import it.integry.integrywmsnative.gest.accettazione.dto.SitArtOrdDTO;
import it.integry.integrywmsnative.gest.accettazione_picking.dto.HistoryMtbAartDTO; import it.integry.integrywmsnative.gest.accettazione_picking.dto.HistoryMtbAartDTO;
@ -243,6 +245,10 @@ public class AccettazionePickingViewModel {
this.executeEtichettaEanPeso(barcodeScanDTO, onComplete); this.executeEtichettaEanPeso(barcodeScanDTO, onComplete);
} else if (UtilityBarcode.isEtichettaPosizione(barcodeScanDTO)) {
//Applico filtro per posizione
this.executeEtichettaPosizione(barcodeScanDTO, onComplete);
} else if (UtilityBarcode.isEtichetta128(barcodeScanDTO)) { } else if (UtilityBarcode.isEtichetta128(barcodeScanDTO)) {
//Cerco tramite etichetta ean 128 (che può indicarmi un articolo o una UL) //Cerco tramite etichetta ean 128 (che può indicarmi un articolo o una UL)
this.executeEtichettaEan128(barcodeScanDTO, onComplete); this.executeEtichettaEan128(barcodeScanDTO, onComplete);
@ -293,6 +299,15 @@ public class AccettazionePickingViewModel {
}, this::sendError); }, 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) { private void loadArticolo(String barcodeProd, PickDataDTO pickData, Runnable onComplete) {
if (barcodeProd.length() == 14) { if (barcodeProd.length() == 14) {
@ -332,16 +347,14 @@ public class AccettazionePickingViewModel {
} else if (matchedRows.size() == 1) { } else if (matchedRows.size() == 1) {
this.dispatchOrdineRow(matchedRows.get(0)); this.dispatchOrdineRow(matchedRows.get(0));
} else { } else {
List<PickingObjectDTO> 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++) { this.sendFilterCodMartApplied(firstCodMart);
if (!matchedRows.contains(pickingList.get(i))) {
pickingList.get(i).setHidden(true);
}
}
this.sendFilterApplied(null);
this.getPickingList().postValue(pickingList);
} }
} }
@ -571,64 +584,67 @@ public class AccettazionePickingViewModel {
public void saveNewRow(PickingObjectDTO pickingObjectDTO, BigDecimal numCnf, BigDecimal qtaCnf, BigDecimal qtaTot, String partitaMag, Date dataScad, boolean shouldCloseLU) { public void saveNewRow(PickingObjectDTO pickingObjectDTO, BigDecimal numCnf, BigDecimal qtaCnf, BigDecimal qtaTot, String partitaMag, Date dataScad, boolean shouldCloseLU) {
this.sendOnLoadingStarted(); this.sendOnLoadingStarted();
String gestioneRif = pickingObjectDTO.getSitArtOrdDTO().getGestioneEnum() == GestioneEnum.PRODUZIONE ? "L" : pickingObjectDTO.getSitArtOrdDTO().getGestione(); UtilityThread.executeParallel(() -> {
final MtbColr mtbColr = new MtbColr() String gestioneRif = pickingObjectDTO.getSitArtOrdDTO().getGestioneEnum() == GestioneEnum.PRODUZIONE ? "L" : pickingObjectDTO.getSitArtOrdDTO().getGestione();
.setCodMart(pickingObjectDTO.getMtbAart().getCodMart())
.setPartitaMag(partitaMag) final MtbColr mtbColr = new MtbColr()
.setDataScadPartita(dataScad) .setCodMart(pickingObjectDTO.getMtbAart().getCodMart())
.setQtaCol(qtaTot) .setPartitaMag(partitaMag)
.setQtaCnf(qtaCnf) .setDataScadPartita(dataScad)
.setNumCnf(numCnf) .setQtaCol(qtaTot)
.setGestioneRif(gestioneRif) .setQtaCnf(qtaCnf)
.setCodJcom(pickingObjectDTO.getSitArtOrdDTO().getCodJcom()) .setNumCnf(numCnf)
.setDescrizione(pickingObjectDTO.getMtbAart().getDescrizioneEstesa()) .setGestioneRif(gestioneRif)
.setDatetimeRow(UtilityDate.getDateInstance()) .setCodJcom(pickingObjectDTO.getSitArtOrdDTO().getCodJcom())
.setDataOrd(pickingObjectDTO.getSitArtOrdDTO().getDataOrd()) .setDescrizione(pickingObjectDTO.getMtbAart().getDescrizioneEstesa())
.setNumOrd(pickingObjectDTO.getSitArtOrdDTO().getNumOrd()) .setDatetimeRow(UtilityDate.getDateInstance())
.setRigaOrd(pickingObjectDTO.getSitArtOrdDTO().getRigaOrd()); .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(); MtbColt cloneMtbColt = (MtbColt) mCurrentMtbColt.clone();
cloneMtbColt.setOperation(CommonModelConsts.OPERATION.UPDATE); cloneMtbColt.setOperation(CommonModelConsts.OPERATION.UPDATE);
cloneMtbColt.setMtbColr(new ObservableArrayList<>()); cloneMtbColt.setMtbColr(new ObservableArrayList<>());
cloneMtbColt.getMtbColr().add((MtbColr) mtbColr.clone()); cloneMtbColt.getMtbColr().add((MtbColr) mtbColr.clone());
if (UtilityBigDecimal.equalsTo(numCnf, BigDecimal.ZERO) && UtilityBigDecimal.equalsTo(qtaTot, BigDecimal.ZERO)) { if (UtilityBigDecimal.equalsTo(numCnf, BigDecimal.ZERO) && UtilityBigDecimal.equalsTo(qtaTot, BigDecimal.ZERO)) {
resetMatchedRows(); resetMatchedRows();
this.sendOnLoadingEnded(); this.sendOnLoadingEnded();
if (shouldCloseLU) closeLU(); if (shouldCloseLU) closeLU();
return; return;
} }
mColliMagazzinoRESTConsumer.saveCollo(cloneMtbColt, value -> { mColliMagazzinoRESTConsumer.saveCollo(cloneMtbColt, value -> {
mtbColr mtbColr
.setDataCollo(value.getDataColloS()) .setDataCollo(value.getDataColloS())
.setNumCollo(value.getNumCollo()) .setNumCollo(value.getNumCollo())
.setGestione(value.getGestione()) .setGestione(value.getGestione())
.setSerCollo(value.getSerCollo()) .setSerCollo(value.getSerCollo())
.setRiga(value.getMtbColr().get(value.getMtbColr().size() - 1).getRiga()) .setRiga(value.getMtbColr().get(value.getMtbColr().size() - 1).getRiga())
.setUntMis(pickingObjectDTO.getMtbAart().getUntMis()) .setUntMis(pickingObjectDTO.getMtbAart().getUntMis())
.setMtbAart(pickingObjectDTO.getMtbAart()); .setMtbAart(pickingObjectDTO.getMtbAart());
pickingObjectDTO.getWithdrawMtbColrs().add(mtbColr); pickingObjectDTO.getWithdrawMtbColrs().add(mtbColr);
mCurrentMtbColt.getMtbColr().add(mtbColr); mCurrentMtbColt.getMtbColr().add(mtbColr);
//Chiamato removeListFilter perché cosi mi cancella tutti i dati di pick temporanei //Chiamato removeListFilter perché cosi mi cancella tutti i dati di pick temporanei
resetMatchedRows(); resetMatchedRows();
this.sendOnRowSaved(); this.sendOnRowSaved();
this.sendOnLoadingEnded(); this.sendOnLoadingEnded();
if (shouldCloseLU) closeLU(); if (shouldCloseLU) closeLU();
}, this::sendError); }, this::sendError);
}, false);
} }
@ -772,19 +788,40 @@ public class AccettazionePickingViewModel {
} else { } else {
mColliMagazzinoRESTConsumer.updateDataFine(mCurrentMtbColt, () -> { mColliMagazzinoRESTConsumer.updateDataFine(mCurrentMtbColt, () -> {
if (!mCurrentMtbColt.getDisablePrint()) { Runnable onVersamentoCompleted = () -> {
printCollo(this::postCloseOperations); if (!mCurrentMtbColt.getDisablePrint()) {
} else { printCollo(this::postCloseOperations);
postCloseOperations(); } else {
} postCloseOperations();
}
this.sendLUClosed();
this.sendOnLoadingEnded();
};
sendVersamentoAutomaticoULRequest(response -> {
if (response) {
versaAutomaticamenteUL(onVersamentoCompleted);
} else {
onVersamentoCompleted.run();
}
});
this.sendLUClosed();
this.sendOnLoadingEnded();
}, this::sendError); }, this::sendError);
} }
}, 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) { private void printCollo(Runnable onComplete) {
MtbColt cloneMtbColt = (MtbColt) mCurrentMtbColt.clone(); MtbColt cloneMtbColt = (MtbColt) mCurrentMtbColt.clone();
cloneMtbColt.setGestione(cloneMtbColt.getGestioneEnum() == GestioneEnum.LAVORAZIONE ? GestioneEnum.PRODUZIONE : cloneMtbColt.getGestioneEnum()); cloneMtbColt.setGestione(cloneMtbColt.getGestioneEnum() == GestioneEnum.LAVORAZIONE ? GestioneEnum.PRODUZIONE : cloneMtbColt.getGestioneEnum());
@ -816,12 +853,10 @@ public class AccettazionePickingViewModel {
public void resetMatchedRows() { public void resetMatchedRows() {
for (PickingObjectDTO pickingObjectDTO : this.mPickingList.getValue()) { for (PickingObjectDTO pickingObjectDTO : this.mPickingList.getValue()) {
pickingObjectDTO pickingObjectDTO
.setTempPickData(null) .setTempPickData(null);
.setHidden(false);
} }
this.mPickingList.postValue(this.mPickingList.getValue()); this.mPickingList.postValue(this.mPickingList.getValue());
this.sendFilterRemoved();
} }
private void addHistoryItem(@NonNull MtbColr mtbColr) { private void addHistoryItem(@NonNull MtbColr mtbColr) {
@ -857,6 +892,10 @@ public class AccettazionePickingViewModel {
if (this.mListener != null) mListener.onLoadingEnded(); if (this.mListener != null) mListener.onLoadingEnded();
} }
private void sendVersamentoAutomaticoULRequest(RunnableArgs<Boolean> onComplete) {
if (this.mListener != null) this.mListener.onVersamentoAutomaticoULRequest(onComplete);
}
private void sendOnNoteAggiuntiveRequest(RunnableArgs<String> onComplete) { private void sendOnNoteAggiuntiveRequest(RunnableArgs<String> onComplete) {
if (this.mListener != null) this.mListener.onNoteAggiuntiveRequest(onComplete); if (this.mListener != null) this.mListener.onNoteAggiuntiveRequest(onComplete);
} }
@ -925,26 +964,32 @@ public class AccettazionePickingViewModel {
if (this.mListener != null) mListener.onRowSaved(); if (this.mListener != null) mListener.onRowSaved();
} }
private void sendFilterApplied(String newValue) { private void sendFilterCodMartApplied(String codMart) {
if (this.mListener != null) mListener.onFilterApplied(newValue); if (this.mListener != null) mListener.onFilterCodMartApplied(codMart);
} }
private void sendFilterRemoved() { private void sendFilterPosizioneApplied(String posizione) {
if (this.mListener != null) mListener.onFilterRemoved(); if (this.mListener != null) mListener.onFilterPosizioneApplied(posizione);
} }
private void sendMtbColrDeleteRequest(RunnableArgs<Boolean> onComplete) { private void sendMtbColrDeleteRequest(RunnableArgs<Boolean> onComplete) {
if (this.mListener != null) mListener.onMtbColrDeleteRequest(onComplete); if (this.mListener != null) mListener.onMtbColrDeleteRequest(onComplete);
} }
public AccettazionePickingViewModel setListeners(AccettazionePickingViewModel.Listener private void notifyVersamentoAutomaticoResult(VersamentoAutomaticoULResponseDTO versamentoAutomaticoULResponseDTO, Runnable onComplete) {
listener) { if (this.mListener != null)
mListener.onULVersata(versamentoAutomaticoULResponseDTO, onComplete);
}
public AccettazionePickingViewModel setListeners(AccettazionePickingViewModel.Listener listener) {
this.mListener = listener; this.mListener = listener;
return this; return this;
} }
public interface Listener extends ILoadingListener, ILUPrintListener, ILUBaseOperationsListener { public interface Listener extends ILoadingListener, ILUPrintListener, ILUBaseOperationsListener {
void onVersamentoAutomaticoULRequest(RunnableArgs<Boolean> onComplete);
void onNoteAggiuntiveRequest(RunnableArgs<String> onComplete); void onNoteAggiuntiveRequest(RunnableArgs<String> onComplete);
void onError(Exception ex); void onError(Exception ex);
@ -969,9 +1014,11 @@ public class AccettazionePickingViewModel {
boolean canOverflowQuantity, boolean canOverflowQuantity,
RunnableArgss<PickedQuantityDTO, Boolean> onComplete); RunnableArgss<PickedQuantityDTO, Boolean> onComplete);
void onFilterApplied(String newValue); void onFilterCodMartApplied(String codMartToFilter);
void onFilterRemoved(); void onFilterPosizioneApplied(String posizioneToFilter);
void onULVersata(VersamentoAutomaticoULResponseDTO versamentoAutomaticoULResponseDTO, Runnable onComplete);
} }

View File

@ -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<Predicate<PickingObjectDTO>> currentCodArtPredicate = new ObservableField<>();
private final ObservableField<Predicate<PickingObjectDTO>> currentDescrPredicate = new ObservableField<>();
private final ObservableField<Predicate<PickingObjectDTO>> currentPosPredicate = new ObservableField<>();
private List<PickingObjectDTO> initialOrderList;
private final MutableLiveData<List<PickingObjectDTO>> currentFilteredOrderList = new MutableLiveData<>();
public void init(List<PickingObjectDTO> initialList) {
this.initialOrderList = initialList;
this.currentFilteredOrderList.setValue(this.initialOrderList);
}
public MutableLiveData<List<PickingObjectDTO>> getMutableFilteredOrderList() {
return this.currentFilteredOrderList;
}
public void setCodArtFilter(List<String> codArts) {
if (codArts == null || codArts.isEmpty()) currentCodArtPredicate.set(null);
else {
currentCodArtPredicate.set(o -> codArts.contains(o.getSitArtOrdDTO().getCodMart()));
}
}
public void setDescrFilter(List<String> descrs) {
if (descrs == null || descrs.isEmpty()) currentDescrPredicate.set(null);
else {
currentDescrPredicate.set(o -> descrs.contains(o.getSitArtOrdDTO().getDescrizioneEstesaArt()));
}
}
public void setPosFilter(List<String> 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<PickingObjectDTO> returnList = null;
if (currentCodArtPredicate.get() == null &&
currentDescrPredicate.get() == null &&
currentPosPredicate.get() == null) {
returnList = this.initialOrderList;
} else {
Stream<PickingObjectDTO> 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<Predicate<PickingObjectDTO>> getCurrentCodArtPredicate() {
return currentCodArtPredicate;
}
public ObservableField<Predicate<PickingObjectDTO>> getCurrentDescrPredicate() {
return currentDescrPredicate;
}
public ObservableField<Predicate<PickingObjectDTO>> getCurrentPosPredicate() {
return currentPosPredicate;
}
public List<String> 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<String> 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<String> 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<String> 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<String> 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<String> 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();
}
}
}

View File

@ -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<String> all;
private List<String> available;
private List<String> preselected = new ArrayList<>();
private List<String> hidden = new ArrayList<>();
private final MutableLiveData<List<ListModel>> listModel = new MutableLiveData<>();
private RunnableArgs<List<String>> 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<ListModel> c =
ComparatorCompat
.chain(new ComparatorCompat<ListModel>((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<String> getAll() {
return all;
}
public FilterCodArtLayoutView setAll(List<String> all) {
this.all = all;
return this;
}
public List<String> getAvailable() {
return available;
}
public FilterCodArtLayoutView setAvailable(List<String> available) {
this.available = available;
return this;
}
public List<String> getPreselected() {
return preselected;
}
public FilterCodArtLayoutView setPreselected(List<String> preselected) {
this.preselected = preselected;
return this;
}
public RunnableArgs<List<String>> getOnFilterApplied() {
return onFilterApplied;
}
public FilterCodArtLayoutView setOnFilterApplied(RunnableArgs<List<String>> onFilterApplied) {
this.onFilterApplied = onFilterApplied;
return this;
}
public List<String> getHidden() {
return hidden;
}
public FilterCodArtLayoutView setHidden(List<String> 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;
}
}
}

View File

@ -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<String> all;
private List<String> available;
private List<String> preselected = new ArrayList<>();
private List<String> hidden = new ArrayList<>();
private final MutableLiveData<List<ListModel>> listModel = new MutableLiveData<>();
private RunnableArgs<List<String>> 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<ListModel> c =
ComparatorCompat
.chain(new ComparatorCompat<ListModel>((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<String> getAll() {
return all;
}
public FilterDescrLayoutView setAll(List<String> all) {
this.all = all;
return this;
}
public List<String> getAvailable() {
return available;
}
public FilterDescrLayoutView setAvailable(List<String> available) {
this.available = available;
return this;
}
public List<String> getPreselected() {
return preselected;
}
public FilterDescrLayoutView setPreselected(List<String> preselected) {
this.preselected = preselected;
return this;
}
public RunnableArgs<List<String>> getOnFilterApplied() {
return onFilterApplied;
}
public FilterDescrLayoutView setOnFilterApplied(RunnableArgs<List<String>> onFilterApplied) {
this.onFilterApplied = onFilterApplied;
return this;
}
public List<String> getHidden() {
return hidden;
}
public FilterDescrLayoutView setHidden(List<String> 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;
}
}
}

View File

@ -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<String> all;
private List<String> available;
private List<String> preselected = new ArrayList<>();
private List<String> hidden = new ArrayList<>();
private final MutableLiveData<List<ListModel>> listModel = new MutableLiveData<>();
private RunnableArgs<List<String>> 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<ListModel> c =
ComparatorCompat
.chain(new ComparatorCompat<ListModel>((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<String> getAll() {
return all;
}
public FilterPosizioneLayoutView setAll(List<String> all) {
this.all = all;
return this;
}
public List<String> getAvailable() {
return available;
}
public FilterPosizioneLayoutView setAvailable(List<String> available) {
this.available = available;
return this;
}
public List<String> getPreselected() {
return preselected;
}
public FilterPosizioneLayoutView setPreselected(List<String> preselected) {
this.preselected = preselected;
return this;
}
public RunnableArgs<List<String>> getOnFilterApplied() {
return onFilterApplied;
}
public FilterPosizioneLayoutView setOnFilterApplied(RunnableArgs<List<String>> onFilterApplied) {
this.onFilterApplied = onFilterApplied;
return this;
}
public List<String> getHidden() {
return hidden;
}
public FilterPosizioneLayoutView setHidden(List<String> 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;
}
}
}

View File

@ -114,7 +114,7 @@ public class AccettazioneListAdapter extends SectionedRecyclerViewAdapter<Accett
holder.mBinding.deactivatedOverBg.setVisibility(!pickingObjectDTO.isActive() ? View.VISIBLE : View.GONE); holder.mBinding.deactivatedOverBg.setVisibility(!pickingObjectDTO.isActive() ? View.VISIBLE : View.GONE);
holder.mBinding.getRoot().setAlpha(!pickingObjectDTO.isActive() ? 0.8f : 1); holder.mBinding.getRoot().setAlpha(!pickingObjectDTO.isActive() ? 0.8f : 1);
holder.mBinding.badge1.setBackground(ResourcesCompat.getDrawable(mContext.getResources(), !pickingObjectDTO.isActive() ? R.drawable.badge_gray_round_corner : R.drawable.badge1_round_corner, null)); holder.mBinding.badge1.setBackground(ResourcesCompat.getDrawable(mContext.getResources(), !pickingObjectDTO.isActive() ? R.drawable.badge_round_corner : R.drawable.badge1_round_corner, null));
holder.mBinding.qtaEvasa.setTextColor(ResourcesCompat.getColor(mContext.getResources(), !pickingObjectDTO.isActive() ? R.color.gray_600 : R.color.green_700, null)); holder.mBinding.qtaEvasa.setTextColor(ResourcesCompat.getColor(mContext.getResources(), !pickingObjectDTO.isActive() ? R.color.gray_600 : R.color.green_700, null));
holder.mBinding.descrizione.setText(pickingObjectDTO.getDescrizione()); holder.mBinding.descrizione.setText(pickingObjectDTO.getDescrizione());
@ -125,6 +125,9 @@ public class AccettazioneListAdapter extends SectionedRecyclerViewAdapter<Accett
holder.mBinding.badge2.setText(pickingObjectDTO.getBadge2()); holder.mBinding.badge2.setText(pickingObjectDTO.getBadge2());
holder.mBinding.badge2.setVisibility(UtilityString.isNullOrEmpty(pickingObjectDTO.getBadge2()) ? View.GONE : View.VISIBLE); holder.mBinding.badge2.setVisibility(UtilityString.isNullOrEmpty(pickingObjectDTO.getBadge2()) ? View.GONE : View.VISIBLE);
holder.mBinding.badge3.setText(pickingObjectDTO.getPosizione());
holder.mBinding.badge3Layout.setVisibility(UtilityString.isNullOrEmpty(pickingObjectDTO.getPosizione()) ? View.GONE : View.VISIBLE);
holder.mBinding.qtaEvasa.setText(UtilityNumber.decimalToString(pickingObjectDTO.getQtaEvasa())); holder.mBinding.qtaEvasa.setText(UtilityNumber.decimalToString(pickingObjectDTO.getQtaEvasa()));
holder.mBinding.qtaTot.setText(UtilityNumber.decimalToString(pickingObjectDTO.getQtaTot())); holder.mBinding.qtaTot.setText(UtilityNumber.decimalToString(pickingObjectDTO.getQtaTot()));

View File

@ -23,6 +23,8 @@ public class AccettazioneListModel implements Cloneable {
private BigDecimal secQtaTot; private BigDecimal secQtaTot;
private String secUntMis; private String secUntMis;
private String posizione;
private boolean active; private boolean active;
private PickingObjectDTO mOriginalModel; private PickingObjectDTO mOriginalModel;
@ -154,6 +156,15 @@ public class AccettazioneListModel implements Cloneable {
return this; return this;
} }
public String getPosizione() {
return posizione;
}
public AccettazioneListModel setPosizione(String posizione) {
this.posizione = posizione;
return this;
}
public boolean isActive() { public boolean isActive() {
return active; return active;
} }

View File

@ -1,16 +1,48 @@
package it.integry.integrywmsnative.gest.login; package it.integry.integrywmsnative.gest.login;
import android.os.Bundle; import android.os.Bundle;
import android.text.Html;
import androidx.appcompat.app.AlertDialog;
import androidx.databinding.DataBindingUtil; import androidx.databinding.DataBindingUtil;
import java.util.List;
import javax.inject.Inject;
import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R; 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.expansion.BaseActivity; import it.integry.integrywmsnative.core.expansion.BaseActivity;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityWindow; import it.integry.integrywmsnative.core.utility.UtilityWindow;
import it.integry.integrywmsnative.databinding.ActivityLoginBinding; import it.integry.integrywmsnative.databinding.ActivityLoginBinding;
import it.integry.integrywmsnative.gest.login.viewmodel.LoginViewModel; import it.integry.integrywmsnative.gest.login.viewmodel.LoginViewModel;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
public class LoginActivity extends BaseActivity { public class LoginActivity extends BaseActivity implements LoginViewModel.Listener {
ActivityLoginBinding mBindings;
@Inject
LoginViewModel mViewmodel;
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();
public BindableBoolean loginButtonEnabled = new BindableBoolean();
public BindableString usernameError = new BindableString();
public BindableString passwordError = new BindableString();
public BindableString codAziendaError = new BindableString();
@Override @Override
@ -18,9 +50,44 @@ public class LoginActivity extends BaseActivity {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
UtilityWindow.maximizeToFullScreen(this); UtilityWindow.maximizeToFullScreen(this);
ActivityLoginBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_login); mBindings = DataBindingUtil.setContentView(this, R.layout.activity_login);
LoginViewModel loginViewModel = new LoginViewModel(this); mBindings.setView(this);
binding.setLoginViewModel(loginViewModel);
MainApplication.appComponent
.loginActivityComponent()
.create()
.inject(this);
mViewmodel.setListener(this);
loginButtonEnabled.set(true);
codAzienda.set(SettingsManager.i().getServer().getCodAzienda());
customSettingsCheckboxChecked.set(SettingsManager.i().getServer().getHost() == null);
customSettingsCheckboxEnabled.set(SettingsManager.i().getServer().getHost() != null);
}
public boolean validate(String username, String codAzienda) {
if (username.isEmpty() || username.length() < 3) {
usernameError.set(getText(R.string.username_error_not_valid).toString());
return false;
} else usernameError.set(null);
if (codAzienda.isEmpty() || codAzienda.length() < 3) {
codAziendaError.set(getText(R.string.server_cod_azienda_error_not_valid).toString());
return false;
} else codAziendaError.set(null);
return true;
}
public void login() {
if (validate(username.get(), codAzienda.get())) {
loginButtonEnabled.set(false);
mViewmodel.login(codAzienda.get(), username.get(), password.get());
}
} }
@ -29,4 +96,65 @@ public class LoginActivity extends BaseActivity {
// disable going back to the MainActivity // disable going back to the MainActivity
moveTaskToBack(true); moveTaskToBack(true);
} }
@Override
public void onLoginCompleted(String host, int port, String fullName, List<String> availableProfiles) {
this.onLoadingEnded();
runOnUiThread(() -> DialogSimpleMessageView.makeSuccessDialog(
"Benvenuto",
Html.fromHtml("Ciao <b>" + fullName + "</b>, 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<String> 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);
}
} }

View File

@ -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);
}

View File

@ -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);
}
}

View File

@ -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<LoginAziendaDTO> 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<ServiceRESTResponse<LoginAziendaDTO>>() {
@Override
public void onResponse(Call<ServiceRESTResponse<LoginAziendaDTO>> call, Response<ServiceRESTResponse<LoginAziendaDTO>> 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<ServiceRESTResponse<LoginAziendaDTO>> call, Throwable t) {
Log.e("LoginAzienda", t.toString());
callback.onFailed(new Exception(t));
}
});
}
public void doLogin(String host, int port, final ISimpleOperationCallback<LoginDTO> callback){
LoginRESTConsumerService service = RESTBuilder.getService(LoginRESTConsumerService.class, host, port, false);
service.login(mUsername, mPassword).enqueue(new Callback<ServiceRESTResponse<LoginDTO>>() {
@Override
public void onResponse(Call<ServiceRESTResponse<LoginDTO>> call, Response<ServiceRESTResponse<LoginDTO>> 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<ServiceRESTResponse<LoginDTO>> call, final Throwable t) {
Log.e("Login", t.toString());
callback.onFailed(new Exception(t));
}
});
}
}

View File

@ -2,10 +2,54 @@ package it.integry.integrywmsnative.gest.login.dto;
public class LoginAziendaDTO { public class LoginAziendaDTO {
public String profileDb; private String profileDb;
public String endpointRestApi; private String endpointRestApi;
public String phpApi; private String phpApi;
public String repoPhoto; private String repoPhoto;
public String endpointPvm; 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;
}
} }

View File

@ -4,7 +4,24 @@ import java.util.List;
public class LoginDTO { public class LoginDTO {
public String full_name; private String full_name;
public List<String> availableProfiles; private List<String> availableProfiles;
public String getFull_name() {
return full_name;
}
public LoginDTO setFull_name(String full_name) {
this.full_name = full_name;
return this;
}
public List<String> getAvailableProfiles() {
return availableProfiles;
}
public LoginDTO setAvailableProfiles(List<String> availableProfiles) {
this.availableProfiles = availableProfiles;
return this;
}
} }

View File

@ -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);
}
}

View File

@ -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));
}
}

View File

@ -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));
}
}

View File

@ -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);
}
}

View File

@ -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<LoginAziendaDTO> onComplete, RunnableArgs<Exception> 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<ServiceRESTResponse<LoginAziendaDTO>> call, Response<ServiceRESTResponse<LoginAziendaDTO>> response) {
analyzeAnswer(response, "LoginAzienda", onComplete, onFailed);
}
@Override
public void onFailure(Call<ServiceRESTResponse<LoginAziendaDTO>> 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<LoginDTO> onComplete, RunnableArgs<Exception> onFailed){
LoginRESTConsumerService service = RESTBuilder.getService(LoginRESTConsumerService.class, host, port, false);
service.login(username, password).enqueue(new Callback<>() {
@Override
public void onResponse(Call<ServiceRESTResponse<LoginDTO>> call, Response<ServiceRESTResponse<LoginDTO>> response) {
analyzeAnswer(response, "Login", onComplete, onFailed);
}
@Override
public void onFailure(Call<ServiceRESTResponse<LoginDTO>> call, final Throwable t) {
Log.e("Login", t.toString());
onFailed.run(new Exception(t));
}
});
}
}

View File

@ -1,167 +1,103 @@
package it.integry.integrywmsnative.gest.login.viewmodel; package it.integry.integrywmsnative.gest.login.viewmodel;
import android.app.Dialog; import com.annimon.stream.Stream;
import android.content.Intent;
import android.text.Html;
import android.text.SpannableString;
import android.text.Spanned;
import androidx.appcompat.app.AlertDialog;
import java.net.MalformedURLException; import java.net.MalformedURLException;
import java.net.URL; import java.net.URL;
import java.util.List; import java.util.List;
import it.integry.integrywmsnative.R; import javax.inject.Inject;
import it.integry.integrywmsnative.SplashActivity;
import it.integry.integrywmsnative.core.di.BindableBoolean; import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
import it.integry.integrywmsnative.core.di.BindableString;
import it.integry.integrywmsnative.core.rest.consumers.ISimpleOperationCallback;
import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
import it.integry.integrywmsnative.core.settings.SettingsManager; 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.UtilityServer;
import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.gest.login.LoginActivity; import it.integry.integrywmsnative.gest.login.exception.InvalidServerCodAziendaException;
import it.integry.integrywmsnative.gest.login.core.LoginHelper; import it.integry.integrywmsnative.gest.login.exception.InvalidUserDepositException;
import it.integry.integrywmsnative.gest.login.dto.LoginAziendaDTO; import it.integry.integrywmsnative.gest.login.exception.ServerNotReachableException;
import it.integry.integrywmsnative.gest.login.dto.LoginDTO; import it.integry.integrywmsnative.gest.login.rest.LoginRESTConsumer;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
public class LoginViewModel { public class LoginViewModel {
public BindableString username = new BindableString();
public BindableString password = new BindableString();
public BindableString codAzienda = new BindableString();
public BindableBoolean customSettingsCheckboxEnabled = new BindableBoolean(); private final SystemRESTConsumer mSystemRESTConsumer;
public BindableBoolean customSettingsCheckboxChecked = new BindableBoolean(); private final LoginRESTConsumer mLoginRESTConsumer;
public BindableBoolean loginButtonEnabled = new BindableBoolean(); private Listener mListener;
@Inject
public BindableString usernameError = new BindableString(); public LoginViewModel(SystemRESTConsumer systemRESTConsumer, LoginRESTConsumer loginRESTConsumer) {
public BindableString passwordError = new BindableString(); this.mSystemRESTConsumer = systemRESTConsumer;
public BindableString codAziendaError = new BindableString(); this.mLoginRESTConsumer = loginRESTConsumer;
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);
} }
public boolean validate() { public void login(String codAzienda, String username, String password) {
if (username.isEmpty() || username.get().length() < 3) { this.sendOnLoadingStarted();
usernameError.set(mActivity.getText(R.string.username_error_not_valid).toString());
return false;
} else usernameError.set(null);
if (codAzienda.isEmpty() || codAzienda.get().length() < 3) { mLoginRESTConsumer.retrieveServerData(codAzienda, value -> {
codAziendaError.set(mActivity.getText(R.string.server_cod_azienda_not_valid).toString());
return false;
} else codAziendaError.set(null);
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) { final String host = u.getHost();
if (areValidData) { final int port = u.getPort();
loginButtonEnabled.set(false);
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<LoginAziendaDTO>() { SettingsManager.iDB().setAvailableProfiles(loginDTO.getAvailableProfiles());
@Override SettingsManager.i().createUserSession();
public void onSuccess(LoginAziendaDTO value) { SettingsManager.i().getUser().setFullname(!UtilityString.isNullOrEmpty(loginDTO.getFull_name()) ? loginDTO.getFull_name() : username);
final String serverEndpoint = value.endpointRestApi; List<String> availableProfiles = null;
if(loginDTO.getAvailableProfiles() != null && !loginDTO.getAvailableProfiles().isEmpty()) {
URL u; availableProfiles = Stream.of(loginDTO.getAvailableProfiles())
try { .sorted()
u = new URL(serverEndpoint); .toList();
} 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<LoginDTO>() {
@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 <b>" + loginDTO.full_name + "</b>, 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)));
} }
}); 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().setHost(host);
SettingsManager.i().getServer().setPort(port); SettingsManager.i().getServer().setPort(port);
SettingsManager.i().getUser().setUsername(username.get()); SettingsManager.i().getUser().setUsername(username);
SettingsManager.i().getUser().setPassword(password.get()); SettingsManager.i().getUser().setPassword(password);
SystemRESTConsumer.getAvailableCodMdeps(availableCodMdeps -> { this.mSystemRESTConsumer.getAvailableCodMdeps(availableCodMdeps -> {
SettingsManager.iDB().setAvailableCodMdep(availableCodMdeps); SettingsManager.iDB().setAvailableCodMdep(availableCodMdeps);
if (availableCodMdeps == null || availableCodMdeps.size() == 0) { if (availableCodMdeps == null || availableCodMdeps.size() == 0) {
onLoginFailed(Html.fromHtml(String.format(mActivity.getText(R.string.no_codmdep_available).toString()))); this.sendError(new InvalidUserDepositException());
return; return;
} }
@ -169,72 +105,36 @@ public class LoginViewModel {
if (onComplete != null) onComplete.run(); if (onComplete != null) onComplete.run();
}, ex -> { }, this::sendError);
//BOH
onLoginFailed(new SpannableString(ex.getMessage()));
});
} }
private void onLoginFailed(final Spanned message) { private void sendOnLoadingStarted() {
mProgress.dismiss(); if (this.mListener != null) mListener.onLoadingStarted();
loginButtonEnabled.set(true);
mActivity.runOnUiThread(() -> DialogSimpleMessageView.makeErrorDialog(
message,
null,
null)
.show(mActivity.getSupportFragmentManager(), "tag"));
} }
private void sendOnLoadingEnded() {
private void onLoginSuccess(final String title, final Spanned message, final String host, final int port, final List<String> availableProfiles) { if (this.mListener != null) mListener.onLoadingEnded();
mProgress.dismiss();
mActivity.runOnUiThread(() -> DialogSimpleMessageView.makeSuccessDialog(
title,
message,
null,
() -> showProfileDBSelectionDialog(host, port, availableProfiles))
.show(mActivity.getSupportFragmentManager(), "tag"));
} }
private void showProfileDBSelectionDialog(final String host, final int port, final List<String> availableProfiles) { private void sendOnLoginCompleted(String host, int port, String fullName, List<String> availableProfiles) {
if (availableProfiles != null && availableProfiles.size() == 1) { if (this.mListener != null)
SettingsManager.i().getUserSession().setProfileDB(availableProfiles.get(0)); mListener.onLoginCompleted(host, port, fullName, availableProfiles);
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();
}
} }
public void onLoginCompleted() { private void sendError(Exception ex) {
loginButtonEnabled.set(true); if (this.mListener != null) mListener.onError(ex);
SettingsManager.update();
startSplashActivity();
} }
public LoginViewModel setListener(Listener listener) {
this.mListener = listener;
return this;
}
private void startSplashActivity() { public interface Listener extends ILoadingListener {
mActivity.finish(); void onError(Exception ex);
Intent myIntent = new Intent(mActivity, SplashActivity.class);
mActivity.startActivity(myIntent); void onLoginCompleted(String host, int port, String fullName, List<String> availableProfiles);
} }
} }

View File

@ -262,7 +262,10 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
mAppliedFilterViewModel.getCurrentDataConsPredicate().addOnPropertyChangedCallback(onPredicateChanged); mAppliedFilterViewModel.getCurrentDataConsPredicate().addOnPropertyChangedCallback(onPredicateChanged);
mAppliedFilterViewModel.getCurrentGruppoMercPredicate().addOnPropertyChangedCallback(onPredicateChanged); mAppliedFilterViewModel.getCurrentGruppoMercPredicate().addOnPropertyChangedCallback(onPredicateChanged);
List<FilterChipDTO> filterList = Stream.of(OrdiniUscitaElencoBindings.AVAILABLE_FILTERS.entrySet()).map(Map.Entry::getValue).sortBy(FilterChipDTO::getPosizione).toList(); List<FilterChipDTO> filterList = Stream.of(OrdiniUscitaElencoBindings.AVAILABLE_FILTERS.entrySet())
.map(Map.Entry::getValue)
.sortBy(FilterChipDTO::getPosizione)
.toList();
for (FilterChipDTO filterChipDTO : filterList) { for (FilterChipDTO filterChipDTO : filterList) {
@ -848,8 +851,10 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
private void initMtbGrupsCache(Runnable onComplete) { private void initMtbGrupsCache(Runnable onComplete) {
var codMgrpArts = Stream.of(Objects.requireNonNull(this.mViewModel.getOrderList().getValue())) 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) .map(OrdineUscitaInevasoDTO.AvailableClassMerc::getCodMgrp)
.withoutNulls()
.distinct()
.toList(); .toList();
this.mArticoloRESTConsumer.getArtsGroups(codMgrpArts, mtbGrupCache -> { this.mArticoloRESTConsumer.getArtsGroups(codMgrpArts, mtbGrupCache -> {

View File

@ -648,7 +648,10 @@ public class VenditaFiltroOrdiniViewModel {
public List<MtbGrup> getAllGruppoMerc(List<MtbGrup> mtbGrupFullList) { public List<MtbGrup> getAllGruppoMerc(List<MtbGrup> mtbGrupFullList) {
var codMgrp = Stream.of(initialOrderList) 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) .map(OrdineUscitaInevasoDTO.AvailableClassMerc::getCodMgrp)
.withoutNulls() .withoutNulls()
.distinct() .distinct()

View File

@ -276,8 +276,8 @@ public class PickingResiActivity extends BaseActivity implements BottomSheetFrag
} }
@Override @Override
public void onNoteAggiuntiveRequired(RunnableArgs<String> onComplete, Runnable onAbort) { public void onNoteAggiuntiveRequired(RunnableArgs<String> onComplete) {
NoteAggiuntiveLUDialog.make(this, onComplete, onAbort).show(); NoteAggiuntiveLUDialog.make(this, onComplete).show();
} }
@Override @Override

View File

@ -185,9 +185,6 @@ public class PickingResiViewModel {
}, this::sendError); }, this::sendError);
}, () -> {
this.sendLUClosed();
this.sendOnLoadingEnded();
}); });
} }
}, this::sendError); }, this::sendError);
@ -720,8 +717,8 @@ public class PickingResiViewModel {
return mPickingList; return mPickingList;
} }
private void sendOnNoteAggiuntiveRequired(RunnableArgs<String> onComplete, Runnable onAbort) { private void sendOnNoteAggiuntiveRequired(RunnableArgs<String> onComplete) {
if (this.mListener != null) this.mListener.onNoteAggiuntiveRequired(onComplete, onAbort); if (this.mListener != null) this.mListener.onNoteAggiuntiveRequired(onComplete);
} }
private void sendOnLoadingStarted() { private void sendOnLoadingStarted() {
@ -798,7 +795,7 @@ public class PickingResiViewModel {
public interface Listener extends ILUPrintListener, ILoadingListener, ILUBaseOperationsListener { public interface Listener extends ILUPrintListener, ILoadingListener, ILUBaseOperationsListener {
void onNoteAggiuntiveRequired(RunnableArgs<String> onComplete, Runnable onAbort); void onNoteAggiuntiveRequired(RunnableArgs<String> onComplete);
void onError(Exception ex); void onError(Exception ex);

View File

@ -82,7 +82,7 @@ public class PickingResiRESTConsumer {
if(onComplete != null) onComplete.run(values); if(onComplete != null) onComplete.run(values);
} } else onComplete.run(new ArrayList<>());
}, onFailed); }, onFailed);

View File

@ -107,7 +107,7 @@ public class PickingResiListAdapter extends SectionedRecyclerViewAdapter<Picking
holder.mBinding.deactivatedOverBg.setVisibility(!pickingResiListModel.isActive() ? View.VISIBLE : View.GONE); holder.mBinding.deactivatedOverBg.setVisibility(!pickingResiListModel.isActive() ? View.VISIBLE : View.GONE);
holder.mBinding.getRoot().setAlpha(!pickingResiListModel.isActive() ? 0.8f : 1); holder.mBinding.getRoot().setAlpha(!pickingResiListModel.isActive() ? 0.8f : 1);
holder.mBinding.badge1.setBackground(ResourcesCompat.getDrawable(mContext.getResources(), !pickingResiListModel.isActive() ? R.drawable.badge_gray_round_corner : R.drawable.badge1_round_corner, null)); holder.mBinding.badge1.setBackground(ResourcesCompat.getDrawable(mContext.getResources(), !pickingResiListModel.isActive() ? R.drawable.badge_round_corner : R.drawable.badge1_round_corner, null));
holder.mBinding.qtaEvasa.setTextColor(ResourcesCompat.getColor(mContext.getResources(), !pickingResiListModel.isActive() ? R.color.gray_600 : R.color.green_700, null)); holder.mBinding.qtaEvasa.setTextColor(ResourcesCompat.getColor(mContext.getResources(), !pickingResiListModel.isActive() ? R.color.gray_600 : R.color.green_700, null));
holder.mBinding.descrizione.setText(pickingResiListModel.getDescrizione()); holder.mBinding.descrizione.setText(pickingResiListModel.getDescrizione());

View File

@ -174,7 +174,7 @@ public class SpedizioneViewModel {
private void getEmptyPickingList(List<SitArtOrdDTO> sitArtOrdList, RunnableArgs<List<PickingObjectDTO>> onComplete) { private void getEmptyPickingList(List<SitArtOrdDTO> sitArtOrdList, RunnableArgs<List<PickingObjectDTO>> onComplete) {
List<String> codMarts = Stream.of(sitArtOrdList) List<String> codMarts = Stream.of(sitArtOrdList)
.map(SitArtOrdDTO::getCodMart) .map(x -> x.getCodMart().trim())
.toList(); .toList();
this.mArticoloRESTConsumer.getByCodMarts(codMarts, listMtbAarts -> { this.mArticoloRESTConsumer.getByCodMarts(codMarts, listMtbAarts -> {
@ -183,7 +183,7 @@ public class SpedizioneViewModel {
MtbAart mtbAart = null; MtbAart mtbAart = null;
for (MtbAart mtbAartItem : listMtbAarts) { for (MtbAart mtbAartItem : listMtbAarts) {
if (mtbAartItem.getCodMart().equalsIgnoreCase(sitArtOrdDTO.getCodMart())) { if (mtbAartItem.getCodMart().trim().equalsIgnoreCase(sitArtOrdDTO.getCodMart().trim())) {
mtbAart = mtbAartItem; mtbAart = mtbAartItem;
break; break;
} }

View File

@ -124,7 +124,7 @@ public class SpedizioneListAdapter extends SectionedRecyclerViewAdapter<Spedizio
holder.mBinding.deactivatedOverBg.setVisibility(!pickingObjectDTO.isActive() ? View.VISIBLE : View.GONE); holder.mBinding.deactivatedOverBg.setVisibility(!pickingObjectDTO.isActive() ? View.VISIBLE : View.GONE);
holder.mBinding.getRoot().setAlpha(!pickingObjectDTO.isActive() ? 0.8f : 1); holder.mBinding.getRoot().setAlpha(!pickingObjectDTO.isActive() ? 0.8f : 1);
holder.mBinding.badge1.setBackground(ResourcesCompat.getDrawable(mContext.getResources(), !pickingObjectDTO.isActive() ? R.drawable.badge_gray_round_corner : R.drawable.badge1_round_corner, null)); holder.mBinding.badge1.setBackground(ResourcesCompat.getDrawable(mContext.getResources(), !pickingObjectDTO.isActive() ? R.drawable.badge_round_corner : R.drawable.badge1_round_corner, null));
holder.mBinding.qtaEvasa.setTextColor(ResourcesCompat.getColor(mContext.getResources(), !pickingObjectDTO.isActive() ? R.color.gray_600 : R.color.green_700, null)); holder.mBinding.qtaEvasa.setTextColor(ResourcesCompat.getColor(mContext.getResources(), !pickingObjectDTO.isActive() ? R.color.gray_600 : R.color.green_700, null));
holder.mBinding.descrizione.setText(pickingObjectDTO.getDescrizione()); holder.mBinding.descrizione.setText(pickingObjectDTO.getDescrizione());

View File

@ -0,0 +1,333 @@
package it.integry.integrywmsnative.ui.expandablelayout;
import static it.integry.integrywmsnative.ui.expandablelayout.ExpandableLayout.State.COLLAPSED;
import static it.integry.integrywmsnative.ui.expandablelayout.ExpandableLayout.State.COLLAPSING;
import static it.integry.integrywmsnative.ui.expandablelayout.ExpandableLayout.State.EXPANDED;
import static it.integry.integrywmsnative.ui.expandablelayout.ExpandableLayout.State.EXPANDING;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ValueAnimator;
import android.content.Context;
import android.content.res.Configuration;
import android.content.res.TypedArray;
import android.os.Bundle;
import android.os.Parcelable;
import android.util.AttributeSet;
import android.view.View;
import android.view.animation.Interpolator;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import it.integry.integrywmsnative.R;
public class ExpandableLayout extends FrameLayout {
public interface State {
int COLLAPSED = 0;
int COLLAPSING = 1;
int EXPANDING = 2;
int EXPANDED = 3;
}
public static final String KEY_SUPER_STATE = "super_state";
public static final String KEY_EXPANSION = "expansion";
public static final int HORIZONTAL = 0;
public static final int VERTICAL = 1;
private static final int DEFAULT_DURATION = 300;
private int duration = DEFAULT_DURATION;
private float parallax;
private float expansion;
private int orientation;
private int state;
private Interpolator interpolator = new FastOutSlowInInterpolator();
private ValueAnimator animator;
private ExpandableLayout.OnExpansionUpdateListener listener;
public ExpandableLayout(Context context) {
this(context, null);
}
public ExpandableLayout(Context context, AttributeSet attrs) {
super(context, attrs);
if (attrs != null) {
TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.ExpandableLayout);
duration = a.getInt(R.styleable.ExpandableLayout_el_duration, DEFAULT_DURATION);
expansion = a.getBoolean(R.styleable.ExpandableLayout_el_expanded, false) ? 1 : 0;
orientation = a.getInt(R.styleable.ExpandableLayout_android_orientation, VERTICAL);
parallax = a.getFloat(R.styleable.ExpandableLayout_el_parallax, 1);
a.recycle();
state = expansion == 0 ? COLLAPSED : EXPANDED;
setParallax(parallax);
}
}
@Override
protected Parcelable onSaveInstanceState() {
Parcelable superState = super.onSaveInstanceState();
Bundle bundle = new Bundle();
expansion = isExpanded() ? 1 : 0;
bundle.putFloat(KEY_EXPANSION, expansion);
bundle.putParcelable(KEY_SUPER_STATE, superState);
return bundle;
}
@Override
protected void onRestoreInstanceState(Parcelable parcelable) {
Bundle bundle = (Bundle) parcelable;
expansion = bundle.getFloat(KEY_EXPANSION);
state = expansion == 1 ? EXPANDED : COLLAPSED;
Parcelable superState = bundle.getParcelable(KEY_SUPER_STATE);
super.onRestoreInstanceState(superState);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int width = getMeasuredWidth();
int height = getMeasuredHeight();
int size = orientation == LinearLayout.HORIZONTAL ? width : height;
setVisibility(expansion == 0 && size == 0 ? GONE : VISIBLE);
int expansionDelta = size - Math.round(size * expansion);
if (parallax > 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) {
}
}
}

View File

@ -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);
}
}

View File

@ -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]);
}
}

View File

@ -77,12 +77,14 @@ public class BottomSheetFragmentLUContentView extends BottomSheetFragmentBaseVie
this.mViewModel.getObservableMtbColt().addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() { this.mViewModel.getObservableMtbColt().addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() {
@Override @Override
public void onPropertyChanged(Observable sender, int propertyId) { public void onPropertyChanged(Observable sender, int propertyId) {
if(mViewModel.getObservableMtbColt().get() != null) { var mtbColt = mViewModel.getObservableMtbColt().get();
if(mtbColt != null) {
initAdapter(); initAdapter();
onMtbColrItemChanged(); onMtbColrItemChanged();
mViewModel.getObservableMtbColt().get().getMtbColr().addOnListChangedCallback(new OnListGeneralChangedCallback() { mtbColt.getMtbColr().addOnListChangedCallback(new OnListGeneralChangedCallback() {
@Override @Override
public void onChanged(ObservableList sender) { public void onChanged(ObservableList sender) {
onMtbColrItemChanged(); onMtbColrItemChanged();

View File

@ -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<Boolean> mOnDismiss;
private DialogAskShouldVersamentoAutomaticoUlBinding mBindings;
private boolean returnValue = false;
public static DialogAskShouldVersamentoAutomaticoULView newInstance(@NotNull RunnableArgs<Boolean> onDismiss) {
return new DialogAskShouldVersamentoAutomaticoULView(onDismiss);
}
private DialogAskShouldVersamentoAutomaticoULView(@NotNull RunnableArgs<Boolean> 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();
}
}

View File

@ -10,21 +10,23 @@ import android.view.LayoutInflater;
import androidx.databinding.DataBindingUtil; import androidx.databinding.DataBindingUtil;
import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.utility.UtilityDialog;
import it.integry.integrywmsnative.databinding.DialogNoteAggiuntiveNuovaUlBinding; import it.integry.integrywmsnative.databinding.DialogNoteAggiuntiveNuovaUlBinding;
public class NoteAggiuntiveLUDialog { public class NoteAggiuntiveLUDialog {
private Dialog mDialog; private Dialog mDialog;
public static Dialog make(Context context, final RunnableArgs<String> onComplete, final Runnable onAbort) { public static Dialog make(Context context, final RunnableArgs<String> onComplete) {
return new NoteAggiuntiveLUDialog(context, onComplete, onAbort).mDialog; return new NoteAggiuntiveLUDialog(context, onComplete).mDialog;
} }
private NoteAggiuntiveLUDialog(Context context, final RunnableArgs<String> onComplete, final Runnable onAbort){ private NoteAggiuntiveLUDialog(Context context, final RunnableArgs<String> onComplete){
LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE ); LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE );
DialogNoteAggiuntiveNuovaUlBinding bindings = DataBindingUtil.inflate(inflater, R.layout.dialog_note_aggiuntive_nuova_ul, null, false); DialogNoteAggiuntiveNuovaUlBinding bindings = DataBindingUtil.inflate(inflater, R.layout.dialog_note_aggiuntive_nuova_ul, null, false);
mDialog = new Dialog(context); mDialog = new Dialog(context);
mDialog.setContentView(bindings.getRoot()); mDialog.setContentView(bindings.getRoot());
@ -32,17 +34,14 @@ public class NoteAggiuntiveLUDialog {
mDialog.setCancelable(false); mDialog.setCancelable(false);
mDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); mDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
UtilityDialog.setTo90PercentWidth(context, mDialog);
bindings.buttonConfirm.setOnClickListener(v -> { bindings.buttonConfirm.setOnClickListener(v -> {
mDialog.dismiss(); mDialog.dismiss();
if(onComplete != null) onComplete.run(bindings.additionalNotesText.getText().toString()); if(onComplete != null) onComplete.run(bindings.additionalNotesText.getText().toString());
}); });
bindings.buttonAbort.setOnClickListener(v -> {
mDialog.dismiss();
if(onAbort != null) onAbort.run();
});
} }
} }

View File

@ -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 <b>" + versamentoAutomaticoULResponseDTO.getFailed().size() +
" " + getResources().getQuantityString(R.plurals.articles, versamentoAutomaticoULResponseDTO.getFailed().size()) + "</b>";
}
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);
// }
}

View File

@ -1,12 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<solid android:color="@color/orange_600" />
<padding
android:left="1dp"
android:right="1dp"
android:top="1dp" />
<corners android:radius="5dp" />
</shape>

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" > <shape xmlns:android="http://schemas.android.com/apk/res/android" >
<solid android:color="@color/gray_600" /> <solid android:color="@color/white" />
<padding <padding
android:left="6dp" android:left="6dp"

View File

@ -1,9 +0,0 @@
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
<solid android:color="@android:color/white" />
<stroke android:width="1dip" android:color="#969696"/>
<!-- The radius makes the corners rounded -->
<corners
android:radius="8dp" >
</corners>
</shape>

View File

@ -1,12 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<solid android:color="#ebebeb" />
<padding
android:left="4dp"
android:right="4dp"
android:top="4dp" />
<corners android:topLeftRadius="16dp" android:topRightRadius="16dp" />
</shape>

View File

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners
android:topLeftRadius="16dp"
android:topRightRadius="16dp" />
<padding android:top="16dp" />
<solid android:color="@color/white" />
</shape>

View File

@ -1,13 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid
android:color="#0074E4"/>
<size
android:width="100dp"
android:height="100dp"/>
</shape>

View File

@ -1,12 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<solid android:color="@android:color/white" />
<padding
android:left="1dp"
android:right="1dp"
android:top="1dp" />
<corners android:radius="500dp" />
</shape>

View File

@ -1,13 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<solid
android:color="@color/white_bg_alpha" />
<padding
android:left="1dp"
android:right="1dp"
android:top="1dp" />
<corners android:radius="500dp" />
</shape>

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<solid android:color="@color/white" />
<corners android:radius="20dp" />
</shape>

View File

@ -1,11 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/black_semi_transparent"/>
<padding
android:left="16dp"
android:top="4dp"
android:right="16dp"
android:bottom="4dp"/>
<corners
android:radius="2dp"/>
</shape>

View File

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/colorAccent"/>
<corners
android:bottomLeftRadius="50dp"
android:bottomRightRadius="0dp"
android:topLeftRadius="50dp"
android:topRightRadius="50dp"/>
</shape>

View File

@ -0,0 +1,5 @@
<vector android:height="24dp" android:tint="#FFFFFF"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M7.41,8.59L12,13.17l4.59,-4.58L18,10l-6,6 -6,-6 1.41,-1.41z"/>
</vector>

View File

@ -1,5 +1,10 @@
<vector android:height="76dp" android:tint="#FFFFFF" <vector xmlns:android="http://schemas.android.com/apk/res/android"
android:viewportHeight="24.0" android:viewportWidth="24.0" android:width="24dp"
android:width="76dp" xmlns:android="http://schemas.android.com/apk/res/android"> android:height="24dp"
<path android:fillColor="#FF000000" android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM13,17h-2v-2h2v2zM13,13h-2L11,7h2v6z"/> android:tint="#FFFFFF"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM13,17h-2v-2h2v2zM13,13h-2L11,7h2v6z" />
</vector> </vector>

View File

@ -0,0 +1,5 @@
<vector android:height="24dp" android:tint="#FFFFFF"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M12,2C8.13,2 5,5.13 5,9c0,5.25 7,13 7,13s7,-7.75 7,-13c0,-3.87 -3.13,-7 -7,-7zM12,11.5c-1.38,0 -2.5,-1.12 -2.5,-2.5s1.12,-2.5 2.5,-2.5 2.5,1.12 2.5,2.5 -1.12,2.5 -2.5,2.5z"/>
</vector>

View File

@ -1,16 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background">
<shape>
<corners android:radius="6.5dp" />
<solid android:color="@android:color/white" />
<stroke
android:width="1dp"
android:color="@android:color/darker_gray" />
</shape>
</item>
</layer-list>

View File

@ -1,6 +0,0 @@
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
android:angle="90"
android:endColor="@android:color/transparent"
android:startColor="#64000000"/>
</shape>

View File

@ -1,9 +0,0 @@
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:angle="135"
android:centerColor="#4CAF50"
android:endColor="#2E7D32"
android:startColor="#81C784"
android:type="linear" />
</shape>

View File

@ -194,7 +194,7 @@
android:layout_gravity="center" android:layout_gravity="center"
android:layout_marginEnd="2dp" android:layout_marginEnd="2dp"
android:layout_weight="0.5" android:layout_weight="0.5"
android:background="@drawable/badge_gray_round_corner" android:background="@drawable/badge_round_corner"
android:backgroundTint="@color/green_600" android:backgroundTint="@color/green_600"
android:orientation="vertical" android:orientation="vertical"
android:padding="8dp" android:padding="8dp"
@ -293,7 +293,7 @@
android:layout_gravity="center" android:layout_gravity="center"
android:layout_marginStart="2dp" android:layout_marginStart="2dp"
android:layout_weight="0.5" android:layout_weight="0.5"
android:background="@drawable/badge_gray_round_corner" android:background="@drawable/badge_round_corner"
android:backgroundTint="@color/colorPrimary" android:backgroundTint="@color/colorPrimary"
android:orientation="vertical" android:orientation="vertical"
android:padding="8dp" android:padding="8dp"

View File

@ -24,7 +24,8 @@
style="@style/AppTheme.NewMaterial.Text.Small" style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="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:paddingLeft="6dp"
android:paddingTop="2dp" android:paddingTop="2dp"
android:paddingRight="6dp" android:paddingRight="6dp"
@ -39,7 +40,8 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="8dp" 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:paddingLeft="6dp"
android:paddingTop="2dp" android:paddingTop="2dp"
android:paddingRight="6dp" android:paddingRight="6dp"
@ -48,6 +50,37 @@
android:textStyle="bold" android:textStyle="bold"
tools:text="BADGE 2" /> tools:text="BADGE 2" />
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/badge3_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginStart="8dp"
android:paddingLeft="6dp"
android:paddingTop="2dp"
android:paddingRight="6dp"
android:paddingBottom="2dp"
android:background="@drawable/badge_round_corner"
android:backgroundTint="@color/light_blue_500"
android:gravity="center_vertical">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="12dp"
android:layout_height="12dp"
android:src="@drawable/ic_location_24"
android:tint="@color/white"/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/badge3"
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:textColor="@android:color/white"
android:textStyle="bold"
tools:text="POSIZIONE" />
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat <androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/primary_unt_mis" android:id="@+id/primary_unt_mis"
@ -104,12 +137,12 @@
<androidx.appcompat.widget.AppCompatTextView <androidx.appcompat.widget.AppCompatTextView
android:id="@+id/descrizione" android:id="@+id/descrizione"
android:layout_alignParentStart="true"
android:layout_toStartOf="@id/secondary_unt_mis"
style="@style/AppTheme.NewMaterial.Text.Medium" style="@style/AppTheme.NewMaterial.Text.Medium"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_marginTop="4dp" android:layout_marginTop="4dp"
android:layout_toStartOf="@id/secondary_unt_mis"
android:textColor="@android:color/black" android:textColor="@android:color/black"
android:textSize="16sp" android:textSize="16sp"
tools:text="DESCRIZIONE" /> tools:text="DESCRIZIONE" />
@ -117,12 +150,12 @@
<androidx.appcompat.widget.LinearLayoutCompat <androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/secondary_unt_mis" android:id="@+id/secondary_unt_mis"
android:layout_alignParentEnd="true"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:alpha="0.8"
android:gravity="end" android:gravity="end"
android:orientation="horizontal" android:orientation="horizontal">
android:alpha="0.8">
<androidx.appcompat.widget.AppCompatTextView <androidx.appcompat.widget.AppCompatTextView
android:id="@+id/sec_qta_evasa" android:id="@+id/sec_qta_evasa"

View File

@ -26,221 +26,172 @@
app:layout_behavior="@string/appbar_scrolling_view_behavior"> app:layout_behavior="@string/appbar_scrolling_view_behavior">
<!-- Main Content --> <!-- Main Content -->
<RelativeLayout
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent">
<androidx.coordinatorlayout.widget.CoordinatorLayout <com.google.android.material.appbar.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="wrap_content"
android:background="@color/full_white"
android:minHeight="?attr/actionBarSize">
<com.google.android.material.appbar.AppBarLayout <androidx.appcompat.widget.Toolbar
android:id="@+id/appbar" android:id="@+id/toolbar"
style="@style/AppTheme.NewMaterial.Text"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_collapseMode="pin" />
<HorizontalScrollView
android:id="@+id/filter_chips"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@color/full_white" android:scrollbars="none">
android:minHeight="?attr/actionBarSize">
<androidx.appcompat.widget.Toolbar <com.google.android.material.chip.ChipGroup
android:id="@+id/toolbar" android:id="@+id/filter_chips_group"
android:layout_width="match_parent" android:layout_width="wrap_content"
android:layout_height="?attr/actionBarSize" android:layout_height="wrap_content"
app:layout_collapseMode="pin" android:paddingStart="8dp"
style="@style/AppTheme.NewMaterial.Text" /> android:paddingEnd="8dp"
app:chipSpacing="8dp"
app:singleSelection="true" />
</HorizontalScrollView>
</com.google.android.material.appbar.AppBarLayout> </com.google.android.material.appbar.AppBarLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/accettazione_picking_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
android:paddingBottom="72dp"
android:scrollbars="vertical"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/accettazione_empty_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:alpha="0.3"
app:visibility="@{accettazioneView.noItemsToPick}">
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline_empty_top"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.2" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline_empty_left"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.15" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline_empty_right"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.85" />
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="vertical" android:orientation="vertical"
app:layout_behavior="@string/appbar_scrolling_view_behavior"> app:layout_constraintEnd_toStartOf="@id/guideline_empty_right"
app:layout_constraintStart_toEndOf="@id/guideline_empty_left"
app:layout_constraintTop_toTopOf="@id/guideline_empty_top">
<net.cachapa.expandablelayout.ExpandableLayout <androidx.appcompat.widget.AppCompatImageView
android:id="@+id/filtered_arts_in_list_expandable_layout" android:layout_width="72dp"
android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:el_duration="400" android:adjustViewBounds="true"
app:el_expanded="false"> android:src="@drawable/ic_playlist_add_check_24dp" />
<RelativeLayout <androidx.appcompat.widget.AppCompatTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="8dp"
android:paddingTop="12dp"
android:paddingRight="8dp"
android:paddingBottom="12dp">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_toStartOf="@+id/remove_art_filter_list"
android:orientation="vertical">
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/filtered_arts_in_list" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/description_filter_text"
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
android:textColor="@android:color/black"
android:textSize="16sp"
android:textStyle="bold"
tools:text="COD_ART_HERE" />
</LinearLayout>
<com.google.android.material.button.MaterialButton
android:id="@+id/remove_art_filter_list"
style="@style/Button.DangerOutline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:onClick="@{() -> accettazioneView.removeListFilter()}"
android:text="@string/remove_filter_button"
app:strokeColor="@color/red_600" />
</RelativeLayout>
</net.cachapa.expandablelayout.ExpandableLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/accettazione_picking_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
android:paddingBottom="72dp"
android:scrollbars="vertical" />
</LinearLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/accettazione_empty_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:alpha="0.3"
app:visibility="@{accettazioneView.noItemsToPick}">
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline_empty_top"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.2" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline_empty_left"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.15" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline_empty_right"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.85" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:gravity="center_horizontal" android:gravity="center_horizontal"
android:orientation="vertical" android:text="@string/no_item_to_pick_text"
app:layout_constraintEnd_toStartOf="@id/guideline_empty_right" android:textColor="@android:color/black"
app:layout_constraintStart_toEndOf="@id/guideline_empty_left" android:textSize="18sp" />
app:layout_constraintTop_toTopOf="@id/guideline_empty_top"> </LinearLayout>
<androidx.appcompat.widget.AppCompatImageView </androidx.constraintlayout.widget.ConstraintLayout>
android:layout_width="72dp"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:src="@drawable/ic_playlist_add_check_24dp" />
<androidx.appcompat.widget.AppCompatTextView <com.github.clans.fab.FloatingActionMenu
android:layout_width="wrap_content" android:id="@+id/accettazione_ordine_inevaso_fab"
android:layout_height="wrap_content" android:layout_width="match_parent"
android:gravity="center_horizontal" android:layout_height="match_parent"
android:text="@string/no_item_to_pick_text" android:layout_alignParentBottom="true"
android:textColor="@android:color/black" app:layout_constraintBottom_toBottomOf="parent"
android:textSize="18sp" /> app:layout_constraintEnd_toEndOf="parent"
</LinearLayout> app:visibility="@{accettazioneView.noLUPresent}"
fab:menu_animationDelayPerItem="50"
fab:menu_backgroundColor="@color/white_bg_alpha"
fab:menu_buttonSpacing="0dp"
fab:menu_colorNormal="@color/colorSecondary"
fab:menu_colorPressed="@color/colorSecondaryDark"
fab:menu_fab_size="normal"
fab:menu_labels_colorNormal="@color/white"
fab:menu_labels_colorPressed="@color/white_pressed"
fab:menu_labels_colorRipple="#66FFFFFF"
fab:menu_labels_cornerRadius="3dp"
fab:menu_labels_hideAnimation="@anim/fab_slide_out_to_right"
fab:menu_labels_margin="0dp"
fab:menu_labels_padding="8dp"
fab:menu_labels_paddingBottom="4dp"
fab:menu_labels_paddingLeft="8dp"
fab:menu_labels_paddingRight="8dp"
fab:menu_labels_paddingTop="4dp"
fab:menu_labels_position="left"
fab:menu_labels_showAnimation="@anim/fab_slide_in_from_right"
fab:menu_labels_showShadow="true"
fab:menu_labels_textColor="@color/black_semi_transparent"
fab:menu_labels_textSize="18sp"
fab:menu_openDirection="up"
fab:menu_shadowColor="#66000000"
fab:menu_shadowRadius="4dp"
fab:menu_shadowXOffset="1dp"
fab:menu_shadowYOffset="3dp"
fab:menu_showShadow="true">
</androidx.constraintlayout.widget.ConstraintLayout> <com.github.clans.fab.FloatingActionButton
android:id="@+id/accettazione_ordine_inevaso_fab_item1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_box"
app:fab_colorNormal="@color/white"
app:fab_colorPressed="@color/white_pressed"
app:fab_colorRipple="#66FFFFFF"
app:onClick="@{() -> accettazioneView.showCreatedUL()}"
fab:fab_label="@string/action_show_created_ul" />
<com.github.clans.fab.FloatingActionMenu <com.github.clans.fab.FloatingActionButton
android:id="@+id/accettazione_ordine_inevaso_fab" android:id="@+id/accettazione_ordine_inevaso_fab_item2"
android:layout_width="match_parent" android:layout_width="wrap_content"
android:layout_height="match_parent" android:layout_height="wrap_content"
android:layout_alignParentBottom="true" android:src="@drawable/ic_add_24dp"
app:visibility="@{accettazioneView.noLUPresent}" app:fab_colorNormal="@color/white"
app:layout_constraintBottom_toBottomOf="parent" app:fab_colorPressed="@color/white_pressed"
app:layout_constraintEnd_toEndOf="parent" app:fab_colorRipple="#66FFFFFF"
fab:menu_animationDelayPerItem="50" app:onClick="@{() -> accettazioneView.createNewLU()}"
fab:menu_backgroundColor="@color/white_bg_alpha" fab:fab_label="@string/action_create_ul" />
fab:menu_buttonSpacing="0dp"
fab:menu_colorNormal="@color/colorSecondary"
fab:menu_colorPressed="@color/colorSecondaryDark"
fab:menu_fab_size="normal"
fab:menu_labels_colorNormal="@color/white"
fab:menu_labels_colorPressed="@color/white_pressed"
fab:menu_labels_colorRipple="#66FFFFFF"
fab:menu_labels_cornerRadius="3dp"
fab:menu_labels_hideAnimation="@anim/fab_slide_out_to_right"
fab:menu_labels_margin="0dp"
fab:menu_labels_padding="8dp"
fab:menu_labels_paddingBottom="4dp"
fab:menu_labels_paddingLeft="8dp"
fab:menu_labels_paddingRight="8dp"
fab:menu_labels_paddingTop="4dp"
fab:menu_labels_position="left"
fab:menu_labels_showAnimation="@anim/fab_slide_in_from_right"
fab:menu_labels_showShadow="true"
fab:menu_labels_textColor="@color/black_semi_transparent"
fab:menu_labels_textSize="18sp"
fab:menu_openDirection="up"
fab:menu_shadowColor="#66000000"
fab:menu_shadowRadius="4dp"
fab:menu_shadowXOffset="1dp"
fab:menu_shadowYOffset="3dp"
fab:menu_showShadow="true">
<com.github.clans.fab.FloatingActionButton </com.github.clans.fab.FloatingActionMenu>
android:id="@+id/accettazione_ordine_inevaso_fab_item1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_box"
app:fab_colorNormal="@color/white"
app:fab_colorPressed="@color/white_pressed"
app:fab_colorRipple="#66FFFFFF"
app:onClick="@{() -> accettazioneView.showCreatedUL()}"
fab:fab_label="@string/action_show_created_ul" />
<com.github.clans.fab.FloatingActionButton </androidx.coordinatorlayout.widget.CoordinatorLayout>
android:id="@+id/accettazione_ordine_inevaso_fab_item2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_add_24dp"
app:fab_colorNormal="@color/white"
app:fab_colorPressed="@color/white_pressed"
app:fab_colorRipple="#66FFFFFF"
app:onClick="@{() -> accettazioneView.createNewLU()}"
fab:fab_label="@string/action_create_ul" />
</com.github.clans.fab.FloatingActionMenu>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
</RelativeLayout>
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -75,7 +75,8 @@
<androidx.appcompat.widget.AppCompatTextView <androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="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:gravity="center"
android:paddingLeft="6dp" android:paddingLeft="6dp"
android:paddingTop="2dp" android:paddingTop="2dp"

View File

@ -5,8 +5,8 @@
<data> <data>
<variable <variable
name="loginViewModel" name="view"
type="it.integry.integrywmsnative.gest.login.viewmodel.LoginViewModel" /> type="it.integry.integrywmsnative.gest.login.LoginActivity" />
</data> </data>
@ -36,7 +36,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="8dp" android:layout_marginTop="8dp"
android:layout_marginBottom="8dp" android:layout_marginBottom="8dp"
app:errorText="@{loginViewModel.usernameError}" app:errorText="@{view.usernameError}"
app:hintTextAppearance="@style/hint_text" app:hintTextAppearance="@style/hint_text"
style="@style/TextInputLayout.OutlinePrimary"> style="@style/TextInputLayout.OutlinePrimary">
@ -46,7 +46,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:hint="Username" android:hint="Username"
android:inputType="textEmailAddress" android:inputType="textEmailAddress"
app:binding="@{loginViewModel.username}" /> app:binding="@{view.username}" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
<!-- Password Label --> <!-- Password Label -->
@ -55,7 +55,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="8dp" android:layout_marginTop="8dp"
android:layout_marginBottom="8dp" android:layout_marginBottom="8dp"
app:errorText="@{loginViewModel.passwordError}" app:errorText="@{view.passwordError}"
app:hintTextAppearance="@style/hint_text" app:hintTextAppearance="@style/hint_text"
app:passwordToggleEnabled="true" app:passwordToggleEnabled="true"
style="@style/TextInputLayout.OutlinePrimary"> style="@style/TextInputLayout.OutlinePrimary">
@ -66,16 +66,16 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:hint="Password" android:hint="Password"
android:inputType="textPassword" android:inputType="textPassword"
app:binding="@{loginViewModel.password}" /> app:binding="@{view.password}" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
<androidx.appcompat.widget.AppCompatCheckBox <androidx.appcompat.widget.AppCompatCheckBox
android:id="@+id/login_checkbox_custom_server" android:id="@+id/login_checkbox_custom_server"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:enabled="@{loginViewModel.customSettingsCheckboxEnabled}" android:enabled="@{view.customSettingsCheckboxEnabled}"
android:text="@string/action_customize_server_settings" android:text="@string/action_customize_server_settings"
app:checked="@{loginViewModel.customSettingsCheckboxChecked}" /> app:checked="@{view.customSettingsCheckboxChecked}" />
<net.cachapa.expandablelayout.ExpandableLayout <net.cachapa.expandablelayout.ExpandableLayout
android:id="@+id/login_layout_server_details" android:id="@+id/login_layout_server_details"
@ -84,7 +84,7 @@
android:paddingTop="6dp" android:paddingTop="6dp"
android:paddingBottom="12dp" android:paddingBottom="12dp"
app:el_duration="400" app:el_duration="400"
app:el_expanded_bind="@{loginViewModel.customSettingsCheckboxChecked}"> app:el_expanded_bind="@{view.customSettingsCheckboxChecked}">
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
@ -96,7 +96,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="8dp" android:layout_marginTop="8dp"
app:errorText="@{loginViewModel.codAziendaError}" app:errorText="@{view.codAziendaError}"
app:hintTextAppearance="@style/hint_text" app:hintTextAppearance="@style/hint_text"
style="@style/TextInputLayout.OutlinePrimary"> style="@style/TextInputLayout.OutlinePrimary">
@ -106,7 +106,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:hint="Codice azienda" android:hint="Codice azienda"
android:inputType="text" android:inputType="text"
app:binding="@{loginViewModel.codAzienda}" /> app:binding="@{view.codAzienda}" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
</LinearLayout> </LinearLayout>
@ -121,9 +121,9 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="24dp" android:layout_marginTop="24dp"
android:layout_marginBottom="24dp" android:layout_marginBottom="24dp"
android:enabled="@{loginViewModel.loginButtonEnabled}" android:enabled="@{view.loginButtonEnabled}"
android:text="@string/login" android:text="@string/login"
app:onClick="@{() -> loginViewModel.login(loginViewModel.validate())}" /> app:onClick="@{() -> view.login()}" />
</androidx.appcompat.widget.LinearLayoutCompat> </androidx.appcompat.widget.LinearLayoutCompat>

View File

@ -63,7 +63,7 @@
android:layout_width="24dp" android:layout_width="24dp"
android:layout_height="4dp" android:layout_height="4dp"
android:alpha="0.5" android:alpha="0.5"
android:background="@drawable/badge_gray_round_corner" android:background="@drawable/badge_round_corner"
android:backgroundTint="@android:color/white" android:backgroundTint="@android:color/white"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
@ -138,241 +138,306 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical"> android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
style="@style/AppTheme.NewMaterial.Text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginTop="10dp"
android:text="@string/details_text"
android:textAllCaps="true"
android:textColor="@android:color/black"
android:textStyle="bold" />
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical" android:orientation="vertical">
android:padding="15dp">
<androidx.constraintlayout.widget.ConstraintLayout <TextView
android:layout_width="match_parent" style="@style/AppTheme.NewMaterial.Text"
android:layout_height="wrap_content"> android:layout_width="wrap_content"
android:layout_height="wrap_content"
<androidx.constraintlayout.widget.Guideline android:layout_marginStart="10dp"
android:id="@+id/guideline1" android:layout_marginTop="10dp"
android:layout_width="wrap_content" android:text="@string/details_text"
android:layout_height="wrap_content" android:textAllCaps="true"
android:orientation="vertical" android:textColor="@android:color/black"
app:layout_constraintGuide_percent="0.40" /> android:textStyle="bold" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:text="@string/date_text"
android:textColor="@android:color/black"
app:layout_constraintEnd_toStartOf="@+id/guideline1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/articoli_in_collo_details_date"
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/guideline1"
app:layout_constraintTop_toTopOf="parent"
tools:text="TextView" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.40" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/articoli_in_collo_details_posizione"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:text="@string/position_text"
android:textColor="@android:color/black"
app:layout_constraintEnd_toStartOf="@+id/guideline2"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="0dp"
android:layout_height="0dp"
android:text="@{viewModel.mtbColt.posizione}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/guideline2"
app:layout_constraintTop_toTopOf="parent"
tools:text="TextView" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.40" />
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:text="@string/prepared_by_text"
android:textColor="@android:color/black"
app:layout_constraintEnd_toStartOf="@+id/guideline3"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="0dp"
android:layout_height="0dp"
android:text="@{viewModel.mtbColt.preparatoDa}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/guideline3"
app:layout_constraintTop_toTopOf="parent"
tools:text="TextView" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.40" />
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:text="@string/customer"
android:textColor="@android:color/black"
app:layout_constraintEnd_toStartOf="@+id/guideline4"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="0dp"
android:layout_height="0dp"
android:text="@{viewModel.mtbColt.ragSocCliente}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/guideline4"
app:layout_constraintTop_toTopOf="parent"
tools:text="TextView" />
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginTop="24dp"
android:background="#ededed" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
style="@style/AppTheme.NewMaterial.Text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginTop="10dp"
android:text="@string/already_read_articles"
android:textAllCaps="true"
android:textColor="@android:color/black"
android:textStyle="bold" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingTop="14dp">
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"
android:gravity="center"
android:orientation="vertical" android:orientation="vertical"
android:padding="16dp" android:padding="15dp">
android:visibility="@{viewModel.mtbColt == null || viewModel.mtbColt.mtbColr.size() == 0 ? View.VISIBLE : View.GONE}">
<androidx.appcompat.widget.AppCompatImageView <androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_info_78dp"
android:tint="@color/empty_view_gray" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content">
android:gravity="center"
android:text="@string/empty_rows_in_mtbcolt" <androidx.constraintlayout.widget.Guideline
android:textColor="@color/empty_view_gray" android:id="@+id/guideline0"
android:textSize="20sp" /> android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.40" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:text="@string/number_text"
android:textColor="@android:color/black"
app:layout_constraintEnd_toStartOf="@+id/guideline0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="0dp"
android:layout_height="0dp"
android:visibility="@{viewModel.mtbColt != null ? View.VISIBLE : View.GONE}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/guideline0"
app:layout_constraintTop_toTopOf="parent">
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{viewModel.mtbColt.numCollo.toString()}"
tools:text="TextView" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#57535D"
android:layout_marginStart="4dp"
android:text="(serie: " />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#57535D"
android:text="@{viewModel.mtbColt.serCollo}"
android:textStyle="bold"
tools:text="TextView" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#57535D"
android:text=")" />
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.40" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:text="@string/date_text"
android:textColor="@android:color/black"
app:layout_constraintEnd_toStartOf="@+id/guideline1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="0dp"
android:layout_height="0dp"
android:text="@{viewModel.mtbColt.dataColloHumanLong}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/guideline1"
app:layout_constraintTop_toTopOf="parent"
tools:text="TextView" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.40" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/articoli_in_collo_details_posizione"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:text="@string/position_text"
android:textColor="@android:color/black"
app:layout_constraintEnd_toStartOf="@+id/guideline2"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="0dp"
android:layout_height="0dp"
android:text="@{viewModel.mtbColt.posizione}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/guideline2"
app:layout_constraintTop_toTopOf="parent"
tools:text="TextView" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.40" />
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:text="@string/prepared_by_text"
android:textColor="@android:color/black"
app:layout_constraintEnd_toStartOf="@+id/guideline3"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="0dp"
android:layout_height="0dp"
android:text="@{viewModel.mtbColt.preparatoDa}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/guideline3"
app:layout_constraintTop_toTopOf="parent"
tools:text="TextView" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.40" />
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:text="@string/customer"
android:textColor="@android:color/black"
app:layout_constraintEnd_toStartOf="@+id/guideline4"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="0dp"
android:layout_height="0dp"
android:text="@{viewModel.mtbColt.ragSocCliente}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/guideline4"
app:layout_constraintTop_toTopOf="parent"
tools:text="TextView" />
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout> </LinearLayout>
<androidx.recyclerview.widget.RecyclerView </LinearLayout>
android:id="@+id/mtb_colr_recycler_view"
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginTop="24dp"
android:background="#ededed" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
style="@style/AppTheme.NewMaterial.Text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginTop="10dp"
android:text="@string/already_read_articles"
android:textAllCaps="true"
android:textColor="@android:color/black"
android:textStyle="bold" />
<LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:clickable="true" android:orientation="vertical"
android:focusable="true" android:paddingTop="14dp">
app:dividerThickness="0.5dp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"
android:gravity="center"
android:orientation="vertical"
android:padding="16dp"
android:visibility="@{viewModel.mtbColt == null || viewModel.mtbColt.mtbColr.size() == 0 ? View.VISIBLE : View.GONE}">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_info_78dp"
android:tint="@color/empty_view_gray" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/empty_rows_in_mtbcolt"
android:textColor="@color/empty_view_gray"
android:textSize="20sp" />
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/mtb_colr_recycler_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clickable="true"
android:focusable="true"
app:dividerThickness="0.5dp" />
</LinearLayout>
</LinearLayout> </LinearLayout>
</LinearLayout>
</androidx.appcompat.widget.LinearLayoutCompat> </androidx.appcompat.widget.LinearLayoutCompat>
@ -390,9 +455,9 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="#99000000" android:background="#99000000"
android:visibility="gone"
android:clickable="true" android:clickable="true"
android:focusable="true"/> android:focusable="true"
android:visibility="gone" />
<it.integry.integrywmsnative.view.bottom_sheet__mtb_colr_edit.BottomSheetMtbColrEditView <it.integry.integrywmsnative.view.bottom_sheet__mtb_colr_edit.BottomSheetMtbColrEditView
android:id="@+id/bottom_sheet__mtb_colr_edit" android:id="@+id/bottom_sheet__mtb_colr_edit"

View File

@ -65,7 +65,8 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_alignParentEnd="true" android:layout_alignParentEnd="true"
android:background="@drawable/badge2_round_corner" android:background="@drawable/badge_round_corner"
android:backgroundTint="@color/orange_600"
android:paddingStart="6dp" android:paddingStart="6dp"
android:paddingEnd="6dp" android:paddingEnd="6dp"
android:text="@{UtilityNumber.decimalToString(mtbColr.qtaCol) + mtbColr.mtbAart.untMis}" android:text="@{UtilityNumber.decimalToString(mtbColr.qtaCol) + mtbColr.mtbAart.untMis}"
@ -117,7 +118,8 @@
style="@style/AppTheme.NewMaterial.Text.Small" style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="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:gravity="center"
android:paddingLeft="6dp" android:paddingLeft="6dp"
android:paddingTop="2dp" android:paddingTop="2dp"
@ -146,7 +148,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="8dp" android:layout_marginTop="8dp"
android:background="@drawable/badge1_round_corner" android:background="@drawable/badge_round_corner"
android:backgroundTint="@color/green_600" android:backgroundTint="@color/green_600"
android:orientation="horizontal" android:orientation="horizontal"
android:padding="2dp"> android:padding="2dp">
@ -154,7 +156,7 @@
<androidx.appcompat.widget.LinearLayoutCompat <androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@drawable/badge1_round_corner" android:background="@drawable/badge_round_corner"
android:backgroundTint="@android:color/white" android:backgroundTint="@android:color/white"
android:orientation="horizontal" android:orientation="horizontal"
android:padding="0dp"> android:padding="0dp">

View File

@ -20,7 +20,7 @@
android:id="@+id/title_text" android:id="@+id/title_text"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
style="@style/TextViewMaterial.DialogTitle" style="@style/TextViewMaterial.Dialog.HeadlineText"
android:text="@string/customer" android:text="@string/customer"
android:gravity="center_horizontal"/> android:gravity="center_horizontal"/>

View File

@ -20,7 +20,7 @@
android:id="@+id/title_text" android:id="@+id/title_text"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
style="@style/TextViewMaterial.DialogTitle" style="@style/TextViewMaterial.Dialog.HeadlineText"
android:text="@string/recipient" android:text="@string/recipient"
android:gravity="center_horizontal"/> android:gravity="center_horizontal"/>

View File

@ -49,7 +49,7 @@
android:id="@+id/title_text" android:id="@+id/title_text"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
style="@style/TextViewMaterial.DialogTitle" style="@style/TextViewMaterial.Dialog.HeadlineText"
android:text="@string/placement" android:text="@string/placement"
android:gravity="center_horizontal"/> android:gravity="center_horizontal"/>

View File

@ -62,7 +62,7 @@
android:id="@+id/title_text" android:id="@+id/title_text"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
style="@style/TextViewMaterial.DialogTitle" style="@style/TextViewMaterial.Dialog.HeadlineText"
android:text="@string/production_line" android:text="@string/production_line"
android:gravity="center_horizontal"/> android:gravity="center_horizontal"/>

View File

@ -50,7 +50,7 @@
android:id="@+id/title_text" android:id="@+id/title_text"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
style="@style/TextViewMaterial.DialogTitle" style="@style/TextViewMaterial.Dialog.HeadlineText"
android:text="@string/placement" android:text="@string/placement"
android:gravity="center_horizontal"/> android:gravity="center_horizontal"/>

View File

@ -40,7 +40,7 @@
<TextView <TextView
android:id="@+id/title_text" android:id="@+id/title_text"
style="@style/TextViewMaterial.DialogTitle" style="@style/TextViewMaterial.Dialog.HeadlineText"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:gravity="center_horizontal" android:gravity="center_horizontal"
@ -111,7 +111,7 @@
<!--android:layout_width="match_parent"--> <!--android:layout_width="match_parent"-->
<!--android:layout_height="wrap_content"--> <!--android:layout_height="wrap_content"-->
<!--android:text="@string/action_print"--> <!--android:text="@string/action_print"-->
<!--style="@style/TextViewMaterial.DialogTitle"--> <!--style="@style/TextViewMaterial.Dialog.HeadlineText"-->
<!--android:gravity="center_horizontal"/>--> <!--android:gravity="center_horizontal"/>-->

View File

@ -0,0 +1,118 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="view"
type="it.integry.integrywmsnative.view.dialogs.ask_should_versamento_automatico_ul.DialogAskShouldVersamentoAutomaticoULView" />
</data>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:orientation="vertical"
app:cardCornerRadius="12dp"
app:cardElevation="0dp">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/light_blue_300"
android:gravity="center_horizontal">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="24dp"
android:src="@drawable/ic_error_white_24dp" />
</RelativeLayout>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingLeft="24dp"
android:paddingTop="24dp"
android:paddingRight="24dp">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/title_text"
style="@style/TextViewMaterial.Dialog.HeadlineText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:text="@string/versamento_automatico" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/description_text"
style="@style/TextViewMaterial"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"
android:gravity="left"
android:text="@string/ask_should_versamento_automatico" />
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp">
<androidx.constraintlayout.widget.Guideline
android:id="@+id/center_buttons_guideline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.5" />
<com.google.android.material.button.MaterialButton
android:id="@+id/button_abort"
style="@style/Button.PrimaryOutline"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:text="@string/no"
app:layout_constraintEnd_toStartOf="@id/center_buttons_guideline"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:strokeColor="@color/colorPrimary"
android:onClick="@{() -> view.abort()}" />
<com.google.android.material.button.MaterialButton
android:id="@+id/button_confirm"
style="@style/Button.PrimaryFull"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:text="@string/yes"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@id/center_buttons_guideline"
app:layout_constraintTop_toTopOf="parent"
android:onClick="@{() -> view.confirm()}"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.cardview.widget.CardView>
</layout>

View File

@ -55,7 +55,7 @@
<TextView <TextView
android:id="@+id/title_text" android:id="@+id/title_text"
style="@style/TextViewMaterial.DialogTitle" style="@style/TextViewMaterial.Dialog.HeadlineText"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:gravity="center_horizontal" android:gravity="center_horizontal"

View File

@ -25,7 +25,7 @@
android:id="@+id/title_text" android:id="@+id/title_text"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
style="@style/TextViewMaterial.DialogTitle" style="@style/TextViewMaterial.Dialog.HeadlineText"
android:text="@string/basket" android:text="@string/basket"
android:gravity="center_horizontal"/> android:gravity="center_horizontal"/>

View File

@ -73,7 +73,8 @@
android:layout_alignParentEnd="true" android:layout_alignParentEnd="true"
android:paddingStart="6dp" android:paddingStart="6dp"
android:paddingEnd="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:textColor="@android:color/white"
style="@style/AppTheme.NewMaterial.Text.Small" style="@style/AppTheme.NewMaterial.Text.Small"
tools:text="PESO KG" /> tools:text="PESO KG" />
@ -119,7 +120,8 @@
android:id="@+id/qta_textview" android:id="@+id/qta_textview"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="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:gravity="center"
android:paddingLeft="6dp" android:paddingLeft="6dp"
android:paddingTop="2dp" android:paddingTop="2dp"

View File

@ -42,7 +42,8 @@
android:gravity="center" android:gravity="center"
android:text="@{mtbColt.numCollo.toString()}" android:text="@{mtbColt.numCollo.toString()}"
tools:text="22222" 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:textColor="@android:color/white"
android:paddingTop="2dp" android:paddingTop="2dp"
android:paddingBottom="2dp" android:paddingBottom="2dp"

View File

@ -45,7 +45,7 @@
android:id="@+id/title_text" android:id="@+id/title_text"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
style="@style/TextViewMaterial.DialogTitle" style="@style/TextViewMaterial.Dialog.HeadlineText"
android:text="@string/dialog_choose_art_from_lista_art" android:text="@string/dialog_choose_art_from_lista_art"
android:gravity="center_horizontal"/> android:gravity="center_horizontal"/>

View File

@ -73,7 +73,8 @@
android:textStyle="bold" android:textStyle="bold"
android:paddingStart="6dp" android:paddingStart="6dp"
android:paddingEnd="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:textColor="@android:color/white"
android:layout_alignParentEnd="true" android:layout_alignParentEnd="true"
style="@style/AppTheme.NewMaterial.Text.Small" style="@style/AppTheme.NewMaterial.Text.Small"
@ -120,7 +121,8 @@
android:id="@+id/qta_textview" android:id="@+id/qta_textview"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="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:gravity="center"
android:paddingLeft="6dp" android:paddingLeft="6dp"
android:paddingTop="2dp" android:paddingTop="2dp"

View File

@ -69,7 +69,7 @@
<TextView <TextView
android:id="@+id/title_text" android:id="@+id/title_text"
style="@style/TextViewMaterial.DialogTitle" style="@style/TextViewMaterial.Dialog.HeadlineText"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:gravity="center_horizontal" android:gravity="center_horizontal"

View File

@ -62,7 +62,7 @@
<TextView <TextView
android:id="@+id/title_text" android:id="@+id/title_text"
style="@style/TextViewMaterial.DialogTitle" style="@style/TextViewMaterial.Dialog.HeadlineText"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:gravity="center_horizontal" android:gravity="center_horizontal"

View File

@ -1,34 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingLeft="12dp"
android:paddingRight="12dp">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/dialog_content_main_message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textColor="@android:color/black"
android:textSize="18sp"
android:text="Message text here"/>
<LinearLayout
android:id="@+id/dialog_content_hashmap"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingLeft="12dp"
android:paddingRight="12dp"
android:layout_marginTop="12dp">
</LinearLayout>
</LinearLayout>

View File

@ -1,40 +0,0 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:padding="24dp"
android:id="@+id/llsubhead"
>
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/title_icon"
android:layout_width="76dp"
android:layout_height="76dp"
android:layout_gravity="center"
android:src="@drawable/ic_info_78dp"
android:tint="@color/green_500"/>
<TextView
android:id="@+id/title_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:layout_weight="1"
android:text="Exemption Sub Head"
android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium"
android:gravity="center"
android:textColor="@android:color/black"
android:textSize="24sp"/>
<View
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="#AAA"/>
</LinearLayout>
</LinearLayout>

View File

@ -38,7 +38,7 @@
<TextView <TextView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
style="@style/TextViewMaterial.DialogTitle" style="@style/TextViewMaterial.Dialog.HeadlineText"
android:text="Si è verificato un problema" android:text="Si è verificato un problema"
android:gravity="center_horizontal"/> android:gravity="center_horizontal"/>

View File

@ -48,7 +48,7 @@
android:id="@+id/title_text" android:id="@+id/title_text"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
style="@style/TextViewMaterial.DialogTitle" style="@style/TextViewMaterial.Dialog.HeadlineText"
tools:text="Insert here" tools:text="Insert here"
android:gravity="center_horizontal"/> android:gravity="center_horizontal"/>

View File

@ -56,7 +56,7 @@
android:id="@+id/title_text" android:id="@+id/title_text"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
style="@style/TextViewMaterial.DialogTitle" style="@style/TextViewMaterial.Dialog.HeadlineText"
android:text="@string/action_insert_weight" android:text="@string/action_insert_weight"
android:gravity="center_horizontal"/> android:gravity="center_horizontal"/>

View File

@ -56,7 +56,7 @@
android:id="@+id/title_text" android:id="@+id/title_text"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
style="@style/TextViewMaterial.DialogTitle" style="@style/TextViewMaterial.Dialog.HeadlineText"
android:text="@string/action_insert_quantity" android:text="@string/action_insert_quantity"
android:gravity="center_horizontal"/> android:gravity="center_horizontal"/>

View File

@ -205,7 +205,7 @@
android:layout_gravity="center" android:layout_gravity="center"
android:layout_marginEnd="2dp" android:layout_marginEnd="2dp"
android:layout_weight="0.5" android:layout_weight="0.5"
android:background="@drawable/badge_gray_round_corner" android:background="@drawable/badge_round_corner"
android:backgroundTint="@color/green_600" android:backgroundTint="@color/green_600"
android:orientation="vertical" android:orientation="vertical"
android:padding="8dp" android:padding="8dp"
@ -304,7 +304,7 @@
android:layout_gravity="center" android:layout_gravity="center"
android:layout_marginStart="2dp" android:layout_marginStart="2dp"
android:layout_weight="0.5" android:layout_weight="0.5"
android:background="@drawable/badge_gray_round_corner" android:background="@drawable/badge_round_corner"
android:backgroundTint="@color/colorPrimary" android:backgroundTint="@color/colorPrimary"
android:orientation="vertical" android:orientation="vertical"
android:padding="8dp" android:padding="8dp"

View File

@ -1,131 +1,89 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<layout xmlns:app="http://schemas.android.com/apk/res-auto"> <layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data> <data>
<import type="android.text.Html" /> <import type="android.text.Html" />
<import type="it.integry.integrywmsnative.R" /> <import type="it.integry.integrywmsnative.R" />
<variable <variable
name="mContext" name="mContext"
type="android.content.Context" /> type="android.content.Context" />
</data> </data>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" <androidx.cardview.widget.CardView
android:orientation="vertical" android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center_horizontal" android:layout_gravity="center_horizontal"
app:cardCornerRadius="12dp" android:orientation="vertical"
app:cardBackgroundColor="@android:color/transparent"
app:cardCornerRadius="24dp"
app:cardElevation="0dp"> app:cardElevation="0dp">
<LinearLayout <androidx.cardview.widget.CardView
android:id="@+id/base"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical"> android:layout_gravity="center_horizontal"
android:orientation="vertical"
app:cardBackgroundColor="@color/light_blue_300"
app:cardCornerRadius="24dp"
app:cardElevation="0dp">
<RelativeLayout <androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@color/light_blue_300" android:layout_margin="4dp"
android:gravity="center_horizontal"> android:padding="24dp"
android:background="@drawable/dialog_card_child_bg">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_error_white_24dp"
android:layout_margin="24dp"/>
</RelativeLayout>
<androidx.appcompat.widget.AppCompatTextView
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingTop="24dp"
android:paddingLeft="24dp"
android:paddingRight="24dp">
<TextView
android:id="@+id/title_text" android:id="@+id/title_text"
style="@style/TextViewMaterial.Dialog.HeadlineText"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
style="@style/TextViewMaterial.DialogTitle" android:gravity="center_horizontal"
android:text="@string/lu_info" android:text="@string/lu_info"
android:gravity="center_horizontal"/> app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
<!--<TextView--> app:layout_constraintTop_toTopOf="parent" />
<!--android:id="@+id/description_text"-->
<!--android:layout_width="match_parent"-->
<!--android:layout_height="wrap_content"-->
<!--style="@style/TextViewMaterial"-->
<!--android:text="@string/dialog_message_additional_notes"-->
<!--android:gravity="left"-->
<!--android:layout_marginTop="16dp"-->
<!--android:layout_marginBottom="16dp" />-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <com.google.android.material.textfield.TextInputLayout
android:orientation="vertical" android:id="@+id/level_number_layout"
style="@style/TextInputLayout.OutlinePrimary"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="16dp"> android:layout_marginTop="16dp"
app:layout_constraintTop_toBottomOf="@id/title_text">
<com.google.android.material.textfield.TextInputLayout <com.google.android.material.textfield.TextInputEditText
android:id="@+id/level_number_layout" android:id="@+id/additional_notes_text"
style="@style/TextInputEditText.OutlinePrimary"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginBottom="16dp" android:hint="@string/hint_additional_notes"
style="@style/TextInputLayout.OutlinePrimary"> android:inputType="text" />
<com.google.android.material.textfield.TextInputEditText </com.google.android.material.textfield.TextInputLayout>
android:id="@+id/additional_notes_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/hint_additional_notes"
android:inputType="text"
style="@style/TextInputEditText.OutlinePrimary"/>
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.button.MaterialButton
<LinearLayout android:id="@+id/button_confirm"
android:layout_width="match_parent" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="wrap_content"
android:orientation="horizontal" android:text="@string/confirm"
android:paddingTop="8dp" android:layout_marginTop="24dp"
android:paddingBottom="8dp" app:layout_constraintEnd_toEndOf="parent"
android:gravity="bottom|center_horizontal"> app:layout_constraintTop_toBottomOf="@id/level_number_layout" />
<com.google.android.material.button.MaterialButton
android:id="@+id/button_abort"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/Button.PrimaryOutline"
app:icon="@drawable/ic_clear_24dp"
app:strokeColor="@color/colorPrimary"
android:layout_marginEnd="8dp"
android:text="@string/abort"/>
<com.google.android.material.button.MaterialButton
android:id="@+id/button_confirm"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/Button.PrimaryFull"
app:icon="@drawable/ic_save_24dp"
android:text="@string/confirm"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
</androidx.cardview.widget.CardView> </androidx.cardview.widget.CardView>
</layout> </layout>

View File

@ -36,7 +36,7 @@
android:id="@+id/title_text" android:id="@+id/title_text"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
style="@style/TextViewMaterial.DialogTitle" style="@style/TextViewMaterial.Dialog.HeadlineText"
android:text="@string/dialog_vendita_filtro_avanzato" android:text="@string/dialog_vendita_filtro_avanzato"
android:gravity="center_horizontal" android:gravity="center_horizontal"
android:layout_marginBottom="12dp"/> android:layout_marginBottom="12dp"/>

View File

@ -31,7 +31,7 @@
android:id="@+id/title_text" android:id="@+id/title_text"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
style="@style/TextViewMaterial.DialogTitle" style="@style/TextViewMaterial.Dialog.HeadlineText"
android:text="@string/loading" android:text="@string/loading"
android:gravity="center_horizontal"/> android:gravity="center_horizontal"/>

View File

@ -208,7 +208,7 @@
android:layout_gravity="center" android:layout_gravity="center"
android:layout_marginEnd="2dp" android:layout_marginEnd="2dp"
android:layout_weight="0.5" android:layout_weight="0.5"
android:background="@drawable/badge_gray_round_corner" android:background="@drawable/badge_round_corner"
android:backgroundTint="@color/green_600" android:backgroundTint="@color/green_600"
android:orientation="vertical" android:orientation="vertical"
android:padding="8dp"> android:padding="8dp">
@ -307,7 +307,7 @@
android:layout_gravity="center" android:layout_gravity="center"
android:layout_marginStart="2dp" android:layout_marginStart="2dp"
android:layout_weight="0.5" android:layout_weight="0.5"
android:background="@drawable/badge_gray_round_corner" android:background="@drawable/badge_round_corner"
android:backgroundTint="@color/colorPrimary" android:backgroundTint="@color/colorPrimary"
android:orientation="vertical" android:orientation="vertical"
android:padding="8dp" android:padding="8dp"

View File

@ -23,7 +23,7 @@
<androidx.appcompat.widget.AppCompatTextView <androidx.appcompat.widget.AppCompatTextView
android:id="@+id/title_text" android:id="@+id/title_text"
style="@style/TextViewMaterial.DialogTitle" style="@style/TextViewMaterial.Dialog.HeadlineText"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginBottom="8dp" android:layout_marginBottom="8dp"
@ -37,7 +37,7 @@
android:orientation="vertical"> android:orientation="vertical">
<!-- <androidx.appcompat.widget.AppCompatTextView--> <!-- <androidx.appcompat.widget.AppCompatTextView-->
<!-- style="@style/TextViewMaterial.DialogTitle"--> <!-- style="@style/TextViewMaterial.Dialog.HeadlineText"-->
<!-- android:layout_width="match_parent"--> <!-- android:layout_width="match_parent"-->
<!-- android:layout_height="wrap_content"--> <!-- android:layout_height="wrap_content"-->
<!-- android:gravity="center_horizontal"--> <!-- android:gravity="center_horizontal"-->

View File

@ -10,13 +10,13 @@
app:cardCornerRadius="12dp" app:cardCornerRadius="12dp"
app:cardElevation="0dp"> app:cardElevation="0dp">
<LinearLayout <androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical"> android:orientation="vertical">
<LinearLayout <androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical" android:orientation="vertical"
@ -29,11 +29,11 @@
android:id="@+id/title_text" android:id="@+id/title_text"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
style="@style/TextViewMaterial.DialogTitle" style="@style/TextViewMaterial.Dialog.HeadlineText"
android:text="@string/extra_item" android:text="@string/extra_item"
android:gravity="center_horizontal"/> android:gravity="center_horizontal"/>
<LinearLayout <androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center_horizontal" android:layout_gravity="center_horizontal"
@ -57,7 +57,7 @@
android:gravity="center_horizontal" android:gravity="center_horizontal"
style="@style/AppTheme.NewMaterial.Text" style="@style/AppTheme.NewMaterial.Text"
android:text="@string/scan_item"/> android:text="@string/scan_item"/>
</LinearLayout> </androidx.appcompat.widget.LinearLayoutCompat>
@ -72,9 +72,9 @@
android:layout_gravity="center_horizontal" android:layout_gravity="center_horizontal"
android:text="@string/abort"/> android:text="@string/abort"/>
</LinearLayout> </androidx.appcompat.widget.LinearLayoutCompat>
</LinearLayout> </androidx.appcompat.widget.LinearLayoutCompat>
</androidx.cardview.widget.CardView> </androidx.cardview.widget.CardView>

View File

@ -45,7 +45,7 @@
android:id="@+id/title_text" android:id="@+id/title_text"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
style="@style/TextViewMaterial.DialogTitle" style="@style/TextViewMaterial.Dialog.HeadlineText"
android:text="@string/title_open_grid_pv" android:text="@string/title_open_grid_pv"
android:gravity="center_horizontal"/> android:gravity="center_horizontal"/>

View File

@ -62,7 +62,7 @@
android:id="@+id/title_text" android:id="@+id/title_text"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
style="@style/TextViewMaterial.DialogTitle" style="@style/TextViewMaterial.Dialog.HeadlineText"
android:text="@string/title_open_lu" android:text="@string/title_open_lu"
android:gravity="center_horizontal"/> android:gravity="center_horizontal"/>

Some files were not shown because too many files have changed in this diff Show More