diff --git a/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java b/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java index b93a14c6..66f54154 100644 --- a/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java +++ b/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java @@ -174,7 +174,8 @@ import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCr BottomSheetMtbColrEditModalModule.class, DialogChooseArtsFromMtbAartListModule.class, MainSettingsModule.class, - DialogInfoSituazioneArticoloModule.class + DialogInfoSituazioneArticoloModule.class, + DialogSelectDocRowsModule.class }) public interface MainApplicationComponent { @@ -258,8 +259,6 @@ public interface MainApplicationComponent { DialogSelectDocInfoComponent.Factory dialogSelectDocInfoNewViewComponent(); - DialogSelectDocRowsComponent.Factory dialogSelectDocRowsComponent(); - DocInterniEditFormComponent.Factory docInterniEditFormComponent(); InfoAggiuntiveLUDialogComponent.Factory infoAggiuntiveLUDialogComponent(); @@ -294,6 +293,8 @@ public interface MainApplicationComponent { DialogInfoSituazioneArticoloComponent.Factory dialogInfoSituazioneArticoloComponent(); + DialogSelectDocRowsComponent.Factory dialogSelectDocRowsNewComponent(); + void inject(MainApplication mainApplication); void inject(AppContext mainApplication); diff --git a/app/src/main/java/it/integry/integrywmsnative/core/exception/NoResultFromCodMartException.java b/app/src/main/java/it/integry/integrywmsnative/core/exception/NoResultFromCodMartException.java new file mode 100644 index 00000000..581f3811 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/exception/NoResultFromCodMartException.java @@ -0,0 +1,15 @@ +package it.integry.integrywmsnative.core.exception; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.utility.UtilityResources; + +public final class NoResultFromCodMartException extends Exception { + + public NoResultFromCodMartException() { + super(UtilityResources.getString(R.string.no_result_from_cod_mart)); + } + + public NoResultFromCodMartException(String codMart) { + super(UtilityResources.getString(R.string.no_result_from_cod_mart) + " (" + codMart + ")"); + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColt.java b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColt.java index ded07f62..7c06d798 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColt.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColt.java @@ -68,28 +68,6 @@ public class MtbColt extends EntityBase { private Boolean disablePrint; private String ragSocCliente; - public void generaFiltroOrdine() throws Exception { - - if (this.gestione == null) { - throw new Exception("Impossibile creare il filtro dell'ordine se la gestione non è valorizzata"); - } - - if (this.dataOrd == null) { - throw new Exception("Impossibile creare il filtro dell'ordine se la data dell'ordine non è valorizzata"); - } - - if (this.numOrd == null) { - throw new Exception("Impossibile creare il filtro dell'ordine se il numero dell'ordine non è valorizzato"); - } - - - Date dateOrd = UtilityDate.recognizeDate(this.dataOrd); - String dateYMD = UtilityDate.formatDate(dateOrd, UtilityDate.COMMONS_DATE_FORMATS.YMD_SLASH); - - this.filtroOrdini = "" + this.gestione + "" + dateYMD + "" + this.numOrd + ""; - } - - private ObservableArrayList mtbColr = new ObservableArrayList<>(); public ObservableArrayList getMtbColr() { 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 4e7cfc1b..d2c4832b 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 @@ -24,6 +24,7 @@ import it.integry.integrywmsnative.core.rest.consumers.PosizioniRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer; import it.integry.integrywmsnative.core.rest.model.AvailableCodMdepsDTO; import it.integry.integrywmsnative.core.utility.UtilityFirebase; +import it.integry.integrywmsnative.core.utility.UtilityLogger; @Singleton public class SettingsManager { @@ -108,6 +109,7 @@ public class SettingsManager { }; RunnableArgs tmpOnFailed = ex -> { + UtilityLogger.error(ex); perfTrace.putAttribute("failed", "true"); if (!(ex instanceof SocketTimeoutException)) onFailed.run(ex); else @@ -433,6 +435,12 @@ public class SettingsManager { } else if (clazz == Integer.class && value.getValue() != null) { return clazz.cast(Integer.parseInt(value.getValue())); } + } else { + if (clazz == Boolean.class) { + return clazz.cast(Boolean.FALSE); + } else if (clazz == Integer.class) { + return clazz.cast(0); + } } return defaultValue; diff --git a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityBarcode.java b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityBarcode.java index f5efc173..2d8437da 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityBarcode.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityBarcode.java @@ -36,6 +36,10 @@ public class UtilityBarcode { return barcodeScanDTO != null && barcodeScanDTO.getType() == BarcodeType.EAN128; } + public static boolean isCode128(BarcodeScanDTO barcodeScanDTO) { + return barcodeScanDTO != null && barcodeScanDTO.getType() == BarcodeType.CODE128; + } + public static boolean isEtichettaPosizione(BarcodeScanDTO barcodeScanDTO) { return isEtichettaPosizione(barcodeScanDTO, true); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingViewModel.java index 2528f93b..91ea1dc1 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingViewModel.java @@ -389,7 +389,7 @@ public class AccettazionePickingViewModel { .distinct() .toList(); - if (codAnags != null && codAnags.size() == 1) { + if (codAnags.size() == 1) { mtbColt.setCodAnag(codAnags.get(0)); } @@ -399,7 +399,7 @@ public class AccettazionePickingViewModel { .distinct() .toList(); - if (rifOrds != null && rifOrds.size() == 1) { + if (rifOrds.size() == 1) { mtbColt.setRifOrd(rifOrds.get(0)); } @@ -409,16 +409,9 @@ public class AccettazionePickingViewModel { .distinct() .toList(); - if (numDataOrds != null && numDataOrds.size() == 1) { + if (numDataOrds.size() == 1) { mtbColt.setNumOrd(mOrders.get(0).getNumero()); mtbColt.setDataOrd(mOrders.get(0).getData()); - - try { - mtbColt.generaFiltroOrdine(); - } catch (Exception ex) { - this.sendError(ex); - return; - } } this.mColliMagazzinoRESTConsumer.saveCollo(mtbColt, savedMtbColt -> { diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/DialogChooseRowFromListaDocRowsListModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/DialogChooseRowFromListaDocRowsListModel.java deleted file mode 100644 index 3c48b2fa..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/DialogChooseRowFromListaDocRowsListModel.java +++ /dev/null @@ -1,85 +0,0 @@ -package it.integry.integrywmsnative.gest.contab_doc_interni.dto; - -import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColr; -import it.integry.integrywmsnative.core.di.BindableBoolean; - -public class DialogChooseRowFromListaDocRowsListModel { - - private String codMart; - private String descrizione; - private String qtaOrdReadable; - private String barcode; - private boolean isNew; - private SqlMtbColr originalModel; - private BindableBoolean checked = new BindableBoolean(false); - - public DialogChooseRowFromListaDocRowsListModel() { - } - - public BindableBoolean getChecked() { - return checked; - } - - public DialogChooseRowFromListaDocRowsListModel setChecked(BindableBoolean checked) { - this.checked = checked; - return this; - } - - public void toggleCheck() { - this.checked.set(!this.checked.get()); - } - - public String getCodMart() { - return codMart; - } - - public DialogChooseRowFromListaDocRowsListModel setCodMart(String codMart) { - this.codMart = codMart; - return this; - } - - public String getDescrizione() { - return descrizione; - } - - public DialogChooseRowFromListaDocRowsListModel setDescrizione(String descrizione) { - this.descrizione = descrizione; - return this; - } - - public String getQtaOrdReadable() { - return qtaOrdReadable; - } - - public DialogChooseRowFromListaDocRowsListModel setQtaOrdReadable(String qtaOrdReadable) { - this.qtaOrdReadable = qtaOrdReadable; - return this; - } - - public String getBarcode() { - return barcode; - } - - public DialogChooseRowFromListaDocRowsListModel setBarcode(String barcode) { - this.barcode = barcode; - return this; - } - - public boolean isNew() { - return isNew; - } - - public DialogChooseRowFromListaDocRowsListModel setNew(boolean aNew) { - isNew = aNew; - return this; - } - - public SqlMtbColr getOriginalModel() { - return originalModel; - } - - public DialogChooseRowFromListaDocRowsListModel setOriginalModel(SqlMtbColr originalModel) { - this.originalModel = originalModel; - 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 10cef1af..e58bd7b6 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 @@ -41,6 +41,7 @@ import it.integry.integrywmsnative.core.rest.model.documento.DocumentoArtDTO; import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.databinding.ActivityContabDocInterniEditBinding; 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.ui.DocumentRowsListAdapter; import it.integry.integrywmsnative.ui.FabMenuCustomAnimations; @@ -184,7 +185,7 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter "Ricerca articolo", null, "Cod articolo / Barcode", - barcodeProd -> this.viewModel.loadArticolo(barcodeProd, null), BarcodeManager::enable).show(); + barcodeProd -> this.viewModel.loadArticoloByCodMart(barcodeProd), BarcodeManager::enable).show(); } @@ -320,13 +321,22 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter @Override public void onMultipleRowsFound(List rows, DocumentoArtDTO articolo) { - DialogSelectDocRowsView.newInstance(rows, (row) -> { - this.onLoadingEnded(); - if (row != null) { - this.viewModel.dispatchRowEdit(row, articolo.isFlagTracciabilita(), articolo.isUntMisDigitale()); - } - } - ).show(this.getSupportFragmentManager(), "dialogSelectDocRows"); + List> dataset = + Stream.of(rows) + .map(x -> new DialogSelectDocRowsItemListModel<>() + .setCodMart(x.getCodMart()) + .setBarcode(x.getCodBarre()) + .setOriginalModel(x) + .setNew(x.getId() < 1) + .setDescrizione(x.getDescrizione()) + .setQtaOrd(BigDecimal.valueOf(x.getQtaCol())) + .setUntMisOrd(x.getUntMis())) + .toList(); + + DialogSelectDocRowsView.newInstance(dataset, data -> { + this.viewModel.dispatchRowEdit((SqlMtbColr) data.getOriginalModel(), articolo.isFlagTracciabilita(), articolo.isUntMisDigitale()); + }, () -> {}) + .show(this.getSupportFragmentManager(), "dialogSelectDocRowsNew"); } private MtbColr sqlToEntity(SqlMtbColr sqlMtbColr) { @@ -358,7 +368,6 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter } - public void showInfoArtDialog() { var listaMtbAart = Stream.of(this.viewModel.getProductsList()) .map(x -> new MtbAart() 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 ab16adcd..fea0f8dd 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 @@ -4,7 +4,6 @@ import androidx.lifecycle.MutableLiveData; import com.annimon.stream.Stream; -import org.apache.commons.lang3.StringUtils; import org.json.JSONException; import org.json.JSONObject; @@ -21,6 +20,7 @@ import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColt; import it.integry.integrywmsnative.core.data_store.db.repository.MtbColrDataSource; 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.interfaces.viewmodel_listeners.ILoadingListener; import it.integry.integrywmsnative.core.rest.model.Ean128Model; import it.integry.integrywmsnative.core.rest.model.Ean13PesoModel; @@ -129,16 +129,28 @@ public class DocInterniEditFormViewModel { this.listener.onDocumentHoldRequest(); } - public void loadArticolo(String barcodeProd, Ean128Model ean128Model) { + public void loadArticoloByCodMart(String codMart) { + var matchedArt = Stream.of(productsList) + .filter(x -> x.getCodMart().equalsIgnoreCase(codMart)) + .findFirst() + .orElse(null); + + + if (matchedArt == null) { + this.sendError(new NoResultFromCodMartException(codMart)); + return; + } + + + loadArticolo(matchedArt, null); + } + + public void loadArticoloByBarcode(String barcodeProd, Ean128Model ean128Model) { DocumentoArtDTO matchedArt; String usedBarcode = null; - String leftBarcode = StringUtils.leftPad(barcodeProd, 13, '0'); - matchedArt = Stream.of(productsList) - .filter(x -> x.getCodMart().equalsIgnoreCase(barcodeProd) || - leftBarcode.equalsIgnoreCase(x.getCodMart()) || - x.getBarcode().contains(barcodeProd)) + .filter(x -> x.getBarcode().contains(barcodeProd)) .findFirst() .orElse(null); @@ -151,15 +163,17 @@ public class DocInterniEditFormViewModel { return; } - List rows = this.getRowsForArticolo(matchedArt, usedBarcode); + loadArticolo(matchedArt, usedBarcode); + } + + private void loadArticolo(DocumentoArtDTO documentoArtDTO, String usedBarcode) { + List rows = this.getRowsForArticolo(documentoArtDTO, usedBarcode); if (rows.size() > 1) { - this.listener.onMultipleRowsFound(rows, matchedArt); + this.listener.onMultipleRowsFound(rows, documentoArtDTO); } else { - this.dispatchRowEdit(rows.get(0), matchedArt.isFlagTracciabilita(), matchedArt.isUntMisDigitale()); + this.dispatchRowEdit(rows.get(0), documentoArtDTO.isFlagTracciabilita(), documentoArtDTO.isUntMisDigitale()); } - - } private List getRowsForArticolo(DocumentoArtDTO articolo, String barcode) { @@ -298,12 +312,15 @@ public class DocInterniEditFormViewModel { } public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO) { - if (UtilityBarcode.isEanPeso(barcodeScanDTO)) { + if(UtilityBarcode.isCode128(barcodeScanDTO)) { + this.loadArticoloByCodMart(barcodeScanDTO.getStringValue()); + + } else if (UtilityBarcode.isEanPeso(barcodeScanDTO)) { //Cerco tramite etichetta ean peso this.executeEtichettaEanPeso(barcodeScanDTO); } else { - this.loadArticolo(barcodeScanDTO.getStringValue(), null); + this.loadArticoloByBarcode(barcodeScanDTO.getStringValue(), null); } } @@ -311,7 +328,7 @@ public class DocInterniEditFormViewModel { private void executeEtichettaEanPeso(BarcodeScanDTO barcodeScanDTO) { try { Ean13PesoModel ean13PesoModel = Ean13PesoModel.fromBarcode(barcodeScanDTO.getStringValue()); - this.loadArticolo(ean13PesoModel.getPrecode(), ean13PesoModel.toEan128()); + this.loadArticoloByBarcode(ean13PesoModel.getPrecode(), ean13PesoModel.toEan128()); } catch (Exception ex) { this.sendError(ex); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectDocRows/DialogSelectDocRowsComponent.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectDocRows/DialogSelectDocRowsComponent.java index 29bb8f1c..8e13304f 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectDocRows/DialogSelectDocRowsComponent.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectDocRows/DialogSelectDocRowsComponent.java @@ -10,7 +10,5 @@ public interface DialogSelectDocRowsComponent { DialogSelectDocRowsComponent create(); } - - void inject(DialogSelectDocRowsView dialogSelectDocInfoView); - -} + void inject(DialogSelectDocRowsView dialogSelectDocRowsView); +} \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectDocRows/DialogSelectDocRowsItemListModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectDocRows/DialogSelectDocRowsItemListModel.java new file mode 100644 index 00000000..ee2005fa --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectDocRows/DialogSelectDocRowsItemListModel.java @@ -0,0 +1,90 @@ +package it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.dialog.selectDocRows; + +import java.math.BigDecimal; + +import it.integry.integrywmsnative.core.di.BindableBoolean; + +public class DialogSelectDocRowsItemListModel { + + private String codMart; + private String descrizione; + private BigDecimal qtaOrd; + private String untMisOrd; + private String barcode; + private boolean isNew; + private T originalModel; + private BindableBoolean checked = new BindableBoolean(false); + + + public String getCodMart() { + return codMart; + } + + public DialogSelectDocRowsItemListModel setCodMart(String codMart) { + this.codMart = codMart; + return this; + } + + public String getDescrizione() { + return descrizione; + } + + public DialogSelectDocRowsItemListModel setDescrizione(String descrizione) { + this.descrizione = descrizione; + return this; + } + + public BigDecimal getQtaOrd() { + return qtaOrd; + } + + public DialogSelectDocRowsItemListModel setQtaOrd(BigDecimal qtaOrd) { + this.qtaOrd = qtaOrd; + return this; + } + + public String getUntMisOrd() { + return untMisOrd; + } + + public DialogSelectDocRowsItemListModel setUntMisOrd(String untMisOrd) { + this.untMisOrd = untMisOrd; + return this; + } + + public String getBarcode() { + return barcode; + } + + public DialogSelectDocRowsItemListModel setBarcode(String barcode) { + this.barcode = barcode; + return this; + } + + public boolean isNew() { + return isNew; + } + + public DialogSelectDocRowsItemListModel setNew(boolean aNew) { + isNew = aNew; + return this; + } + + public T getOriginalModel() { + return originalModel; + } + + public DialogSelectDocRowsItemListModel setOriginalModel(T originalModel) { + this.originalModel = originalModel; + return this; + } + + public BindableBoolean getChecked() { + return checked; + } + + public DialogSelectDocRowsItemListModel 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/selectDocRows/DialogSelectDocRowsModule.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectDocRows/DialogSelectDocRowsModule.java index 499da135..445a5cd9 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectDocRows/DialogSelectDocRowsModule.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectDocRows/DialogSelectDocRowsModule.java @@ -1,9 +1,14 @@ package it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.dialog.selectDocRows; import dagger.Module; +import dagger.Provides; @Module(subcomponents = DialogSelectDocRowsComponent.class) public class DialogSelectDocRowsModule { + @Provides + DialogSelectDocRowsViewModel providesDialogSelectDocRowsNewViewModel() { + return new DialogSelectDocRowsViewModel(); + } -} +} \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectDocRows/DialogSelectDocRowsView.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectDocRows/DialogSelectDocRowsView.java index 4da76842..afe801ea 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectDocRows/DialogSelectDocRowsView.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectDocRows/DialogSelectDocRowsView.java @@ -1,143 +1,131 @@ package it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.dialog.selectDocRows; +import android.app.Dialog; +import android.content.Context; import android.content.DialogInterface; -import android.graphics.Color; -import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.view.WindowManager; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.databinding.DataBindingUtil; -import androidx.lifecycle.MutableLiveData; 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.data_store.db.entity.SqlMtbColr; import it.integry.integrywmsnative.core.expansion.BaseDialogFragment; import it.integry.integrywmsnative.core.expansion.RunnableArgs; -import it.integry.integrywmsnative.databinding.DialogChooseRowFromListaDocRowsLayoutBinding; -import it.integry.integrywmsnative.gest.contab_doc_interni.dto.DialogChooseRowFromListaDocRowsListModel; -import kotlin.Unit; +import it.integry.integrywmsnative.databinding.DialogSelectDocRowsBinding; +import it.integry.integrywmsnative.databinding.DialogSelectDocRowsItemModelBinding; +/** @noinspection rawtypes*/ public class DialogSelectDocRowsView extends BaseDialogFragment { - private final RunnableArgs onRowSelected; - private final List listArts; - private final MutableLiveData> listModels = new MutableLiveData<>(); - private DialogChooseRowFromListaDocRowsLayoutBinding binding; - public MutableLiveData selectedRow = new MutableLiveData<>(); - public static DialogSelectDocRowsView newInstance( - List listArts, - RunnableArgs onDismiss - ) { - return new DialogSelectDocRowsView(listArts, onDismiss); + @Inject + DialogSelectDocRowsViewModel mViewModel; + + private DialogSelectDocRowsBinding mBindings; + private Context mContext; + + private final List> listArts; + private final RunnableArgs onConfirm; + private final Runnable onAbort; + + //Pass here all external parameters + public static DialogSelectDocRowsView newInstance(List> listArts, + RunnableArgs onConfirm, + Runnable onAbort) { + return new DialogSelectDocRowsView(listArts, onConfirm, onAbort); + } + + private DialogSelectDocRowsView(List> listArts, + RunnableArgs onConfirm, + Runnable onAbort) { + super(); + + this.listArts = listArts; + this.onConfirm = onConfirm; + this.onAbort = onAbort; } - private DialogSelectDocRowsView(List listArts, RunnableArgs onDismiss) { - super(); - this.onRowSelected = onDismiss; - this.listArts = listArts; + @NonNull + @Override + public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { + this.mContext = requireContext(); + + mBindings = DialogSelectDocRowsBinding.inflate(LayoutInflater.from(this.mContext), null, false); + mBindings.setLifecycleOwner(this); + + MainApplication.appComponent + .dialogSelectDocRowsNewComponent() + .create() + .inject(this); + + setCancelable(false); + + var alertDialog = new MaterialAlertDialogBuilder(this.mContext) + .setView(mBindings.getRoot()) + .setCancelable(isCancelable()) + .setPositiveButton(R.string.confirm, null) + .setNegativeButton(R.string.abort, null) + .create(); + + alertDialog.setCanceledOnTouchOutside(isCancelable()); + alertDialog.setOnShowListener(this); + return alertDialog; + } + + @Override + public void onShow(DialogInterface dialogInterface) { + super.onShow(dialogInterface); + + this.listArts.get(0).getChecked().set(true); + this.initRecyclerView(); } @Override public void onDismiss(@NonNull DialogInterface dialog) { super.onDismiss(dialog); - if (onRowSelected != null) onRowSelected.run(this.selectedRow.getValue()); + + final DialogSelectDocRowsItemListModel selectedItem = Stream.of(listArts) + .filter(x -> x.getChecked().get()) + .findFirstOrElse(null); + + if(selectedItem != null) + this.onConfirm.run(selectedItem); + else this.onAbort.run(); } - @Nullable - @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - binding = DataBindingUtil.inflate(inflater, R.layout.dialog_choose_row_from_lista_doc_rows_layout, container, false); - binding.setLifecycleOwner(this); - MainApplication - .appComponent - .dialogSelectDocRowsComponent() - .create() - .inject(this); - binding.setView(this); + private void initRecyclerView() { + var itemType = new Type(R.layout.dialog_select_doc_rows__item_model, BR.row); +// itemType.areItemSame((oldItem, newItem) -> Objects.equals(oldItem.getId(), newItem.getId())); + itemType.areContentsTheSame(DialogSelectDocRowsItemListModel::equals); + itemType.onClick(x -> { + resetChecks(); + x.getBinding().getRow().getChecked().set(true); - getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); - getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); - initView(); - this.refreshList(); - - - binding.positiveButton.setOnClickListener(view -> { - getDialog().dismiss(); + return null; }); - binding.negativeButton.setOnClickListener(view -> { - this.selectedRow.setValue(null); - getDialog().dismiss(); - }); - - - this.onLoadingEnded(); - return binding.getRoot(); + new LiveAdapter(listArts) + .map(DialogSelectDocRowsItemListModel.class, itemType) + .into(this.mBindings.itemList); } - - private void refreshList() { - var list = Stream.of(this.listArts).map(row -> { - DialogChooseRowFromListaDocRowsListModel model = new DialogChooseRowFromListaDocRowsListModel(); - model.setCodMart(row.getCodMart()); - model.setBarcode(row.getCodMart()); - model.setOriginalModel(row); - model.setNew(row.getId() < 1); - model.setDescrizione(row.getDescrizione()); - model.setQtaOrdReadable(row.getQtaCol() + "\n" + row.getUntMis()); - model.getChecked().addOnPropertyChangedCallback(() -> { - this.checkRow(row, model.getChecked().get()); - }); - return model; - }).toList(); - this.listModels.postValue(list); - - } - - private void checkRow(SqlMtbColr row, boolean checked) { - if (checked) { - this.selectedRow.setValue(row); - var models = this.listModels.getValue(); - if (models != null && !models.isEmpty()) { - Stream.of(models).filter(model -> model.getOriginalModel().getId() != row.getId()).forEach(model -> { - model.getChecked().set(false); - }); - } - } else { - var selectedRow = this.selectedRow.getValue(); - if (selectedRow != null && selectedRow.getId() == row.getId()) { - this.selectedRow.setValue(null); - } + + private void resetChecks() { + for (var item : listArts) { + item.getChecked().set(false); } } - private void initView() { - initArrayAdapters(); - } - - private void initArrayAdapters() { - - new LiveAdapter(listModels, getViewLifecycleOwner(), BR.row) - .map(DialogChooseRowFromListaDocRowsListModel.class, R.layout.dialog_choose_row_from_lista_doc_rows__item_model) - .onNoData(noData -> { - binding.emptyView.setVisibility(noData ? View.VISIBLE : View.GONE); - return Unit.INSTANCE; - } - ).into(binding.listaDocRows); - - } - -} +} \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectDocRows/DialogSelectDocRowsViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectDocRows/DialogSelectDocRowsViewModel.java new file mode 100644 index 00000000..ad67e9d3 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectDocRows/DialogSelectDocRowsViewModel.java @@ -0,0 +1,5 @@ +package it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.dialog.selectDocRows; + +public class DialogSelectDocRowsViewModel { + +} \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/views/InputQuantityToReturnDialog.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/views/InputQuantityToReturnDialog.java index ffa07c66..190c296a 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/views/InputQuantityToReturnDialog.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/views/InputQuantityToReturnDialog.java @@ -5,22 +5,14 @@ import android.content.Context; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.view.LayoutInflater; -import android.view.View; -import android.widget.ArrayAdapter; import androidx.databinding.DataBindingUtil; import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.List; import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.model.MtbAart; -import it.integry.integrywmsnative.core.model.MtbTCol; -import it.integry.integrywmsnative.core.rest.consumers.MagazzinoRESTConsumer; -import it.integry.integrywmsnative.core.utility.UtilityExceptions; -import it.integry.integrywmsnative.core.utility.UtilityProgress; import it.integry.integrywmsnative.databinding.DialogInputQuantityToReturnBinding; public class InputQuantityToReturnDialog { diff --git a/app/src/main/res/layout/dialog_choose_row_from_lista_doc_rows_layout.xml b/app/src/main/res/layout/dialog_choose_row_from_lista_doc_rows_layout.xml deleted file mode 100644 index c738e70c..00000000 --- a/app/src/main/res/layout/dialog_choose_row_from_lista_doc_rows_layout.xml +++ /dev/null @@ -1,141 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_select_doc_rows.xml b/app/src/main/res/layout/dialog_select_doc_rows.xml new file mode 100644 index 00000000..bfaad2c6 --- /dev/null +++ b/app/src/main/res/layout/dialog_select_doc_rows.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_choose_row_from_lista_doc_rows__item_model.xml b/app/src/main/res/layout/dialog_select_doc_rows__item_model.xml similarity index 63% rename from app/src/main/res/layout/dialog_choose_row_from_lista_doc_rows__item_model.xml rename to app/src/main/res/layout/dialog_select_doc_rows__item_model.xml index 4b389296..9a797b51 100644 --- a/app/src/main/res/layout/dialog_choose_row_from_lista_doc_rows__item_model.xml +++ b/app/src/main/res/layout/dialog_select_doc_rows__item_model.xml @@ -1,55 +1,54 @@ - + - - - + type="it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.dialog.selectDocRows.DialogSelectDocRowsItemListModel" /> + app:backgroundTintResID="@{row.checked.get() ? R.color.bg_checked_layout : android.R.color.transparent}"> - + android:layout_marginStart="4dp" + android:orientation="vertical"> - - + + + - + android:layout_centerVertical="true" + android:layout_marginStart="8dp" + android:background="@drawable/badge_round_corner" + android:backgroundTint="@color/colorPrimary" + android:gravity="center_horizontal" + android:orientation="vertical" + android:padding="6dp"> + + tools:text="280.45" /> - + + + diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 917731b3..d5f742f7 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -213,6 +213,7 @@ Il barcode scansionato non ha fornito alcun risultato + Il codice articolo non ha fornito alcun risultato Il barcode scansionato ha fornito multipli risultati Nessun tipo documento selezionato diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 41b33558..885a5285 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -217,6 +217,7 @@ The scanned label has already been used The scanned barcode did not produce any results + The item code did not produce any results Before continuing open new LU The scanned barcode produced multiple results