diff --git a/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java b/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java index 69e967c2..872daee8 100644 --- a/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java +++ b/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java @@ -102,6 +102,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.ask_unknown_barcode_notes.DialogAskUnknownBarcodeNotesComponent; +import it.integry.integrywmsnative.view.dialogs.ask_unknown_barcode_notes.DialogAskUnknownBarcodeNotesModule; import it.integry.integrywmsnative.view.dialogs.bind_product_barcode_with_package.DialogBindProductBarcodeWithPackageComponent; import it.integry.integrywmsnative.view.dialogs.bind_product_barcode_with_package.DialogBindProductBarcodeWithPackageModule; import it.integry.integrywmsnative.view.dialogs.choose_arts_from_lista_arts.DialogChooseArtsFromMtbAartListComponent; @@ -186,7 +188,8 @@ import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCr DialogSelectArtToOrderModule.class, MainAccettazioneBollaElencoModule.class, AccettazioneBollaPickingModule.class, - DialogBindProductBarcodeWithPackageModule.class + DialogBindProductBarcodeWithPackageModule.class, + DialogAskUnknownBarcodeNotesModule.class }) public interface MainApplicationComponent { @@ -313,6 +316,7 @@ public interface MainApplicationComponent { AccettazioneBollaPickingComponent.Factory accettazioneBollaPickingComponent(); DialogBindProductBarcodeWithPackageComponent.Factory dialogBindProductBarcodeWithPackageComponent(); + DialogAskUnknownBarcodeNotesComponent.Factory dialogAskUnknownBarcodeNotesComponent(); void inject(MainApplication mainApplication); diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/model/uds/InsertUDCRowRequestDTO.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/model/uds/InsertUDCRowRequestDTO.java index 62fb65fd..1184c33c 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/model/uds/InsertUDCRowRequestDTO.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/model/uds/InsertUDCRowRequestDTO.java @@ -9,6 +9,8 @@ public class InsertUDCRowRequestDTO { private MtbColt targetMtbColt; private String codMart; + private String descrizione; + private String barcode; private BigDecimal qtaTot; private BigDecimal qtaCnf; private BigDecimal numCnf; @@ -45,6 +47,24 @@ public class InsertUDCRowRequestDTO { return this; } + public String getDescrizione() { + return descrizione; + } + + public InsertUDCRowRequestDTO setDescrizione(String descrizione) { + this.descrizione = descrizione; + return this; + } + + public String getBarcode() { + return barcode; + } + + public InsertUDCRowRequestDTO setBarcode(String barcode) { + this.barcode = barcode; + return this; + } + public BigDecimal getQtaTot() { return qtaTot; } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java b/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java index 2ec799b9..15f1d1af 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java @@ -66,6 +66,7 @@ public class DBSettingsModel { private boolean flagAskTipoColloAccettazioneBolla = false; private boolean flagAskVersamentoAutomaticoAccettazioneBolla = false; private boolean flagCanAddUnknownItemsAccettazioneBolla = false; + private boolean flagCanAddUnknownBarcodesAccettazioneBolla = false; public boolean isFlagSpedizioneEnableFakeGiacenza() { return flagSpedizioneEnableFakeGiacenza; @@ -526,4 +527,13 @@ public class DBSettingsModel { this.flagCanAddUnknownItemsAccettazioneBolla = flagCanAddUnknownItemsAccettazioneBolla; return this; } + + public boolean isFlagCanAddUnknownBarcodesAccettazioneBolla() { + return flagCanAddUnknownBarcodesAccettazioneBolla; + } + + public DBSettingsModel setFlagCanAddUnknownBarcodesAccettazioneBolla(boolean flagCanAddUnknownBarcodesAccettazioneBolla) { + this.flagCanAddUnknownBarcodesAccettazioneBolla = flagCanAddUnknownBarcodesAccettazioneBolla; + return this; + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java b/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java index a5586e0b..949c3e8c 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java @@ -404,6 +404,10 @@ public class SettingsManager { .setGestName("PICKING") .setSection("ACCETTAZIONE_BOLLA") .setKeySection("FLAG_CAN_ADD_UNKNOWN_ITEMS")); + stbGestSetupList.add(new StbGestSetup() + .setGestName("PICKING") + .setSection("ACCETTAZIONE_BOLLA") + .setKeySection("FLAG_CAN_ADD_UNKNOWN_BARCODES")); String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep(); @@ -450,6 +454,7 @@ public class SettingsManager { dbSettingsModelIstance.setFlagAskTipoColloAccettazioneBolla(getValueFromList(list, "ACCETTAZIONE_BOLLA", "FLAG_ASK_TIPO_COLLO", Boolean.class, Boolean.FALSE)); dbSettingsModelIstance.setFlagAskVersamentoAutomaticoAccettazioneBolla(getValueFromList(list, "ACCETTAZIONE_BOLLA", "FLAG_ASK_VERSAMENTO_AUTOMATICO", Boolean.class, Boolean.FALSE)); dbSettingsModelIstance.setFlagCanAddUnknownItemsAccettazioneBolla(getValueFromList(list, "ACCETTAZIONE_BOLLA", "FLAG_CAN_ADD_UNKNOWN_ITEMS", Boolean.class, Boolean.FALSE)); + dbSettingsModelIstance.setFlagCanAddUnknownBarcodesAccettazioneBolla(getValueFromList(list, "ACCETTAZIONE_BOLLA", "FLAG_CAN_ADD_UNKNOWN_BARCODES", Boolean.class, Boolean.FALSE)); String notePerdita = getValueFromList(list, "DOC_INTERNI", "NOTE_PERDITA", String.class); if (notePerdita != null) diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_bolla_elenco/rest/dto/TestataBollaAccettazioneDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_bolla_elenco/rest/dto/TestataBollaAccettazioneDTO.java index 91d5c64a..83c7be54 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_bolla_elenco/rest/dto/TestataBollaAccettazioneDTO.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_bolla_elenco/rest/dto/TestataBollaAccettazioneDTO.java @@ -1,12 +1,12 @@ package it.integry.integrywmsnative.gest.accettazione_bolla_elenco.rest.dto; -import java.util.Date; +import java.time.LocalDate; public class TestataBollaAccettazioneDTO { private String codAnag; private String ragSoc; private String codDtip; - private Date dataDoc; + private LocalDate dataDoc; private String serDoc; private int numDoc; private String listino; @@ -25,7 +25,7 @@ public class TestataBollaAccettazioneDTO { return codDtip; } - public Date getDataDoc() { + public LocalDate getDataDoc() { return dataDoc; } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_bolla_picking/AccettazioneBollaPickingActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_bolla_picking/AccettazioneBollaPickingActivity.java index fc48ae86..fa4ff018 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_bolla_picking/AccettazioneBollaPickingActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_bolla_picking/AccettazioneBollaPickingActivity.java @@ -60,6 +60,7 @@ import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO; import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentView; import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentViewModel; import it.integry.integrywmsnative.view.dialogs.ask_should_versamento_automatico_ul.DialogAskShouldVersamentoAutomaticoULView; +import it.integry.integrywmsnative.view.dialogs.ask_unknown_barcode_notes.DialogAskUnknownBarcodeNotesView; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; import it.integry.integrywmsnative.view.dialogs.bind_product_barcode_with_package.DialogBindProductBarcodeWithPackageView; import it.integry.integrywmsnative.view.dialogs.info_aggiuntive_lu.DialogInfoAggiuntiveLU; @@ -199,7 +200,7 @@ public class AccettazioneBollaPickingActivity extends BaseActivity implements Ac }); adapter.setOnItemClicked(clickedItem -> { - this.mViewModel.dispatchOrdineRow(clickedItem); + this.mViewModel.dispatchBollaRow(clickedItem); }); } @@ -540,9 +541,9 @@ public class AccettazioneBollaPickingActivity extends BaseActivity implements Ac } @Override - public void onUnknownBarcodeScanned(String barcode) { - DialogBindProductBarcodeWithPackageView - .newInstance(barcode, null) + public void onUnknownBarcodeScanned(String barcode, RunnableArgs done, Runnable abort) { + DialogAskUnknownBarcodeNotesView + .newInstance(barcode, done, abort) .show(getSupportFragmentManager(), DialogBindProductBarcodeWithPackageView.class.getName()); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_bolla_picking/AccettazioneBollaPickingViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_bolla_picking/AccettazioneBollaPickingViewModel.java index a7202cae..46e3f07d 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_bolla_picking/AccettazioneBollaPickingViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_bolla_picking/AccettazioneBollaPickingViewModel.java @@ -20,6 +20,7 @@ import it.integry.integrywmsnative.core.CommonConst; import it.integry.integrywmsnative.core.exception.AlreadyUsedAnonymousLabelException; import it.integry.integrywmsnative.core.exception.LUScanNotGrantedException; import it.integry.integrywmsnative.core.exception.NoArtsFoundException; +import it.integry.integrywmsnative.core.exception.NoResultFromBarcodeException; import it.integry.integrywmsnative.core.expansion.AtomicBigDecimal; import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgss; @@ -66,7 +67,6 @@ import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO; public class AccettazioneBollaPickingViewModel { - private final ArticoloRESTConsumer mArticoloRESTConsumer; private final BarcodeRESTConsumer mBarcodeRESTConsumer; private final ColliMagazzinoRESTConsumer mColliMagazzinoRESTConsumer; @@ -76,12 +76,9 @@ public class AccettazioneBollaPickingViewModel { private final ColliLavorazioneRESTConsumer mColliLavorazioneRESTConsumer; - private ColliCaricoRESTConsumerInterface mColliCaricoRESTConsumer; - - private Listener mListener; private List mBolle; @@ -117,7 +114,7 @@ public class AccettazioneBollaPickingViewModel { List mSitArts = Stream.of(sitArts) .filter(x -> - UtilityBigDecimal.greaterThan(x.getQtaDaAccettare(), BigDecimal.ZERO)) + UtilityBigDecimal.greaterThan(x.getQtaDaAccettare(), BigDecimal.ZERO)) .toList(); getEmptyPickingList(mSitArts, this.mPickingList::postValue); @@ -170,7 +167,6 @@ public class AccettazioneBollaPickingViewModel { } - public void retrieveExistentLU(RunnableArgs> onComplete) { this.sendOnLoadingStarted(); @@ -319,8 +315,7 @@ public class AccettazioneBollaPickingViewModel { if (mtbAartList != null && mtbAartList.size() > 0) { this.searchArtFromAnag(mtbAartList.get(0), pickData, onComplete); } else { - onComplete.run(); - this.sendOnUnknownBarcodeScanned(barcodeProd); + this.manageUnknownBarcode(barcodeProd, onComplete); } }, this::sendError); @@ -338,15 +333,15 @@ public class AccettazioneBollaPickingViewModel { pickingObjectDTO.setTempPickData(pickData); } - this.loadMatchedRows(matchPickingObject); + this.loadMatchedRows(matchPickingObject, mtbAart); onComplete.run(); } - private void loadMatchedRows(List matchedRows) { + private void loadMatchedRows(List matchedRows, MtbAart mtbAart) { if (matchedRows == null || matchedRows.size() == 0) { - this.sendError(new NoArtsFoundException()); + manageNoArtFound(mtbAart); } else if (matchedRows.size() == 1) { - this.dispatchOrdineRow(matchedRows.get(0)); + this.dispatchBollaRow(matchedRows.get(0)); } else { //So che il codMart sarà solo 1 var firstCodMart = Stream.of(matchedRows) @@ -360,10 +355,38 @@ public class AccettazioneBollaPickingViewModel { } + private void manageUnknownBarcode(String barcode, Runnable onComplete) { + if (SettingsManager.iDB().isFlagCanAddUnknownBarcodesAccettazioneBolla()) { + //TODO: Implementare popup che richiede delle note aggiuntive sul barcode scansionato + this.sendOnUnknownBarcodeScanned(barcode, notes -> { + this.dispatchBollaRow(new PickingObjectDTO() + .setMtbAart(new MtbAart() + .setDescrizione(notes) + .setDescrizioneEstesa(notes) + .setFlagTracciabilita("N") + .setFlagQtaCnfFissa("S") + .setQtaCnf(BigDecimal.ONE) + .setBarCode(barcode))); + onComplete.run(); + }, onComplete); + } else { + this.sendError(new NoResultFromBarcodeException(barcode)); + } + } + + + private void manageNoArtFound(MtbAart mtbAart) { + if (SettingsManager.iDB().isFlagCanAddUnknownItemsAccettazioneBolla()) { + + this.dispatchBollaRow(new PickingObjectDTO() + .setMtbAart(mtbAart)); + } else + this.sendError(new NoArtsFoundException()); + } + public void createNewLU(Integer customNumCollo, String customSerCollo, boolean disablePrint, Runnable onComplete) { this.manageInfoAggiuntiveRequest((additionalNotes, tCol) -> { - final CreateUDCRequestDTO createUDCRequestDTO = new CreateUDCRequestDTO() .setCodMdep(SettingsManager.i().getUserSession().getDepo().getCodMdep()) .setAnnotazioni(additionalNotes) @@ -386,7 +409,7 @@ public class AccettazioneBollaPickingViewModel { } private void manageInfoAggiuntiveRequest(RunnableArgss onComplete) { - if(!SettingsManager.iDB().isFlagAskTipoColloAccettazioneBolla()) { + if (!SettingsManager.iDB().isFlagAskTipoColloAccettazioneBolla()) { onComplete.run(null, null); return; } @@ -394,13 +417,9 @@ public class AccettazioneBollaPickingViewModel { this.sendOnInfoAggiuntiveRequest(onComplete); } - public void dispatchOrdineRow(final PickingObjectDTO pickingObjectDTO) { + public void dispatchBollaRow(final PickingObjectDTO pickingObjectDTO) { if (this.mCurrentMtbColt == null) return; - BigDecimal totalQtaDoc = pickingObjectDTO.getSitBollaAccettazione().getQtaDaAccettare(); - BigDecimal totalNumCnfDoc = pickingObjectDTO.getSitBollaAccettazione().getNumCnfDaAccettare(); - BigDecimal qtaCnfDoc = pickingObjectDTO.getSitBollaAccettazione().getQtaCnfDoc(); - AtomicBigDecimal numCnfWithdrawRows = new AtomicBigDecimal(); AtomicBigDecimal qtaColWithdrawRows = new AtomicBigDecimal(); @@ -410,12 +429,30 @@ public class AccettazioneBollaPickingViewModel { qtaColWithdrawRows.addAndGet(row.getQtaCol()); }); - BigDecimal numCnfDaEvadere = pickingObjectDTO.getSitBollaAccettazione().getNumCnfDaAccettare().subtract(numCnfWithdrawRows.getBigDecimalValue()); - BigDecimal qtaDaEvadere = pickingObjectDTO.getSitBollaAccettazione().getQtaDaAccettare().subtract(qtaColWithdrawRows.getBigDecimalValue()); - BigDecimal qtaCnfDaEvadere = qtaCnfDoc; + BigDecimal totalQtaDoc = null; + BigDecimal totalNumCnfDoc = null; + BigDecimal qtaCnfDoc = null; - numCnfDaEvadere = UtilityBigDecimal.getGreaterBetween(numCnfDaEvadere, BigDecimal.ZERO); - qtaDaEvadere = UtilityBigDecimal.getGreaterBetween(qtaDaEvadere, BigDecimal.ZERO); + BigDecimal numCnfDaEvadere = null; + BigDecimal qtaDaEvadere = null; + BigDecimal qtaCnfDaEvadere = null; + + final MtbAart mtbAart = pickingObjectDTO.getMtbAart(); + final SitBollaAccettazioneDTO sitBollaAccettazione = pickingObjectDTO.getSitBollaAccettazione(); + + if (sitBollaAccettazione != null) { + + totalQtaDoc = sitBollaAccettazione.getQtaDaAccettare(); + totalNumCnfDoc = sitBollaAccettazione.getNumCnfDaAccettare(); + qtaCnfDoc = sitBollaAccettazione.getQtaCnfDoc(); + + numCnfDaEvadere = sitBollaAccettazione.getNumCnfDaAccettare().subtract(numCnfWithdrawRows.getBigDecimalValue()); + qtaDaEvadere = sitBollaAccettazione.getQtaDaAccettare().subtract(qtaColWithdrawRows.getBigDecimalValue()); + qtaCnfDaEvadere = qtaCnfDoc; + + numCnfDaEvadere = UtilityBigDecimal.getGreaterBetween(numCnfDaEvadere, BigDecimal.ZERO); + qtaDaEvadere = UtilityBigDecimal.getGreaterBetween(qtaDaEvadere, BigDecimal.ZERO); + } BigDecimal numCnfDaPrelevare = null; BigDecimal qtaColDaPrelevare = null; @@ -427,7 +464,6 @@ public class AccettazioneBollaPickingViewModel { if (pickingObjectDTO.getTempPickData() != null && pickingObjectDTO.getTempPickData().getManualPickDTO() != null) { //Oppure le info del barcode scansionato PickDataDTO.ManualPickDTO manualPickDTO = pickingObjectDTO.getTempPickData().getManualPickDTO(); - MtbAart mtbAart = pickingObjectDTO.getMtbAart(); qtaColDaPrelevare = manualPickDTO.getQtaTot(); @@ -478,10 +514,14 @@ public class AccettazioneBollaPickingViewModel { initialQtaCnf = qtaCnfDaPrelevare; initialQtaTot = qtaColDaPrelevare; - } else { + } else if (totalQtaDoc != null) { initialNumCnf = totalNumCnfDoc; initialQtaCnf = qtaCnfDoc; initialQtaTot = totalQtaDoc; + } else { + initialNumCnf = BigDecimal.ONE; + initialQtaCnf = mtbAart.getQtaCnf(); + initialQtaTot = mtbAart.getQtaCnf(); } if (!this.mUseQtaBolla && @@ -497,7 +537,10 @@ public class AccettazioneBollaPickingViewModel { } if (partitaMag == null && dataScad == null) { - HistoryMtbAartDTO historyMtbAartDTO = this.getHistoryItemIfExists(pickingObjectDTO.getMtbAart().getCodMart()); + HistoryMtbAartDTO historyMtbAartDTO = + pickingObjectDTO.getMtbAart().getCodMart() != null ? + this.getHistoryItemByCodMartIfExists(pickingObjectDTO.getMtbAart().getCodMart()) : + this.getHistoryItemByBarcodeIfExists(pickingObjectDTO.getMtbAart().getBarCode()); if (historyMtbAartDTO != null) { partitaMag = historyMtbAartDTO.getPartitaMag(); @@ -548,17 +591,22 @@ public class AccettazioneBollaPickingViewModel { var clonedTargetMtbColt = (MtbColt) mCurrentMtbColt.clone(); clonedTargetMtbColt.setMtbColr(null); + var sitBolla = pickingObjectDTO.getSitBollaAccettazione(); + var firstAvailableBolla = mBolle.get(0); + var insertUDCRowRequestDto = new InsertUDCRowRequestDTO() .setCodMart(pickingObjectDTO.getMtbAart().getCodMart()) + .setDescrizione(pickingObjectDTO.getMtbAart().getCodMart() == null ? pickingObjectDTO.getMtbAart().getDescrizione() : null) + .setBarcode(pickingObjectDTO.getMtbAart().getBarCode()) .setQtaTot(qtaTot) .setQtaCnf(qtaCnf) .setNumCnf(numCnf) .setPartitaMag(partitaMag) // .setCodJcom(pickingObjectDTO.getSitBollaAccettazione().getCodJcom()) - .setDataDoc(pickingObjectDTO.getSitBollaAccettazione().getDataDoc()) - .setNumDoc(pickingObjectDTO.getSitBollaAccettazione().getNumDoc()) - .setCodDtip(pickingObjectDTO.getSitBollaAccettazione().getCodDtip()) - .setSerDoc(pickingObjectDTO.getSitBollaAccettazione().getSerDoc()) + .setDataDoc(sitBolla != null ? sitBolla.getDataDoc() : firstAvailableBolla.getDataDoc()) + .setNumDoc(sitBolla != null ? sitBolla.getNumDoc() : firstAvailableBolla.getNumDoc()) + .setCodDtip(sitBolla != null ? sitBolla.getCodDtip() : firstAvailableBolla.getCodDtip()) + .setSerDoc(sitBolla != null ? sitBolla.getSerDoc() : firstAvailableBolla.getSerDoc()) .setTargetMtbColt(clonedTargetMtbColt); if (dataScad != null) @@ -728,7 +776,7 @@ public class AccettazioneBollaPickingViewModel { private void manageVersamentoAutomatico(Runnable onComplete) { - if(!SettingsManager.iDB().isFlagAskVersamentoAutomaticoAccettazioneBolla()) { + if (!SettingsManager.iDB().isFlagAskVersamentoAutomaticoAccettazioneBolla()) { onComplete.run(); return; } @@ -751,7 +799,7 @@ public class AccettazioneBollaPickingViewModel { } private void managePrintCollo(Runnable onComplete) { - if(!mCurrentMtbColt.getDisablePrint() || !SettingsManager.iDB().isFlagAskPrintUlAccettazioneBolla()) { + if (!mCurrentMtbColt.getDisablePrint() || !SettingsManager.iDB().isFlagAskPrintUlAccettazioneBolla()) { onComplete.run(); return; } @@ -799,7 +847,8 @@ public class AccettazioneBollaPickingViewModel { private void addHistoryItem(@NonNull MtbColr mtbColr) { Optional optional = Stream.of(this.mHistoryUsedAarts) - .filter(x -> x.getCodMart().equalsIgnoreCase(mtbColr.getCodMart())) + .filter(x -> (x.getCodMart() != null && x.getCodMart().equalsIgnoreCase(mtbColr.getCodMart())) || + (x.getCodMart() == null && x.getBarcode().equalsIgnoreCase(mtbColr.getCodBarre()))) .findFirst(); if (optional.isPresent()) { @@ -809,12 +858,13 @@ public class AccettazioneBollaPickingViewModel { } else { this.mHistoryUsedAarts.add(new HistoryMtbAartDTO() .setCodMart(mtbColr.getCodMart()) + .setBarcode(mtbColr.getCodBarre()) .setPartitaMag(mtbColr.getPartitaMag()) .setDataScad(mtbColr.getDataScadPartita())); } } - private HistoryMtbAartDTO getHistoryItemIfExists(@NonNull String codMart) { + private HistoryMtbAartDTO getHistoryItemByCodMartIfExists(@NonNull String codMart) { Optional optional = Stream.of(this.mHistoryUsedAarts) .filter(x -> x.getCodMart().equalsIgnoreCase(codMart)) .findFirst(); @@ -822,6 +872,14 @@ public class AccettazioneBollaPickingViewModel { return optional.isPresent() ? optional.get() : null; } + private HistoryMtbAartDTO getHistoryItemByBarcodeIfExists(@NonNull String barcode) { + Optional optional = Stream.of(this.mHistoryUsedAarts) + .filter(x -> x.getBarcode().equalsIgnoreCase(barcode)) + .findFirst(); + + return optional.isPresent() ? optional.get() : null; + } + private void sendOnLoadingStarted() { if (this.mListener != null) mListener.onLoadingStarted(); } @@ -919,9 +977,9 @@ public class AccettazioneBollaPickingViewModel { mListener.onULVersata(versamentoAutomaticoULResponseDTO, onComplete); } - private void sendOnUnknownBarcodeScanned(String barocde) { + private void sendOnUnknownBarcodeScanned(String barocde, RunnableArgs onComplete, Runnable onAbort) { if (this.mListener != null) - mListener.onUnknownBarcodeScanned(barocde); + mListener.onUnknownBarcodeScanned(barocde, onComplete, onAbort); } public AccettazioneBollaPickingViewModel setListeners(Listener listener) { @@ -930,8 +988,6 @@ public class AccettazioneBollaPickingViewModel { } - - public interface Listener extends ILoadingListener, ILUPrintListener, ILUBaseOperationsListener { void onVersamentoAutomaticoULRequest(RunnableArgs onComplete); @@ -966,7 +1022,7 @@ public class AccettazioneBollaPickingViewModel { void onULVersata(VersamentoAutomaticoULResponseDTO versamentoAutomaticoULResponseDTO, Runnable onComplete); - void onUnknownBarcodeScanned(String barcode); + void onUnknownBarcodeScanned(String barcode, RunnableArgs done, Runnable abort); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordini_picking/dto/HistoryMtbAartDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordini_picking/dto/HistoryMtbAartDTO.java index 47f9649b..0ed74d13 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordini_picking/dto/HistoryMtbAartDTO.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordini_picking/dto/HistoryMtbAartDTO.java @@ -5,6 +5,7 @@ import java.time.LocalDate; public class HistoryMtbAartDTO { private String codMart; + private String barcode; private String partitaMag; private LocalDate dataScad; @@ -17,6 +18,15 @@ public class HistoryMtbAartDTO { return this; } + public String getBarcode() { + return barcode; + } + + public HistoryMtbAartDTO setBarcode(String barcode) { + this.barcode = barcode; + return this; + } + public String getPartitaMag() { return partitaMag; } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/main/MainFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/main/MainFragment.java index fbe5fc50..de821f7b 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/main/MainFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/main/MainFragment.java @@ -187,7 +187,10 @@ public class MainFragment extends Fragment implements ITitledFragment, IScrollab private void cyclicRecover(Iterator sessionsIterator, Runnable onComplete, RunnableArgs onFailed) { RunnableArgss tmpOnFailed = (ex, recoveredMtbColtID) -> { - if (ex.getMessage().contains("Dati entity mtb_colt non trovati") || ex.getMessage().contains("Dati collo non corretti") || (ex.getMessage().contains("Il collo numero") && ex.getMessage().contains("non esiste"))) { + if (ex.getMessage().contains("Dati entity mtb_colt non trovati") || + ex.getMessage().contains("Dati collo non corretti") || + (ex.getMessage().contains("Il collo numero") && ex.getMessage().contains("non esiste")) || + ex.getMessage().contains("Impossibile eliminare un collo agganciato a documento")) { colliDataRecoverService.closeSession(recoveredMtbColtID); onFailed.run(ex); } else { diff --git a/app/src/main/java/it/integry/integrywmsnative/view/bottom_sheet__lu_content/BottomSheetFragmentLUContentViewModel.java b/app/src/main/java/it/integry/integrywmsnative/view/bottom_sheet__lu_content/BottomSheetFragmentLUContentViewModel.java index 9996722b..a772c3d1 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/bottom_sheet__lu_content/BottomSheetFragmentLUContentViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/bottom_sheet__lu_content/BottomSheetFragmentLUContentViewModel.java @@ -43,22 +43,27 @@ public class BottomSheetFragmentLUContentViewModel { public void calcPesi() { MtbColt collo = this.mtbColt.get(); - if (collo != null) { - MtbTCol tipoPedana = collo.getMtbTCol(); - BigDecimal taraPedana = tipoPedana != null ? tipoPedana.getTaraKg() : BigDecimal.ZERO; - BigDecimal pesoNetto = BigDecimal.ZERO; - for (MtbColr mtbColr : collo.getMtbColr()) { - MtbAart articolo = mtbColr.getMtbAart(); - if (articolo != null) { - BigDecimal pesoRiga = articolo.isFlagQtaCnfFissaBoolean() ? mtbColr.getNumCnf().multiply(articolo.getPesoKg()) : mtbColr.getQtaCol(); - BigDecimal pesoTara = articolo.getTaraKg().multiply(mtbColr.getNumCnf()); - pesoRiga = pesoRiga.add(pesoTara); - pesoNetto = pesoNetto.add(pesoRiga); - } - } - this.pesoNettoKg.set(pesoNetto.setScale(2, RoundingMode.CEILING).toString()); - this.pesoKg.set(pesoNetto.add(taraPedana).setScale(2, RoundingMode.CEILING).toString()); + if (collo == null) return; + + MtbTCol tipoPedana = collo.getMtbTCol(); + BigDecimal taraPedana = tipoPedana != null ? tipoPedana.getTaraKg() : BigDecimal.ZERO; + BigDecimal pesoNetto = BigDecimal.ZERO; + + for (MtbColr mtbColr : collo.getMtbColr()) { + MtbAart articolo = mtbColr.getMtbAart(); + + if (articolo == null || articolo.getPesoKg() == null) + continue; + + BigDecimal pesoRiga = articolo.isFlagQtaCnfFissaBoolean() ? mtbColr.getNumCnf().multiply(articolo.getPesoKg()) : mtbColr.getQtaCol(); + BigDecimal pesoTara = articolo.getTaraKg().multiply(mtbColr.getNumCnf()); + pesoRiga = pesoRiga.add(pesoTara); + pesoNetto = pesoNetto.add(pesoRiga); + } + + this.pesoNettoKg.set(pesoNetto.setScale(2, RoundingMode.CEILING).toString()); + this.pesoKg.set(pesoNetto.add(taraPedana).setScale(2, RoundingMode.CEILING).toString()); } public interface Listener { diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_unknown_barcode_notes/DialogAskUnknownBarcodeNotesComponent.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_unknown_barcode_notes/DialogAskUnknownBarcodeNotesComponent.java new file mode 100644 index 00000000..e59d3520 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_unknown_barcode_notes/DialogAskUnknownBarcodeNotesComponent.java @@ -0,0 +1,14 @@ +package it.integry.integrywmsnative.view.dialogs.ask_unknown_barcode_notes; + +import dagger.Subcomponent; + +@Subcomponent +public interface DialogAskUnknownBarcodeNotesComponent { + + @Subcomponent.Factory + interface Factory { + DialogAskUnknownBarcodeNotesComponent create(); + } + + void inject(DialogAskUnknownBarcodeNotesView dialogBindProductBarcodeWithPackageView); +} \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_unknown_barcode_notes/DialogAskUnknownBarcodeNotesModule.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_unknown_barcode_notes/DialogAskUnknownBarcodeNotesModule.java new file mode 100644 index 00000000..f56bf00c --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_unknown_barcode_notes/DialogAskUnknownBarcodeNotesModule.java @@ -0,0 +1,15 @@ +package it.integry.integrywmsnative.view.dialogs.ask_unknown_barcode_notes; + +import dagger.Module; +import dagger.Provides; +import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer; + +@Module(subcomponents = DialogAskUnknownBarcodeNotesComponent.class) +public class DialogAskUnknownBarcodeNotesModule { + + @Provides + DialogAskUnknownBarcodeNotesViewModel providesDialogAskUnknownBarcodeNotesViewModel(ArticoloRESTConsumer articoloRESTConsumer) { + return new DialogAskUnknownBarcodeNotesViewModel(articoloRESTConsumer); + } + +} \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_unknown_barcode_notes/DialogAskUnknownBarcodeNotesView.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_unknown_barcode_notes/DialogAskUnknownBarcodeNotesView.java new file mode 100644 index 00000000..b26ec15e --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_unknown_barcode_notes/DialogAskUnknownBarcodeNotesView.java @@ -0,0 +1,128 @@ +package it.integry.integrywmsnative.view.dialogs.ask_unknown_barcode_notes; + +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.google.android.material.dialog.MaterialAlertDialogBuilder; + +import javax.inject.Inject; + +import it.integry.barcode_base_android_library.model.BarcodeScanDTO; +import it.integry.integrywmsnative.MainApplication; +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.expansion.BaseDialogFragment; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.databinding.DialogAskUnknownBarcodeNotesBinding; + +public class DialogAskUnknownBarcodeNotesView extends BaseDialogFragment { + + + @Inject + DialogAskUnknownBarcodeNotesViewModel mViewModel; + + private DialogAskUnknownBarcodeNotesBinding mBindings; + private Context mContext; + + private final String unknownBarcode; + private final RunnableArgs onComplete; + private final Runnable onAbort; + + + private int mBarcodeScannerIstanceID; + + //Pass here all external parameters + public static DialogAskUnknownBarcodeNotesView newInstance(String unknownBarcode, RunnableArgs onComplete, Runnable onAbort) { + return new DialogAskUnknownBarcodeNotesView(unknownBarcode, onComplete, onAbort); + } + + private DialogAskUnknownBarcodeNotesView(String unknownBarcode, RunnableArgs onComplete, Runnable onAbort) { + super(); + + this.unknownBarcode = unknownBarcode; + this.onComplete = onComplete; + this.onAbort = onAbort; + } + + + @NonNull + @Override + public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { + this.mContext = requireContext(); + + mBindings = DialogAskUnknownBarcodeNotesBinding.inflate(LayoutInflater.from(this.mContext), null, false); + mBindings.setLifecycleOwner(this); + + setCancelable(false); + + MainApplication.appComponent + .dialogAskUnknownBarcodeNotesComponent() + .create() + .inject(this); + + var alertDialog = new MaterialAlertDialogBuilder(this.mContext) + .setView(mBindings.getRoot()) + .setPositiveButton(R.string.confirm, ((dialogInterface, i) -> { + if(this.onComplete != null) onComplete.run(mViewModel.userNotes.get()); + })) + .setNegativeButton(R.string.abort, (dialogInterface, i) -> { + if(this.onAbort != null) onAbort.run(); + }) + .setCancelable(isCancelable()) + .create(); + + alertDialog.setCanceledOnTouchOutside(isCancelable()); + alertDialog.setOnShowListener(this); + + initBarcode(); + mViewModel.init(unknownBarcode); + + mBindings.setViewmodel(mViewModel); + + return alertDialog; + } + + + @Override + public void onDismiss(@NonNull DialogInterface dialog) { + BarcodeManager.removeCallback(mBarcodeScannerIstanceID); + BarcodeManager.enable(); + super.onDismiss(dialog); + } + + + + + private void initBarcode() { + mBarcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() + .setOnScanSuccessful(onScanSuccessfull) + .setOnScanFailed(this::onError)); + BarcodeManager.enable(); + setBarcodeListener(true); + } + + + private final RunnableArgs onScanSuccessfull = data -> { + this.onLoadingStarted(); + + this.mViewModel.processBarcodeDTO(data, () -> { + this.onLoadingEnded(); + + dismiss(); + }, this::onError); + }; + + + @Override + public void onError(Exception ex) { + super.onError(ex); + BarcodeManager.enable(); + } +} \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_unknown_barcode_notes/DialogAskUnknownBarcodeNotesViewModel.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_unknown_barcode_notes/DialogAskUnknownBarcodeNotesViewModel.java new file mode 100644 index 00000000..ea4e271f --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_unknown_barcode_notes/DialogAskUnknownBarcodeNotesViewModel.java @@ -0,0 +1,60 @@ +package it.integry.integrywmsnative.view.dialogs.ask_unknown_barcode_notes; + +import androidx.databinding.ObservableField; + +import javax.inject.Inject; + +import io.reactivex.Observable; +import it.integry.barcode_base_android_library.model.BarcodeScanDTO; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer; +import it.integry.integrywmsnative.core.utility.UtilityBarcode; + +public class DialogAskUnknownBarcodeNotesViewModel { + public ObservableField userNotes = new ObservableField<>(); + + private ArticoloRESTConsumer articoloRESTConsumer; + + private String unknownBarcode; + + @Inject + public DialogAskUnknownBarcodeNotesViewModel(ArticoloRESTConsumer articoloRESTConsumer) { + this.articoloRESTConsumer = articoloRESTConsumer; + } + + public void init(String unknownBarcode) { + this.unknownBarcode = unknownBarcode; + } + + public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO, Runnable onComplete, RunnableArgs onFailed) { + if (UtilityBarcode.isEtichettaAnonima(barcodeScanDTO) || + UtilityBarcode.isEtichettaPosizione(barcodeScanDTO) || + UtilityBarcode.isEtichetta128(barcodeScanDTO) || + UtilityBarcode.isEanPeso(barcodeScanDTO)) { + + onFailed.run(new Exception("E' necessario scansionare un'etichetta EAN13 per procedere")); + } else { + this.loadArticolo(barcodeScanDTO.getStringValue(), onComplete, onFailed); + + } + } + + private void loadArticolo(String stringValue, Runnable onComplete, RunnableArgs onFailed) { + this.articoloRESTConsumer.searchByBarcode(stringValue, mtbAarts -> { + + if(mtbAarts == null || mtbAarts.isEmpty()) { + onFailed.run(new Exception("Nessun articolo trovato con il barcode: " + stringValue)); + return; + } + + if(mtbAarts.size() > 1) { + onFailed.run(new Exception("Sono stati trovati " + mtbAarts.size() + " articoli agganciati al barcode: " + stringValue)); + return; + } + + var mtbAart = mtbAarts.get(0); + + articoloRESTConsumer.updateBarcodeImballo(mtbAart.getCodMart(), unknownBarcode, onComplete, onFailed); + }, onFailed); + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/bottom_sheet_fragment__lu_content__list_item.xml b/app/src/main/res/layout/bottom_sheet_fragment__lu_content__list_item.xml index 4570db80..f09f70ac 100644 --- a/app/src/main/res/layout/bottom_sheet_fragment__lu_content__list_item.xml +++ b/app/src/main/res/layout/bottom_sheet_fragment__lu_content__list_item.xml @@ -83,7 +83,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:ellipsize="end" - android:maxLines="1" + android:maxLines="2" android:paddingStart="0dp" android:paddingEnd="8dp" android:text="@{mtbColr.getDescrizione()}" diff --git a/app/src/main/res/layout/dialog_ask_unknown_barcode_notes.xml b/app/src/main/res/layout/dialog_ask_unknown_barcode_notes.xml new file mode 100644 index 00000000..e3dc2d3b --- /dev/null +++ b/app/src/main/res/layout/dialog_ask_unknown_barcode_notes.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file