diff --git a/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java b/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java index ba20830b..649a8bbb 100644 --- a/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java +++ b/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java @@ -15,6 +15,8 @@ import it.integry.integrywmsnative.gest.contab_doc_interni.dialog.DialogSelectDo import it.integry.integrywmsnative.gest.contab_doc_interni.dialog.DialogSelectDocInfoModule; import it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.DocInterniEditFormComponent; 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.contenuto_bancale.ContenutoBancaleComponent; import it.integry.integrywmsnative.gest.contenuto_bancale.ContenutoBancaleModule; import it.integry.integrywmsnative.gest.lista_bancali.ListaBancaliComponent; @@ -110,7 +112,8 @@ import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCr DialogChooseArtsFromListaArtsModule.class, DocInterniModule.class, DialogSelectDocInfoModule.class, - DocInterniEditFormModule.class + DocInterniEditFormModule.class, + DialogSelectDocRowsModule.class }) public interface MainApplicationComponent { @@ -182,6 +185,8 @@ public interface MainApplicationComponent { DialogSelectDocInfoComponent.Factory dialogSelectMgrpDtipPairComponent(); + DialogSelectDocRowsComponent.Factory dialogSelectDocRowsComponent(); + DocInterniEditFormComponent.Factory docInterniEditFormComponent(); InfoAggiuntiveLUDialogComponent.Factory infoAggiuntiveLUDialogComponent(); 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 new file mode 100644 index 00000000..3c48b2fa --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/DialogChooseRowFromListaDocRowsListModel.java @@ -0,0 +1,85 @@ +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 01cfd0d5..e4fd6074 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 @@ -39,6 +39,7 @@ import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.databinding.ActivityContabDocInterniEditBinding; import it.integry.integrywmsnative.gest.contab_doc_interni.dto.GrigliaAcquistiChildDTO; import it.integry.integrywmsnative.gest.contab_doc_interni.dto.GrigliaAcquistiDTO; +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; import it.integry.integrywmsnative.view.bottom_sheet__mtb_colr_edit.BottomSheetMtbColrEditView; @@ -281,6 +282,16 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter this.viewModel.deleteRow(entityToSql(mtbColr)); } + @Override + public void onMultipleRowsFound(List rows, GrigliaAcquistiChildDTO articolo) { + DialogSelectDocRowsView.newInstance(rows, (row) -> { + this.onLoadingEnded(); + if (row != null) { + this.viewModel.editRow(row, (articolo.getFlagTracciabilita().equalsIgnoreCase("S"))); + } + } + ).show(this.getSupportFragmentManager(), "dialogSelectDocRows"); + } private MtbColr sqlToEntity(SqlMtbColr sqlMtbColr) { MtbColr entity = new MtbColr(); 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 99ea5659..72abc9d4 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 @@ -85,7 +85,7 @@ public class DocInterniEditFormViewModel { } public void editRow(SqlMtbColr row, boolean flagTracciabilita) { - this.listener.onEditRowRequest(row, flagTracciabilita); + this.listener.onEditRowRequest(row, flagTracciabilita && this.isCheckPartitaMag); } private Integer getNextIdRiga() { @@ -127,41 +127,46 @@ public class DocInterniEditFormViewModel { public void onSearch(String search) { this.sendOnLoadingStarted(); GrigliaAcquistiChildDTO articolo = this.searchArticolo(search); + this.sendOnLoadingEnded(); if (articolo == null) { this.sendError(new Exception("Nessun articolo corrispondente al codice fornito!")); - this.sendOnLoadingEnded(); return; } - SqlMtbColr row = this.getRowForArticolo(articolo); - this.sendOnLoadingEnded(); - this.editRow(row, (articolo.getFlagTracciabilita().equalsIgnoreCase("S") && this.isCheckPartitaMag)); + List rows = this.getRowsForArticolo(articolo); + if (rows.isEmpty()) { + this.sendError(new Exception("Nessun articolo corrispondente al codice fornito!")); + } + if (rows.size() > 1) { + this.listener.onMultipleRowsFound(rows, articolo); + } else { + this.editRow(rows.get(0), (articolo.getFlagTracciabilita().equalsIgnoreCase("S"))); + } } - private SqlMtbColr getRowForArticolo(GrigliaAcquistiChildDTO articolo) { + private List getRowsForArticolo(GrigliaAcquistiChildDTO articolo) { List docRows = this.docRows.getValue(); if (docRows == null) { docRows = new ArrayList<>(); } SqlMtbColt document = this.document.getValue(); - SqlMtbColr row = Stream.of(docRows).filter(docRow -> docRow.getCodMart().equalsIgnoreCase(articolo.getCodMart())).findFirstOrElse(null); - if (row == null) { - row = new SqlMtbColr(); - row.setIdCollo(document.getId()); - row.setRiga(getNextIdRiga()); - row.setCodMart(articolo.getCodMart()); - row.setSerCollo(document.getSerCollo()); - row.setGestione(document.getGestione()); - row.setNumCollo(document.getNumCollo()); - row.setDataCollo(document.getDataCollo()); - row.setDescrizione(articolo.getDescrizione()); - row.setUntMis(articolo.getUntMis()); - row.setCodBarre(articolo.getBarcode()); - row.setQtaCnf(articolo.getQtaCnf().floatValue()); - row.setNumCnf(0f); - row.setQtaCol(0f); - } - return row; + SqlMtbColr row = new SqlMtbColr(); + row.setIdCollo(document.getId()); + row.setRiga(getNextIdRiga()); + row.setCodMart(articolo.getCodMart()); + row.setSerCollo(document.getSerCollo()); + row.setGestione(document.getGestione()); + row.setNumCollo(document.getNumCollo()); + row.setDataCollo(document.getDataCollo()); + row.setDescrizione(articolo.getDescrizione()); + row.setUntMis(articolo.getUntMis()); + row.setCodBarre(articolo.getBarcode()); + row.setQtaCnf(articolo.getQtaCnf().floatValue()); + row.setNumCnf(0f); + row.setQtaCol(0f); + List rows = Stream.of(docRows).filter(docRow -> docRow.getCodMart().equalsIgnoreCase(articolo.getCodMart())).toList(); + rows.add(row); + return rows; } private GrigliaAcquistiChildDTO searchArticolo(String filter) { @@ -304,6 +309,8 @@ public class DocInterniEditFormViewModel { void onEditRowRequest(SqlMtbColr row, boolean flagTracciabilita); + void onMultipleRowsFound(List rows, GrigliaAcquistiChildDTO articolo); + void onDocumentHoldRequest(); void onDocExported(); 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 new file mode 100644 index 00000000..29bb8f1c --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectDocRows/DialogSelectDocRowsComponent.java @@ -0,0 +1,16 @@ +package it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.dialog.selectDocRows; + +import dagger.Subcomponent; + +@Subcomponent +public interface DialogSelectDocRowsComponent { + + @Subcomponent.Factory + interface Factory { + DialogSelectDocRowsComponent create(); + } + + + void inject(DialogSelectDocRowsView dialogSelectDocInfoView); + +} 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 new file mode 100644 index 00000000..499da135 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectDocRows/DialogSelectDocRowsModule.java @@ -0,0 +1,9 @@ +package it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.dialog.selectDocRows; + +import dagger.Module; + +@Module(subcomponents = DialogSelectDocRowsComponent.class) +public class DialogSelectDocRowsModule { + + +} 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 new file mode 100644 index 00000000..4da76842 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/dialog/selectDocRows/DialogSelectDocRowsView.java @@ -0,0 +1,143 @@ +package it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.dialog.selectDocRows; + +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.ravikoradiya.liveadapter.LiveAdapter; + +import java.util.List; + +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; + +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); + } + + + private DialogSelectDocRowsView(List listArts, RunnableArgs onDismiss) { + super(); + this.onRowSelected = onDismiss; + this.listArts = listArts; + } + + @Override + public void onDismiss(@NonNull DialogInterface dialog) { + super.onDismiss(dialog); + if (onRowSelected != null) onRowSelected.run(this.selectedRow.getValue()); + } + + @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); + + 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(); + }); + + binding.negativeButton.setOnClickListener(view -> { + this.selectedRow.setValue(null); + getDialog().dismiss(); + }); + + + this.onLoadingEnded(); + return binding.getRoot(); + } + + 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 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); + + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/dialogs/DialogScanLisA.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/dialogs/DialogScanLisA.java index 66175187..acd93cac 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/dialogs/DialogScanLisA.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/dialogs/DialogScanLisA.java @@ -55,7 +55,6 @@ public class DialogScanLisA { mOnDialogDismiss = onDialogDismiss; initBarcode(); - } public static Dialog make(Activity context, GrigliaRepository grigliaRepository, OrdineAcquistoPvHelper helper, RunnableArgs onDialogDismiss) { @@ -77,7 +76,6 @@ public class DialogScanLisA { }); } - private final RunnableArgs onScanSuccessfull = data -> { BarcodeManager.disable(); 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_choose_row_from_lista_doc_rows__item_model.xml new file mode 100644 index 00000000..4b389296 --- /dev/null +++ b/app/src/main/res/layout/dialog_choose_row_from_lista_doc_rows__item_model.xml @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file 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 new file mode 100644 index 00000000..c738e70c --- /dev/null +++ b/app/src/main/res/layout/dialog_choose_row_from_lista_doc_rows_layout.xml @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 9c133848..b3c8e888 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -377,4 +377,5 @@ Qtà proposta giorni Nuovo articolo in griglia + Seleziona la riga da modificare \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ec6181f2..2088df9c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -386,4 +386,5 @@ Suggested Qty days Newly added product + Select document row to edit