From f967514f97f47f0eeb3e1f59a8c10f09b052961c Mon Sep 17 00:00:00 2001 From: GiuseppeS Date: Tue, 22 Nov 2022 17:42:24 +0100 Subject: [PATCH] Completamento inventario WMS --- app/src/main/AndroidManifest.xml | 1 + .../core/data_store/db/dao/InventarioDao.java | 3 +- .../consumers/InventarioRESTConsumer.java | 2 +- .../core/utility/PermissionsHelper.java | 28 ++++--------- .../core/utility/UtilityLiveData.java | 18 ++++++++ .../inventario/ElencoInventariViewModel.java | 3 +- .../picking/PickingInventarioActivity.java | 17 +++++--- .../picking/PickingInventarioViewModel.java | 41 ++++++++++++++++++- 8 files changed, 83 insertions(+), 30 deletions(-) create mode 100644 app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityLiveData.java diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0ee7c2e0..836facd1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -78,6 +78,7 @@ android:name=".gest.inventario.picking.PickingInventarioActivity" android:label="@string/activity_picking_inventario_title" android:screenOrientation="portrait" + android:windowSoftInputMode="adjustNothing" android:theme="@style/Light"/> { @Query("SELECT * FROM " + InventarioRoomDTO.TABLE_NAME + - " WHERE ((:toBeSync = 1 AND " + BaseSyncDTO.Columns.COLUMN_REMOTE_SYNC_DATE + " IS NULL) OR (:toBeSync = 0))") + " WHERE ((:toBeSync = 1 AND " + BaseSyncDTO.Columns.COLUMN_REMOTE_SYNC_DATE + " IS NULL) OR (:toBeSync = 0))" + + " ORDER BY " + InventarioRoomDTO.Columns.DATA_INVENTARIO + " DESC") Flowable> selectAllFlowable(boolean toBeSync); } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/InventarioRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/InventarioRESTConsumer.java index 03f1e646..4c2daeb9 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/InventarioRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/InventarioRESTConsumer.java @@ -57,7 +57,7 @@ public class InventarioRESTConsumer extends _BaseRESTConsumer { var request = new InsertInventarioRequestDTO() .setMtbInvent(inventarioToInsert); - var inventarioRESTConsumerService = RESTBuilder.getService(InventarioRESTConsumerService.class); + var inventarioRESTConsumerService = RESTBuilder.getService(InventarioRESTConsumerService.class, 120); inventarioRESTConsumerService .insert(inventarioToInsert.getIdInventario(), request) .enqueue(new Callback<>() { 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 c68e7828..aef9d815 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 @@ -43,33 +43,21 @@ public class PermissionsHelper { activity.setOnRequestPermissionsResult((requestCode, permissions, grantResults) -> { - switch (requestCode) { - case 1: { + if (requestCode == 1) { + boolean allGranted = Stream.of(grantResults).allMatch(x -> x == PackageManager.PERMISSION_GRANTED); - 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(); - // 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 { + boolean anyPermDeny = shouldShowRequestPermissionRationale(activity, permissions); + onPermissionsDenied.run(anyPermDeny); } - - // 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) { diff --git a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityLiveData.java b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityLiveData.java new file mode 100644 index 00000000..b84a6faa --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityLiveData.java @@ -0,0 +1,18 @@ +package it.integry.integrywmsnative.core.utility; + +import androidx.lifecycle.LiveData; +import androidx.lifecycle.Observer; + +public class UtilityLiveData { + + public static void observeOnce(final LiveData liveData, final Observer observer) { + liveData.observeForever(new Observer() { + @Override + public void onChanged(T t) { + liveData.removeObserver(this); + observer.onChanged(t); + } + }); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/inventario/ElencoInventariViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/inventario/ElencoInventariViewModel.java index 07e734b3..70c36d60 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/inventario/ElencoInventariViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/inventario/ElencoInventariViewModel.java @@ -64,7 +64,8 @@ public class ElencoInventariViewModel { var matchedInventory = getInventarioList().getValue() .stream() - .filter(x -> Objects.equals(x.getIdInventario(), inventoryId) && UtilityString.equalsIgnoreCase(x.getZona(), zone)) + .filter(x -> Objects.equals(x.getIdInventario(), inventoryId) && UtilityString.equalsIgnoreCase(x.getZona(), zone) && + !x.isSyncronized()) .findFirst() .orElse(null); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/inventario/picking/PickingInventarioActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/inventario/picking/PickingInventarioActivity.java index 31b8698c..509a59d2 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/inventario/picking/PickingInventarioActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/inventario/picking/PickingInventarioActivity.java @@ -14,6 +14,7 @@ import com.ravikoradiya.liveadapter.Type; import java.math.BigDecimal; import java.util.Date; import java.util.List; +import java.util.Objects; import javax.inject.Inject; @@ -89,19 +90,23 @@ public class PickingInventarioActivity extends BaseActivity implements PickingIn .inject(this); mViewModel.setListener(this); + mBindings.setViewmodel(mViewModel); + + initToolbar(); + initBarcodeReader(); + } + + @Override + protected void onStart() { + super.onStart(); mViewModel.init( DataCache.retrieveItem(getIntent().getStringExtra(KEY_INVENTARIO)), DataCache.retrieveItem(getIntent().getStringExtra(KEY_INVENTARIO_ARTS))); - mBindings.setViewmodel(mViewModel); - initToolbar(); initRecyclerView(); - initBarcodeReader(); } - - @Override public boolean onSupportNavigateUp() { onBackPressed(); @@ -127,6 +132,8 @@ public class PickingInventarioActivity extends BaseActivity implements PickingIn }); var itemType = new Type(R.layout.activity_picking_inventario__list_item, BR.item); + itemType.areItemSame((oldItem, newItem) -> Objects.equals(oldItem.getId(), newItem.getId())); + itemType.areContentsTheSame((oldItem, newItem) -> Objects.equals(oldItem.getId(), newItem.getId())); itemType.onClick(x -> { new BottomSheetInventarioRowActionsView(x.getBinding().getItem()) .setListener(new BottomSheetInventarioRowActionsView.Listener() { diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/inventario/picking/PickingInventarioViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/inventario/picking/PickingInventarioViewModel.java index cef1f930..7c7de7b5 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/inventario/picking/PickingInventarioViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/inventario/picking/PickingInventarioViewModel.java @@ -2,12 +2,14 @@ package it.integry.integrywmsnative.gest.inventario.picking; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; +import androidx.lifecycle.ViewModel; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.Random; import java.util.stream.Collectors; import it.integry.barcode_base_android_library.model.BarcodeScanDTO; @@ -26,11 +28,12 @@ import it.integry.integrywmsnative.core.rest.model.inventario.InventarioArtDTO; import it.integry.integrywmsnative.core.utility.UtilityBarcode; import it.integry.integrywmsnative.core.utility.UtilityBigDecimal; import it.integry.integrywmsnative.core.utility.UtilityDate; +import it.integry.integrywmsnative.core.utility.UtilityLiveData; import it.integry.integrywmsnative.gest.spedizione.exceptions.InvalidPesoKGException; import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO; import it.integry.integrywmsnative.gest.spedizione.model.PickingObjectDTO; -public class PickingInventarioViewModel { +public class PickingInventarioViewModel extends ViewModel { private final InventarioRepository inventarioRepository; @@ -50,9 +53,38 @@ public class PickingInventarioViewModel { } public void init(InventarioRoomDTO inventarioRoomDTO, List inventarioArts) { + this.sendOnLoadingStarted(); + this.currentInventario.postValue(inventarioRoomDTO); this.currentInventarioRows = inventarioRowRepository.retrieve(inventarioRoomDTO.getId()); this.availableInventarioArts = inventarioArts == null ? new ArrayList<>() : inventarioArts; + + UtilityLiveData.observeOnce(this.currentInventarioRows, data -> { + this.sendOnLoadingEnded(); + }); + + this.sendOnLoadingEnded(); + } + + private void generateRandomItems() { + for (int i = 0; i < 500; i++) { + Random r = new Random(); + int randomIndex = r.nextInt(availableInventarioArts.size()); + + + var item = getAvailableArts().get(randomIndex); + var itemMtbAart = item.toMtbAart(); + + var fakePickingObjectDto = new PickingObjectDTO() + .setMtbAart(itemMtbAart); + + var qta = BigDecimal.valueOf(r.nextInt(50)); + var numCnf = UtilityBigDecimal.multiply(qta, itemMtbAart.getQtaCnf()); + + saveNewRow(fakePickingObjectDto, qta, itemMtbAart.getQtaCnf(), numCnf, null, null); + } + + } public LiveData getCurrentInventario() { @@ -95,8 +127,13 @@ public class PickingInventarioViewModel { public void exportAll(Runnable onComplete) { + this.sendOnLoadingStarted(); currentInventario.getValue().setInventarioRowList(this.currentInventarioRows.getValue()); - this.inventarioRepository.export(currentInventario.getValue(), onComplete, this::sendError); + + this.inventarioRepository.export(currentInventario.getValue(), () -> { + this.sendOnLoadingEnded(); + onComplete.run(); + }, this::sendError); }