Completata distribuzione custom per VG

This commit is contained in:
2019-02-13 18:36:21 +01:00
parent fcf1b03172
commit 80fd15eb8a
56 changed files with 703 additions and 432 deletions

View File

@@ -12,9 +12,9 @@
android:name=".MainApplication"
android:allowBackup="true"
android:hardwareAccelerated="true"
android:icon="@drawable/integry_round_icon"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@drawable/integry_round_icon"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:usesCleartextTraffic="true"
android:theme="@style/AppTheme">

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

View File

@@ -21,7 +21,6 @@ import android.view.View;
import androidx.fragment.app.FragmentTransaction;
import it.integry.integrywmsnative.core.REST.watcher.ServerStatusChecker;
import it.integry.integrywmsnative.core.class_router.BaseRouter;
import it.integry.integrywmsnative.core.interfaces.IFilterableFragment;
import it.integry.integrywmsnative.core.interfaces.IPoppableActivity;
import it.integry.integrywmsnative.core.interfaces.IScrollableFragment;

View File

@@ -39,6 +39,8 @@ public class RESTBuilder {
clientBuilder.readTimeout(timeout, TimeUnit.SECONDS);
clientBuilder.writeTimeout(timeout, TimeUnit.SECONDS);
clientBuilder.retryOnConnectionFailure(true);
if(addInterceptors) clientBuilder.addInterceptor(new HttpInterceptor());
OkHttpClient client = clientBuilder.build();

View File

@@ -1,95 +0,0 @@
package it.integry.integrywmsnative.core.class_router;
import android.content.Context;
import android.util.Pair;
import com.orhanobut.logger.Logger;
import java.util.ArrayList;
import java.util.List;
import it.integry.integrywmsnative.core.class_router.exceptions.MethodParameterTypeNotMatchException;
import it.integry.integrywmsnative.core.class_router.exceptions.MethodParamsCountException;
import it.integry.integrywmsnative.core.class_router.exceptions.MethodPathAlreadyDeclaredException;
import it.integry.integrywmsnative.core.class_router.exceptions.MethodPathNotRegisteredException;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
public class BaseRouter {
public enum PATH {
DISTRIBUZIONE_COLLO_V
}
private static Context context;
private static List<Pair<PATH, MethodDTO>> mRoutePaths = new ArrayList<>();
public static void init(Context context) {
BaseRouter.context = context;
}
private static boolean checkIfMethodExists(PATH path) {
boolean methodAlreadyDeclared = false;
for(int i = 0; i < mRoutePaths.size() && !methodAlreadyDeclared; i++) {
if(mRoutePaths.get(i).first == path) methodAlreadyDeclared = true;
}
return methodAlreadyDeclared;
}
private static int getMethodIndex(PATH path) {
for(int i = 0; i < mRoutePaths.size(); i++) {
if(mRoutePaths.get(i).first == path) return i;
}
return -1;
}
public static void registerPath(PATH path, MethodDTO method) throws MethodPathAlreadyDeclaredException {
if(checkIfMethodExists(path)) {
throw new MethodPathAlreadyDeclaredException(path);
}
mRoutePaths.add(new Pair<>(path, method));
}
public static void deregisterPath(PATH path) {
if(checkIfMethodExists(path)) {
mRoutePaths.remove(getMethodIndex(path));
}
}
public static void invokePath(PATH path, Object... params) {
try {
if (!checkIfMethodExists(path)) {
throw new MethodPathNotRegisteredException(path);
}
MethodDTO methodDTO = mRoutePaths.get(getMethodIndex(path)).second;
Class[] methodParameters = methodDTO.getMethod().getParameterTypes();
if (methodParameters.length != params.length) {
throw new MethodParamsCountException(path);
}
for (int i = 0; i < params.length; i++) {
if (params[i] != null && params[i].getClass() != methodParameters[i] && methodParameters[i].cast(params[i]) == null) {
throw new MethodParameterTypeNotMatchException(path, params[i].getClass().getCanonicalName(), methodParameters[i].getCanonicalName());
}
}
final Object newInstance = methodDTO.getMethod().getDeclaringClass().newInstance();
methodDTO.getMethod().invoke(newInstance, params);
} catch (Exception ex) {
UtilityExceptions.defaultException(context, ex, true);
}
}
}

View File

@@ -0,0 +1,80 @@
package it.integry.integrywmsnative.core.class_router;
import android.content.Context;
import android.util.Pair;
import java.util.ArrayList;
import java.util.List;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
public class ClassRouter {
public enum PATH {
FILTRO_ORDINI_VENDITA,
ORDINI_VENDITA
}
private static Context context;
private static List<Pair<PATH, Class>> mRouteClasses = new ArrayList<>();
public static void init(Context context) {
ClassRouter.context = context;
}
private static boolean checkIClassExists(PATH path) {
boolean methodAlreadyDeclared = false;
for(int i = 0; i < mRouteClasses.size() && !methodAlreadyDeclared; i++) {
if(mRouteClasses.get(i).first == path) methodAlreadyDeclared = true;
}
return methodAlreadyDeclared;
}
private static int getClassIndex(PATH path) {
for(int i = 0; i < mRouteClasses.size(); i++) {
if(mRouteClasses.get(i).first == path) return i;
}
return -1;
}
public static void registerPath(PATH path, Class clazz) {
if(checkIClassExists(path)) {
//throw new MethodPathAlreadyDeclaredException(path);
}
mRouteClasses.add(new Pair<>(path, clazz));
}
public static void deregisterPath(PATH path) {
if(checkIClassExists(path)) {
mRouteClasses.remove(getClassIndex(path));
}
}
public static <T> T getIstance(PATH path) {
try {
if (!checkIClassExists(path)) {
//throw new MethodPathNotRegisteredException(path);
}
Class clazz = mRouteClasses.get(getClassIndex(path)).second;
return (T)clazz.newInstance();
} catch (Exception ex) {
UtilityExceptions.defaultException(context, ex, true);
}
return null;
}
}

View File

@@ -1,29 +0,0 @@
package it.integry.integrywmsnative.core.class_router;
import java.lang.reflect.Method;
public class MethodDTO {
private Method method;
public Method getMethod() {
return method;
}
public MethodDTO setMethod(Method method) {
this.method = method;
return this;
}
public static MethodDTO fromName(Class clazz, String methodName) {
Method[] methods = clazz.getMethods();
for (Method m : methods) {
if (methodName.equals(m.getName())) {
return new MethodDTO().setMethod(m);
}
}
return null;
}
}

View File

@@ -1,11 +0,0 @@
package it.integry.integrywmsnative.core.class_router.exceptions;
import it.integry.integrywmsnative.core.class_router.BaseRouter;
public class MethodParameterTypeNotMatchException extends Exception{
public MethodParameterTypeNotMatchException(BaseRouter.PATH path, String type1, String type2) {
super(String.format("The given parameter (%s) to %s don't match the required type %s", type1, path.toString(), type2));
}
}

View File

@@ -1,11 +0,0 @@
package it.integry.integrywmsnative.core.class_router.exceptions;
import it.integry.integrywmsnative.core.class_router.BaseRouter;
public class MethodParamsCountException extends Exception {
public MethodParamsCountException(BaseRouter.PATH path) {
super(String.format("Given parameters to path %s do not match the real method declaration", path.toString()));
}
}

View File

@@ -1,13 +0,0 @@
package it.integry.integrywmsnative.core.class_router.exceptions;
import it.integry.integrywmsnative.core.class_router.BaseRouter;
public class MethodPathAlreadyDeclaredException extends Exception {
public MethodPathAlreadyDeclaredException(BaseRouter.PATH path) {
super(String.format("Method %s is already declared in this scope", path.toString()));
}
}

View File

@@ -1,11 +0,0 @@
package it.integry.integrywmsnative.core.class_router.exceptions;
import it.integry.integrywmsnative.core.class_router.BaseRouter;
public class MethodPathNotRegisteredException extends Exception{
public MethodPathNotRegisteredException(BaseRouter.PATH path){
super(String.format("Method path %s isn't registered at the moment. Please call BaseRouter.registerPath before call invoke.", path.toString()));
}
}

View File

@@ -0,0 +1,7 @@
package it.integry.integrywmsnative.core.class_router.interfaces;
public interface IFiltroOrdiniVendita {
boolean shoudShowCodMdepFilter();
}

View File

@@ -6,9 +6,10 @@ import java.util.List;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaGroupedInevasoDTO;
public interface IOrdiniVendita {
void distribuisciCollo(ProgressDialog progress, MtbColt mtbColt, RunnableArgs<List<MtbColt>> onComplete, RunnableArgs<Exception> onFailed);
void distribuisciCollo(ProgressDialog progress, MtbColt mtbColt, List<OrdineVenditaGroupedInevasoDTO> testateOrdini, RunnableArgs<List<MtbColt>> onComplete, RunnableArgs<Exception> onFailed);
}

View File

@@ -2,14 +2,11 @@ package it.integry.integrywmsnative.core.context;
import android.content.Context;
import android.text.SpannableString;
import android.util.Log;
import com.orhanobut.logger.Logger;
import java.lang.reflect.Method;
import androidx.appcompat.app.AppCompatActivity;
import it.integry.integrywmsnative.core.class_router.BaseRouter;
import it.integry.integrywmsnative.core.class_router.ClassRouter;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.view.dialogs.DialogSimpleMessageHelper;
@@ -41,7 +38,7 @@ public class MainContext {
}
private void initReflections() {
BaseRouter.init(mContext);
ClassRouter.init(mContext);
try {
String initMethod = "init";

View File

@@ -35,6 +35,7 @@ import it.integry.integrywmsnative.core.interfaces.IFilterableFragment;
import it.integry.integrywmsnative.core.interfaces.IScrollableFragment;
import it.integry.integrywmsnative.core.interfaces.ISelectAllFragment;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityToast;
@@ -211,6 +212,7 @@ public class MainVenditaFragment extends Fragment implements ITitledFragment, IS
rigaOrdine
.setData(ord.getDataOrdS())
.setNumero(ord.getNumOrd())
.setCodMdep(ord.getCodMdep())
.setCodAnagOrd(ord.getCodAnagOrd())
.setCodAnagClie(groupedOrdine.codAnagClie)
.setRagSocOrd(ord.getRagSocOrd())
@@ -328,47 +330,53 @@ public class MainVenditaFragment extends Fragment implements ITitledFragment, IS
final ProgressDialog progress = ProgressDialog.show(getActivity(), getText(R.string.waiting),
getText(R.string.loading) + " ...", true);
mHelper.retrievePickingList(barcodes, dataCons, new VenditaHelper.ILoadPickingListCallback() {
@Override
public void onLoadSuccess(final List<PickingObjectDTO> ordini) {
final String finalDataCons = dataCons;
checkSelectedOrders(selectedOrders, () -> {
mHelper.retrievePickingList(barcodes, finalDataCons, new VenditaHelper.ILoadPickingListCallback() {
@Override
public void onLoadSuccess(final List<PickingObjectDTO> ordini) {
mHelper.getBancaliVenditaGiaRegistrati(selectedOrders, mtbColtList -> {
progress.dismiss();
List<String> codMarts = Stream.of(ordini)
.distinctBy(PickingObjectDTO::getCodMart)
.map(PickingObjectDTO::getCodMart)
.toList();
int alreadyRegisteredUL = mtbColtList.size();
mHelper.getBancaliVenditaGiaRegistrati(selectedOrders, mtbColtList -> {
progress.dismiss();
List<String> codMarts = Stream.of(ordini)
.distinctBy(PickingObjectDTO::getCodMart)
.map(PickingObjectDTO::getCodMart)
.toList();
DialogSimpleMessageHelper.makeInfoDialog(getActivity(),
getText(R.string.orders).toString(),
Html.fromHtml(String.format(getActivity().getResources().getQuantityString(R.plurals.loaded_orders_message, barcodes.size()), barcodes.size())
+ "<br />" +
"<b>" + codMarts.size() + "</b> " + getActivity().getResources().getQuantityString(R.plurals.available_articles, codMarts.size())
+ "<br />" +
"<b>" + alreadyRegisteredUL + "</b> " + getActivity().getResources().getQuantityString(R.plurals.already_registered_lu, alreadyRegisteredUL)),
null,
() -> startVenditaActivity(ordini, selectedOrders, mtbColtList)
).show();
int alreadyRegisteredUL = mtbColtList.size();
}, ex -> UtilityExceptions.defaultException(getActivity(), ex, progress));
DialogSimpleMessageHelper.makeInfoDialog(getActivity(),
getText(R.string.orders).toString(),
Html.fromHtml(String.format(getActivity().getResources().getQuantityString(R.plurals.loaded_orders_message, barcodes.size()), barcodes.size())
+ "<br />" +
"<b>" + codMarts.size() + "</b> " + getActivity().getResources().getQuantityString(R.plurals.available_articles, codMarts.size())
+ "<br />" +
"<b>" + alreadyRegisteredUL + "</b> " + getActivity().getResources().getQuantityString(R.plurals.already_registered_lu, alreadyRegisteredUL)),
null,
() -> {
}
startVenditaActivity(ordini, selectedOrders, mtbColtList);
@Override
public void onLoadFail(Exception ex) {
UtilityExceptions.defaultException(getActivity(), ex, progress);
}
});
}).show();
}, ex -> UtilityExceptions.defaultException(getActivity(), ex, progress));
}
@Override
public void onLoadFail(Exception ex) {
UtilityExceptions.defaultException(getActivity(), ex, progress);
}
}, () -> {
progress.dismiss();
});
}
@@ -411,8 +419,45 @@ public class MainVenditaFragment extends Fragment implements ITitledFragment, IS
}).show();
}
private void startVenditaActivity(List<PickingObjectDTO> ordini, List<OrdineVenditaGroupedInevasoDTO> selectedOrders, List<MtbColt> mtbColtList) {
private void checkSelectedOrders(List<OrdineVenditaGroupedInevasoDTO> selectedOrders, Runnable onComplete, Runnable onFailed) {
if(selectedOrders != null && selectedOrders.size() > 0) {
List<OrdineVenditaGroupedInevasoDTO.Ordine> flatOrderArray = new ArrayList<>();
Stream.of(selectedOrders).forEach(x -> flatOrderArray.addAll(x.ordini));
//Definizione della gestione collo di default
List<GestioneEnum> foundGestioni = Stream.of(flatOrderArray)
.map(OrdineVenditaGroupedInevasoDTO.Ordine::getGestioneEnum)
.withoutNulls()
.distinctBy(x -> x)
.toList();
if (foundGestioni != null && foundGestioni.size() > 1) {
DialogSimpleMessageHelper.makeErrorDialog(getContext(), new SpannableString(getString(R.string.error_multiple_gest_ordv)), null, () -> {
onFailed.run();
}).show();
return;
}
//Definizione del deposito di default
List<String> foundCodMdep = Stream.of(flatOrderArray)
.map(OrdineVenditaGroupedInevasoDTO.Ordine::getCodMdep)
.withoutNulls()
.distinctBy(x -> x)
.toList();
if (foundCodMdep != null && foundCodMdep.size() > 1) {
DialogSimpleMessageHelper.makeErrorDialog(getContext(), new SpannableString(getString(R.string.error_multiple_cod_mdep_ordv)), null, () -> {
onFailed.run();
}).show();
return;
}
}
onComplete.run();
}
private void startVenditaActivity(List<PickingObjectDTO> ordini, List<OrdineVenditaGroupedInevasoDTO> selectedOrders, List<MtbColt> mtbColtList) {
Intent myIntent = new Intent(getActivity(), VenditaOrdineInevasoActivity.class);
String keyPickingList = DataCache.addItem(ordini);
@@ -425,9 +470,5 @@ public class MainVenditaFragment extends Fragment implements ITitledFragment, IS
myIntent.putExtra("keyColliRegistrati", keyColliRegistrati);
getActivity().startActivity(myIntent);
}
}

View File

@@ -7,6 +7,7 @@ import android.content.Context;
import androidx.databinding.DataBindingUtil;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
@@ -18,6 +19,8 @@ import java.util.GregorianCalendar;
import java.util.List;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.class_router.ClassRouter;
import it.integry.integrywmsnative.core.class_router.interfaces.IFiltroOrdiniVendita;
import it.integry.integrywmsnative.core.di.BindableString;
import it.integry.integrywmsnative.core.expansion.RunnableArgss;
import it.integry.integrywmsnative.core.utility.UtilityDate;
@@ -37,6 +40,7 @@ public class DialogVenditaFiltroAvanzato {
private List<OrdineVenditaInevasoDTO> currentOrderList;
private List<OrdineVenditaInevasoDTO> currentFilteredOrderList;
private Predicate<OrdineVenditaInevasoDTO> currentDepositoPredicate = null;
private Predicate<OrdineVenditaInevasoDTO> currentNumOrdsPredicate = null;
private Predicate<OrdineVenditaInevasoDTO> currentClientePredicate = null;
private Predicate<OrdineVenditaInevasoDTO> currentDataConsPredicate = null;
@@ -100,7 +104,7 @@ public class DialogVenditaFiltroAvanzato {
}
private void resetAll(DialogVenditaFiltroAvanzatoViewModel viewModel) {
viewModel.numOrds.set(null);
viewModel.deposito.set(null);
viewModel.numOrds.set(null);
viewModel.cliente.set(null);
viewModel.dataConsegna.set(null);
@@ -110,6 +114,7 @@ public class DialogVenditaFiltroAvanzato {
}
private void initView(DialogVenditaFiltroAvanzatoBinding bindings, DialogVenditaFiltroAvanzatoViewModel viewModel) {
IFiltroOrdiniVendita filtroOrdiniVendita = ClassRouter.getIstance(ClassRouter.PATH.FILTRO_ORDINI_VENDITA);
bindings.inputDataCons.setOnClickListener(view -> {
Calendar c = Calendar.getInstance();
@@ -132,6 +137,22 @@ public class DialogVenditaFiltroAvanzato {
datePickerDialog.show();
});
bindings.inputCodMdep.setVisibility(filtroOrdiniVendita.shoudShowCodMdepFilter() ? View.VISIBLE : View.GONE);
bindings.inputCodMdep.setOnClickListener(view -> {
AlertDialog.Builder builderSingle = new AlertDialog.Builder(currentContext);
builderSingle.setTitle(R.string.deposit);
final ArrayAdapter<String> arrayAdapter = new ArrayAdapter(currentContext, android.R.layout.select_dialog_singlechoice);
arrayAdapter.addAll(getAvailableCodMdeps());
builderSingle.setAdapter(arrayAdapter, (dialogInterface, i) -> {
viewModel.deposito.set(arrayAdapter.getItem(i));
});
builderSingle.show();
});
bindings.inputTermCons.setOnClickListener(view -> {
AlertDialog.Builder builderSingle = new AlertDialog.Builder(currentContext);
@@ -187,7 +208,6 @@ public class DialogVenditaFiltroAvanzato {
BindableString.registerListener(viewModel.numOrds, value -> {
if(UtilityString.isNullOrEmpty(value)) currentNumOrdsPredicate = null;
else {
//String numOrdTrimmed = value.replaceAll(" ", "");
String[] numOrdsSplitted = value.split("[,\\ ]");
@@ -226,6 +246,18 @@ public class DialogVenditaFiltroAvanzato {
viewModel.cliente.refresh();
BindableString.resetListeners(viewModel.deposito);
BindableString.registerListener(viewModel.deposito, value -> {
if(UtilityString.isNullOrEmpty(value)) currentDepositoPredicate = null;
else {
currentDepositoPredicate = o -> o.getCodMdep().toLowerCase().contains(value);
}
if(!firstInit) refreshList();
});
viewModel.deposito.refresh();
BindableString.resetListeners(viewModel.dataConsegna);
@@ -284,8 +316,8 @@ public class DialogVenditaFiltroAvanzato {
}
private List<String> getAvailableTermCons() {
if(currentNumOrdsPredicate == null && currentClientePredicate == null && currentDataConsPredicate == null && currentAutomezzoPredicate == null && currentVettorePredicate == null){
private List<String> getAvailableCodMdeps() {
if(currentNumOrdsPredicate == null && currentClientePredicate == null && currentDataConsPredicate == null && currentAutomezzoPredicate == null && currentVettorePredicate == null && currentTermConsPredicate == null){
currentFilteredOrderList = currentOrderList;
} else {
Stream<OrdineVenditaInevasoDTO> tmpStream = Stream.of(currentOrderList)
@@ -294,7 +326,28 @@ public class DialogVenditaFiltroAvanzato {
(currentClientePredicate == null || (currentClientePredicate != null && currentClientePredicate.test(x))) &&
(currentDataConsPredicate == null || (currentDataConsPredicate != null && currentDataConsPredicate.test(x))) &&
(currentVettorePredicate == null || (currentVettorePredicate != null && currentVettorePredicate.test(x))) &&
(currentAutomezzoPredicate == null || (currentAutomezzoPredicate != null && currentAutomezzoPredicate.test(x)))
(currentAutomezzoPredicate == null || (currentAutomezzoPredicate != null && currentAutomezzoPredicate.test(x))) &&
(currentTermConsPredicate == null || (currentTermConsPredicate != null && currentTermConsPredicate.test(x)))
);
currentFilteredOrderList = tmpStream.toList();
}
return Stream.of(currentFilteredOrderList).map(OrdineVenditaInevasoDTO::getCodMdep).distinct().withoutNulls().toList();
}
private List<String> getAvailableTermCons() {
if(currentNumOrdsPredicate == null && currentClientePredicate == null && currentDataConsPredicate == null && currentAutomezzoPredicate == null && currentVettorePredicate == null && currentDepositoPredicate == null){
currentFilteredOrderList = currentOrderList;
} else {
Stream<OrdineVenditaInevasoDTO> tmpStream = Stream.of(currentOrderList)
.filter(x ->
(currentNumOrdsPredicate == null || (currentNumOrdsPredicate != null && currentNumOrdsPredicate.test(x))) &&
(currentClientePredicate == null || (currentClientePredicate != null && currentClientePredicate.test(x))) &&
(currentDataConsPredicate == null || (currentDataConsPredicate != null && currentDataConsPredicate.test(x))) &&
(currentVettorePredicate == null || (currentVettorePredicate != null && currentVettorePredicate.test(x))) &&
(currentAutomezzoPredicate == null || (currentAutomezzoPredicate != null && currentAutomezzoPredicate.test(x))) &&
(currentDepositoPredicate == null || (currentDepositoPredicate != null && currentDepositoPredicate.test(x)))
);
currentFilteredOrderList = tmpStream.toList();
@@ -304,16 +357,17 @@ public class DialogVenditaFiltroAvanzato {
}
private List<String> getAvailableVettori() {
if(currentNumOrdsPredicate == null && currentClientePredicate == null && currentDataConsPredicate == null && currentTermConsPredicate == null && currentAutomezzoPredicate == null){
if(currentNumOrdsPredicate == null && currentClientePredicate == null && currentDataConsPredicate == null && currentTermConsPredicate == null && currentAutomezzoPredicate == null && currentDepositoPredicate == null){
currentFilteredOrderList = currentOrderList;
} else {
Stream<OrdineVenditaInevasoDTO> tmpStream = Stream.of(currentOrderList)
.filter(x ->
(currentNumOrdsPredicate == null || (currentNumOrdsPredicate != null && currentNumOrdsPredicate.test(x))) &&
(currentClientePredicate == null || (currentClientePredicate != null && currentClientePredicate.test(x))) &&
(currentDataConsPredicate == null || (currentDataConsPredicate != null && currentDataConsPredicate.test(x))) &&
(currentTermConsPredicate == null || (currentTermConsPredicate != null && currentTermConsPredicate.test(x))) &&
(currentAutomezzoPredicate == null || (currentAutomezzoPredicate != null && currentAutomezzoPredicate .test(x)))
(currentClientePredicate == null || (currentClientePredicate != null && currentClientePredicate.test(x))) &&
(currentDataConsPredicate == null || (currentDataConsPredicate != null && currentDataConsPredicate.test(x))) &&
(currentTermConsPredicate == null || (currentTermConsPredicate != null && currentTermConsPredicate.test(x))) &&
(currentAutomezzoPredicate == null || (currentAutomezzoPredicate != null && currentAutomezzoPredicate .test(x))) &&
(currentDepositoPredicate == null || (currentDepositoPredicate != null && currentDepositoPredicate.test(x)))
);
currentFilteredOrderList = tmpStream.toList();
@@ -323,16 +377,17 @@ public class DialogVenditaFiltroAvanzato {
}
private List<String> getAvailableAutomezzi() {
if(currentNumOrdsPredicate == null && currentClientePredicate == null && currentDataConsPredicate == null && currentTermConsPredicate == null && currentVettorePredicate == null){
if(currentNumOrdsPredicate == null && currentClientePredicate == null && currentDataConsPredicate == null && currentTermConsPredicate == null && currentVettorePredicate == null && currentDepositoPredicate == null){
currentFilteredOrderList = currentOrderList;
} else {
Stream<OrdineVenditaInevasoDTO> tmpStream = Stream.of(currentOrderList)
.filter(x ->
(currentNumOrdsPredicate == null || (currentNumOrdsPredicate != null && currentNumOrdsPredicate.test(x))) &&
(currentClientePredicate == null || (currentClientePredicate != null && currentClientePredicate.test(x))) &&
(currentDataConsPredicate == null || (currentDataConsPredicate != null && currentDataConsPredicate.test(x))) &&
(currentTermConsPredicate == null || (currentTermConsPredicate != null && currentTermConsPredicate.test(x))) &&
(currentVettorePredicate == null || (currentVettorePredicate != null && currentVettorePredicate.test(x)))
(currentClientePredicate == null || (currentClientePredicate != null && currentClientePredicate.test(x))) &&
(currentDataConsPredicate == null || (currentDataConsPredicate != null && currentDataConsPredicate.test(x))) &&
(currentTermConsPredicate == null || (currentTermConsPredicate != null && currentTermConsPredicate.test(x))) &&
(currentVettorePredicate == null || (currentVettorePredicate != null && currentVettorePredicate.test(x))) &&
(currentDepositoPredicate == null || (currentDepositoPredicate != null && currentDepositoPredicate.test(x)))
);
currentFilteredOrderList = tmpStream.toList();
@@ -343,7 +398,7 @@ public class DialogVenditaFiltroAvanzato {
private void refreshList() {
if(currentNumOrdsPredicate == null && currentClientePredicate == null && currentDataConsPredicate == null && currentTermConsPredicate == null && currentVettorePredicate == null && currentAutomezzoPredicate == null){
if(currentNumOrdsPredicate == null && currentClientePredicate == null && currentDataConsPredicate == null && currentTermConsPredicate == null && currentVettorePredicate == null && currentAutomezzoPredicate == null && currentDepositoPredicate == null){
currentFilteredOrderList = currentOrderList;
} else {
Stream<OrdineVenditaInevasoDTO> tmpStream = Stream.of(currentOrderList)
@@ -353,7 +408,8 @@ public class DialogVenditaFiltroAvanzato {
(currentDataConsPredicate == null || (currentDataConsPredicate != null && currentDataConsPredicate.test(x))) &&
(currentTermConsPredicate == null || (currentTermConsPredicate != null && currentTermConsPredicate.test(x))) &&
(currentVettorePredicate == null || (currentVettorePredicate != null && currentVettorePredicate.test(x))) &&
(currentAutomezzoPredicate == null || (currentAutomezzoPredicate != null && currentAutomezzoPredicate.test(x)))
(currentAutomezzoPredicate == null || (currentAutomezzoPredicate != null && currentAutomezzoPredicate.test(x))) &&
(currentDepositoPredicate == null || (currentDepositoPredicate != null && currentDepositoPredicate.test(x)))
);
currentFilteredOrderList = tmpStream.toList();

View File

@@ -6,6 +6,7 @@ import it.integry.integrywmsnative.core.di.BindableString;
public class DialogVenditaFiltroAvanzatoViewModel {
public BindableString deposito = new BindableString();
public BindableString numOrds = new BindableString();
public BindableString cliente = new BindableString();
public BindableString dataConsegna = new BindableString();

View File

@@ -26,6 +26,7 @@ public class OrdineVenditaGroupedInevasoDTO implements Cloneable, Serializable,
public static class Ordine implements Parcelable{
private String data;
private int numero;
private String codMdep;
private String codAnagOrd = "";
private String ragSocOrd = "";
private Float pesoTotale;
@@ -76,6 +77,15 @@ public class OrdineVenditaGroupedInevasoDTO implements Cloneable, Serializable,
return this;
}
public String getCodMdep() {
return codMdep;
}
public Ordine setCodMdep(String codMdep) {
this.codMdep = codMdep;
return this;
}
public String getCodAnagOrd() {
return codAnagOrd;
}
@@ -217,6 +227,7 @@ public class OrdineVenditaGroupedInevasoDTO implements Cloneable, Serializable,
}
gestione = in.readString();
colliRiservati = in.readInt();
codMdep = in.readString();
}
@Override
@@ -248,6 +259,7 @@ public class OrdineVenditaGroupedInevasoDTO implements Cloneable, Serializable,
}
dest.writeString(gestione);
dest.writeInt(colliRiservati);
dest.writeString(codMdep);
}
@SuppressWarnings("unused")

View File

@@ -18,6 +18,7 @@ public class OrdineVenditaInevasoDTO implements Parcelable {
private String listino;
private String termCons;
private String codAuto;
private String codMdep;
private String descrizioneAuto;
private String codVvet;
private String descrizioneVettore;
@@ -57,6 +58,7 @@ public class OrdineVenditaInevasoDTO implements Parcelable {
listino = in.readString();
termCons = in.readString();
codAuto = in.readString();
codMdep = in.readString();
descrizioneAuto = in.readString();
codVvet = in.readString();
descrizioneVettore = in.readString();
@@ -102,6 +104,7 @@ public class OrdineVenditaInevasoDTO implements Parcelable {
dest.writeString(listino);
dest.writeString(termCons);
dest.writeString(codAuto);
dest.writeString(codMdep);
dest.writeString(descrizioneAuto);
dest.writeString(codVvet);
dest.writeString(descrizioneVettore);
@@ -212,6 +215,15 @@ public class OrdineVenditaInevasoDTO implements Parcelable {
return this;
}
public String getCodMdep() {
return codMdep;
}
public OrdineVenditaInevasoDTO setCodMdep(String codMdep) {
this.codMdep = codMdep;
return this;
}
public String getDescrizioneAuto() {
return descrizioneAuto;
}

View File

@@ -26,9 +26,9 @@ import it.integry.integrywmsnative.core.REST.consumers.ColliMagazzinoRESTConsume
import it.integry.integrywmsnative.core.REST.consumers.ISimpleOperationCallback;
import it.integry.integrywmsnative.core.REST.consumers.PosizioneRESTonsumer;
import it.integry.integrywmsnative.core.REST.consumers.PrinterRESTConsumer;
import it.integry.integrywmsnative.core.REST.model.DistribuzioneColloDTO;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.class_router.BaseRouter;
import it.integry.integrywmsnative.core.class_router.ClassRouter;
import it.integry.integrywmsnative.core.class_router.interfaces.IOrdiniVendita;
import it.integry.integrywmsnative.core.data_recover.ColliDataRecover;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.CommonModelConsts;
@@ -51,7 +51,6 @@ import it.integry.integrywmsnative.gest.vendita_ordine_inevaso.VenditaOrdineInev
import it.integry.integrywmsnative.gest.vendita_ordine_inevaso.core.VenditaOrdineInevasoHelper;
import it.integry.integrywmsnative.gest.vendita_ordine_inevaso.core.MainListOrdineVenditaInevasoAdapter;
import it.integry.integrywmsnative.gest.vendita_ordine_inevaso.core.interfaces.IOnOrdineVenditaRowDispatched;
import it.integry.integrywmsnative.ui.StatusBarAlert;
import it.integry.integrywmsnative.view.bottomsheet.interfaces.IOnColloClosedCallback;
import it.integry.integrywmsnative.view.bottomsheet.viewmodel.ArticoliInColloBottomSheetViewModel;
@@ -77,6 +76,7 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO
private MainListOrdineVenditaInevasoAdapter mAdapter;
private GestioneEnum defaultGestioneOfUL = null;
private String defaultCodMdepOfUL = null;
private List<FiltroOrdineDTO> defaultFiltroOrdine = new ArrayList<>();
private String defaultCodAnagOfUL = null;
private String defaultRifOrdOfUL = null;
@@ -151,11 +151,9 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO
.toList();
if(foundGestioni != null && foundGestioni.size() > 1){
DialogSimpleMessageHelper.makeErrorDialog(mActivity, new SpannableString("Impossibile caricare ordini di diverse gestioni"), null, () -> {
DialogSimpleMessageHelper.makeErrorDialog(mActivity, new SpannableString(mActivity.getString(R.string.error_multiple_gest_ordv)), null, () -> {
mActivity.finish();
}).show();
// UtilityExceptions.defaultException(mActivity, new Exception("Impossibile caricare ordini di diverse gestioni"));
// mActivity.finish();
return;
} else if(foundGestioni != null && foundGestioni.size() == 1){
defaultGestioneOfUL = foundGestioni.get(0);
@@ -163,6 +161,24 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO
defaultGestioneOfUL = GestioneEnum.VENDITA;
}
//Definizione del deposito di default
List<String> foundCodMdep = Stream.of(flatOrderArray)
.map(OrdineVenditaGroupedInevasoDTO.Ordine::getCodMdep)
.withoutNulls()
.distinctBy(x -> x)
.toList();
// if(foundCodMdep != null && foundCodMdep.size() > 1){
// DialogSimpleMessageHelper.makeErrorDialog(mActivity, new SpannableString(mActivity.getString(R.string.error_multiple_cod_mdep_ordv)), null, () -> {
// mActivity.finish();
// }).show();
// return;
// } else if(foundCodMdep != null && foundCodMdep.size() == 1){
// defaultCodMdepOfUL = foundCodMdep.get(0);
// } else {
defaultCodMdepOfUL = SettingsManager.i().userSession.depo.getCodMdep();
// }
//Definizione del filtro ordine da applicare a tutti i colli generati
@@ -718,6 +734,7 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO
.setNumOrd(defaultNumOrdOfUL)
.setDataOrdD(defaultDataOrdOfUL)
.setCodAnag(defaultCodAnagOfUL)
.setCodMdep(defaultCodMdepOfUL)
.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE);
if(customNumCollo != null) {
@@ -826,23 +843,14 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO
MtbColt cloneMtbColt = (MtbColt) mArticoliInColloBottomSheetViewModel.mtbColt.get().clone();
RunnableArgs<List<MtbColt>> tmpOnComplete = mtbColts -> {
IOrdiniVendita ordiniVendita = ClassRouter.getIstance(ClassRouter.PATH.ORDINI_VENDITA);
ordiniVendita.distribuisciCollo(progress, cloneMtbColt, mTestateOrdini, mtbColts -> {
if(mtbColtSessionID != null) ColliDataRecover.closeSession(mtbColtSessionID);
onComplete.run(mtbColts);
};
RunnableArgs<Exception> tmpOnFailed = ex -> {
}, ex -> {
UtilityExceptions.defaultException(mActivity, ex, progress);
};
BaseRouter.invokePath(BaseRouter.PATH.DISTRIBUZIONE_COLLO_V, progress, cloneMtbColt, tmpOnComplete, tmpOnFailed);
// ColliMagazzinoRESTConsumer.distribuisciCollo(cloneMtbColt, SettingsManager.iDB().getDefaultCriterioDistribuzione(),
// mtbColts -> {
// if(mtbColtSessionID != null) ColliDataRecover.closeSession(mtbColtSessionID);
// onComplete.run(mtbColts);
// },
// ex -> UtilityExceptions.defaultException(mActivity, ex, progress));
});
}
private void printCollo(ProgressDialog progress, List<MtbColt> mtbColtsToPrint) {

View File

@@ -6,6 +6,7 @@
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/full_white"
android:fitsSystemWindows="true"
tools:openDrawer="start">

View File

@@ -179,6 +179,7 @@
android:visibility="@{viewmodel.isFabVisible ? View.VISIBLE : View.GONE}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
fab:menu_animationDelayPerItem="50"
fab:menu_backgroundColor="@color/white_bg_alpha"
fab:menu_buttonSpacing="0dp"

View File

@@ -31,6 +31,23 @@
android:layout_marginBottom="12dp"/>
<!--<com.google.android.material.textfield.TextInputLayout-->
<!--android:layout_width="match_parent"-->
<!--android:layout_height="wrap_content"-->
<!--app:hintTextAppearance="@style/hint_text">-->
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/input_cod_mdep"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textNoSuggestions"
android:hint="@string/deposit"
android:focusable="false"
app:binding="@{viewmodel.deposito}"/>
<!--</com.google.android.material.textfield.TextInputLayout>-->
<!--<com.google.android.material.textfield.TextInputLayout-->
<!--android:layout_width="match_parent"-->
<!--android:layout_height="wrap_content"-->

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_launcher_background"/>
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
</adaptive-icon>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_launcher_background"/>
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
</adaptive-icon>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.0 KiB

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.5 KiB

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.8 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -157,6 +157,7 @@
<string name="ship_date">Data consegna</string>
<string name="terms_of_delivery">Termini di consegna</string>
<string name="vehicle">Automezzo</string>
<string name="deposit">Deposito</string>
<string name="carrier">Vettore</string>
<string name="no_items_found_message">Nessun articolo trovato</string>
@@ -177,6 +178,8 @@
<string name="free_picking_suggestion_1">Per iniziare clicca sul + in basso a destra</string>
<string name="free_picking_suggestion_2">Scansiona un articolo per iniziare</string>
<string name="free_picking_title_fragment">Picking libero</string>
<string name="error_multiple_gest_ordv">Impossibile caricare ordini di diverse <b>gestioni</b></string>
<string name="error_multiple_cod_mdep_ordv">Impossibile caricare ordini di diversi <b>depositi</b></string>
<string name="recovering_data">Recupero dati</string>
<string name="wait_a_moment">Attendi qualche istante</string>

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="ic_launcher_background">#FFFFFF</color>
</resources>

View File

@@ -163,6 +163,7 @@
<string name="ship_date">Ship date</string>
<string name="terms_of_delivery">Terms of delivery</string>
<string name="vehicle">Vehicle</string>
<string name="deposit">Deposit</string>
<string name="carrier">Carrier</string>
<string name="no_items_found_message">No items found</string>
@@ -179,10 +180,12 @@
<string name="free_picking">Free Picking</string>
<string name="free_picking_suggestion_1">Please press + button to start with picking</string>
<string name="free_picking_suggestion_2">Scan an item to start</string>
<string name="error_multiple_gest_ordv">Can\'t load orders of different type</string>
<string name="error_multiple_cod_mdep_ordv">Can\'t load orders of different deposits</string>
<string name="recovering_data">Recovering data</string>
<string name="wait_a_moment">Wait a moment</string>
<string name="title_dynamic_vgalimenti">Personalizzazione VGAlimenti</string>
<string name="title_dynamic__base">Azienda Base</string>
<string name="title_dynamic_vgalimenti">VGAlimenti customization</string>
<string name="title_dynamic__base">Base customization</string>
</resources>