Implementata lettura barcode pedane in gestione resi

This commit is contained in:
Giuseppe Scorrano 2021-03-12 13:33:54 +01:00
parent 11903d1a34
commit 94b2959d29
10 changed files with 570 additions and 56 deletions

View File

@ -31,7 +31,6 @@ import it.integry.integrywmsnative.core.di.BindableBoolean;
import it.integry.integrywmsnative.core.expansion.BaseFragment; import it.integry.integrywmsnative.core.expansion.BaseFragment;
import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.interfaces.IFilterableFragment; import it.integry.integrywmsnative.core.interfaces.IFilterableFragment;
import it.integry.integrywmsnative.core.interfaces.ILifecycleFragment;
import it.integry.integrywmsnative.core.interfaces.IScrollableFragment; import it.integry.integrywmsnative.core.interfaces.IScrollableFragment;
import it.integry.integrywmsnative.core.interfaces.ISelectAllFragment; import it.integry.integrywmsnative.core.interfaces.ISelectAllFragment;
import it.integry.integrywmsnative.core.interfaces.ITitledFragment; import it.integry.integrywmsnative.core.interfaces.ITitledFragment;
@ -53,7 +52,7 @@ import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.BaseDialogRo
import it.integry.integrywmsnative.ui.ElevatedToolbar; import it.integry.integrywmsnative.ui.ElevatedToolbar;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledFragment, ILifecycleFragment, IScrollableFragment, ISelectAllFragment, IFilterableFragment, OrdiniUscitaElencoViewModel.Listener { public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledFragment, IScrollableFragment, ISelectAllFragment, IFilterableFragment, OrdiniUscitaElencoViewModel.Listener {
public BindableBoolean fabVisible = new BindableBoolean(false); public BindableBoolean fabVisible = new BindableBoolean(false);
@ -139,6 +138,8 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
@Override @Override
public void onDestroy() { public void onDestroy() {
BarcodeManager.removeCallback(barcodeScannerIstanceID);
for (Runnable onPreDestroy : mOnPreDestroyList) { for (Runnable onPreDestroy : mOnPreDestroyList) {
onPreDestroy.run(); onPreDestroy.run();
} }
@ -257,12 +258,6 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
.forEach(x -> x.getSelectedObservable().set(false)); .forEach(x -> x.getSelectedObservable().set(false));
} }
@Override
public void onPreDestroy(Runnable onComplete) {
BarcodeManager.removeCallback(barcodeScannerIstanceID);
onComplete.run();
}
@Override @Override
public void onCreateActionBar(AppCompatTextView titleText, Context context) { public void onCreateActionBar(AppCompatTextView titleText, Context context) {
titleText.setText(context.getText(R.string.prod_ordine_lavorazione_title_fragment).toString()); titleText.setText(context.getText(R.string.prod_ordine_lavorazione_title_fragment).toString());
@ -276,7 +271,6 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
.toList(); .toList();
this.mViewModel.loadPicking(selectedOrders); this.mViewModel.loadPicking(selectedOrders);
} }

View File

@ -35,6 +35,7 @@ import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO; import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityResources; import it.integry.integrywmsnative.core.utility.UtilityResources;
@ -50,8 +51,8 @@ import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFrag
import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentViewModel; import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentViewModel;
import it.integry.integrywmsnative.view.dialogs.ask_should_print.DialogAskShouldPrint; import it.integry.integrywmsnative.view.dialogs.ask_should_print.DialogAskShouldPrint;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO; import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View;
import it.integry.integrywmsnative.view.dialogs.note_aggiuntive_lu.NoteAggiuntiveLUDialog; import it.integry.integrywmsnative.view.dialogs.note_aggiuntive_lu.NoteAggiuntiveLUDialog;
public class PickingResiActivity extends BaseActivity implements BottomSheetFragmentLUContentView.Listener, BottomSheetFragmentLUContentViewModel.Listener, PickingResiViewModel.Listener { public class PickingResiActivity extends BaseActivity implements BottomSheetFragmentLUContentView.Listener, BottomSheetFragmentLUContentViewModel.Listener, PickingResiViewModel.Listener {
@ -179,9 +180,9 @@ public class PickingResiActivity extends BaseActivity implements BottomSheetFrag
this.mBindings.mainList.setAdapter(pickingResiListAdapter); this.mBindings.mainList.setAdapter(pickingResiListAdapter);
this.mBindings.mainList.setLayoutManager(new LinearLayoutManager(this)); this.mBindings.mainList.setLayoutManager(new LinearLayoutManager(this));
pickingResiListAdapter.setOnItemClicked(clickedItem -> { pickingResiListAdapter.setOnItemClicked((clickedItem, refMtbColt) -> {
if (!noLUPresent.get()) { if (!noLUPresent.get()) {
this.mViewmodel.dispatchOrdineRow(clickedItem); this.mViewmodel.dispatchOrdineRow(clickedItem, refMtbColt);
} }
}); });
} }
@ -190,7 +191,11 @@ public class PickingResiActivity extends BaseActivity implements BottomSheetFrag
private List<PickingResiListModel> convertDataModelToListModel(List<WithdrawableDtbDocr> dataList) { private List<PickingResiListModel> convertDataModelToListModel(List<WithdrawableDtbDocr> dataList) {
List<PickingResiListModel> pickingResiListModels = new ArrayList<>(); List<PickingResiListModel> pickingResiListModels = new ArrayList<>();
Stream.of(dataList) List<WithdrawableDtbDocr> tmpList = Stream.of(dataList)
.filter(x -> !x.isHidden() && UtilityBigDecimal.greaterThan(x.getQtaDoc(), BigDecimal.ZERO))
.toList();
Stream.of(tmpList)
.sortBy(x -> x.getNumDoc() + " " + x.getDataDocS() + " " + x.getCodDtip() + " " + x.getSerDoc() + " " + x.getCodAnag() + " " + x.getIdRiga()) .sortBy(x -> x.getNumDoc() + " " + x.getDataDocS() + " " + x.getCodDtip() + " " + x.getSerDoc() + " " + x.getCodAnag() + " " + x.getIdRiga())
.forEach(x -> { .forEach(x -> {
@ -251,6 +256,10 @@ public class PickingResiActivity extends BaseActivity implements BottomSheetFrag
}); });
} }
public void removeListFilter() {
this.mViewmodel.resetMatchedRows();
}
@Override @Override
public void onMtbColrEdit(MtbColr mtbColr) { public void onMtbColrEdit(MtbColr mtbColr) {
this.mViewmodel.dispatchRowEdit(mtbColr); this.mViewmodel.dispatchRowEdit(mtbColr);
@ -321,11 +330,23 @@ public class PickingResiActivity extends BaseActivity implements BottomSheetFrag
this.openProgress(); this.openProgress();
onComplete.run(pickedQuantityDTO, shouldCloseLU); onComplete.run(pickedQuantityDTO, shouldCloseLU);
}, () -> { }, () -> {
// this.mViewmodel.resetMatchedRows(); this.mViewmodel.resetMatchedRows();
}) })
.show(getSupportFragmentManager(), "tag"); .show(getSupportFragmentManager(), "tag");
} }
@Override
public void onFilterApplied(String newValue) {
this.mBindings.filteredArtsInListExpandableLayout.expand(true);
this.mBindings.descriptionFilterText.setText(!UtilityString.isNullOrEmpty(newValue) ? newValue : "");
}
@Override
public void onFilterRemoved() {
this.mBindings.filteredArtsInListExpandableLayout.collapse(true);
this.mBindings.descriptionFilterText.setText("");
}
@Override @Override
public void onRowSaved() { public void onRowSaved() {
FBToast.successToast(this, getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT); FBToast.successToast(this, getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT);

View File

@ -14,7 +14,11 @@ import java.util.List;
import javax.inject.Inject; import javax.inject.Inject;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO; import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.core.CommonConst;
import it.integry.integrywmsnative.core.data_recover.ColliDataRecoverService; import it.integry.integrywmsnative.core.data_recover.ColliDataRecoverService;
import it.integry.integrywmsnative.core.exception.InvalidLUException;
import it.integry.integrywmsnative.core.exception.NoArtsFoundException;
import it.integry.integrywmsnative.core.exception.NoLUFoundException;
import it.integry.integrywmsnative.core.exception.NoPrintersFoundException; import it.integry.integrywmsnative.core.exception.NoPrintersFoundException;
import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.expansion.RunnableArgss; import it.integry.integrywmsnative.core.expansion.RunnableArgss;
@ -25,6 +29,7 @@ import it.integry.integrywmsnative.core.model.CommonModelConsts;
import it.integry.integrywmsnative.core.model.MtbAart; import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.model.MtbColr; import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.dto.PickDataDTO;
import it.integry.integrywmsnative.core.report.ReportManager; import it.integry.integrywmsnative.core.report.ReportManager;
import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
@ -39,6 +44,7 @@ import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.gest.picking_resi.exceptions.DocumentsLoadException; import it.integry.integrywmsnative.gest.picking_resi.exceptions.DocumentsLoadException;
import it.integry.integrywmsnative.gest.picking_resi.rest.PickingResiRESTConsumer; import it.integry.integrywmsnative.gest.picking_resi.rest.PickingResiRESTConsumer;
import it.integry.integrywmsnative.gest.picking_resi.rest.WithdrawableDtbDocr; import it.integry.integrywmsnative.gest.picking_resi.rest.WithdrawableDtbDocr;
import it.integry.integrywmsnative.gest.spedizione.exceptions.NotCurrentYearLUException;
import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO; import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO;
public class PickingResiViewModel { public class PickingResiViewModel {
@ -229,23 +235,26 @@ public class PickingResiViewModel {
private void postCloseOperations(MtbColt mtbColt, Runnable onComplete) { private void postCloseOperations(MtbColt mtbColt, Runnable onComplete) {
this.mColliRegistrati.add(mtbColt); this.mColliRegistrati.add(mtbColt);
Stream.of(this.mPickingList.getValue()) List<WithdrawableDtbDocr> tmpList = getPickingList().getValue();
.forEach(x -> {
List<MtbColr> withdraws = x.getWithdrawRows();
for (int k = 0; k < withdraws.size(); k++) { for (int i = 0; i < tmpList.size(); i++) {
MtbColr withdrawRow = withdraws.get(k); WithdrawableDtbDocr x = tmpList.get(i);
x.setQtaDoc(x.getQtaDoc().subtract(withdrawRow.getQtaCol())); List<MtbColr> withdraws = x.getWithdrawRows();
}
x.getWithdrawRows().clear(); for (int k = 0; k < withdraws.size(); k++) {
MtbColr withdrawRow = withdraws.get(k);
x.setQtaDoc(x.getQtaDoc().subtract(withdrawRow.getQtaCol()));
}
if (UtilityBigDecimal.equalsOrLowerThan(x.getQtaDoc(), BigDecimal.ZERO)) { x.getWithdrawRows().clear();
this.mPickingList.getValue().remove(x);
}
});
this.mPickingList.postValue(this.mPickingList.getValue()); if (UtilityBigDecimal.equalsOrLowerThan(x.getQtaDoc(), BigDecimal.ZERO)) {
tmpList.remove(x);
i--;
}
}
this.mPickingList.postValue(tmpList);
onComplete.run(); onComplete.run();
} }
@ -259,41 +268,232 @@ public class PickingResiViewModel {
//Se il collo non esiste allora lo creo associandolo a questa etichetta anonima //Se il collo non esiste allora lo creo associandolo a questa etichetta anonima
//invece se esiste apro un collo nuovo e cerco gli articoli presenti nell'ul //invece se esiste apro un collo nuovo e cerco gli articoli presenti nell'ul
//dell'etichetta anonima //dell'etichetta anonima
// this.executeEtichettaAnonimaNotOpenedLU(barcodeScanDTO, onComplete); this.executeEtichettaAnonimaNotOpenedLU(barcodeScanDTO, onComplete);
} else { } else {
// this.processBarcodeNotOpenedLU(barcodeScanDTO, onComplete); this.processBarcodeNotOpenedLU(barcodeScanDTO, onComplete);
} }
} else { } else {
if (UtilityBarcode.isEtichettaAnonima(barcodeScanDTO)) { if (UtilityBarcode.isEtichettaAnonima(barcodeScanDTO)) {
//Cerco gli articoli presenti nell'ul dell'etichetta anonima //Cerco gli articoli presenti nell'ul dell'etichetta anonima
// this.executeEtichettaLU(barcodeScanDTO.getStringValue(), onComplete); this.executeEtichettaLU(barcodeScanDTO.getStringValue(), onComplete);
} else { } else {
// this.processBarcodeAlreadyOpenedLU(barcodeScanDTO, onComplete); this.processBarcodeAlreadyOpenedLU(barcodeScanDTO, onComplete);
} }
} }
} }
public void dispatchOrdineRow(final WithdrawableDtbDocr withdrawableDtbDocr) { private void processBarcodeNotOpenedLU(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) {
this.createNewLU(
null,
null,
() -> processBarcodeAlreadyOpenedLU(barcodeScanDTO, onComplete));
}
private void processBarcodeAlreadyOpenedLU(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) {
if (UtilityBarcode.isEtichetta128(barcodeScanDTO)) {
//Cerco tramite etichetta ean 128 (che può indicarmi un articolo o una UL)
this.executeEtichettaEan128(barcodeScanDTO, onComplete);
} else onComplete.run();
}
private void executeEtichettaAnonimaNotOpenedLU(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) {
mColliMagazzinoRESTConsumer.getBySSCC(barcodeScanDTO.getStringValue(), true, false, mtbColt -> {
if (mtbColt == null) {
if (!UtilityBarcode.isEtichettaAnonimaOfCurrentYear(barcodeScanDTO.getStringValue())) {
this.sendError(new NotCurrentYearLUException());
} else {
this.createNewLU(
UtilityBarcode.getNumColloFromULAnonima(barcodeScanDTO.getStringValue()),
CommonConst.Config.DEFAULT_ANONYMOUS_UL_SERIE, onComplete);
}
} else {
this.createNewLU(
null,
null,
() -> searchArtFromUL(mtbColt, onComplete)
);
}
}, this::sendError);
}
private void executeEtichettaLU(String SSCC, Runnable onComplete) {
mColliMagazzinoRESTConsumer.getBySSCC(SSCC, true, false, mtbColt -> {
if (mtbColt != null && mtbColt.getMtbColr() != null && mtbColt.getMtbColr().size() > 0) {
if (mtbColt.getSegno() != -1) {
searchArtFromUL(mtbColt, onComplete);
} else this.sendError(new InvalidLUException());
} else {
this.sendError(new NoArtsFoundException());
}
}, this::sendError);
}
private void executeEtichettaEan128(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) {
mBarcodeRESTConsumer.decodeEan128(barcodeScanDTO, ean128Model -> {
String barcodeProd = null;
if (!UtilityString.isNullOrEmpty(ean128Model.Sscc)) barcodeProd = ean128Model.Sscc;
if (!UtilityString.isNullOrEmpty(ean128Model.Gtin)) barcodeProd = ean128Model.Gtin;
if (!UtilityString.isNullOrEmpty(ean128Model.Content))
barcodeProd = ean128Model.Content;
if (!UtilityString.isNullOrEmpty(barcodeProd)) {
if (!UtilityString.isNullOrEmpty(ean128Model.Sscc)) {
this.executeEtichettaLU(ean128Model.Sscc, onComplete);
} else {
this.sendError(new NoLUFoundException());
}
} else {
//EAN 128 non completo o comunque mancano i riferimenti al prodotto
onComplete.run();
}
}, this::sendError);
}
private void searchArtFromUL(MtbColt scannedUL, Runnable onComplete) {
final List<WithdrawableDtbDocr> pickingList = mPickingList.getValue();
final List<WithdrawableDtbDocr> matchPickingObject = new ArrayList<>();
//Controllo se nel collo ho degli articoli che corrispondono per codice / taglia / colore / lotto
Stream.of(scannedUL.getMtbColr())
.filter(x -> !UtilityString.isNullOrEmpty(x.getCodMart()))
.forEach(x -> {
for (WithdrawableDtbDocr pickingObject : pickingList) {
//Da verificare se il controllo per partita deve essere sempre effettuato
if (UtilityString.equalsIgnoreCase(x.getCodMart(), pickingObject.getCodMart()) &&
UtilityString.equalsIgnoreCase(x.getCodTagl(), pickingObject.getCodTagl()) &&
UtilityString.equalsIgnoreCase(x.getCodCol(), pickingObject.getCodCol())) {
if (!matchPickingObject.contains(pickingObject)) {
matchPickingObject.add(pickingObject);
}
}
}
});
for (WithdrawableDtbDocr matchedObject : matchPickingObject) {
MtbColt cloneMtbColt = (MtbColt) scannedUL.clone();
ObservableArrayList<MtbColr> cloneMtbColrs = (ObservableArrayList<MtbColr>) cloneMtbColt.getMtbColr().clone();
Stream.of(cloneMtbColt.getMtbColr())
.filter(x -> !(UtilityString.equalsIgnoreCase(x.getCodMart(), matchedObject.getCodMart()) &&
UtilityString.equalsIgnoreCase(x.getCodTagl(), matchedObject.getCodTagl()) &&
UtilityString.equalsIgnoreCase(x.getCodCol(), matchedObject.getCodCol())))
.forEach(cloneMtbColrs::remove);
cloneMtbColt.setMtbColr(cloneMtbColrs);
PickDataDTO tempPickData = new PickDataDTO()
.setSourceMtbColt(cloneMtbColt);
matchedObject.setTempPickData(tempPickData);
}
this.loadMatchedRows(matchPickingObject);
onComplete.run();
}
private void loadMatchedRows(List<WithdrawableDtbDocr> matchedRows) {
if (matchedRows == null || matchedRows.size() == 0) {
this.sendError(new NoArtsFoundException());
} else if (matchedRows.size() == 1) {
WithdrawableDtbDocr matchedItem = matchedRows.get(0);
if (matchedItem.getWithdrawRows() != null && matchedItem.getWithdrawRows().size() > 1) {
List<WithdrawableDtbDocr> pickingList = mPickingList.getValue();
Stream.of(pickingList)
.filter(x -> x != matchedItem)
.forEach(x -> x.setHidden(true));
this.sendFilterApplied(null);
this.getPickingList().postValue(pickingList);
} else {
this.dispatchOrdineRow(matchedItem, matchedItem.getRefMtbColt());
}
} else {
List<WithdrawableDtbDocr> pickingList = mPickingList.getValue();
for (int i = 0; i < pickingList.size(); i++) {
if (!matchedRows.contains(pickingList.get(i))) {
pickingList.get(i).setHidden(true);
}
}
this.sendFilterApplied(null);
this.getPickingList().postValue(pickingList);
}
}
public void dispatchOrdineRow(final WithdrawableDtbDocr withdrawableDtbDocr, final MtbColt refMtbColt) {
BigDecimal totalQtaDoc = withdrawableDtbDocr.getQtaDoc(); BigDecimal totalQtaDoc = withdrawableDtbDocr.getQtaDoc();
BigDecimal totalNumCnfDoc = withdrawableDtbDocr.getNumCnf(); BigDecimal totalNumCnfDoc = withdrawableDtbDocr.getNumCnf();
BigDecimal qtaCnfDoc = withdrawableDtbDocr.getQtaCnf(); BigDecimal qtaCnfDoc = withdrawableDtbDocr.getQtaCnf();
//TODO: Al posto di prelevare la prima riga bisognerebbe controllare se c'è ne una che corrisponde con la partita richiesta
MtbColr mtbColrToDispatch = withdrawableDtbDocr.getTempPickData() != null &&
withdrawableDtbDocr.getTempPickData().getSourceMtbColt() != null &&
withdrawableDtbDocr.getTempPickData().getSourceMtbColt().getMtbColr() != null &&
withdrawableDtbDocr.getTempPickData().getSourceMtbColt().getMtbColr().size() > 0 ?
withdrawableDtbDocr.getTempPickData().getSourceMtbColt().getMtbColr().get(0) : null;
BigDecimal totalAvailableQtaCol;
BigDecimal totalAvailableQtaCnf;
BigDecimal totalAvailableNumCnf;
if (mtbColrToDispatch != null) {
totalAvailableQtaCol = mtbColrToDispatch.getQtaCol();
totalAvailableQtaCnf = mtbColrToDispatch.getQtaCnf();
totalAvailableNumCnf = mtbColrToDispatch.getNumCnf();
} else {
totalAvailableQtaCol = totalQtaDoc;
totalAvailableQtaCnf = qtaCnfDoc;
totalAvailableNumCnf = totalNumCnfDoc;
}
this.sendOnItemDispatched( this.sendOnItemDispatched(
withdrawableDtbDocr.getMtbAart(), withdrawableDtbDocr.getMtbAart(),
totalNumCnfDoc, totalAvailableNumCnf,
qtaCnfDoc, totalAvailableQtaCnf,
totalQtaDoc, totalAvailableQtaCol,
totalQtaDoc, totalAvailableQtaCol,
totalNumCnfDoc, totalAvailableNumCnf,
qtaCnfDoc, totalAvailableQtaCnf,
withdrawableDtbDocr.getPartitaMag(), withdrawableDtbDocr.getPartitaMag(),
withdrawableDtbDocr.getDataScadPartitaMagD(), withdrawableDtbDocr.getDataScadPartitaMagD(),
(pickedQuantityDTO, shouldCloseLU) -> { (pickedQuantityDTO, shouldCloseLU) -> {
this.saveNewRow(withdrawableDtbDocr, this.saveNewRow(withdrawableDtbDocr,
refMtbColt,
pickedQuantityDTO.getNumCnf(), pickedQuantityDTO.getNumCnf(),
pickedQuantityDTO.getQtaCnf(), pickedQuantityDTO.getQtaCnf(),
pickedQuantityDTO.getQtaTot(), pickedQuantityDTO.getQtaTot(),
@ -328,7 +528,7 @@ public class PickingResiViewModel {
} }
public void saveNewRow(WithdrawableDtbDocr withdrawableDtbDocr, BigDecimal numCnf, BigDecimal qtaCnf, BigDecimal qtaTot, String partitaMag, Date dataScad, boolean shouldCloseLU) { public void saveNewRow(WithdrawableDtbDocr withdrawableDtbDocr, MtbColt refMtbColt, BigDecimal numCnf, BigDecimal qtaCnf, BigDecimal qtaTot, String partitaMag, Date dataScad, boolean shouldCloseLU) {
this.sendOnLoadingStarted(); this.sendOnLoadingStarted();
final MtbColr mtbColr = new MtbColr() final MtbColr mtbColr = new MtbColr()
@ -348,6 +548,39 @@ public class PickingResiViewModel {
.setDataDoc(withdrawableDtbDocr.getDataDocS()) .setDataDoc(withdrawableDtbDocr.getDataDocS())
.setIdRigaDoc(withdrawableDtbDocr.getIdRiga()); .setIdRigaDoc(withdrawableDtbDocr.getIdRiga());
//TODO: Al posto di prelevare la prima riga bisognerebbe controllare se c'è ne una che corrisponde con la partita richiesta
MtbColr mtbColrToDispatch = withdrawableDtbDocr.getTempPickData() != null &&
withdrawableDtbDocr.getTempPickData().getSourceMtbColt() != null &&
withdrawableDtbDocr.getTempPickData().getSourceMtbColt().getMtbColr() != null &&
withdrawableDtbDocr.getTempPickData().getSourceMtbColt().getMtbColr().size() > 0 ?
withdrawableDtbDocr.getTempPickData().getSourceMtbColt().getMtbColr().get(0) : null;
if (mtbColrToDispatch != null) {
if (UtilityString.isNullOrEmpty(mCurrentMtbColt.getCodTcol()))
mCurrentMtbColt.setCodTcol(UtilityString.empty2null(withdrawableDtbDocr.getTempPickData().getSourceMtbColt().getCodTcol()));
mtbColr
.setCodJcom(UtilityString.empty2null(mtbColrToDispatch.getCodJcom()))
.setSerColloRif(UtilityString.empty2null(mtbColrToDispatch.getSerCollo()))
.setNumColloRif(mtbColrToDispatch.getNumCollo())
.setGestioneRif(UtilityString.empty2null(mtbColrToDispatch.getGestione()))
.setDataColloRif(UtilityString.empty2null(mtbColrToDispatch.getDataColloS()));
if (mtbColrToDispatch.getPesoNettoKg() != null) {
//Proporzione
BigDecimal pesoNettoKg = UtilityBigDecimal.divide(UtilityBigDecimal.multiply(qtaTot, mtbColrToDispatch.getPesoNettoKg()), mtbColrToDispatch.getQtaCol());
mtbColr.setPesoNettoKg(pesoNettoKg);
}
if (mtbColrToDispatch.getPesoLordoKg() != null) {
//Proporzione
BigDecimal pesoLordoKg = UtilityBigDecimal.divide(UtilityBigDecimal.multiply(qtaTot, mtbColrToDispatch.getPesoLordoKg()), mtbColrToDispatch.getQtaCol());
mtbColr.setPesoLordoKg(pesoLordoKg);
}
}
mtbColr.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE); mtbColr.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE);
MtbColt cloneMtbColt = (MtbColt) mCurrentMtbColt.clone(); MtbColt cloneMtbColt = (MtbColt) mCurrentMtbColt.clone();
@ -482,6 +715,17 @@ public class PickingResiViewModel {
}); });
} }
public void resetMatchedRows() {
for (WithdrawableDtbDocr pickingObjectDTO : this.mPickingList.getValue()) {
pickingObjectDTO
.setTempPickData(null)
.setHidden(false);
}
this.mPickingList.postValue(this.mPickingList.getValue());
this.sendFilterRemoved();
}
public MutableLiveData<List<WithdrawableDtbDocr>> getPickingList() { public MutableLiveData<List<WithdrawableDtbDocr>> getPickingList() {
return mPickingList; return mPickingList;
@ -549,6 +793,14 @@ public class PickingResiViewModel {
if (this.mListener != null) mListener.onRowSaved(); if (this.mListener != null) mListener.onRowSaved();
} }
private void sendFilterApplied(String newValue) {
if (this.mListener != null) mListener.onFilterApplied(newValue);
}
private void sendFilterRemoved() {
if (this.mListener != null) mListener.onFilterRemoved();
}
public PickingResiViewModel setListener(Listener listener) { public PickingResiViewModel setListener(Listener listener) {
this.mListener = listener; this.mListener = listener;
@ -572,5 +824,9 @@ public class PickingResiViewModel {
Date dataScad, Date dataScad,
RunnableArgss<PickedQuantityDTO, Boolean> onComplete); RunnableArgss<PickedQuantityDTO, Boolean> onComplete);
void onFilterApplied(String newValue);
void onFilterRemoved();
} }
} }

View File

@ -20,7 +20,8 @@ import java.util.List;
import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.OnListGeneralChangedCallback; import it.integry.integrywmsnative.core.expansion.OnListGeneralChangedCallback;
import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgss;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.utility.UtilityNumber; import it.integry.integrywmsnative.core.utility.UtilityNumber;
import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.databinding.PickingResiMainListItemBinding; import it.integry.integrywmsnative.databinding.PickingResiMainListItemBinding;
@ -31,7 +32,7 @@ public class PickingResiListAdapter extends SectionedRecyclerViewAdapter<Picking
private Context mContext; private Context mContext;
private final List<PickingResiListModel> mDataset = new ArrayList<>(); private final List<PickingResiListModel> mDataset = new ArrayList<>();
private RunnableArgs<WithdrawableDtbDocr> mOnItemClicked; private RunnableArgss<WithdrawableDtbDocr, MtbColt> mOnItemClicked;
static class SubheaderHolder extends RecyclerView.ViewHolder { static class SubheaderHolder extends RecyclerView.ViewHolder {
PickingResiMainListItemHeaderBinding mBinding; PickingResiMainListItemHeaderBinding mBinding;
@ -65,7 +66,7 @@ public class PickingResiListAdapter extends SectionedRecyclerViewAdapter<Picking
}); });
} }
public void setOnItemClicked(RunnableArgs<WithdrawableDtbDocr> onItemClicked) { public void setOnItemClicked(RunnableArgss<WithdrawableDtbDocr, MtbColt> onItemClicked) {
this.mOnItemClicked = onItemClicked; this.mOnItemClicked = onItemClicked;
} }
@ -123,7 +124,7 @@ public class PickingResiListAdapter extends SectionedRecyclerViewAdapter<Picking
holder.mBinding.getRoot().setOnClickListener(v -> { holder.mBinding.getRoot().setOnClickListener(v -> {
if (this.mOnItemClicked != null) if (this.mOnItemClicked != null)
this.mOnItemClicked.run(pickingResiListModel.getOriginalModel()); this.mOnItemClicked.run(pickingResiListModel.getOriginalModel(), pickingResiListModel.getSourceMtbColt());
}); });
} }

View File

@ -2,6 +2,7 @@ package it.integry.integrywmsnative.gest.picking_resi.core;
import java.math.BigDecimal; import java.math.BigDecimal;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.gest.picking_resi.rest.WithdrawableDtbDocr; import it.integry.integrywmsnative.gest.picking_resi.rest.WithdrawableDtbDocr;
public class PickingResiListModel { public class PickingResiListModel {
@ -19,6 +20,7 @@ public class PickingResiListModel {
private boolean active; private boolean active;
private WithdrawableDtbDocr mOriginalModel; private WithdrawableDtbDocr mOriginalModel;
private MtbColt mSourceMtbColt;
public String getGroupTitle() { public String getGroupTitle() {
return groupTitle; return groupTitle;
@ -100,4 +102,13 @@ public class PickingResiListModel {
this.mOriginalModel = originalModel; this.mOriginalModel = originalModel;
return this; return this;
} }
public MtbColt getSourceMtbColt() {
return mSourceMtbColt;
}
public PickingResiListModel setSourceMtbColt(MtbColt sourceMtbColt) {
this.mSourceMtbColt = sourceMtbColt;
return this;
}
} }

View File

@ -5,13 +5,18 @@ import java.util.List;
import it.integry.integrywmsnative.core.model.DtbDocr; import it.integry.integrywmsnative.core.model.DtbDocr;
import it.integry.integrywmsnative.core.model.MtbColr; import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.dto.PickDataDTO;
public class WithdrawableDtbDocr extends DtbDocr { public class WithdrawableDtbDocr extends DtbDocr {
private String gestione; private String gestione;
private List<MtbColr> withdrawRows = new ArrayList<>(); private List<MtbColr> withdrawRows = new ArrayList<>();
private PickDataDTO tempPickData;
private MtbColt refMtbColt;
private boolean hidden = false;
public WithdrawableDtbDocr() { public WithdrawableDtbDocr() {
super(); super();
} }
@ -33,4 +38,31 @@ public class WithdrawableDtbDocr extends DtbDocr {
this.gestione = gestione; this.gestione = gestione;
return this; return this;
} }
public MtbColt getRefMtbColt() {
return refMtbColt;
}
public WithdrawableDtbDocr setRefMtbColt(MtbColt refMtbColt) {
this.refMtbColt = refMtbColt;
return this;
}
public PickDataDTO getTempPickData() {
return tempPickData;
}
public WithdrawableDtbDocr setTempPickData(PickDataDTO tempPickData) {
this.tempPickData = tempPickData;
return this;
}
public boolean isHidden() {
return hidden;
}
public WithdrawableDtbDocr setHidden(boolean hidden) {
this.hidden = hidden;
return this;
}
} }

View File

@ -12,7 +12,6 @@ import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatTextView; import androidx.appcompat.widget.AppCompatTextView;
import androidx.databinding.DataBindingUtil; import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableArrayList; import androidx.databinding.ObservableArrayList;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import com.annimon.stream.Optional; import com.annimon.stream.Optional;
@ -23,14 +22,20 @@ import java.util.List;
import javax.inject.Inject; import javax.inject.Inject;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.MainApplication; import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.expansion.BaseFragment; import it.integry.integrywmsnative.core.expansion.BaseFragment;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.interfaces.IFilterableFragment; import it.integry.integrywmsnative.core.interfaces.IFilterableFragment;
import it.integry.integrywmsnative.core.interfaces.IScrollableFragment; import it.integry.integrywmsnative.core.interfaces.IScrollableFragment;
import it.integry.integrywmsnative.core.interfaces.ITitledFragment; import it.integry.integrywmsnative.core.interfaces.ITitledFragment;
import it.integry.integrywmsnative.core.model.GtbAnag; import it.integry.integrywmsnative.core.model.GtbAnag;
import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO; import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.core.utility.UtilityExceptions;
@ -40,9 +45,10 @@ import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.core.UltimiArriv
import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.core.UltimiArriviFornitoreViewModel; import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.core.UltimiArriviFornitoreViewModel;
import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.dialog.DialogUltimiArriviFornitoreFiltroAvanzato; import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.dialog.DialogUltimiArriviFornitoreFiltroAvanzato;
import it.integry.integrywmsnative.ui.ElevatedToolbar; import it.integry.integrywmsnative.ui.ElevatedToolbar;
import it.integry.integrywmsnative.view.dialogs.choose_arts_from_lista_arts.DialogChooseArtsFromListaArts;
/** /**
* A simple {@link Fragment} subclass. * A simple {@link BaseFragment} subclass.
*/ */
public class UltimiArriviFornitoreFragment extends BaseFragment implements ITitledFragment, IScrollableFragment, IFilterableFragment, UltimiArriviFornitoreViewModel.Listener { public class UltimiArriviFornitoreFragment extends BaseFragment implements ITitledFragment, IScrollableFragment, IFilterableFragment, UltimiArriviFornitoreViewModel.Listener {
@ -86,6 +92,7 @@ public class UltimiArriviFornitoreFragment extends BaseFragment implements ITitl
mBindings.setViewmodel(mViewModel); mBindings.setViewmodel(mViewModel);
this.initRecyclerView(); this.initRecyclerView();
this.initBarcodeReader();
// Inflate the layout for this fragment // Inflate the layout for this fragment
return mBindings.getRoot(); return mBindings.getRoot();
@ -103,7 +110,7 @@ public class UltimiArriviFornitoreFragment extends BaseFragment implements ITitl
dispatchConsegne(); dispatchConsegne();
}); });
this.mViewModel.getDocuments().observe(this, this::refreshList); this.mViewModel.getDocuments().observe(this.getViewLifecycleOwner(), this::refreshList);
openFilterDialog(); openFilterDialog();
} }
@ -113,7 +120,7 @@ public class UltimiArriviFornitoreFragment extends BaseFragment implements ITitl
this.mViewModel.loadCodAnagFornitori(gtbAnags -> { this.mViewModel.loadCodAnagFornitori(gtbAnags -> {
DialogUltimiArriviFornitoreFiltroAvanzato.make(getActivity(), gtbAnags, mAppliedFilterViewModel, (filter) -> { DialogUltimiArriviFornitoreFiltroAvanzato.make(getActivity(), gtbAnags, mAppliedFilterViewModel, (filter) -> {
mAppliedFilterViewModel = filter; mAppliedFilterViewModel = filter;
refreshItems(); filterItems(null);
}).show(); }).show();
}); });
} }
@ -130,18 +137,33 @@ public class UltimiArriviFornitoreFragment extends BaseFragment implements ITitl
mBindings.recyclerView.setAdapter(mAdapter); mBindings.recyclerView.setAdapter(mAdapter);
// mBindings.fastscroll.setRecyclerView(mBindings.recyclerView); // mBindings.fastscroll.setRecyclerView(mBindings.recyclerView);
if (mToolbar != null) if (mToolbar != null)
mToolbar.setRecyclerView(mBindings.recyclerView); mToolbar.setRecyclerView(mBindings.recyclerView);
} }
private void initBarcodeReader() {
barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessfull(onScanSuccessful)
.setOnScanFailed(ex -> UtilityExceptions.defaultException(getActivity(), ex, false)));
BarcodeManager.enable();
}
private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
BarcodeManager.disable();
this.mViewModel.processBarcodeDTO(data, () -> {
BarcodeManager.enable();
});
};
private void refreshList(List<DocumentoResoDTO> documentList) { private void refreshList(List<DocumentoResoDTO> documentList) {
this.mDocumentiMutableData.clear(); this.mDocumentiMutableData.clear();
this.mDocumentiMutableData.addAll(sort(documentList)); this.mDocumentiMutableData.addAll(sort(documentList));
} }
private void refreshItems() { private void filterItems(List<MtbAart> filteredMtbAarts) {
this.openProgress(); this.openProgress();
String currentAnagFilter = mAppliedFilterViewModel != null ? mAppliedFilterViewModel.ragSoc.get() : null; String currentAnagFilter = mAppliedFilterViewModel != null ? mAppliedFilterViewModel.ragSoc.get() : null;
@ -156,7 +178,7 @@ public class UltimiArriviFornitoreFragment extends BaseFragment implements ITitl
} }
this.mViewModel.loadArriviFornitori(currentCodAnagFilter, this.mViewModel.loadArriviFornitori(currentCodAnagFilter,
null, filteredMtbAarts,
-1, -1,
365); 365);
} }
@ -202,6 +224,8 @@ public class UltimiArriviFornitoreFragment extends BaseFragment implements ITitl
@Override @Override
public void onDestroy() { public void onDestroy() {
BarcodeManager.removeCallback(barcodeScannerIstanceID);
for (Runnable onPreDestroy : mOnPreDestroyList) { for (Runnable onPreDestroy : mOnPreDestroyList) {
onPreDestroy.run(); onPreDestroy.run();
} }
@ -248,4 +272,21 @@ public class UltimiArriviFornitoreFragment extends BaseFragment implements ITitl
UtilityExceptions.defaultException(getActivity(), ex, mCurrentProgress); UtilityExceptions.defaultException(getActivity(), ex, mCurrentProgress);
BarcodeManager.enable(); BarcodeManager.enable();
} }
@Override
public void onMtbColtScanned(MtbColt scannedMtbColt) {
DialogChooseArtsFromListaArts
.make(getActivity(), scannedMtbColt.getMtbColr(), items -> {
List<MtbAart> mtbAarts = Stream.of(items)
.map(MtbColr::getMtbAart)
.toList();
filterItems(mtbAarts);
}, null)
.show();
}
} }

View File

@ -6,12 +6,19 @@ import java.util.List;
import javax.inject.Inject; import javax.inject.Inject;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.core.exception.InvalidLUException;
import it.integry.integrywmsnative.core.exception.NoLUFoundException;
import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener; import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
import it.integry.integrywmsnative.core.model.GtbAnag; import it.integry.integrywmsnative.core.model.GtbAnag;
import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO; import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
import it.integry.integrywmsnative.core.utility.UtilityBarcode;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.rest.UltimiArriviFornitoreRESTConsumer; import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.rest.UltimiArriviFornitoreRESTConsumer;
public class UltimiArriviFornitoreViewModel { public class UltimiArriviFornitoreViewModel {
@ -54,18 +61,92 @@ public class UltimiArriviFornitoreViewModel {
}, this::sendError); }, this::sendError);
} }
public void loadArriviFornitori(String codAnag, String codMart, int limitDocsForCli, int limitDays) { public void loadArriviFornitori(String codAnag, List<MtbAart> mtbAarts, int limitDocsForCli, int limitDays) {
this.sendOnLoadingStarted(); this.sendOnLoadingStarted();
this.mUltimiArriviFornitoreRESTConsumer.getUltimeConsegneFornitori(mCodMdep, codAnag, codMart, limitDocsForCli, limitDays, documentList -> { this.mUltimiArriviFornitoreRESTConsumer.getUltimeConsegneFornitori(mCodMdep, codAnag, mtbAarts, limitDocsForCli, limitDays, documentList -> {
this.mDocuments.postValue(documentList); this.mDocuments.postValue(documentList);
this.sendOnLoadingEnded(); this.sendOnLoadingEnded();
}, this::sendError); }, this::sendError);
} }
public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) {
this.sendOnLoadingStarted();
Runnable onBarcodeScanComplete = () -> {
onComplete.run();
this.sendOnLoadingEnded();
};
if (UtilityBarcode.isEtichettaAnonima(barcodeScanDTO)) {
this.executeEtichettaLU(barcodeScanDTO.getStringValue(), onBarcodeScanComplete);
} else if (UtilityBarcode.isEtichetta128(barcodeScanDTO)) {
this.executeEtichettaEan128(barcodeScanDTO, onBarcodeScanComplete);
} else {
onComplete.run();
}
}
private void executeEtichettaLU(String SSCC, Runnable onComplete) {
this.mColliMagazzinoRESTConsumer.getBySSCC(SSCC, true, false, mtbColt -> {
if(mtbColt != null && mtbColt.getMtbColr() != null && mtbColt.getMtbColr().size() > 0) {
if(mtbColt.getSegno() > 0) {
this.sendOnMtbColtScanned(mtbColt);
// this.mOrdiniUscitaElencoRESTConsumer.getOrdiniFromCommessaCollo(mCurrentCodMdep, mtbColt, orderList -> {
//
// if(orderList != null && orderList.size() > 0) {
// List<Integer> numOrds = Stream.of(orderList)
// .map(DtbOrdt::getNumOrd)
// .toList();
//
// List<OrdiniUscitaElencoDTO> filteredOrders = Stream.of(mOrderList.getValue())
// .filter(x -> numOrds.contains(x.getNumOrd())).toList();
//
// onComplete.run(filteredOrders);
// } else {
// this.sendError(new NoOrderFoundException());
// }
//
// }, this::sendError);
} else {
this.sendError(new InvalidLUException());
}
} else {
this.sendError(new NoLUFoundException());
}
}, this::sendError);
}
private void executeEtichettaEan128(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) {
this.mBarcodeRESTConsumer.decodeEan128(barcodeScanDTO, ean128Model -> {
String barcodeProd = null;
if (!UtilityString.isNullOrEmpty(ean128Model.Sscc)) barcodeProd = ean128Model.Sscc;
if (!UtilityString.isNullOrEmpty(ean128Model.Gtin)) barcodeProd = ean128Model.Gtin;
if (!UtilityString.isNullOrEmpty(ean128Model.Content))
barcodeProd = ean128Model.Content;
if (!UtilityString.isNullOrEmpty(barcodeProd)) {
if (!UtilityString.isNullOrEmpty(ean128Model.Sscc)) {
this.executeEtichettaLU(ean128Model.Sscc, onComplete);
} else {
this.sendError(new NoLUFoundException());
}
} else {
//EAN 128 non completo o comunque mancano i riferimenti al prodotto
this.sendError(new NoLUFoundException());
}
}, this::sendError);
}
@ -99,7 +180,13 @@ public class UltimiArriviFornitoreViewModel {
if (this.mListener != null) mListener.onError(ex); if (this.mListener != null) mListener.onError(ex);
} }
private void sendOnMtbColtScanned(MtbColt scannedMtbColt) {
if (this.mListener != null) mListener.onMtbColtScanned(scannedMtbColt);
}
public interface Listener extends ILoadingListener { public interface Listener extends ILoadingListener {
void onError(Exception ex); void onError(Exception ex);
void onMtbColtScanned(MtbColt scannedMtbColt);
} }
} }

View File

@ -1,7 +1,10 @@
package it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.rest; package it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.rest;
import com.annimon.stream.Stream;
import com.google.gson.reflect.TypeToken; import com.google.gson.reflect.TypeToken;
import org.apache.commons.lang3.StringUtils;
import java.lang.reflect.Type; import java.lang.reflect.Type;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -10,6 +13,7 @@ import javax.inject.Singleton;
import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.GtbAnag; import it.integry.integrywmsnative.core.model.GtbAnag;
import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO; import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
import it.integry.integrywmsnative.core.utility.UtilityDB; import it.integry.integrywmsnative.core.utility.UtilityDB;
@ -38,13 +42,21 @@ public class UltimiArriviFornitoreRESTConsumer {
}); });
} }
public void getUltimeConsegneFornitori(String codMdep, String codAnag, String codMart, int limitConsegnePerCli, int limitDays, RunnableArgs<ArrayList<DocumentoResoDTO>> onComplete, RunnableArgs<Exception> onFailed) { public void getUltimeConsegneFornitori(String codMdep, String codAnag, List<MtbAart> mtbAarts, int limitConsegnePerCli, int limitDays, RunnableArgs<ArrayList<DocumentoResoDTO>> onComplete, RunnableArgs<Exception> onFailed) {
String codMarts = null;
if (mtbAarts != null && mtbAarts.size() > 0) {
codMarts = StringUtils.join(Stream.of(mtbAarts)
.map(MtbAart::getCodMart)
.toList(), "|");
}
String sql = "SELECT consegne.*, " + String sql = "SELECT consegne.*, " +
" rag_soc " + " rag_soc " +
"FROM WMS_GetUltimeConsegneFornitori(" + "FROM WMS_GetUltimeConsegneFornitori(" +
UtilityDB.valueToString(limitConsegnePerCli >= 0 ? limitConsegnePerCli : null) + ", " + UtilityDB.valueToString(limitConsegnePerCli >= 0 ? limitConsegnePerCli : null) + ", " +
UtilityDB.valueToString(codAnag) + ", " + UtilityDB.valueToString(codAnag) + ", " +
UtilityDB.valueToString(codMart) + ", " + UtilityDB.valueToString(codMarts) + ", " +
UtilityDB.valueToString(codMdep) + ", " + UtilityDB.valueToString(codMdep) + ", " +
UtilityDB.valueToString(limitDays) + ") consegne " + UtilityDB.valueToString(limitDays) + ") consegne " +
"LEFT OUTER JOIN gtb_anag ON consegne.cod_anag = gtb_anag.cod_anag " + "LEFT OUTER JOIN gtb_anag ON consegne.cod_anag = gtb_anag.cod_anag " +
@ -52,7 +64,8 @@ public class UltimiArriviFornitoreRESTConsumer {
" counter_consegna "; " counter_consegna ";
Type typeOfObjectsList = new TypeToken<ArrayList<DocumentoResoDTO>>() {}.getType(); Type typeOfObjectsList = new TypeToken<ArrayList<DocumentoResoDTO>>() {
}.getType();
this.systemRESTConsumer.<ArrayList<DocumentoResoDTO>>processSql(sql, typeOfObjectsList, value -> { this.systemRESTConsumer.<ArrayList<DocumentoResoDTO>>processSql(sql, typeOfObjectsList, value -> {
if (onComplete != null) onComplete.run(value); if (onComplete != null) onComplete.run(value);
}, ex -> { }, ex -> {

View File

@ -63,6 +63,64 @@
android:orientation="vertical" android:orientation="vertical"
app:layout_behavior="@string/appbar_scrolling_view_behavior"> app:layout_behavior="@string/appbar_scrolling_view_behavior">
<net.cachapa.expandablelayout.ExpandableLayout
android:id="@+id/filtered_arts_in_list_expandable_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:el_duration="400"
app:el_expanded="false">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="8dp"
android:paddingTop="12dp"
android:paddingRight="8dp"
android:paddingBottom="12dp">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_toStartOf="@+id/remove_art_filter_list"
android:orientation="vertical">
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/filtered_arts_in_list" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/description_filter_text"
style="@style/AppTheme.NewMaterial.Text.Medium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
android:textColor="@android:color/black"
android:textSize="16sp"
android:textStyle="bold"
tools:text="COD_ART_HERE" />
</androidx.appcompat.widget.LinearLayoutCompat>
<com.google.android.material.button.MaterialButton
android:id="@+id/remove_art_filter_list"
style="@style/Button.DangerOutline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:onClick="@{() -> pickingResiView.removeListFilter()}"
android:text="@string/remove_filter_button"
app:strokeColor="@color/red_600" />
</RelativeLayout>
</net.cachapa.expandablelayout.ExpandableLayout>
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:id="@+id/main_list" android:id="@+id/main_list"