diff --git a/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java b/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java index a49ae8b1..a8d66c0d 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java @@ -56,6 +56,7 @@ public class DBSettingsModel { private boolean showCodFornSpedizione = true; private boolean flagCanCreateInventario = true; private boolean flagCanAddUnknownItemsInventario = true; + private boolean flagShouldAskToCreateOrUpdateRowInventario = false; public boolean isFlagSpedizioneEnableFakeGiacenza() { return flagSpedizioneEnableFakeGiacenza; @@ -418,6 +419,15 @@ public class DBSettingsModel { return this; } + public boolean isFlagShouldAskToCreateOrUpdateRowInventario() { + return flagShouldAskToCreateOrUpdateRowInventario; + } + + public DBSettingsModel setFlagShouldAskToCreateOrUpdateRowInventario(boolean flagShouldAskToCreateOrUpdateRowInventario) { + this.flagShouldAskToCreateOrUpdateRowInventario = flagShouldAskToCreateOrUpdateRowInventario; + return this; + } + public boolean isFlagConsentiFuoriPianoLogistico() { return flagConsentiFuoriPianoLogistico; } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java b/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java index d2c4832b..a65aa78f 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java @@ -363,6 +363,10 @@ public class SettingsManager { .setGestName("PICKING") .setSection("INVENTARIO") .setKeySection("FLAG_CAN_ADD_UNKNOWN_ITEMS")); + stbGestSetupList.add(new StbGestSetup() + .setGestName("PICKING") + .setSection("INVENTARIO") + .setKeySection("FLAG_SHOULD_ASK_TO_CREATE_OR_UPDATE_ROW")); String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep(); mGestSetupRESTConsumer.getValues(codMdep, stbGestSetupList, list -> { @@ -398,6 +402,7 @@ public class SettingsManager { dbSettingsModelIstance.setGroupShippingByCommodityGroup(getValueFromList(list, "SPEDIZIONE", "FLAG_GROUP_BY_GRP_MERC", Boolean.class, Boolean.FALSE)); dbSettingsModelIstance.setFlagCanCreateInventario(getValueFromList(list, "INVENTARIO", "FLAG_CAN_CREATE_INVENTARIO", Boolean.class, Boolean.TRUE)); dbSettingsModelIstance.setFlagCanAddUnknownItemsInventario(getValueFromList(list, "INVENTARIO", "FLAG_CAN_ADD_UNKNOWN_ITEMS", Boolean.class, Boolean.TRUE)); + dbSettingsModelIstance.setFlagShouldAskToCreateOrUpdateRowInventario(getValueFromList(list, "INVENTARIO", "FLAG_SHOULD_ASK_TO_CREATE_OR_UPDATE_ROW", Boolean.class, Boolean.FALSE)); String notePerdita = getValueFromList(list, "DOC_INTERNI", "NOTE_PERDITA", String.class); if (notePerdita != null) @@ -435,7 +440,7 @@ public class SettingsManager { } else if (clazz == Integer.class && value.getValue() != null) { return clazz.cast(Integer.parseInt(value.getValue())); } - } else { + } else if(defaultValue == null) { if (clazz == Boolean.class) { return clazz.cast(Boolean.FALSE); } else if (clazz == Integer.class) { 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 a399dabb..6e13463f 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 @@ -36,6 +36,8 @@ import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.databinding.ActivityPickingInventarioBinding; import it.integry.integrywmsnative.databinding.ActivityPickingInventarioListItemBinding; +import it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.dialog.selectDocRows.DialogSelectDocRowsItemListModel; +import it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.dialog.selectDocRows.DialogSelectDocRowsView; import it.integry.integrywmsnative.gest.inventario.bottom_sheet__inventario_row_actions.BottomSheetInventarioRowActionsView; import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO; import it.integry.integrywmsnative.gest.spedizione.model.PickingObjectDTO; @@ -99,7 +101,8 @@ public class PickingInventarioActivity extends BaseActivity implements PickingIn mViewModel.init( DataCache.retrieveItem(getIntent().getStringExtra(KEY_INVENTARIO)), DataCache.retrieveItem(getIntent().getStringExtra(KEY_INVENTARIO_ARTS)), - SettingsManager.iDB().isFlagCanAddUnknownItemsInventario()); + SettingsManager.iDB().isFlagCanAddUnknownItemsInventario(), + SettingsManager.iDB().isFlagShouldAskToCreateOrUpdateRowInventario()); initToolbar(); initBarcodeReader(); @@ -236,6 +239,36 @@ public class PickingInventarioActivity extends BaseActivity implements PickingIn .show(getSupportFragmentManager(), "tag"); } + @Override + public void onItemAlreadyFound(InventarioArtDTO matchedArt, List alreadyScannedItems) { + final List> dialogSelectDocRowsItemListModels = Stream.of(alreadyScannedItems) + .map(x -> new DialogSelectDocRowsItemListModel<>() + .setBarcode(x.getScanCodBarre()) + .setCodMart(x.getCodMart()) + .setDescrizione(x.getDescrizione()) + .setQtaOrd(x.getQta()) + .setUntMisOrd(x.getUntMis()) + .setNew(false) + .setOriginalModel(x)) + .toList(); + + dialogSelectDocRowsItemListModels.add(new DialogSelectDocRowsItemListModel<>() + .setCodMart(matchedArt.getCodMart()) + .setDescrizione(matchedArt.getDescrizione()) + .setQtaOrd(BigDecimal.ZERO) + .setUntMisOrd(matchedArt.getUntMis()) + .setNew(true)); + + DialogSelectDocRowsView.newInstance(dialogSelectDocRowsItemListModels, data -> { + if(data.isNew()) + this.mViewModel.dispatchRowInsert(null, matchedArt, null); + else + this.mViewModel.dispatchRowEdit(matchedArt.toMtbAart(), (InventarioRowRoomDTO) data.getOriginalModel()); + }, () -> { + + }).show(this.getSupportFragmentManager(), "DialogSelectDocRowsView"); + } + public void showAvailableArts() { var listaMtbAart = Stream.of(this.mViewModel.getAvailableArts()) .map(InventarioArtDTO::toMtbAart) 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 3bf83309..6c06338b 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 @@ -4,6 +4,8 @@ import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; +import com.annimon.stream.Stream; + import java.math.BigDecimal; import java.math.RoundingMode; import java.util.ArrayList; @@ -37,6 +39,7 @@ public class PickingInventarioViewModel extends ViewModel { private final InventarioRowRepository inventarioRowRepository; private boolean canAddUnknownItems; + private boolean flagShouldAskToCreateOrUpdateRowInventario; public MutableLiveData currentInventario = new MutableLiveData<>(); public LiveData> currentInventarioRows = new MutableLiveData<>(); @@ -51,8 +54,9 @@ public class PickingInventarioViewModel extends ViewModel { this.inventarioRowRepository = inventarioRowRepository; } - public void init(InventarioRoomDTO inventarioRoomDTO, List inventarioArts, boolean canAddUnknownItems) { + public void init(InventarioRoomDTO inventarioRoomDTO, List inventarioArts, boolean canAddUnknownItems, boolean flagShouldAskToCreateOrUpdateRowInventario) { this.canAddUnknownItems = canAddUnknownItems; + this.flagShouldAskToCreateOrUpdateRowInventario = flagShouldAskToCreateOrUpdateRowInventario; this.sendOnLoadingStarted(); @@ -159,24 +163,41 @@ public class PickingInventarioViewModel extends ViewModel { if (canAddUnknownItems && matchedArt == null) { matchedArt = new InventarioArtDTO() - .setBarcode(barcodeList) - .setFlagQtaCnfFissa(true) - .setPlu(false) - .setUntMis("PZ") - .setQtaCnf(BigDecimal.ONE); + .setBarcode(barcodeList) + .setFlagQtaCnfFissa(true) + .setPlu(false) + .setUntMis("PZ") + .setQtaCnf(BigDecimal.ONE); } if (matchedArt != null) { - this.dispatchRowInsert(barcodeProd, matchedArt, ean128Model); + var alreadyScannedItems = searchArtInAlreadyScannedItems(matchedArt); + + if (alreadyScannedItems == null || alreadyScannedItems.isEmpty() || !flagShouldAskToCreateOrUpdateRowInventario) + this.dispatchRowInsert(barcodeProd, matchedArt, ean128Model); + + else { + this.sendOnItemAlreadyFound(matchedArt, alreadyScannedItems); + + } onComplete.run(); } else this.sendError(new NoResultFromBarcodeException(barcodeProd)); + } + private List searchArtInAlreadyScannedItems(InventarioArtDTO inventarioArtDTO) { + final List inventarioRows = this.currentInventarioRows.getValue(); + + if (inventarioRows == null) return null; + + return Stream.of(inventarioRows) + .filter(x -> x.getCodMart().equalsIgnoreCase(inventarioArtDTO.getCodMart())) + .toList(); } - private void dispatchRowInsert(String barcode, InventarioArtDTO inventarioArtDTO, Ean128Model ean128Model) { + public void dispatchRowInsert(String barcode, InventarioArtDTO inventarioArtDTO, Ean128Model ean128Model) { var mtbAart = inventarioArtDTO.toMtbAart(); mtbAart.setFlagTracciabilita("N"); @@ -290,7 +311,7 @@ public class PickingInventarioViewModel extends ViewModel { } } - private void dispatchRowEdit(MtbAart mtbAart, InventarioRowRoomDTO inventarioRowRoomDTO) { + public void dispatchRowEdit(MtbAart mtbAart, InventarioRowRoomDTO inventarioRowRoomDTO) { final PickingObjectDTO pickingObjectDTO = new PickingObjectDTO() .setMtbAart(mtbAart); @@ -393,6 +414,11 @@ public class PickingInventarioViewModel extends ViewModel { onComplete); } + private void sendOnItemAlreadyFound(InventarioArtDTO matchedArt, List alreadyScannedItems) { + if(this.mListener != null) + this.mListener.onItemAlreadyFound(matchedArt, alreadyScannedItems); + } + public PickingInventarioViewModel setListener(Listener listener) { this.mListener = listener; return this; @@ -419,5 +445,7 @@ public class PickingInventarioViewModel extends ViewModel { RunnableArgss onComplete); + void onItemAlreadyFound(InventarioArtDTO matchedArt, List alreadyScannedItems); + } } \ No newline at end of file