diff --git a/app/build.gradle b/app/build.gradle index 1ebe4e82..ae3a16f8 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,8 +10,8 @@ apply plugin: 'com.google.gms.google-services' android { - def appVersionCode = 361 - def appVersionName = '1.32.21' + def appVersionCode = 362 + def appVersionName = '1.32.22' signingConfigs { release { diff --git a/app/src/main/java/it/integry/integrywmsnative/core/class_router/configs/MenuConfiguration.java b/app/src/main/java/it/integry/integrywmsnative/core/class_router/configs/MenuConfiguration.java index 969a3ffe..03988019 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/class_router/configs/MenuConfiguration.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/class_router/configs/MenuConfiguration.java @@ -201,7 +201,7 @@ public class MenuConfiguration extends BaseMenuConfiguration { .setID(it.integry.integrywmsnative.R.id.nav_pv_doc_interni) .setTitleText(it.integry.integrywmsnative.R.string.doc_interni) .setTitleIcon(R.drawable.ic_dashboard_contab_doc_interni) - .setDrawerIcon(it.integry.integrywmsnative.R.drawable.ic_dashboard_contab_doc_interni) + .setDrawerIcon(R.drawable.ic_documents_outline) .setFragmentFactory(DocInterniFragment::newInstance)) // .addItem(new MenuItem() 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/contab_doc_interni/DocInterniFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/DocInterniFragment.java index b225c9ea..90f98586 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/DocInterniFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/DocInterniFragment.java @@ -3,7 +3,6 @@ package it.integry.integrywmsnative.gest.contab_doc_interni; import android.content.Context; import android.os.Bundle; -import android.text.Html; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -30,7 +29,6 @@ import it.integry.integrywmsnative.core.expansion.BaseFragment; import it.integry.integrywmsnative.core.interfaces.IScrollableFragment; import it.integry.integrywmsnative.core.interfaces.ITitledFragment; import it.integry.integrywmsnative.core.rest.model.documento.DocumentoArtDTO; -import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.databinding.FragmentDocInterniBinding; import it.integry.integrywmsnative.gest.contab_doc_interni.dialog.DialogSelectDocInfoResponseDTO; import it.integry.integrywmsnative.gest.contab_doc_interni.dialog.DialogSelectDocInfoView; @@ -125,26 +123,7 @@ public class DocInterniFragment extends BaseFragment implements ITitledFragment, @Override public void onDocDetailsChanged(DialogSelectDocInfoResponseDTO selection) { mViewModel.setSelectedDocDetails(selection); - - if (selection.isFornitoreRequired()) { - mBinding.codAnagContainer.setVisibility(View.VISIBLE); - } else { - mBinding.codAnagContainer.setVisibility(View.GONE); - } - - -// if (selection.getGruppoArt() != null) { -// mBinding.mtbGrpContainer.setVisibility(View.VISIBLE); -// } else { -// mBinding.mtbGrpContainer.setVisibility(View.GONE); -// } - - if (selection.isDocumentRequired()) { - mBinding.docContainer.setVisibility(View.VISIBLE); - mBinding.document.setText(Html.fromHtml(getString(R.string.doc_testata, String.valueOf(selection.getNumDoc()), UtilityDate.formatDate(selection.getDataDoc(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)))); - } else { - mBinding.docContainer.setVisibility(View.GONE); - } + mBinding.invalidateAll(); } @Override diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/DocInterniViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/DocInterniViewModel.java index a5e44b2f..84a04510 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/DocInterniViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/DocInterniViewModel.java @@ -35,7 +35,7 @@ public class DocInterniViewModel { private boolean docsFetched = true; private int nextNumCollo = 0; private List availableArts; - private MutableLiveData> mDocsList = new MutableLiveData<>(); + private final MutableLiveData> mDocsList = new MutableLiveData<>(); public TipoDocDTO dtbTipi; public GruppoArticoloDTO mtbGrup; diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormViewModel.java index 45f1de74..278a41d4 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormViewModel.java @@ -9,7 +9,6 @@ import org.json.JSONObject; import java.math.BigDecimal; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import javax.inject.Inject; @@ -37,18 +36,17 @@ import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQua public class DocInterniEditFormViewModel { - @Inject - MtbColrDataSource mtbColrRepository; - @Inject - MtbColtRepository mtbColtRepository; + private final MtbColrDataSource mtbColrRepository; + private final MtbColtRepository mtbColtRepository; private final DocInterniRESTConsumer docInterniRESTConsumer; - private DocInterniEditFormViewModel.Listener listener; + private Listener listener; private List productsList; - private HashMap flattedBarcodesCodMarts; private TipoDocDTO tipoDoc; + private boolean isCheckPartitaMag = false; private JSONObject checkFornitoreRules = null; + public MutableLiveData document = new MutableLiveData<>(); public MutableLiveData> docRows = new MutableLiveData<>(); @@ -300,13 +298,6 @@ public class DocInterniEditFormViewModel { public void setProductsList(List productsList) { this.productsList = productsList; - this.flattedBarcodesCodMarts = new HashMap<>(); - - for (DocumentoArtDTO documentArt : productsList) { - for (String barcode : documentArt.getBarcode()) { - this.flattedBarcodesCodMarts.put(barcode, documentArt.getCodMart()); - } - } } public void processBarcode(BarcodeScanDTO dto) { 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 diff --git a/app/src/main/res/drawable/ic_doc_interni_outline.xml b/app/src/main/res/drawable/ic_document_outline.xml similarity index 100% rename from app/src/main/res/drawable/ic_doc_interni_outline.xml rename to app/src/main/res/drawable/ic_document_outline.xml diff --git a/app/src/main/res/drawable/ic_documents_outline.xml b/app/src/main/res/drawable/ic_documents_outline.xml new file mode 100644 index 00000000..a5967ce4 --- /dev/null +++ b/app/src/main/res/drawable/ic_documents_outline.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/activity_contab_doc_interni_edit.xml b/app/src/main/res/layout/activity_contab_doc_interni_edit.xml index ec3b13a2..eba83439 100644 --- a/app/src/main/res/layout/activity_contab_doc_interni_edit.xml +++ b/app/src/main/res/layout/activity_contab_doc_interni_edit.xml @@ -79,7 +79,6 @@ app:cardElevation="4dp"> @@ -114,18 +113,10 @@ android:layout_toStartOf="@id/loaded_arts_info_layout" android:orientation="horizontal"> - - @@ -186,7 +177,7 @@ android:layout_marginStart="4dp" android:text="Non definito" android:textStyle="italic" - app:visibility="@{view.documentRifHeader.get() == null}" /> + app:visibility="@{view.documentRifHeader.get().empty}" /> + app:reverse_visibility="@{view.documentRifHeader.get().empty}" /> + app:visibility="@{view.codAnag.get().empty}" /> + app:reverse_visibility="@{view.codAnag.get().empty}" /> diff --git a/app/src/main/res/layout/fragment_doc_interni.xml b/app/src/main/res/layout/fragment_doc_interni.xml index 05b3d5fe..e6cad8a7 100644 --- a/app/src/main/res/layout/fragment_doc_interni.xml +++ b/app/src/main/res/layout/fragment_doc_interni.xml @@ -6,6 +6,10 @@ + + + + - - + + + + + + android:text="Tipo doc:" /> + + + android:layout_marginTop="2dp" + android:orientation="horizontal" + app:reverse_visibility="@{viewModel.fornitore == null}"> + android:text="Fornitore:" /> - - - - - - - + android:layout_marginTop="2dp" + android:orientation="horizontal" + app:reverse_visibility="@{UtilityString.isNullOrEmpty(viewModel.numDoc)}"> + android:text="Documento:" /> + android:layout_marginStart="4dp" + android:text="@{Html.fromHtml(context.getString(R.string.doc_testata, viewModel.numDoc, UtilityDate.formatDate(viewModel.dataDoc, UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)))}" + tools:text="n. 123 del 29/03/2023" /> + - + - + + + + + + android:layout_height="match_parent" + android:layout_marginTop="16dp" + android:background="@color/full_white" + android:paddingStart="2dp" + android:paddingEnd="2dp" + tools:itemCount="5" + tools:listitem="@layout/doc_interni_list_model" /> - + - + - + + + + + + + android:adjustViewBounds="true" + android:src="@drawable/ic_playlist_add_check_24dp" /> - - - - - + - app:layout_constraintEnd_toStartOf="@id/guideline_empty_right" - app:layout_constraintStart_toEndOf="@id/guideline_empty_left" - app:layout_constraintTop_toTopOf="@id/guideline_empty_top"> - - - - - - - + - - +