diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml
index 931b96c3..16660f1d 100644
--- a/.idea/runConfigurations.xml
+++ b/.idea/runConfigurations.xml
@@ -5,8 +5,12 @@
+
+
+
+
diff --git a/app/build.gradle b/app/build.gradle
index 1a514540..db5e576d 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -10,8 +10,8 @@ apply plugin: 'com.google.gms.google-services'
android {
- def appVersionCode = 447
- def appVersionName = '1.40.30'
+ def appVersionCode = 450
+ def appVersionName = '1.41.02'
signingConfigs {
release {
diff --git a/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java b/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java
index b7c4950a..aedb2ab8 100644
--- a/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java
+++ b/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java
@@ -29,6 +29,8 @@ import it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.DocInterniE
import it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.DocInterniEditFormModule;
import it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.dialog.selectDocRows.DialogSelectDocRowsComponent;
import it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.dialog.selectDocRows.DialogSelectDocRowsModule;
+import it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.dialog.selectLotti.DialogSelectLottiComponent;
+import it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.dialog.selectLotti.DialogSelectLottiModule;
import it.integry.integrywmsnative.gest.contenuto_bancale.ContenutoBancaleComponent;
import it.integry.integrywmsnative.gest.contenuto_bancale.ContenutoBancaleModule;
import it.integry.integrywmsnative.gest.inventario.ElencoInventariComponent;
@@ -188,6 +190,7 @@ import it.integry.integrywmsnative.view.dialogs.tracciamento_imballi.DialogTracc
DialogSelectDocInfoModule.class,
DocInterniEditFormModule.class,
DialogSelectDocRowsModule.class,
+ DialogSelectLottiModule.class,
DialogAskClienteModule.class,
DialogEditArticoloModule.class,
DialogPrintOrderSSCCListModule.class,
@@ -335,6 +338,7 @@ public interface MainApplicationComponent {
DialogInfoSituazioneArticoloComponent.Factory dialogInfoSituazioneArticoloComponent();
DialogSelectDocRowsComponent.Factory dialogSelectDocRowsNewComponent();
+ DialogSelectLottiComponent.Factory dialogSelectLottiComponent();
DialogSelectArtToOrderComponent.Factory dialogSelectArtToOrderNewComponent();
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 cadafa1c..87e6d168 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
@@ -82,6 +82,7 @@ public class DBSettingsModel {
private boolean flagPickingLiberoEnableScanArt = false;
private boolean flagAskDuplicateUDSSpedizione = false;
private boolean suggestDataScad = false;
+ private boolean flagPositionChangeRequest = false;
private String docInterniRequestNumDoc;
private String produzioneCodDtipCar;
private boolean produzioneGeneraDocCar;
@@ -753,4 +754,13 @@ public class DBSettingsModel {
this.produzioneGeneraDocScar = produzioneGeneraDocScar;
return this;
}
+
+ public boolean isFlagPositionChangeRequest() {
+ return flagPositionChangeRequest;
+ }
+
+ public DBSettingsModel setFlagPositionChangeRequest(boolean flagPositionChangeRequest) {
+ this.flagPositionChangeRequest = flagPositionChangeRequest;
+ return this;
+ }
}
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 c390e572..6eeddfc7 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
@@ -545,6 +545,12 @@ public class SettingsManager {
.setKeySection("ENABLE_SCAN_ART")
.setSetter(dbSettingsModelIstance::setFlagPickingLiberoEnableScanArt)
.setDefaultValue(true));
+ stbGestSetupReaderList.add(new StbGestSetupReader<>(Boolean.class)
+ .setGestName("PICKING")
+ .setSection("SETUP")
+ .setKeySection("ENABLE_POSITION_CHANGE_REQUEST")
+ .setSetter(dbSettingsModelIstance::setFlagPositionChangeRequest)
+ .setDefaultValue(true));
stbGestSetupReaderList.add(new StbGestSetupReader<>(String.class)
.setGestName("PICKING")
diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/RetrieveLottiDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/RetrieveLottiDTO.java
new file mode 100644
index 00000000..48a72886
--- /dev/null
+++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/RetrieveLottiDTO.java
@@ -0,0 +1,37 @@
+package it.integry.integrywmsnative.gest.contab_doc_interni.dto;
+
+import java.util.Date;
+
+public class RetrieveLottiDTO {
+
+ private String codProd;
+ private String partitaMag;
+ private Date dataScad;
+
+ public String getCodProd() {
+ return codProd;
+ }
+
+ public RetrieveLottiDTO setCodProd(String codProd) {
+ this.codProd = codProd;
+ return this;
+ }
+
+ public String getPartitaMag() {
+ return partitaMag;
+ }
+
+ public RetrieveLottiDTO setPartitaMag(String partitaMag) {
+ this.partitaMag = partitaMag;
+ return this;
+ }
+
+ public Date getDataScad() {
+ return dataScad;
+ }
+
+ public RetrieveLottiDTO setDataScad(Date dataScad) {
+ this.dataScad = dataScad;
+ return this;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/TipoDocDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/TipoDocDTO.java
index 9bdc17a5..e039c42e 100644
--- a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/TipoDocDTO.java
+++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/TipoDocDTO.java
@@ -8,6 +8,7 @@ public class TipoDocDTO {
private String gestioneDoc;
private boolean flagChkTracciabilita;
private boolean requireNote = false;
+ private boolean suggestLotti;
public String getCodDtip() {
return codDtip;
@@ -62,4 +63,13 @@ public class TipoDocDTO {
this.flagChkTracciabilita = flagChkTracciabilita;
return this;
}
+
+ public boolean isSuggestLotti() {
+ return suggestLotti;
+ }
+
+ public TipoDocDTO setSuggestLotti(boolean suggestLotti) {
+ this.suggestLotti = suggestLotti;
+ return this;
+ }
}
diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormActivity.java
index df254bd2..818c5109 100644
--- a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormActivity.java
+++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormActivity.java
@@ -42,6 +42,8 @@ import it.integry.integrywmsnative.gest.contab_doc_interni.dto.DocInterniSetupDT
import it.integry.integrywmsnative.gest.contab_doc_interni.dto.TipoDocDTO;
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.contab_doc_interni.edit_form.dialog.selectLotti.DialogSelectLottiItemListModel;
+import it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.dialog.selectLotti.DialogSelectLottiView;
import it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.ui.DocumentRowsListAdapter;
import it.integry.integrywmsnative.view.bottom_sheet__mtb_colr_edit.BottomSheetMtbColrEditModalView;
import it.integry.integrywmsnative.view.dialogs.DialogCommon;
@@ -302,6 +304,30 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter
.setFlagDig(isUntMisDig ? "S" : "N");
mtbAart.setMtbUntMis(Collections.singletonList(mtbUntMis));
+ if (this.viewModel.getTipoDoc().isSuggestLotti()) {
+ this.viewModel.retrieveLotti(row.getCodMart(), lotti -> {
+ var dataSet =
+ Stream.of(lotti)
+ .map(x -> new DialogSelectLottiItemListModel<>()
+ .setPartitaMag(x.getPartitaMag())
+ .setDataScad(UtilityDate.toLocalDate(x.getDataScad()))
+ .setOriginalModel(x)
+ )
+ .toList();
+
+ DialogSelectLottiView.newInstance(dataSet, data -> {
+ row.setPartitaMag(data.getPartitaMag());
+ row.setDataScad(data.getDataScad());
+
+ openInputQuantity(mtbAart, row, flagTracciabilita);
+ }, () -> {}).show(this.getSupportFragmentManager(), "dialogSelectLotti");;
+ });
+ } else {
+ openInputQuantity(mtbAart, row, flagTracciabilita);
+ }
+ }
+
+ private void openInputQuantity(MtbAart mtbAart, SqlMtbColr row, boolean flagTracciabilita) {
DialogInputQuantityV2DTO dialogInputQuantityV2DTO = new DialogInputQuantityV2DTO()
.setMtbAart(mtbAart)
.setInitialNumCnf(BigDecimal.valueOf(row.getNumCnf()))
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 c8133c7e..5bc2e564 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
@@ -19,6 +19,7 @@ import it.integry.integrywmsnative.core.data_store.db.repository.MtbColrDataSour
import it.integry.integrywmsnative.core.data_store.db.repository.MtbColtRepository;
import it.integry.integrywmsnative.core.exception.NoResultFromBarcodeException;
import it.integry.integrywmsnative.core.exception.NoResultFromCodMartException;
+import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
import it.integry.integrywmsnative.core.rest.model.Ean128Model;
import it.integry.integrywmsnative.core.rest.model.Ean13PesoModel;
@@ -32,6 +33,7 @@ import it.integry.integrywmsnative.gest.contab_doc_interni.dto.CheckFornitoreDTO
import it.integry.integrywmsnative.gest.contab_doc_interni.dto.ColloDTO;
import it.integry.integrywmsnative.gest.contab_doc_interni.dto.DocInterniSetupDTO;
import it.integry.integrywmsnative.gest.contab_doc_interni.dto.FornitoreDTO;
+import it.integry.integrywmsnative.gest.contab_doc_interni.dto.RetrieveLottiDTO;
import it.integry.integrywmsnative.gest.contab_doc_interni.dto.SaveDTO;
import it.integry.integrywmsnative.gest.contab_doc_interni.dto.TipoDocDTO;
import it.integry.integrywmsnative.gest.contab_doc_interni.rest.DocInterniRESTConsumer;
@@ -126,7 +128,7 @@ public class DocInterniEditFormViewModel {
}
public void loadArticoloByCodMartOrBarcode(String codMart) {
- if(productsList == null) {
+ if (productsList == null) {
this.sendError(new NoResultFromCodMartException(codMart));
return;
}
@@ -372,6 +374,10 @@ public class DocInterniEditFormViewModel {
}
}
+ public void retrieveLotti(String codProd, RunnableArgs> onComplete) {
+ docInterniRESTConsumer.retrieveLotti(codProd, onComplete, this::sendError);
+ }
+
public void deleteRow(SqlMtbColr sqlMtbColr) {
mtbColrRepository.delete(sqlMtbColr, this::fetchDocumentRows, this::sendError);
}
@@ -397,6 +403,10 @@ public class DocInterniEditFormViewModel {
return this;
}
+ public TipoDocDTO getTipoDoc() {
+ return tipoDoc;
+ }
+
public boolean isNotesMandatory() {
return this.tipoDoc != null && this.tipoDoc.isRequireNote();
}
diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectLotti/DialogSelectLottiComponent.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectLotti/DialogSelectLottiComponent.java
new file mode 100644
index 00000000..a9fba546
--- /dev/null
+++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectLotti/DialogSelectLottiComponent.java
@@ -0,0 +1,14 @@
+package it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.dialog.selectLotti;
+
+import dagger.Subcomponent;
+
+@Subcomponent
+public interface DialogSelectLottiComponent {
+
+ @Subcomponent.Factory
+ interface Factory {
+ DialogSelectLottiComponent create();
+ }
+
+ void inject(DialogSelectLottiView dialogSelectLottiView);
+}
\ No newline at end of file
diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectLotti/DialogSelectLottiItemListModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectLotti/DialogSelectLottiItemListModel.java
new file mode 100644
index 00000000..30c23c15
--- /dev/null
+++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectLotti/DialogSelectLottiItemListModel.java
@@ -0,0 +1,54 @@
+package it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.dialog.selectLotti;
+
+import java.time.LocalDate;
+
+import it.integry.integrywmsnative.core.di.BindableBoolean;
+import it.integry.integrywmsnative.core.utility.UtilityDate;
+
+public class DialogSelectLottiItemListModel {
+
+ private String partitaMag;
+ private LocalDate dataScad;
+ private T originalModel;
+ private BindableBoolean checked = new BindableBoolean(false);
+
+ public String getPartitaMag() {
+ return partitaMag;
+ }
+
+ public DialogSelectLottiItemListModel setPartitaMag(String partitaMag) {
+ this.partitaMag = partitaMag;
+ return this;
+ }
+
+ public LocalDate getDataScad() {
+ return dataScad;
+ }
+
+ public String getDataScadText() {
+ return UtilityDate.formatDate(this.dataScad, UtilityDate.COMMONS_DATE_FORMATS.DMY_SLASH);
+ }
+
+ public DialogSelectLottiItemListModel setDataScad(LocalDate dataScad) {
+ this.dataScad = dataScad;
+ return this;
+ }
+
+ public T getOriginalModel() {
+ return originalModel;
+ }
+
+ public DialogSelectLottiItemListModel setOriginalModel(T originalModel) {
+ this.originalModel = originalModel;
+ return this;
+ }
+
+ public BindableBoolean getChecked() {
+ return checked;
+ }
+
+ public DialogSelectLottiItemListModel setChecked(BindableBoolean checked) {
+ this.checked = checked;
+ return this;
+ }
+}
diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectLotti/DialogSelectLottiModule.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectLotti/DialogSelectLottiModule.java
new file mode 100644
index 00000000..f66deab7
--- /dev/null
+++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectLotti/DialogSelectLottiModule.java
@@ -0,0 +1,14 @@
+package it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.dialog.selectLotti;
+
+import dagger.Module;
+import dagger.Provides;
+
+@Module(subcomponents = DialogSelectLottiComponent.class)
+public class DialogSelectLottiModule {
+
+ @Provides
+ DialogSelectLottiViewModel providesDialogSelectLottiViewModel() {
+ return new DialogSelectLottiViewModel();
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectLotti/DialogSelectLottiView.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectLotti/DialogSelectLottiView.java
new file mode 100644
index 00000000..18a4c9ff
--- /dev/null
+++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectLotti/DialogSelectLottiView.java
@@ -0,0 +1,123 @@
+package it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.dialog.selectLotti;
+
+import android.app.Dialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import com.annimon.stream.Stream;
+import com.google.android.material.dialog.MaterialAlertDialogBuilder;
+import com.ravikoradiya.liveadapter.LiveAdapter;
+import com.ravikoradiya.liveadapter.Type;
+
+import java.util.List;
+
+import javax.inject.Inject;
+
+import it.integry.integrywmsnative.BR;
+import it.integry.integrywmsnative.MainApplication;
+import it.integry.integrywmsnative.R;
+import it.integry.integrywmsnative.core.expansion.BaseDialogFragment;
+import it.integry.integrywmsnative.core.expansion.RunnableArgs;
+import it.integry.integrywmsnative.databinding.DialogSelectLottiBinding;
+import it.integry.integrywmsnative.databinding.DialogSelectLottiItemModelBinding;
+
+/**
+ * @noinspection rawtypes
+ */
+public class DialogSelectLottiView extends BaseDialogFragment {
+ @Inject
+ DialogSelectLottiViewModel mViewModel;
+
+ private DialogSelectLottiBinding mBindings;
+ private Context mContext;
+
+ private final List> listLotti;
+ private final RunnableArgs onConfirm;
+ private final Runnable onAbort;
+
+ public static DialogSelectLottiView newInstance(List> listLotti,
+ RunnableArgs onConfirm,
+ Runnable onAbort) {
+ return new DialogSelectLottiView(listLotti, onConfirm, onAbort);
+ }
+
+ private DialogSelectLottiView(List> listLotti,
+ RunnableArgs onConfirm,
+ Runnable onAbort) {
+ super();
+
+ this.listLotti = listLotti;
+ this.onConfirm = onConfirm;
+ this.onAbort = onAbort;
+ }
+
+ @NonNull
+ @Override
+ public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
+ this.mContext = requireContext();
+
+ mBindings = DialogSelectLottiBinding.inflate(LayoutInflater.from(this.mContext), null, false);
+ mBindings.setLifecycleOwner(this);
+
+ MainApplication.appComponent
+ .dialogSelectLottiComponent()
+ .create()
+ .inject(this);
+
+ setCancelable(false);
+
+ var alertDialog = new MaterialAlertDialogBuilder(this.mContext)
+ .setView(mBindings.getRoot())
+ .setCancelable(isCancelable())
+ .setPositiveButton(R.string.confirm, (dialog, which) -> {
+ final DialogSelectLottiItemListModel