Completata implementazione del magazzino automatico in Picking di Uscita

This commit is contained in:
Giuseppe Scorrano 2023-01-30 19:11:33 +01:00
parent ee5d30ff80
commit 7b913e607e
20 changed files with 570 additions and 96 deletions

View File

@ -92,6 +92,8 @@ import it.integry.integrywmsnative.view.bottom_sheet__mtb_colr_edit.BottomSheetM
import it.integry.integrywmsnative.view.bottom_sheet__mtb_colr_edit.BottomSheetMtbColrEditModalModule;
import it.integry.integrywmsnative.view.dialogs.ask_cliente.DialogAskClienteComponent;
import it.integry.integrywmsnative.view.dialogs.ask_cliente.DialogAskClienteModule;
import it.integry.integrywmsnative.view.dialogs.choose_arts_from_lista_arts.DialogChooseArtsFromMtbAartListComponent;
import it.integry.integrywmsnative.view.dialogs.choose_arts_from_lista_arts.DialogChooseArtsFromMtbAartListModule;
import it.integry.integrywmsnative.view.dialogs.choose_arts_from_mtbcolr_list.DialogChooseArtsFromMtbColrListComponent;
import it.integry.integrywmsnative.view.dialogs.choose_arts_from_mtbcolr_list.DialogChooseArtsFromMtbColrListModule;
import it.integry.integrywmsnative.view.dialogs.choose_batch_lot.DialogChooseBatchLotComponent;
@ -166,6 +168,8 @@ import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCr
BottomSheetInventarioActionsModule.class,
BottomSheetInventarioRowActionsModule.class,
BottomSheetMtbColrEditModalModule.class,
DialogChooseArtsFromMtbAartListModule.class,
})
public interface MainApplicationComponent {
@ -279,6 +283,8 @@ public interface MainApplicationComponent {
BottomSheetMtbColrEditModalComponent.Factory bottomSheetMtbColrEditModalComponent();
DialogChooseArtsFromMtbAartListComponent.Factory dialogDialogDialogChooseArtsFromMtbAartListViewComponent();
void inject(MainApplication mainApplication);
void inject(AppContext mainApplication);

View File

@ -18,7 +18,6 @@ public class BindableBoolean implements Observable {
this.mValue = startValue;
}
@Override
public void addOnPropertyChangedCallback(@NonNull OnPropertyChangedCallback callback) {
synchronized (this) {

View File

@ -46,9 +46,7 @@ public class OrdiniRESTConsumer extends _BaseRESTConsumer {
}
public void getSuggestedPickingList(String codMdep, List<SitArtOrdDTO> sitArtOrdList, RunnableArgs<List<PickingObjectDTO>> onComplete, RunnableArgs<Exception> onFailed) {
OrdiniRESTConsumerService service = RESTBuilder.getService(OrdiniRESTConsumerService.class, 90);
service
.getSuggestedPickingList(codMdep, sitArtOrdList)
.enqueue(new Callback<>() {
@ -109,7 +107,6 @@ public class OrdiniRESTConsumer extends _BaseRESTConsumer {
@Override
public void onFailure(Call<ServiceRESTResponse<List<PickingObjectDTO>>> call, Throwable t) {
UtilityLogger.error(new Exception(t));
onFailed.run(new Exception(t));
}
});

View File

@ -11,6 +11,10 @@ public class MagazzinoAutomaticoPickItemRequestDTO {
private BigDecimal qtaCnf;
private BigDecimal numCnf;
public MagazzinoAutomaticoPickItemRequestDTO(String codMart) {
this.codMart = codMart;
}
public String getCodMart() {
return codMart;
}

View File

@ -4,6 +4,7 @@ import java.time.LocalDate;
public class MagazzinoAutomaticoPickOrderRequestDTO {
private final String type = "dtb_ordr";
private LocalDate dataCons;
private LocalDate dataOrd;
private String gestione;
@ -35,4 +36,8 @@ public class MagazzinoAutomaticoPickOrderRequestDTO {
this.dataCons = dataCons;
return this;
}
public String getType() {
return type;
}
}

View File

@ -73,6 +73,7 @@ import it.integry.integrywmsnative.view.dialogs.ask_should_print.DialogAskShould
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleInputHelper;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
import it.integry.integrywmsnative.view.dialogs.choose_art_from_lista_arts.DialogChooseArtFromListaArtsView;
import it.integry.integrywmsnative.view.dialogs.choose_arts_from_lista_arts.DialogChooseArtsFromMtbAartListView;
import it.integry.integrywmsnative.view.dialogs.choose_batch_lot.DialogChooseBatchLotView;
import it.integry.integrywmsnative.view.dialogs.info_aggiuntive_lu.DialogInfoAggiuntiveLU;
import it.integry.integrywmsnative.view.dialogs.input_peso_lu.DialogInputPesoLUView;
@ -409,7 +410,8 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
y.getRefMtbColr().getGestioneEnum().equals(mtbColrToDispatch.getGestioneEnum()) &&
UtilityString.equalsIgnoreCase(y.getRefMtbColr().getCodMart(), mtbColrToDispatch.getCodMart()) &&
UtilityString.equalsIgnoreCase(y.getRefMtbColr().getCodTagl(), mtbColrToDispatch.getCodTagl()) &&
UtilityString.equalsIgnoreCase(y.getRefMtbColr().getCodCol(), mtbColrToDispatch.getCodCol())*/ y.getRefMtbColr().equals(mtbColrToDispatch))
UtilityString.equalsIgnoreCase(y.getRefMtbColr().getCodCol(), mtbColrToDispatch.getCodCol())*/
y.getRefMtbColr().equals(mtbColrToDispatch))
.map(MtbColr::getNumCnf)
.reduce(BigDecimal.ZERO, BigDecimal::add);
@ -925,7 +927,16 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
@Override
public void onCreateDocsRequest() {
DialogYesNoView.newInstance("Chiusura ordine", "Vuoi creare i documenti per gli ordini selezionati?", result -> {
this.mViewmodel.onCreateDocsAnswered(result);
switch (result) {
case YES:
this.mViewmodel.createDocs();
break;
case NO:
this.onOrderClosed();
break;
}
}).show(this.getSupportFragmentManager(), "tag");
}
@ -935,6 +946,12 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
.show(getSupportFragmentManager(), "tag");
}
@Override
public void onChooseArtsRequest(List<MtbAart> artsList, RunnableArgs<List<MtbAart>> onComplete) {
DialogChooseArtsFromMtbAartListView.newInstance(artsList, onComplete, this::onLoadingEnded)
.show(getSupportFragmentManager(), "tag");
}
@Override
public void onOrderClosed() {
this.onLoadingEnded();

View File

@ -7,13 +7,10 @@ import com.annimon.stream.Optional;
import com.annimon.stream.Stream;
import org.apache.commons.lang3.NotImplementedException;
import org.jetbrains.annotations.NotNull;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
@ -50,7 +47,6 @@ import it.integry.integrywmsnative.core.model.MtbTCol;
import it.integry.integrywmsnative.core.model.dto.PickDataDTO;
import it.integry.integrywmsnative.core.model.dto.StatoArticoloDTO;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.report.ReportType;
import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ColliLavorazioneRESTConsumer;
@ -67,6 +63,7 @@ import it.integry.integrywmsnative.core.rest.model.Ean13PesoModel;
import it.integry.integrywmsnative.core.rest.model.LoadColliDTO;
import it.integry.integrywmsnative.core.rest.model.OrdineUscitaInevasoDTO;
import it.integry.integrywmsnative.core.rest.model.SitArtOrdDTO;
import it.integry.integrywmsnative.core.rest.model.magazzino_automatico.MagazzinoAutomaticoPickItemRequestDTO;
import it.integry.integrywmsnative.core.rest.model.magazzino_automatico.MagazzinoAutomaticoPickItemsRequestDTO;
import it.integry.integrywmsnative.core.rest.model.magazzino_automatico.MagazzinoAutomaticoPickOrderRequestDTO;
import it.integry.integrywmsnative.core.rest.model.uds.CanUDSBeDeletedRequestDTO;
@ -91,7 +88,6 @@ import it.integry.integrywmsnative.gest.spedizione.exceptions.OrdersLoadExceptio
import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO;
import it.integry.integrywmsnative.gest.spedizione.model.PickingObjectDTO;
import it.integry.integrywmsnative.gest.spedizione.model.PrintOrderCloseDTO;
import it.integry.integrywmsnative.view.dialogs.DialogConsts;
public class SpedizioneViewModel {
@ -275,6 +271,14 @@ public class SpedizioneViewModel {
if (this.mListener != null) mListener.onCreateDocsRequest();
}
private void sendChooseArtRequest(List<MtbAart> mtbAarts, RunnableArgs<MtbAart> onComplete) {
if (this.mListener != null) mListener.onChooseArtRequest(mtbAarts, onComplete);
}
private void sendChooseArtsRequest(List<MtbAart> mtbAarts, RunnableArgs<List<MtbAart>> onComplete) {
if (this.mListener != null) mListener.onChooseArtsRequest(mtbAarts, onComplete);
}
private void sendOnOrderClosed() {
if (this.mListener != null) mListener.onOrderClosed();
}
@ -489,21 +493,7 @@ public class SpedizioneViewModel {
if (foundPosizione.isMagazzinoAutomatico()) {
//Eseguo picking da magazzino automatico
final List<MagazzinoAutomaticoPickOrderRequestDTO> orders = this.mTestateOrdini.stream()
.map(x -> new MagazzinoAutomaticoPickOrderRequestDTO(UtilityDate.toLocalDate(x.getDataOrdD()), x.getGestione(), x.getNumOrd())
.setDataCons(UtilityDate.toLocalDate(x.getDataConsD())))
.collect(Collectors.toList());
var magazzinoAutomaticoPickRequest = new MagazzinoAutomaticoPickItemsRequestDTO()
.setShouldCreateUDS(true)
.setDefaultGestioneOfNewUDS(mDefaultGestioneOfUL.getText())
.setOrdersOfNewUDS(orders);
mMagazzinoAutomaticoRESTConsumer.pickItems(magazzinoAutomaticoPickRequest, () -> {
}, this::sendError);
executeMagazzinoAutomatico(foundPosizione, onComplete);
return;
}
@ -589,7 +579,7 @@ public class SpedizioneViewModel {
if (mtbAartList.size() == 1) {
this.searchArtFromAnag(mtbAartList.get(0), pickData, onComplete);
} else {
mListener.onChooseArtRequest(mtbAartList, art -> this.searchArtFromAnag(art, pickData, onComplete));
this.sendChooseArtRequest(mtbAartList, art -> this.searchArtFromAnag(art, pickData, onComplete));
}
} else {
this.sendError(new NoResultFromBarcodeException(barcodeProd));
@ -598,6 +588,54 @@ public class SpedizioneViewModel {
}, this::sendError);
}
private void executeMagazzinoAutomatico(MtbDepoPosizione mtbDepoPosizione, Runnable onComplete) {
var magazzinoAutomaticoPickableArts = Stream.of(Objects.requireNonNull(this.mPickingList.getValue()))
.filter(x -> Stream.of(x.getMtbColts()).anyMatch(y -> y.getPosizione().equalsIgnoreCase(mtbDepoPosizione.getPosizione())))
.toList();
var mtbAarts = Stream.of(magazzinoAutomaticoPickableArts)
.map(PickingObjectDTO::getMtbAart)
.toList();
this.sendChooseArtsRequest(mtbAarts, selectedArts -> {
final List<MagazzinoAutomaticoPickOrderRequestDTO> orders = Stream.of(this.mTestateOrdini)
.map(x -> new MagazzinoAutomaticoPickOrderRequestDTO(UtilityDate.toLocalDate(x.getDataOrdD()), x.getGestione(), x.getNumOrd())
.setDataCons(UtilityDate.toLocalDate(x.getDataConsD())))
.toList();
final List<MagazzinoAutomaticoPickItemRequestDTO> magazzinoAutomaticoPickItemRequestDTOList = new ArrayList<>();
for (MtbAart selectedArt : selectedArts) {
final PickingObjectDTO pickingObjectDTO = Stream.of(magazzinoAutomaticoPickableArts)
.filter(x -> x.getMtbAart().getCodMart().equalsIgnoreCase(selectedArt.getCodMart()))
.findFirst()
.orElse(null);
final List<MtbColr> mtbColrs = Stream.of(pickingObjectDTO.getMtbColts())
.filter(x -> x.getPosizione().equalsIgnoreCase(mtbDepoPosizione.getPosizione()))
.flatMap(x -> Stream.of(x.getMtbColr()))
.filter(x -> x.getCodMart().equalsIgnoreCase(selectedArt.getCodMart()))
.toList();
MagazzinoAutomaticoPickItemRequestDTO itemDto = new MagazzinoAutomaticoPickItemRequestDTO(selectedArt.getCodMart())
.setQtaTot(Stream.of(mtbColrs).map(MtbColr::getQtaCol).reduce(BigDecimal.ZERO, BigDecimal::add))
.setNumCnf(Stream.of(mtbColrs).map(MtbColr::getNumCnf).reduce(BigDecimal.ZERO, BigDecimal::add))
.setUntMis(selectedArt.getUntMis());
magazzinoAutomaticoPickItemRequestDTOList.add(itemDto);
}
var magazzinoAutomaticoPickRequest = new MagazzinoAutomaticoPickItemsRequestDTO()
.setShouldCreateUDS(true)
.setDefaultGestioneOfNewUDS(mDefaultGestioneOfUL.getText())
.setOrdersOfNewUDS(orders)
.setItemsToPick(magazzinoAutomaticoPickItemRequestDTOList);
mMagazzinoAutomaticoRESTConsumer.pickItems(magazzinoAutomaticoPickRequest, onComplete, this::sendError);
});
}
private void searchArtFromUL(MtbColt scannedUL, Runnable onComplete) {
final List<PickingObjectDTO> pickingList = mPickingList.getValue();
@ -1749,45 +1787,6 @@ public class SpedizioneViewModel {
this.mPrinterRESTConsumer.printClosedOrders(dto, SettingsManager.i().getUserSession().getDepo().getCodMdep(), onSuccess, onAbort);
}
private void cyclicPrintPackingList(@NotNull Iterator<OrdineUscitaInevasoDTO> sourceTestateOrdineVenditaIterator, Runnable onComplete, RunnableArgs<Exception> onAbort) {
if (sourceTestateOrdineVenditaIterator.hasNext()) {
singlePrintPackingList(sourceTestateOrdineVenditaIterator.next(), () -> {
cyclicPrintPackingList(sourceTestateOrdineVenditaIterator, onComplete, onAbort);
}, onAbort);
} else {
onComplete.run();
}
}
private void cyclicPrintListEtichette(@NotNull Iterator<OrdineUscitaInevasoDTO> sourceTestateOrdineVenditaIterator, Runnable onComplete, RunnableArgs<Exception> onAbort) {
if (sourceTestateOrdineVenditaIterator.hasNext()) {
singlePrintListEtichette(sourceTestateOrdineVenditaIterator.next(), () -> {
cyclicPrintListEtichette(sourceTestateOrdineVenditaIterator, onComplete, onAbort);
}, onAbort);
} else {
onComplete.run();
}
}
private void singlePrintPackingList(OrdineUscitaInevasoDTO ordineUscitaInevasoDTO, Runnable onComplete, RunnableArgs<Exception> onFailed) {
HashMap<String, Object> params = new HashMap<>();
params.put("gestione", ordineUscitaInevasoDTO.getGestione());
params.put("num_ord", ordineUscitaInevasoDTO.getNumOrd());
params.put("data_ord", UtilityDate.formatDate(ordineUscitaInevasoDTO.getDataOrdD(), UtilityDate.COMMONS_DATE_FORMATS.YMD_DASH));
this.mPrinterRESTConsumer.printReportType(ReportType.WMS_SPEDIZIONE_PACKING_LIST_ORD, SettingsManager.i().getUserSession().getDepo().getCodMdep(), ordineUscitaInevasoDTO.getCodAnagOrd(), params, onComplete, onFailed);
}
private void singlePrintListEtichette(OrdineUscitaInevasoDTO ordineUscitaInevasoDTO, Runnable onComplete, RunnableArgs<Exception> onFailed) {
HashMap<String, Object> params = new HashMap<>();
params.put("gestione", ordineUscitaInevasoDTO.getGestione());
params.put("num_ord", ordineUscitaInevasoDTO.getNumOrd());
params.put("data_ord", UtilityDate.formatDate(ordineUscitaInevasoDTO.getDataOrdD(), UtilityDate.COMMONS_DATE_FORMATS.YMD_DASH));
this.mPrinterRESTConsumer.printReportType(ReportType.WMS_SPEDIZIONE_ETICHETTE_SSCC_ORD, SettingsManager.i().getUserSession().getDepo().getCodMdep(), ordineUscitaInevasoDTO.getCodAnagOrd(), params, onComplete, onFailed);
}
public MutableLiveData<List<PickingObjectDTO>> getPickingList() {
return mPickingList;
@ -1797,23 +1796,7 @@ public class SpedizioneViewModel {
return (ArrayList<MtbColt>) this.mColliRegistrati;
}
public SpedizioneViewModel setListeners(Listener listener) {
this.mListener = listener;
return this;
}
public void onCreateDocsAnswered(DialogConsts.Results result) {
switch (result) {
case YES:
this.createDocs();
break;
case NO:
this.sendOnOrderClosed();
break;
}
}
private void createDocs() {
void createDocs() {
var loadCollidto = new LoadColliDTO();
var codAnag = Stream.of(mTestateOrdini).map(OrdineUscitaInevasoDTO::getCodAnagOrd).withoutNulls().distinctBy(x -> x).findFirst().get();
@ -1830,6 +1813,11 @@ public class SpedizioneViewModel {
this.mDocumentiRESTConsumer.createDocFromColli(loadCollidto, doc -> this.sendOnOrderClosed(), this::sendError);
}
public SpedizioneViewModel setListeners(Listener listener) {
this.mListener = listener;
return this;
}
public interface Listener extends ILUPrintListener, ILoadingListener, ILUBaseOperationsListener {
void onLUPesoRequired(String codTcol, BigDecimal netWeightKG, BigDecimal grossWeightKG, RunnableArgsss<String, BigDecimal, BigDecimal> onComplete);
@ -1854,6 +1842,8 @@ public class SpedizioneViewModel {
void onChooseArtRequest(List<MtbAart> artsList, RunnableArgs<MtbAart> onComplete);
void onChooseArtsRequest(List<MtbAart> artsList, RunnableArgs<List<MtbAart>> onComplete);
void onOrderClosed();
}

View File

@ -0,0 +1,14 @@
package it.integry.integrywmsnative.view.dialogs.choose_arts_from_lista_arts;
import dagger.Subcomponent;
@Subcomponent
public interface DialogChooseArtsFromMtbAartListComponent {
@Subcomponent.Factory
interface Factory {
DialogChooseArtsFromMtbAartListComponent create();
}
void inject(DialogChooseArtsFromMtbAartListView dialogChooseArtsFromMtbAartListView);
}

View File

@ -0,0 +1,103 @@
package it.integry.integrywmsnative.view.dialogs.choose_arts_from_lista_arts;
import java.math.BigDecimal;
import it.integry.integrywmsnative.core.di.BindableBoolean;
import it.integry.integrywmsnative.core.model.MtbAart;
public class DialogChooseArtsFromMtbAartListItemModel {
private BindableBoolean selected = new BindableBoolean(false);
private String codMart;
private String diacod;
private String descrizione;
private BigDecimal peso;
private String pesoUntMis;
private BigDecimal qta;
private String qtaUntMis;
private MtbAart originalModel;
public BindableBoolean getSelected() {
return selected;
}
public DialogChooseArtsFromMtbAartListItemModel setSelected(BindableBoolean selected) {
this.selected = selected;
return this;
}
public String getCodMart() {
return codMart;
}
public DialogChooseArtsFromMtbAartListItemModel setCodMart(String codMart) {
this.codMart = codMart;
return this;
}
public String getDiacod() {
return diacod;
}
public DialogChooseArtsFromMtbAartListItemModel setDiacod(String diacod) {
this.diacod = diacod;
return this;
}
public String getDescrizione() {
return descrizione;
}
public DialogChooseArtsFromMtbAartListItemModel setDescrizione(String descrizione) {
this.descrizione = descrizione;
return this;
}
public BigDecimal getPeso() {
return peso;
}
public DialogChooseArtsFromMtbAartListItemModel setPeso(BigDecimal peso) {
this.peso = peso;
return this;
}
public String getPesoUntMis() {
return pesoUntMis;
}
public DialogChooseArtsFromMtbAartListItemModel setPesoUntMis(String pesoUntMis) {
this.pesoUntMis = pesoUntMis;
return this;
}
public BigDecimal getQta() {
return qta;
}
public DialogChooseArtsFromMtbAartListItemModel setQta(BigDecimal qta) {
this.qta = qta;
return this;
}
public String getQtaUntMis() {
return qtaUntMis;
}
public DialogChooseArtsFromMtbAartListItemModel setQtaUntMis(String qtaUntMis) {
this.qtaUntMis = qtaUntMis;
return this;
}
public MtbAart getOriginalModel() {
return originalModel;
}
public DialogChooseArtsFromMtbAartListItemModel setOriginalModel(MtbAart originalModel) {
this.originalModel = originalModel;
return this;
}
}

View File

@ -0,0 +1,14 @@
package it.integry.integrywmsnative.view.dialogs.choose_arts_from_lista_arts;
import dagger.Module;
import dagger.Provides;
@Module(subcomponents = DialogChooseArtsFromMtbAartListComponent.class)
public class DialogChooseArtsFromMtbAartListModule {
@Provides
DialogChooseArtsFromMtbAartListViewModel providesDialogDialogDialogChooseArtsFromMtbAartListViewViewModel() {
return new DialogChooseArtsFromMtbAartListViewModel();
}
}

View File

@ -0,0 +1,121 @@
package it.integry.integrywmsnative.view.dialogs.choose_arts_from_lista_arts;
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 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.core.model.MtbAart;
import it.integry.integrywmsnative.databinding.DialogChooseArtsFromMtbAartListLayoutBinding;
public class DialogChooseArtsFromMtbAartListView extends BaseDialogFragment implements DialogInterface.OnShowListener {
@Inject
DialogChooseArtsFromMtbAartListViewModel mViewModel;
private DialogChooseArtsFromMtbAartListLayoutBinding mBindings;
private Context mContext;
private final List<MtbAart> mtbAarts;
private List<DialogChooseArtsFromMtbAartListItemModel> artsItemModels = null;
private final RunnableArgs<List<MtbAart>> onConfirmed;
private final Runnable onAbort;
//Pass here all external parameters
public static DialogChooseArtsFromMtbAartListView newInstance(List<MtbAart> mtbAarts, RunnableArgs<List<MtbAart>> onConfirmed, Runnable onAbort) {
return new DialogChooseArtsFromMtbAartListView(mtbAarts, onConfirmed, onAbort);
}
private DialogChooseArtsFromMtbAartListView(List<MtbAart> mtbAarts, RunnableArgs<List<MtbAart>> onConfirmed, Runnable onAbort) {
super();
this.mtbAarts = mtbAarts;
this.onConfirmed = onConfirmed;
this.onAbort = onAbort;
}
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
this.mContext = requireContext();
mBindings = DialogChooseArtsFromMtbAartListLayoutBinding.inflate(LayoutInflater.from(this.mContext), null, false);
mBindings.setLifecycleOwner(this);
MainApplication.appComponent
.dialogDialogDialogChooseArtsFromMtbAartListViewComponent()
.create()
.inject(this);
var cancelable = false;
var alertDialog = new MaterialAlertDialogBuilder(this.mContext)
.setView(mBindings.getRoot())
.setCancelable(cancelable)
.setPositiveButton(R.string.ok, (dialog, which) -> {
var selectedArts = Stream.of(this.artsItemModels)
.filter(x -> x.getSelected().get())
.map(DialogChooseArtsFromMtbAartListItemModel::getOriginalModel)
.toList();
if(selectedArts.isEmpty()) {
if (this.onAbort != null) this.onAbort.run();
return;
}
if (this.onConfirmed != null)
this.onConfirmed.run(selectedArts);
})
.setNegativeButton(R.string.abort, (dialog, which) -> {
if (this.onAbort != null) this.onAbort.run();
})
.create();
alertDialog.setOnShowListener(this);
alertDialog.setCanceledOnTouchOutside(cancelable);
return alertDialog;
}
@Override
public void onShow(DialogInterface dialogInterface) {
this.initList();
}
private void initList() {
this.artsItemModels = Stream.of(this.mtbAarts)
.map(x -> new DialogChooseArtsFromMtbAartListItemModel()
.setCodMart(x.getCodMart())
.setDescrizione(x.getDescrizioneEstesa())
.setDiacod(x.getDiacod())
.setOriginalModel(x))
.toList();
new LiveAdapter(this.artsItemModels, BR.item)
.map(DialogChooseArtsFromMtbAartListItemModel.class, R.layout.dialog_choose_arts_from_mtb_aart_list__item_model)
.into(this.mBindings.listaArts);
}
}

View File

@ -0,0 +1,5 @@
package it.integry.integrywmsnative.view.dialogs.choose_arts_from_lista_arts;
public class DialogChooseArtsFromMtbAartListViewModel {
}

View File

@ -38,7 +38,7 @@ import it.integry.integrywmsnative.core.utility.UtilityBarcode;
import it.integry.integrywmsnative.core.utility.UtilityDialog;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.databinding.DialogChooseArtsFromListaArtsLayoutBinding;
import it.integry.integrywmsnative.databinding.DialogChooseArtsFromMtbColrListLayoutBinding;
import it.integry.integrywmsnative.view.dialogs.DialogCommon;
public class DialogChooseArtsFromMtbColrList extends BaseDialogFragment {
@ -51,7 +51,7 @@ public class DialogChooseArtsFromMtbColrList extends BaseDialogFragment {
private Context context;
private DialogChooseArtsFromListaArtsLayoutBinding mBindings;
private DialogChooseArtsFromMtbColrListLayoutBinding mBindings;
private DialogChooseArtsFromMtbColrListAdapter currentAdapter;
@ -102,7 +102,7 @@ public class DialogChooseArtsFromMtbColrList extends BaseDialogFragment {
super.onCreateView(inflater, container, savedInstanceState);
this.context = getActivity();
mBindings = DataBindingUtil.inflate(inflater, R.layout.dialog_choose_arts_from_lista_arts_layout, null, false);
mBindings = DataBindingUtil.inflate(inflater, R.layout.dialog_choose_arts_from_mtb_colr_list_layout, null, false);
mBindings.setLifecycleOwner(getViewLifecycleOwner());
MainApplication.appComponent

View File

@ -20,7 +20,7 @@ import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityNumber;
import it.integry.integrywmsnative.core.utility.UtilityResources;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.databinding.DialogChooseArtsFromListaArtsItemModelBinding;
import it.integry.integrywmsnative.databinding.DialogChooseArtsFromMtbColrListItemModelBinding;
public class DialogChooseArtsFromMtbColrListAdapter extends RecyclerView.Adapter<DialogChooseArtsFromMtbColrListAdapter.ViewHolder> {
@ -64,10 +64,10 @@ public class DialogChooseArtsFromMtbColrListAdapter extends RecyclerView.Adapter
public class ViewHolder extends RecyclerView.ViewHolder {
private DialogChooseArtsFromListaArtsItemModelBinding mViewDataBinding;
private DialogChooseArtsFromMtbColrListItemModelBinding mViewDataBinding;
public ViewHolder(DialogChooseArtsFromListaArtsItemModelBinding v) {
public ViewHolder(DialogChooseArtsFromMtbColrListItemModelBinding v) {
super(v.getRoot());
mViewDataBinding = v;
}
@ -100,7 +100,7 @@ public class DialogChooseArtsFromMtbColrListAdapter extends RecyclerView.Adapter
@Override
public DialogChooseArtsFromMtbColrListAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// create a new view
DialogChooseArtsFromListaArtsItemModelBinding viewDataBinding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), R.layout.dialog_choose_arts_from_lista_arts__item_model, parent, false);
DialogChooseArtsFromMtbColrListItemModelBinding viewDataBinding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), R.layout.dialog_choose_arts_from_mtb_colr_list__item_model, parent, false);
return new ViewHolder(viewDataBinding);
}

View File

@ -9,8 +9,5 @@
android:top="4dp" />
<corners
android:topLeftRadius="16dp"
android:bottomLeftRadius="16dp"
android:topRightRadius="8dp"
android:bottomRightRadius="8dp" />
android:radius="12dp" />
</shape>

View File

@ -0,0 +1,153 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<import type="it.integry.integrywmsnative.R" />
<import type="android.view.View" />
<import type="it.integry.integrywmsnative.core.utility.UtilityString" />
<import type="it.integry.integrywmsnative.core.utility.UtilityNumber" />
<variable
name="item"
type="it.integry.integrywmsnative.view.dialogs.choose_arts_from_lista_arts.DialogChooseArtsFromMtbAartListItemModel" />
</data>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="8dp"
android:layout_marginVertical="4dp"
android:background="@drawable/bg_checked_layout"
android:onClick="@{() -> item.selected.toggle()}"
android:padding="8dp"
app:backgroundTintResID="@{item.selected.get() ? R.color.bg_checked_layout : android.R.color.transparent}">
<androidx.appcompat.widget.AppCompatCheckBox
android:id="@+id/checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:minWidth="0dp"
android:minHeight="0dp"
app:checked="@{item.selected}" />
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/linearLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toStartOf="@id/qta_box"
android:layout_toEndOf="@id/checkbox"
android:layout_marginStart="8dp"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{item.codMart}"
android:textColor="@color/colorPrimary"
android:textSize="14sp"
android:textStyle="bold"
tools:text="COD MART" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:background="@drawable/badge_round_corner"
android:backgroundTint="@color/orange_600"
android:paddingStart="6dp"
android:paddingEnd="6dp"
android:text="@{UtilityNumber.decimalToString(item.peso) + item.pesoUntMis}"
android:textColor="@android:color/white"
android:textSize="14sp"
android:textStyle="bold"
android:visibility="@{item.peso != null ? View.VISIBLE : View.GONE}"
tools:text="PESO KG" />
</RelativeLayout>
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{item.diacod}"
android:textColor="@color/red_600"
android:textSize="14sp"
android:textStyle="bold"
android:visibility="@{UtilityString.isNullOrEmpty(item.diacod) ? View.GONE : View.VISIBLE}"
tools:text="DIACOD" />
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="2"
android:text="@{item.descrizione}"
android:textColor="@android:color/black"
android:textSize="16sp"
tools:text="Descrizione lunga articolo" />
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/qta_box"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:layout_marginStart="12dp"
android:gravity="center_horizontal"
android:background="@drawable/badge_round_corner"
android:backgroundTint="@color/colorPrimary"
android:visibility="@{item.qta != null ? View.VISIBLE : View.GONE}">
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:paddingLeft="6dp"
android:paddingTop="2dp"
android:paddingRight="6dp"
android:paddingBottom="2dp"
android:textAllCaps="true"
android:textColor="@android:color/white"
android:textSize="16sp"
android:textStyle="bold"
android:text="@{UtilityNumber.decimalToString(item.qta, 2)}"
tools:text="280.45" />
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:paddingLeft="6dp"
android:paddingTop="2dp"
android:paddingRight="6dp"
android:paddingBottom="2dp"
android:textAllCaps="true"
android:textColor="@android:color/white"
android:textSize="16sp"
android:textStyle="bold"
android:text="@{item.qtaUntMis}"
tools:text="CONF" />
</androidx.appcompat.widget.LinearLayoutCompat>
</RelativeLayout>
</layout>

View File

@ -0,0 +1,48 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
app:cardCornerRadius="16dp"
app:cardElevation="0dp">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingVertical="16dp">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/title_text"
style="@style/MaterialAlertDialog.Material3.Title.Text.CenterStacked"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:layout_marginBottom="16dp"
android:text="@string/dialog_choose_arts_from_lista_art" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/description_text"
style="@style/TextAppearance.Material3.BodyMedium"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:text="Description here" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/lista_arts"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:listitem="@layout/dialog_choose_art_from_lista_art__item_model"/>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.cardview.widget.CardView>
</layout>

View File

@ -57,7 +57,8 @@
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/lista_arts"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
android:layout_height="wrap_content"
tools:listitem="@layout/dialog_choose_art_from_lista_art__item_model"/>
</RelativeLayout>

View File

@ -34,4 +34,4 @@ org.gradle.parallel=true
org.gradle.caching=true
# Increase memory allotted to JVM
org.gradle.jvmargs=-Xmx4096m
#org.gradle.unsafe.configuration-cache=true
org.gradle.unsafe.configuration-cache=true