diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser
index d179c9f3..4ae112ed 100644
Binary files a/.idea/caches/build_file_checksums.ser and b/.idea/caches/build_file_checksums.ser differ
diff --git a/app/build.gradle b/app/build.gradle
index 121ba8f9..b1089999 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -21,8 +21,8 @@ android {
applicationId "it.integry.integrywmsnative"
minSdkVersion 21
targetSdkVersion 28
- versionCode 16
- versionName "1.0.13"
+ versionCode 17
+ versionName "1.0.14"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
@@ -71,7 +71,8 @@ dependencies {
implementation "androidx.lifecycle:lifecycle-common-java8:2.0.0"
kapt "androidx.lifecycle:lifecycle-compiler:2.0.0"
- implementation "com.emreeran.permissionlivedata:permissionlivedata:1.0.4"
+ //implementation "com.emreeran.permissionlivedata:permissionlivedata:1.0.4"
+ //implementation 'com.karumi:dexter:5.0.0'
//MVVM
implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0'
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 06522412..4db6c11f 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -6,6 +6,7 @@
+
-
-
+ android:windowSoftInputMode="adjustPan">
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/it/integry/integrywmsnative/MainActivity.java b/app/src/main/java/it/integry/integrywmsnative/MainActivity.java
index e893395e..e23493ee 100644
--- a/app/src/main/java/it/integry/integrywmsnative/MainActivity.java
+++ b/app/src/main/java/it/integry/integrywmsnative/MainActivity.java
@@ -12,6 +12,7 @@ import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.SearchView;
import androidx.appcompat.widget.Toolbar;
+
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
@@ -22,13 +23,11 @@ import android.widget.TextView;
import it.integry.integrywmsnative.core.REST.watcher.ServerStatusChecker;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
-import it.integry.integrywmsnative.core.exception.ExceptionsHandler;
import it.integry.integrywmsnative.core.interfaces.IFilterableFragment;
import it.integry.integrywmsnative.core.interfaces.IRecyclerFragment;
import it.integry.integrywmsnative.core.interfaces.ISelectAllFragment;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.update.UpdatesManager;
-import it.integry.integrywmsnative.core.utility.PermissionsHelper;
import it.integry.integrywmsnative.core.utility.UtilitySettings;
import it.integry.integrywmsnative.databinding.ActivityMainBinding;
import it.integry.integrywmsnative.gest.accettazione.MainAccettazioneFragment;
@@ -39,7 +38,6 @@ import it.integry.integrywmsnative.gest.rettifica_giacenze.RettificaGiacenzeFrag
import it.integry.integrywmsnative.gest.settings.MainSettingsFragment;
import it.integry.integrywmsnative.gest.vendita.MainVenditaFragment;
import it.integry.integrywmsnative.gest.versamento_merce.VersamentoMerceFragment;
-import it.integry.integrywmsnative.view.dialogs.exception.DialogException;
public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
@@ -53,7 +51,7 @@ public class MainActivity extends AppCompatActivity
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- //ExceptionsHandler.init(this);
+
mBinding = DataBindingUtil.inflate(LayoutInflater.from(this), R.layout.activity_main, null, false);
setContentView(mBinding.getRoot());
@@ -80,9 +78,9 @@ public class MainActivity extends AppCompatActivity
private void startLoginActivity(){
+ this.finish();
Intent myIntent = new Intent(this, LoginActivity.class);
startActivity(myIntent);
- this.finish();
}
@@ -234,6 +232,8 @@ public class MainActivity extends AppCompatActivity
// new SpannableString("Trovato adattatore " + BarcodeManager.getCurrentBarcodeInterface().getAdapterName() + " installato nel sistema"),
// null, null).show();
}
+ //Preload done in splashPage
+ onDBLoaded();
ServerStatusChecker.getIstance().addCallback(value -> {
if(value && (!mIsOnline || firstCheckExecution)){
diff --git a/app/src/main/java/it/integry/integrywmsnative/SplashActivity.java b/app/src/main/java/it/integry/integrywmsnative/SplashActivity.java
index 316a4e36..8077d93b 100644
--- a/app/src/main/java/it/integry/integrywmsnative/SplashActivity.java
+++ b/app/src/main/java/it/integry/integrywmsnative/SplashActivity.java
@@ -4,14 +4,18 @@ import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.Bundle;
-import android.app.Activity;
-import android.os.Handler;
import android.text.SpannableString;
import android.widget.TextView;
+import java.util.ArrayList;
+import java.util.List;
+
import androidx.appcompat.app.AppCompatActivity;
import butterknife.BindView;
import butterknife.ButterKnife;
+import it.integry.integrywmsnative.core.REST.watcher.ServerStatusChecker;
+import it.integry.integrywmsnative.core.expansion.RunnableArgss;
+import it.integry.integrywmsnative.core.expansion.RunnableArgsss;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.PermissionsHelper;
import it.integry.integrywmsnative.gest.login.LoginActivity;
@@ -22,6 +26,8 @@ public class SplashActivity extends AppCompatActivity {
@BindView(R.id.app_version_textview)
TextView appVersionTextView;
+ private RunnableArgsss> onRequestPermissionResult;
+
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -31,19 +37,24 @@ public class SplashActivity extends AppCompatActivity {
initAppVersion();
+ initPermissions(this::init);
+
+ }
+
+ private void initPermissions(Runnable onComplete) {
PermissionsHelper.askPermissions(this, () -> {
- init();
+ onComplete.run();
}, permanentlyDenied -> {
if(permanentlyDenied) {
DialogSimpleMessageHelper.makeErrorDialog(this,
- new SpannableString(getText(R.string.permissions_permanrntly_denied)), null, () -> {
+ new SpannableString(getText(R.string.permissions_permanently_denied)), null, () -> {
this.finish();
}).show();
+ } else {
+ initPermissions(onComplete);
}
});
-
-
}
@@ -61,7 +72,36 @@ public class SplashActivity extends AppCompatActivity {
if(SettingsManager.i().user.username == null && SettingsManager.i().user.password == null){
startLoginActivity();
} else {
- startMainActivity();
+ initFirstData(this::startMainActivity);
+ }
+ }
+
+ private void initFirstData(Runnable onComplete) {
+
+ SettingsManager.reloadDBVariables(onComplete, ex -> {
+ DialogSimpleMessageHelper.makeErrorDialog(this,
+ new SpannableString(ex.getMessage()), null, this::finish).show();
+ }
+ );
+ }
+
+
+
+
+ public void setOnRequestPermissionsResult(RunnableArgsss> onRequestPermissionResult) {
+ this.onRequestPermissionResult = onRequestPermissionResult;
+ }
+
+
+ @Override
+ public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
+ if(this.onRequestPermissionResult != null) {
+ List grantResultsList = new ArrayList<>();
+ for(int i = 0; i < grantResults.length; i++) {
+ grantResultsList.add(grantResults[i]);
+ }
+
+ this.onRequestPermissionResult.run(requestCode, permissions, grantResultsList);
}
}
@@ -69,21 +109,16 @@ public class SplashActivity extends AppCompatActivity {
-
private void startLoginActivity(){
+ this.finish();
Intent myIntent = new Intent(this, LoginActivity.class);
startActivity(myIntent);
- this.finish();
}
private void startMainActivity(){
- new Handler().postDelayed(() -> {
- Intent myIntent = new Intent(this, MainActivity.class);
- startActivity(myIntent);
- this.finish();
- }, 3000);
-
-
+ this.finish();
+ Intent myIntent = new Intent(this, MainActivity.class);
+ startActivity(myIntent);
}
diff --git a/app/src/main/java/it/integry/integrywmsnative/core/di/Converters.java b/app/src/main/java/it/integry/integrywmsnative/core/di/Converters.java
index c272b95c..04cc12dc 100644
--- a/app/src/main/java/it/integry/integrywmsnative/core/di/Converters.java
+++ b/app/src/main/java/it/integry/integrywmsnative/core/di/Converters.java
@@ -11,6 +11,7 @@ import android.util.Log;
import android.view.View;
import android.widget.CheckBox;
import android.widget.EditText;
+import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.RadioGroup;
@@ -18,6 +19,7 @@ import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.Locale;
+import androidx.databinding.Observable;
import it.integry.integrywmsnative.R;
public class Converters {
@@ -175,4 +177,24 @@ public class Converters {
public static void bindFloatPercetageOnGuideline(View view, final float percentage) {
((Guideline)view).setGuidelinePercent(percentage);
}
+
+
+
+
+ @BindingAdapter("app:visibility")
+ public static void bindCheckbox(LinearLayout view, final BindableBoolean bindableBoolean) {
+ if (view.getTag(R.id.bound_observable) != bindableBoolean) {
+ view.setTag(R.id.bound_observable, bindableBoolean);
+ //view.setOnCheckedChangeListener((compoundButton, b) -> bindableBoolean.set(b));
+ }
+ bindableBoolean.addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() {
+ @Override
+ public void onPropertyChanged(Observable sender, int propertyId) {
+ view.setVisibility(bindableBoolean.get() ? View.VISIBLE : View.GONE);
+ }
+ });
+
+ view.setVisibility(bindableBoolean.get() ? View.VISIBLE : View.GONE);
+ }
+
}
\ No newline at end of file
diff --git a/app/src/main/java/it/integry/integrywmsnative/core/expansion/RunnableArgsss.java b/app/src/main/java/it/integry/integrywmsnative/core/expansion/RunnableArgsss.java
new file mode 100644
index 00000000..e746f1ab
--- /dev/null
+++ b/app/src/main/java/it/integry/integrywmsnative/core/expansion/RunnableArgsss.java
@@ -0,0 +1,7 @@
+package it.integry.integrywmsnative.core.expansion;
+
+public interface RunnableArgsss {
+
+ void run(S data1, T data2, V data3);
+}
+
diff --git a/app/src/main/java/it/integry/integrywmsnative/core/update/GenericFileProvider.java b/app/src/main/java/it/integry/integrywmsnative/core/update/GenericFileProvider.java
new file mode 100644
index 00000000..ac8670af
--- /dev/null
+++ b/app/src/main/java/it/integry/integrywmsnative/core/update/GenericFileProvider.java
@@ -0,0 +1,5 @@
+package it.integry.integrywmsnative.core.update;
+
+import androidx.core.content.FileProvider;
+
+public class GenericFileProvider extends FileProvider {}
\ No newline at end of file
diff --git a/app/src/main/java/it/integry/integrywmsnative/core/update/UpdateApp.java b/app/src/main/java/it/integry/integrywmsnative/core/update/UpdateApp.java
new file mode 100644
index 00000000..32f4fa16
--- /dev/null
+++ b/app/src/main/java/it/integry/integrywmsnative/core/update/UpdateApp.java
@@ -0,0 +1,60 @@
+package it.integry.integrywmsnative.core.update;
+
+import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
+import android.os.AsyncTask;
+import android.os.Environment;
+import android.util.Log;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+public class UpdateApp extends AsyncTask {
+ private Context context;
+ public void setContext(Context contextf){
+ context = contextf;
+ }
+
+ @Override
+ protected Void doInBackground(String... arg0) {
+ try {
+ URL url = new URL(arg0[0]);
+ HttpURLConnection c = (HttpURLConnection) url.openConnection();
+ c.setRequestMethod("GET");
+ c.setDoOutput(true);
+ c.connect();
+
+ File file = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
+ file.mkdirs();
+ File outputFile = new File(file, "update.apk");
+ if(outputFile.exists()){
+ outputFile.delete();
+ }
+ FileOutputStream fos = new FileOutputStream(outputFile);
+
+ InputStream is = c.getInputStream();
+
+ byte[] buffer = new byte[1024];
+ int len1 = 0;
+ while ((len1 = is.read(buffer)) != -1) {
+ fos.write(buffer, 0, len1);
+ }
+ fos.close();
+ is.close();
+
+ Intent intent = new Intent(Intent.ACTION_VIEW);
+ intent.setDataAndType(Uri.fromFile(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)), "application/vnd.android.package-archive");
+ intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // without this flag android returned a intent error!
+ context.startActivity(intent);
+
+
+ } catch (Exception e) {
+ Log.e("UpdateAPP", "Update error! " + e.getMessage());
+ }
+ return null;
+ }
+}
diff --git a/app/src/main/java/it/integry/integrywmsnative/core/update/UpdatesManager.java b/app/src/main/java/it/integry/integrywmsnative/core/update/UpdatesManager.java
index 4e70739a..930b4f6f 100644
--- a/app/src/main/java/it/integry/integrywmsnative/core/update/UpdatesManager.java
+++ b/app/src/main/java/it/integry/integrywmsnative/core/update/UpdatesManager.java
@@ -1,21 +1,94 @@
package it.integry.integrywmsnative.core.update;
+import android.app.Activity;
+import android.app.DownloadManager;
+import android.content.BroadcastReceiver;
import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.net.Uri;
+import android.os.Build;
+import android.os.Environment;
import com.github.javiersantos.appupdater.AppUpdater;
+import com.github.javiersantos.appupdater.AppUpdaterUtils;
+import com.github.javiersantos.appupdater.enums.AppUpdaterError;
import com.github.javiersantos.appupdater.enums.Display;
import com.github.javiersantos.appupdater.enums.UpdateFrom;
+import com.github.javiersantos.appupdater.objects.Update;
+import java.io.File;
+
+import androidx.core.content.FileProvider;
+import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.settings.SettingsManager;
public class UpdatesManager {
- public static void init(Context context) {
+ public static void init(Activity context) {
+ String currentVersionUrl = "http://" + SettingsManager.i().server.host + ":" + SettingsManager.i().server.port + "/ems-api/wms/currentVersion";
+ String currentDownloadUrl = "http://" + SettingsManager.i().server.host + ":" + SettingsManager.i().server.port + "/ems-api/wms/android-release_v2.apk";
+
+
AppUpdater appUpdater = new AppUpdater(context)
.setDisplay(Display.DIALOG)
.setUpdateFrom(UpdateFrom.JSON)
- .setUpdateJSON("http://" + SettingsManager.i().server.host + ":" + SettingsManager.i().server.port + "/ems-api/wms/currentVersion");
+ .setUpdateJSON(currentVersionUrl)
+ .setButtonUpdateClickListener((dialog, which) -> {
+
+ installAPK(context, currentDownloadUrl);
+ });
appUpdater.start();
}
+
+ private static void installAPK(Activity context, String downloadURL) {
+ String destination = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/";
+ String fileName = context.getResources().getString(R.string.app_name) + ".apk";
+ destination += fileName;
+ final Uri uri = Uri.parse("file://" + destination);
+
+ //Delete update file if exists
+ final File file = new File(destination);
+ if (file.exists())
+ file.delete();
+
+ //set downloadmanager
+ DownloadManager.Request request = new DownloadManager.Request(Uri.parse(downloadURL));
+ request.setDescription(context.getString(R.string.notification_update_download));
+ request.setTitle(context.getString(R.string.app_name));
+
+ //set destination
+ request.setDestinationUri(uri);
+
+ // get download service and enqueue file
+ final DownloadManager manager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
+ manager.enqueue(request);
+
+ //set BroadcastReceiver to install app when .apk is downloaded
+ BroadcastReceiver onComplete = new BroadcastReceiver() {
+ public void onReceive(Context ctxt, Intent i) {
+
+ Uri fileLoc;
+ Intent intent;
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
+ intent = new Intent(Intent.ACTION_INSTALL_PACKAGE);
+ fileLoc = GenericFileProvider.getUriForFile(context, context.getApplicationContext().getPackageName() + ".core.update.GenericFileProvider", file);
+ } else {
+ intent = new Intent(Intent.ACTION_VIEW);
+ fileLoc = Uri.fromFile(file);
+ }
+
+ intent.setDataAndType(fileLoc, "application/vnd.android.package-archive");
+ intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
+
+ context.startActivity(intent);
+ }
+ };
+
+ //register receiver for when .apk download is compete
+ context.registerReceiver(onComplete, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
+ }
}
diff --git a/app/src/main/java/it/integry/integrywmsnative/core/utility/PermissionsHelper.java b/app/src/main/java/it/integry/integrywmsnative/core/utility/PermissionsHelper.java
index e62203d5..0f66db4e 100644
--- a/app/src/main/java/it/integry/integrywmsnative/core/utility/PermissionsHelper.java
+++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/PermissionsHelper.java
@@ -1,42 +1,83 @@
package it.integry.integrywmsnative.core.utility;
import android.Manifest;
-import android.app.Activity;
+import android.content.pm.PackageManager;
+import android.os.Build;
+import android.widget.Toast;
-import com.emreeran.permissionlivedata.PermissionLiveData;
-import com.emreeran.permissionlivedata.Status;
+import com.annimon.stream.Stream;
import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
import androidx.appcompat.app.AppCompatActivity;
+import androidx.core.app.ActivityCompat;
+import it.integry.integrywmsnative.SplashActivity;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
public class PermissionsHelper {
- public static void askPermissions(AppCompatActivity activity, Runnable onPermissionsConfirmed, RunnableArgs onPermissionsDenied) {
+ public static void askPermissions(SplashActivity activity, Runnable onPermissionsConfirmed, RunnableArgs onPermissionsDenied) {
- PermissionLiveData permissionLiveData = PermissionLiveData.create(
- activity,
- Manifest.permission.READ_EXTERNAL_STORAGE,
- Manifest.permission.WRITE_EXTERNAL_STORAGE
- );
+ List permissionsToAsk = new ArrayList<>();
+ permissionsToAsk.add(Manifest.permission.READ_EXTERNAL_STORAGE);
+ permissionsToAsk.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
+ //permissionsToAsk.add(Manifest.permission.INTERNET);
+ //permissionsToAsk.add(Manifest.permission.ACCESS_WIFI_STATE);
- permissionLiveData.observe(activity, permission -> {
- if (permission.getStatus() == Status.RECEIVED) {
- if (permission.getGranted()) {
- onPermissionsConfirmed.run();
- //UtilityToast.showToast("Permission " + permission.getName() + " was granted.");
- } else if (permission.getShouldShowRequestPermissionRationale()) {
- onPermissionsDenied.run(true);
- //UtilityToast.showToast("Permission " + permission.getName() + " was denied without ask never again checked.");
- } else {
- onPermissionsDenied.run(false);
- //UtilityToast.showToast("Permission " + permission.getName() + " was denied.");
+
+ if(Build.VERSION.SDK_INT >= 23) {
+ //permissionsToAsk.add(Manifest.permission.REQUEST_INSTALL_PACKAGES);
+ }
+
+ String[] permissionArray = new String[permissionsToAsk.size()];
+ permissionsToAsk.toArray(permissionArray);
+
+
+
+
+ activity.setOnRequestPermissionsResult((requestCode, permissions, grantResults) -> {
+ switch (requestCode) {
+ case 1: {
+
+ boolean allGranted = Stream.of(grantResults).allMatch(x -> x == PackageManager.PERMISSION_GRANTED);
+
+ // If request is cancelled, the result arrays are empty.
+ if (grantResults.size() > 0 && allGranted) {
+
+ onPermissionsConfirmed.run();
+
+ } else {
+
+ boolean anyPermDeny = shouldShowRequestPermissionRationale( activity, permissions );
+
+ onPermissionsDenied.run(anyPermDeny);
+
+
+ }
+ return;
}
- } else if (permission.getStatus() == Status.PENDING) {
- //UtilityToast.showToast(String.format("Pending request for %s", permission.getName()));
+
+ // other 'case' lines to check for other
+ // permissions this app might request
}
});
+
+
+
+ ActivityCompat.requestPermissions(activity, permissionArray,1);
+
+ }
+
+ private static boolean shouldShowRequestPermissionRationale(AppCompatActivity activity, String[] permissions) {
+ boolean anyDeny = false;
+
+ for(int i = 0; i < permissions.length && !anyDeny; i++) {
+ if(!ActivityCompat.shouldShowRequestPermissionRationale(activity, permissions[i])) anyDeny = true;
+ }
+
+ return anyDeny;
}
}
diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/viewmodel/AccettazioneOnOrdineAccettazioneInevasoViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/viewmodel/AccettazioneOnOrdineAccettazioneInevasoViewModel.java
index 0cefdb07..56b2395d 100644
--- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/viewmodel/AccettazioneOnOrdineAccettazioneInevasoViewModel.java
+++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/viewmodel/AccettazioneOnOrdineAccettazioneInevasoViewModel.java
@@ -206,7 +206,6 @@ public class AccettazioneOnOrdineAccettazioneInevasoViewModel implements IOnColl
public RunnableArgs onScanSuccessfull = data -> {
ProgressDialog progressDialog = UtilityProgress.createDefaultProgressDialog(mActivity);
- progressDialog.show();
BarcodeManager.disable();
diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/login/viewmodel/LoginViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/login/viewmodel/LoginViewModel.java
index 5da0036b..1e04530a 100644
--- a/app/src/main/java/it/integry/integrywmsnative/gest/login/viewmodel/LoginViewModel.java
+++ b/app/src/main/java/it/integry/integrywmsnative/gest/login/viewmodel/LoginViewModel.java
@@ -19,6 +19,7 @@ import it.integry.integrywmsnative.core.REST.model.AvailableCodMdepsDTO;
import it.integry.integrywmsnative.core.di.BindableBoolean;
import it.integry.integrywmsnative.core.di.BindableString;
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.gest.login.LoginActivity;
import it.integry.integrywmsnative.gest.login.core.LoginHelper;
@@ -233,13 +234,23 @@ public class LoginViewModel {
public void onLoginCompleted() {
loginButtonEnabled.set(true);
-
SettingsManager.update();
- Intent myIntent = new Intent(mActivity, MainActivity.class);
- mActivity.startActivity(myIntent);
+ ProgressDialog loadingProgress = UtilityProgress.createDefaultProgressDialog(mActivity);
+ SettingsManager.reloadDBVariables(() -> {
+ loadingProgress.dismiss();
+ mActivity.finish();
- mActivity.finish();
+ Intent myIntent = new Intent(mActivity, MainActivity.class);
+ mActivity.startActivity(myIntent);
+
+ },ex -> {
+ loadingProgress.dismiss();
+ DialogSimpleMessageHelper.makeErrorDialog(mActivity,
+ new SpannableString(ex.getMessage()), null, null).show();
+ }
+ );
}
+
}
diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoActivity.java
new file mode 100644
index 00000000..456f3423
--- /dev/null
+++ b/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoActivity.java
@@ -0,0 +1,57 @@
+package it.integry.integrywmsnative.gest.picking_libero;
+
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.databinding.DataBindingUtil;
+import it.integry.integrywmsnative.R;
+import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO;
+import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
+import it.integry.integrywmsnative.core.utility.UtilityExceptions;
+import it.integry.integrywmsnative.databinding.ActivityPickingLiberoBinding;
+import it.integry.integrywmsnative.gest.picking_libero.core.PickingLiberoHelper;
+import it.integry.integrywmsnative.gest.picking_libero.viewmodel.PickingLiberoViewModel;
+
+import android.os.Bundle;
+
+public class PickingLiberoActivity extends AppCompatActivity {
+
+ private ActivityPickingLiberoBinding mBindings;
+
+ private PickingLiberoHelper mHelper;
+ private PickingLiberoViewModel mViewModel;
+
+ private int barcodeScannerIstanceID = -1;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ mBindings = DataBindingUtil.setContentView(this, R.layout.activity_picking_libero);
+
+ mHelper = new PickingLiberoHelper(this);
+
+ mViewModel = new PickingLiberoViewModel();
+ mViewModel.init(this, mBindings, mHelper);
+
+ mBindings.setViewmodel(mViewModel);
+
+ setSupportActionBar(this.mBindings.toolbar);
+ getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+
+ barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
+ .setOnScanSuccessfull(mViewModel.onScanSuccessfull)
+ .setOnScanFailed(ex -> UtilityExceptions.defaultException(this, ex, false)));
+ }
+
+ @Override
+ public boolean onSupportNavigateUp() {
+ onBackPressed();
+ return true;
+ }
+
+ @Override
+ public void onBackPressed() {
+ mViewModel.onBackPressed();
+
+ BarcodeManager.removeCallback(barcodeScannerIstanceID);
+ super.onBackPressed();
+ }
+}
diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/core/PickingLiberoHelper.java b/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/core/PickingLiberoHelper.java
new file mode 100644
index 00000000..1d0cc315
--- /dev/null
+++ b/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/core/PickingLiberoHelper.java
@@ -0,0 +1,13 @@
+package it.integry.integrywmsnative.gest.picking_libero.core;
+
+import android.content.Context;
+
+public class PickingLiberoHelper {
+
+ private final Context mContext;
+
+ public PickingLiberoHelper(Context context) {
+ mContext = context;
+ }
+
+}
diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/viewmodel/PickingLiberoViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/viewmodel/PickingLiberoViewModel.java
new file mode 100644
index 00000000..c1a195c9
--- /dev/null
+++ b/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/viewmodel/PickingLiberoViewModel.java
@@ -0,0 +1,416 @@
+package it.integry.integrywmsnative.gest.picking_libero.viewmodel;
+
+import android.app.Activity;
+import android.app.ProgressDialog;
+import android.text.SpannableString;
+
+import com.annimon.stream.Stream;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+
+import androidx.databinding.Observable;
+import androidx.databinding.ObservableArrayList;
+import androidx.databinding.ObservableField;
+import it.integry.integrywmsnative.R;
+import it.integry.integrywmsnative.core.CommonConst;
+import it.integry.integrywmsnative.core.REST.consumers.ArticoloRESTConsumer;
+import it.integry.integrywmsnative.core.REST.consumers.BarcodeRESTConsumer;
+import it.integry.integrywmsnative.core.REST.consumers.ColliMagazzinoRESTConsumer;
+import it.integry.integrywmsnative.core.REST.consumers.ISimpleOperationCallback;
+import it.integry.integrywmsnative.core.REST.model.Ean128Model;
+import it.integry.integrywmsnative.core.REST.model.Ean13PesoModel;
+import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
+import it.integry.integrywmsnative.core.di.BindableBoolean;
+import it.integry.integrywmsnative.core.expansion.RunnableArgs;
+import it.integry.integrywmsnative.core.model.CommonModelConsts;
+import it.integry.integrywmsnative.core.model.MtbAart;
+import it.integry.integrywmsnative.core.model.MtbColr;
+import it.integry.integrywmsnative.core.model.MtbColt;
+import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
+import it.integry.integrywmsnative.core.utility.UtilityBarcode;
+import it.integry.integrywmsnative.core.utility.UtilityExceptions;
+import it.integry.integrywmsnative.core.utility.UtilityProgress;
+import it.integry.integrywmsnative.core.utility.UtilityString;
+import it.integry.integrywmsnative.databinding.ActivityPickingLiberoBinding;
+import it.integry.integrywmsnative.gest.picking_libero.core.PickingLiberoHelper;
+import it.integry.integrywmsnative.gest.vendita.dto.PickingObjectDTO;
+import it.integry.integrywmsnative.ui.StatusBarAlert;
+import it.integry.integrywmsnative.view.dialogs.DialogSimpleMessageHelper;
+import it.integry.integrywmsnative.view.dialogs.choose_arts_from_lista_arts.DialogChooseArtsFromListaArts;
+import it.integry.integrywmsnative.view.dialogs.input_quantity.DialogInputQuantity;
+import it.integry.integrywmsnative.view.dialogs.input_quantity.QuantityDTO;
+import it.integry.plugins.barcode_base_library.model.BarcodeScanDTO;
+
+public class PickingLiberoViewModel {
+
+ public ObservableField mtbColt = new ObservableField<>();
+
+ public BindableBoolean thereIsAnOpenedUL = new BindableBoolean();
+ public BindableBoolean thereIsntAnOpenedUL = new BindableBoolean();
+ public BindableBoolean thereIsAnyRowInUL = new BindableBoolean();
+ public BindableBoolean thereIsAnOpenULWithoutRows = new BindableBoolean();
+
+ private Activity mContext;
+ private ActivityPickingLiberoBinding mBinding;
+ private PickingLiberoHelper mHelper;
+
+ public void init(Activity context, ActivityPickingLiberoBinding binding, PickingLiberoHelper helper) {
+ mContext = context;
+ mBinding = binding;
+ mHelper = helper;
+
+ initObservable();
+ }
+
+
+ private void initObservable() {
+ refreshBindables();
+
+ mtbColt.addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() {
+ @Override
+ public void onPropertyChanged(Observable sender, int propertyId) {
+ refreshBindables();
+ }
+ });
+ }
+
+ private void refreshBindables() {
+ thereIsAnOpenedUL.set(mtbColt.get() != null);
+ thereIsntAnOpenedUL.set(!thereIsAnOpenedUL.get());
+
+ thereIsAnyRowInUL.set(mtbColt.get() != null &&
+ mtbColt.get().getMtbColr() != null &&
+ mtbColt.get().getMtbColr().size() > 0);
+
+
+ thereIsAnOpenULWithoutRows.set(mtbColt.get() != null &&
+ (mtbColt.get().getMtbColr() == null || mtbColt.get().getMtbColr().size() == 0));
+ }
+
+
+ public void onBackPressed() {
+ if(thereIsAnOpenedUL.get()) {
+ this.closeLU();
+ }
+ }
+
+
+ public RunnableArgs onScanSuccessfull = data -> {
+
+ ProgressDialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext);
+ BarcodeManager.disable();
+
+
+ if(UtilityBarcode.isEtichettaAnonima(data)){
+ //Cerco gli articoli presenti nell'ul dell'etichetta anonima
+ this.executeEtichettaLU(data.getStringValue(), progressDialog);
+ } else if(UtilityBarcode.isEtichetta128(data)) {
+
+ //Cerco tramite etichetta ean 128 (che può indicarmi una UL)
+ this.executeEtichettaEan128(data, progressDialog);
+ } else {
+ BarcodeManager.enable();
+ }
+
+ };
+
+
+ private void executeEtichettaLU(String sscc, ProgressDialog progressDialog) {
+ ColliMagazzinoRESTConsumer.getBySSCC(sscc, true, false, mtbColtScanned -> {
+
+ if(mtbColtScanned == null) {
+ showNoULFound(() -> {
+ BarcodeManager.enable();
+ progressDialog.dismiss();
+ });
+ } else if((mtbColtScanned.getGestioneEnum() == GestioneEnum.ACQUISTO || mtbColtScanned.getGestioneEnum() == GestioneEnum.LAVORAZIONE) && mtbColtScanned.getSegno() > 0) {
+ pickMerceULtoUL(mtbColtScanned, mtbColt.get(), progressDialog);
+ } else {
+ showNoULFound(() -> {
+ BarcodeManager.enable();
+ progressDialog.dismiss();
+ });
+ }
+
+ }, ex -> {
+ showNoULFound(() -> {
+ BarcodeManager.enable();
+ progressDialog.dismiss();
+ });
+ });
+ }
+
+
+ private void executeEtichettaEan128(BarcodeScanDTO barcodeScanDTO, ProgressDialog progressDialog) {
+ BarcodeRESTConsumer.decodeEan128(barcodeScanDTO, ean128Model -> {
+
+ String barcodeProd = null;
+
+ if(!UtilityString.isNullOrEmpty(ean128Model.Sscc)) barcodeProd = ean128Model.Sscc;
+ if(!UtilityString.isNullOrEmpty(ean128Model.Gtin)) barcodeProd = ean128Model.Gtin;
+ if(!UtilityString.isNullOrEmpty(ean128Model.Content)) barcodeProd = ean128Model.Content;
+
+
+ if(!UtilityString.isNullOrEmpty(barcodeProd)) {
+
+ if(!UtilityString.isNullOrEmpty(ean128Model.Sscc)){
+ this.executeEtichettaLU(ean128Model.Sscc, progressDialog);
+ } else {
+ showNoULFound(() -> {
+ BarcodeManager.enable();
+ progressDialog.dismiss();
+ });
+
+ }
+
+
+ } else {
+ //EAN 128 non completo o comunque mancano i riferimenti al prodotto
+ showNoULFound(() -> {
+ BarcodeManager.enable();
+ progressDialog.dismiss();
+ });
+ }
+ }, ex-> {
+ UtilityExceptions.defaultException(mContext, ex, progressDialog);
+ BarcodeManager.enable();
+ });
+ }
+
+
+
+ private void pickMerceULtoUL(MtbColt sourceMtbColt, MtbColt destMtbColt, ProgressDialog progressDialog) {
+ List mtbColrsToPick = Stream.of(sourceMtbColt.getMtbColr())
+ .filter(x -> x.getQtaCol().floatValue() > 0)
+ .toList();
+
+ DialogChooseArtsFromListaArts.make(mContext, mtbColrsToPick, pickedAarts -> {
+
+ progressDialog.dismiss();
+
+ List destNewMtbColr = new ArrayList<>();
+
+ askQuantities(pickedAarts.iterator(), destNewMtbColr, () -> {
+
+ if(destNewMtbColr != null && destNewMtbColr.size() > 0){
+ MtbColt clonedTestata = (MtbColt) destMtbColt.clone();
+ ObservableArrayList mtbColrObservableField = new ObservableArrayList<>();
+
+ for(int i = 0; i < destNewMtbColr.size(); i++) {
+ MtbColr cloneMtbColr = (MtbColr) destNewMtbColr.get(i).clone();
+
+ cloneMtbColr
+ .setGestioneRif(cloneMtbColr.getGestione())
+ .setGestione(null);
+
+ cloneMtbColr
+ .setSerColloRif(cloneMtbColr.getSerCollo())
+ .setSerCollo(null);
+
+ cloneMtbColr
+ .setNumColloRif(cloneMtbColr.getNumCollo())
+ .setNumCollo(null);
+
+ cloneMtbColr
+ .setDataColloRif(cloneMtbColr.getDataColloS())
+ .setDataCollo(null);
+
+ mtbColrObservableField.add(cloneMtbColr);
+ }
+
+ clonedTestata.setMtbColr(mtbColrObservableField);
+
+ saveLU(clonedTestata);
+ }
+
+ });
+
+ }, () -> {
+ progressDialog.dismiss();
+ BarcodeManager.enable();
+ }).show();
+ }
+
+
+ private void askQuantities(Iterator sourceMtbColrs, List destMtbColr, Runnable onComplete){
+
+ if(sourceMtbColrs.hasNext()){
+
+ askSingleQuantity(sourceMtbColrs.next(), mtbColr -> {
+ destMtbColr.add(mtbColr);
+ askQuantities(sourceMtbColrs, destMtbColr, onComplete);
+ });
+ } else {
+ onComplete.run();
+ }
+ }
+
+
+ private void askSingleQuantity(MtbColr mtbColr, RunnableArgs onComplete) {
+ DialogInputQuantity.DTO dto = new DialogInputQuantity.DTO()
+ .setBatchLot(mtbColr.getPartitaMag())
+ .setDataScad(mtbColr.getDataScadPartitaD())
+ .setMtbAart(mtbColr.getMtbAart())
+ .setQtaTot(mtbColr.getQtaCol())
+ .setQtaOrd(mtbColr.getQtaCol())
+ .setQtaDaEvadere(new BigDecimal(-1))
+ .setQtaEvasa(BigDecimal.ZERO)
+ .setCanPartitaMagBeChanged(false)
+ .setCanDataScadBeChanged(false)
+ .setMaxQta(mtbColr.getQtaCol());
+
+ DialogInputQuantity.makeBase(mContext, dto, false, quantityDTO -> {
+ mtbColr
+ .setQtaCol(new BigDecimal(quantityDTO.qtaTot.get()))
+ .setQtaCnf(new BigDecimal(quantityDTO.qtaCnf.get()))
+ .setNumCnf(new BigDecimal(quantityDTO.numCnf.get()))
+ .setDatetimeRow(new Date());
+
+ onComplete.run(mtbColr);
+ }).show();
+ }
+
+
+
+ private void saveLU(MtbColt mtbColtToSave) {
+ mtbColtToSave.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE);
+
+ for(int i = 0; i < mtbColtToSave.getMtbColr().size(); i++) {
+ mtbColtToSave.getMtbColr().get(i).setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE);
+ }
+
+ ProgressDialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext);
+
+ ColliMagazzinoRESTConsumer.saveCollo(mtbColtToSave, value -> {
+ mtbColt.get().getMtbColr().addAll(mtbColtToSave.getMtbColr());
+
+ for(int i = 0; i < mtbColt.get().getMtbColr().size(); i++) {
+ mtbColt.get().getMtbColr().get(i).setOperation(CommonModelConsts.OPERATION.NO_OP);
+ }
+
+ progressDialog.dismiss();
+ BarcodeManager.enable();
+ }, ex -> {
+ BarcodeManager.enable();
+ UtilityExceptions.defaultException(mContext, ex, progressDialog);
+ });
+
+ }
+
+
+ private void showDataSavedDialog() {
+
+ DialogSimpleMessageHelper.makeSuccessDialog(
+ mContext,
+ mContext.getResources().getString(R.string.completed),
+ new SpannableString(mContext.getResources().getString(R.string.data_saved)),
+ null, null).show();
+
+ }
+
+
+ private void showNoULFound(Runnable onComplete) {
+ DialogSimpleMessageHelper.makeWarningDialog(mContext,
+ new SpannableString(mContext.getResources().getText(R.string.no_lu_found_message)),
+ null, onComplete).show();
+ }
+
+
+
+
+
+ public void createNewLU() {
+ createNewLU(null, null, null);
+ }
+
+ private void createNewLU(Integer customNumCollo, String customSerCollo, Runnable onComplete) {
+
+ ProgressDialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext);
+
+ MtbColt mtbColt = new MtbColt();
+ mtbColt .setGestione(GestioneEnum.VENDITA)
+ .setSegno(-1)
+ .setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE);
+
+ if(customNumCollo != null) {
+ mtbColt.setNumCollo(customNumCollo);
+ }
+
+ if(!UtilityString.isNullOrEmpty(customSerCollo)) {
+ mtbColt.setSerCollo(customSerCollo);
+ }
+
+ ColliMagazzinoRESTConsumer.saveCollo(mtbColt, savedMtbColt -> {
+ savedMtbColt.setMtbColr(new ObservableArrayList<>());
+ setULToCurrentContext(savedMtbColt);
+
+ progressDialog.dismiss();
+
+ new StatusBarAlert.Builder(mContext)
+ .autoHide(true)
+ .withDuration(2500)
+ .showProgress(false)
+ .withText(R.string.data_saved)
+ .withAlertColor(R.color.mainGreen)
+ .build();
+
+ if(onComplete != null) onComplete.run();
+
+ }, ex -> UtilityExceptions.defaultException(mContext, ex, progressDialog));
+ }
+
+
+ private void setULToCurrentContext(MtbColt mtbColt){
+ this.mtbColt.set(mtbColt);
+ }
+
+
+ public void closeLU() {
+ if(thereIsAnOpenedUL.get()) {
+ final ProgressDialog progress = UtilityProgress.createDefaultProgressDialog(mContext);
+
+ if(thereIsAnyRowInUL.get()) {
+ updateDataFine(progress, null); //() -> distribuisciCollo(progress, () -> printCollo(progress)));
+ } else {
+ deleteCollo(progress);
+ }
+
+ }
+ }
+
+ private void updateDataFine(ProgressDialog progress, Runnable onComplete) {
+
+ MtbColt cloneMtbColt = (MtbColt) this.mtbColt.get().clone();
+ cloneMtbColt.setOperation(CommonModelConsts.OPERATION.NO_OP);
+ cloneMtbColt.setOraFinePrep(new Date());
+
+
+ ColliMagazzinoRESTConsumer.saveCollo(cloneMtbColt, new ISimpleOperationCallback() {
+ @Override
+ public void onSuccess(MtbColt value) {
+ if(onComplete != null) onComplete.run();
+ }
+
+ @Override
+ public void onFailed(Exception ex) {
+ UtilityExceptions.defaultException(mContext, ex, progress);
+ }
+ });
+
+ }
+
+ private void deleteCollo(ProgressDialog progress) {
+
+ ColliMagazzinoRESTConsumer.deleteCollo(this.mtbColt.get(), () -> {
+ this.mtbColt.set(null);
+
+ progress.dismiss();
+ }, ex -> UtilityExceptions.defaultException(mContext, ex, progress)
+ );
+ }
+
+}
diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/vendita/MainVenditaFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/MainVenditaFragment.java
index 2750abea..f762f7f6 100644
--- a/app/src/main/java/it/integry/integrywmsnative/gest/vendita/MainVenditaFragment.java
+++ b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/MainVenditaFragment.java
@@ -10,6 +10,9 @@ import androidx.recyclerview.widget.LinearLayoutManager;
import android.text.Html;
import android.text.SpannableString;
import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
@@ -34,6 +37,7 @@ import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityToast;
import it.integry.integrywmsnative.databinding.FragmentMainVenditaBinding;
import it.integry.integrywmsnative.core.interfaces.ITitledFragment;
+import it.integry.integrywmsnative.gest.picking_libero.PickingLiberoActivity;
import it.integry.integrywmsnative.gest.vendita.core.MainListVenditaAdapter;
import it.integry.integrywmsnative.gest.vendita.core.VenditaHelper;
import it.integry.integrywmsnative.gest.vendita.dialogs.DialogVenditaFiltroAvanzato;
@@ -87,6 +91,8 @@ public class MainVenditaFragment extends Fragment implements ITitledFragment, IR
if (getArguments() != null) {
}
+ setHasOptionsMenu(true);
+
init();
}
@@ -114,6 +120,25 @@ public class MainVenditaFragment extends Fragment implements ITitledFragment, IR
return mBinding.getRoot();
}
+ @Override
+ public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+ inflater.inflate(R.menu.fragment_vendita, menu);
+ super.onCreateOptionsMenu(menu, inflater);
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+
+ if(item.getItemId() == R.id.action_free_picking) {
+ Intent myIntent = new Intent(getActivity(), PickingLiberoActivity.class);
+ startActivity(myIntent);
+ }
+
+ return true;
+
+ }
+
+
private void init(){
final ProgressDialog progress = ProgressDialog.show(getActivity(), getText(R.string.waiting),
diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/vendita/dto/PickingObjectDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/dto/PickingObjectDTO.java
index 5b715d28..f84225e9 100644
--- a/app/src/main/java/it/integry/integrywmsnative/gest/vendita/dto/PickingObjectDTO.java
+++ b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/dto/PickingObjectDTO.java
@@ -6,10 +6,14 @@ import android.os.Parcelable;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
+import java.util.ArrayList;
import java.util.Date;
+import java.util.List;
import it.integry.integrywmsnative.core.REST.model.Ean128Model;
import it.integry.integrywmsnative.core.model.MtbAart;
+import it.integry.integrywmsnative.core.model.MtbColr;
+import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityLogger;
import it.integry.integrywmsnative.core.utility.UtilityString;
@@ -43,6 +47,8 @@ public class PickingObjectDTO implements Parcelable {
private Boolean tempHidden = null;
private PickData tempPickData = null;
+ private List withdrawRows = new ArrayList<>();
+
protected PickingObjectDTO(Parcel in) {
if (in.readByte() == 0) {
numCollo = null;
@@ -417,12 +423,22 @@ public class PickingObjectDTO implements Parcelable {
return this;
}
+ public List getWithdrawRows() {
+ return withdrawRows;
+ }
+
+ public PickingObjectDTO setWithdrawRows(List withdrawRows) {
+ this.withdrawRows = withdrawRows;
+ return this;
+ }
+
public static class PickData {
private String batchLot;
private BigDecimal qtaTot;
private BigDecimal qtaCnf;
private BigDecimal numCnf;
private Date dataScad;
+ private MtbColt sourceMtbColt;
public String getBatchLot() {
@@ -470,7 +486,14 @@ public class PickingObjectDTO implements Parcelable {
return this;
}
+ public MtbColt getSourceMtbColt() {
+ return sourceMtbColt;
+ }
+ public PickData setSourceMtbColt(MtbColt sourceMtbColt) {
+ this.sourceMtbColt = sourceMtbColt;
+ return this;
+ }
public static PickData fromEan128(Ean128Model ean128Model) {
PickingObjectDTO.PickData pickData = null;
diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/core/VenditaOrdineInevasoHelper.java b/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/core/VenditaOrdineInevasoHelper.java
index 2780cdb5..c58379c5 100644
--- a/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/core/VenditaOrdineInevasoHelper.java
+++ b/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/core/VenditaOrdineInevasoHelper.java
@@ -133,13 +133,14 @@ public class VenditaOrdineInevasoHelper {
if(mtbColrs != null) {
- List filteredMtbColrs = Stream.of(mtbColrs).filter(
- x -> x.getCodMart().equalsIgnoreCase(item.getCodMart()) &&
- ((x.getCodJcom() == null && item.getCodJcom() == null) || (x.getCodJcom() != null && x.getCodJcom().equalsIgnoreCase(item.getCodJcom()))) &&
- (!SettingsManager.iDB().isEnableCheckPartitaMagCheckPickingV() || (SettingsManager.iDB().isEnableCheckPartitaMagCheckPickingV() && ((x.getPartitaMag() == null && item.getPartitaMag() == null) || (x.getPartitaMag() != null && x.getPartitaMag().equalsIgnoreCase(item.getPartitaMag()))))) &&
- ((x.getNumColloRif() == null && item.getNumCollo() == null) || (x.getNumColloRif() != null && x.getNumColloRif().equals(item.getNumCollo())))).toList();
- for (MtbColr mtbColr : filteredMtbColrs) {
+// List filteredMtbColrs = Stream.of(mtbColrs).filter(
+// x -> x.getCodMart().equalsIgnoreCase(item.getCodMart()) &&
+// ((x.getCodJcom() == null && item.getCodJcom() == null) || (x.getCodJcom() != null && x.getCodJcom().equalsIgnoreCase(item.getCodJcom()))) &&
+// (!SettingsManager.iDB().isEnableCheckPartitaMagCheckPickingV() || (SettingsManager.iDB().isEnableCheckPartitaMagCheckPickingV() && ((x.getPartitaMag() == null && item.getPartitaMag() == null) || (x.getPartitaMag() != null && x.getPartitaMag().equalsIgnoreCase(item.getPartitaMag()))))) &&
+// ((x.getNumColloRif() == null && item.getNumCollo() == null) || (x.getNumColloRif() != null && x.getNumColloRif().equals(item.getNumCollo())))).toList();
+
+ for (MtbColr mtbColr : item.getWithdrawRows()) {
currentQtaEvasa = currentQtaEvasa.add(mtbColr.getQtaCol());
}
}
diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/viewmodel/VenditaOrdineInevasoViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/viewmodel/VenditaOrdineInevasoViewModel.java
index bbb23db0..8d9a536a 100644
--- a/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/viewmodel/VenditaOrdineInevasoViewModel.java
+++ b/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/viewmodel/VenditaOrdineInevasoViewModel.java
@@ -235,7 +235,7 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO
for(int i = 0; i < recoveredMtbColt.getMtbColr().size(); i++){
- MtbColr currentMtbColr = recoveredMtbColt.getMtbColr().get(i);
+// MtbColr currentMtbColr = recoveredMtbColt.getMtbColr().get(i);
// List foundRows = Stream.of(groupedOrdini)
// .filter(x -> x.getNumOrd() == currentMtbColr.getNumOrd() &&
@@ -260,7 +260,6 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO
public RunnableArgs onScanSuccessfull = data -> {
ProgressDialog progressDialog = UtilityProgress.createDefaultProgressDialog(mActivity);
- progressDialog.show();
BarcodeManager.disable();
@@ -431,7 +430,6 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO
final List pickingList = mPickingList;
-
List matchPickingObject = Stream.of(pickingList)
.filter(x -> Objects.equals(x.getNumCollo(), scannedUL.getNumCollo()) &&
x.getDataColloS().equals(scannedUL.getDataColloS()) &&
@@ -440,20 +438,21 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO
//Cerco se devo fare pick dell'articolo tramite codMart perché forse non risulta in nessun collo
- if(matchPickingObject != null && matchPickingObject.size() == 0 && scannedUL.getMtbColr() != null && scannedUL.getMtbColr().size() > 0) {
+ //if(matchPickingObject != null && matchPickingObject.size() == 0 && scannedUL.getMtbColr() != null && scannedUL.getMtbColr().size() > 0) {
List listOfCodMartsInRowCollo = Stream.of(scannedUL.getMtbColr())
.map(MtbColr::getCodMart)
.withoutNulls()
.toList();
- matchPickingObject = Stream.of(pickingList)
- .filter(x -> x.getNumCollo() == null &&
+ List matchPickingObjectByArt = Stream.of(pickingList)
+ .filter(x -> //x.getNumCollo() == null &&
(listOfCodMartsInRowCollo.contains(x.getCodMart())))
.toList();
+
if(SettingsManager.iDB().isEnableCheckPartitaMagCheckPickingV()) {
- for (int i = 0; i < matchPickingObject.size(); i++) {
- PickingObjectDTO tmpPickObj = matchPickingObject.get(i);
+ for (int i = 0; i < matchPickingObjectByArt.size(); i++) {
+ PickingObjectDTO tmpPickObj = matchPickingObjectByArt.get(i);
@@ -464,7 +463,7 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO
boolean anyMatch = matchWithPartitaMag.size() > 0;
if(!anyMatch) {
- matchPickingObject.remove(i);
+ matchPickingObjectByArt.remove(i);
i--;
} else if(matchWithPartitaMag.size() == 1){
MtbColr matchRow = matchWithPartitaMag.get(0);
@@ -474,15 +473,17 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO
.setDataScad(matchRow.getDataScadPartitaD())
.setNumCnf(matchRow.getNumCnf())
.setQtaCnf(matchRow.getQtaCnf())
- .setQtaTot(matchRow.getQtaCol());
+ .setQtaTot(matchRow.getQtaCol())
+ .setSourceMtbColt(scannedUL);
tmpPickObj.setTempPickData(pickData);
}
}
- } else {
- for (int i = 0; i < matchPickingObject.size(); i++) {
- PickingObjectDTO tmpPickObj = matchPickingObject.get(i);
+ } else {
+ for (int i = 0; i < matchPickingObjectByArt.size(); i++) {
+
+ PickingObjectDTO tmpPickObj = matchPickingObjectByArt.get(i);
List matchWithColloRow = Stream.of(scannedUL.getMtbColr())
.filter(x -> x.getCodMart().equalsIgnoreCase(tmpPickObj.getCodMart())).toList();
@@ -494,7 +495,8 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO
.setDataScad(matchRow.getDataScadPartitaD())
.setNumCnf(matchRow.getNumCnf())
.setQtaCnf(matchRow.getQtaCnf())
- .setQtaTot(matchRow.getQtaCol());
+ .setQtaTot(matchRow.getQtaCol())
+ .setSourceMtbColt(scannedUL);
tmpPickObj.setTempPickData(pickData);
}
@@ -503,7 +505,10 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO
}
- }
+
+
+ //}
+ matchPickingObject.addAll(matchPickingObjectByArt);
this.loadMatchedRows(matchPickingObject);
@@ -915,7 +920,16 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO
.setDescrizione(item.getDescrizioneEstesa())
.setDatetimeRow(new Date());
- if(item.getNumCollo() != null) {
+ if(item.getTempPickData() != null && item.getTempPickData().getSourceMtbColt() != null) {
+ MtbColt sourceMtbColt = item.getTempPickData().getSourceMtbColt();
+
+ mtbColr
+ .setCodJcom(UtilityString.empty2null(item.getCodJcom()))
+ .setSerColloRif(UtilityString.empty2null(sourceMtbColt.getSerCollo()))
+ .setNumColloRif(sourceMtbColt.getNumCollo())
+ .setGestioneRif(UtilityString.empty2null(sourceMtbColt.getGestione()))
+ .setDataColloRif(UtilityString.empty2null(sourceMtbColt.getDataColloS()));
+ } else if(item.getNumCollo() != null) {
mtbColr
.setCodJcom(UtilityString.empty2null(item.getCodJcom()))
.setSerColloRif(UtilityString.empty2null(item.getSerCollo()))
@@ -947,6 +961,8 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO
.setUntMis(item.getMtbAart().getUntMis())
.setMtbAart(item.getMtbAart());
+ item.getWithdrawRows().add(mtbColr);
+
mArticoliInColloBottomSheetViewModel.mtbColt.get().getMtbColr().add(mtbColr);
//Chiamato removeListFilter perché cosi mi cancella tutti i dati di pick temporanei
diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/DialogSimpleMessageHelper.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/DialogSimpleMessageHelper.java
index 67780561..0c9a48e3 100644
--- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/DialogSimpleMessageHelper.java
+++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/DialogSimpleMessageHelper.java
@@ -109,6 +109,7 @@ public class DialogSimpleMessageHelper {
.setCustomTitle(titleView)
.setView(contentView)
// .setMessage(messageText)
+ .setCancelable(false)
.setPositiveButton(mContext.getText(R.string.ok), (dialog, which) -> {
if(onPositiveClick != null) onPositiveClick.run();
});
diff --git a/app/src/main/res/drawable/ic_check_white_24dp.xml b/app/src/main/res/drawable/ic_check_white_24dp.xml
new file mode 100644
index 00000000..6541ee3e
--- /dev/null
+++ b/app/src/main/res/drawable/ic_check_white_24dp.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/layout/activity_picking_libero.xml b/app/src/main/res/layout/activity_picking_libero.xml
new file mode 100644
index 00000000..68a98e44
--- /dev/null
+++ b/app/src/main/res/layout/activity_picking_libero.xml
@@ -0,0 +1,193 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/dialog_choose_art_from_lista_art__item_model.xml b/app/src/main/res/layout/dialog_choose_art_from_lista_art__item_model.xml
index e977c145..ca439a10 100644
--- a/app/src/main/res/layout/dialog_choose_art_from_lista_art__item_model.xml
+++ b/app/src/main/res/layout/dialog_choose_art_from_lista_art__item_model.xml
@@ -50,7 +50,7 @@
android:textColor="@color/red_600"
android:textSize="14sp"
android:textStyle="bold"
- android:visibility="@{UtilityString.isNullOrEmpty(mtbAart.diacod) ? View.INVISIBLE : View.VISIBLE}"
+ android:visibility="@{UtilityString.isNullOrEmpty(mtbAart.diacod) ? View.GONE : View.VISIBLE}"
android:layout_alignParentEnd="true"
tools:text="DIACOD"/>
diff --git a/app/src/main/res/layout/dialog_choose_arts_from_lista_arts__item_model.xml b/app/src/main/res/layout/dialog_choose_arts_from_lista_arts__item_model.xml
index edb03fa9..f01baf5b 100644
--- a/app/src/main/res/layout/dialog_choose_arts_from_lista_arts__item_model.xml
+++ b/app/src/main/res/layout/dialog_choose_arts_from_lista_arts__item_model.xml
@@ -53,7 +53,18 @@
tools:text="COD MART" />
-
+
+
+
+
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index b7566829..63a94bd1 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -132,6 +132,7 @@
Il barcode scansionato non ha fornito alcun risultato
+ Il barcode scansionato ha fornito multipli risultati
Filtro articoli applicato
Rimuovi filtro
@@ -163,6 +164,11 @@
Livello
Non valido
-
+
+ Tutti i permessi sono stati declinati, riapri l\'applicazione per continuare.
+ Download aggiornamento
+ Picking libero
+ Per iniziare clicca sul + in basso a destra
+ Scansiona un articolo per iniziare
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 3b0dba4f..34f6fbdc 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -142,6 +142,7 @@
The scanned label has already been used
The scanned barcode did not produce any results
+ The scanned barcode produced multiple results
Item filter applied
Remove filter
@@ -171,6 +172,11 @@
Multiple LU found
Do you want print the label?
Please scan a Position barcode
- Please note that all permissions are required. Application will close now.
+ Please note that all permissions are required. Application will close now.
+ All permissions are required, please reopen the app.
+ Downloading update
+ Free Picking
+ Please press + button to start with picking
+ Scan an item to start
diff --git a/app/src/main/res/xml/provider_paths.xml b/app/src/main/res/xml/provider_paths.xml
new file mode 100644
index 00000000..ffa74ab5
--- /dev/null
+++ b/app/src/main/res/xml/provider_paths.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file