diff --git a/app/src/main/java/it/integry/integrywmsnative/core/exception/NoOrderFoundException.java b/app/src/main/java/it/integry/integrywmsnative/core/exception/NoOrderFoundException.java new file mode 100644 index 00000000..5a63facf --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/exception/NoOrderFoundException.java @@ -0,0 +1,12 @@ +package it.integry.integrywmsnative.core.exception; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.utility.UtilityResources; + +public class NoOrderFoundException extends Exception { + + public NoOrderFoundException() { + super(UtilityResources.getString(R.string.no_orders_found_message)); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/OrdiniUscitaElencoFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/OrdiniUscitaElencoFragment.java index 772c4a9d..48917ffe 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/OrdiniUscitaElencoFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/OrdiniUscitaElencoFragment.java @@ -24,10 +24,13 @@ import java.util.List; 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.di.BindableBoolean; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.interfaces.IFilterableFragment; import it.integry.integrywmsnative.core.interfaces.ILifecycleFragment; import it.integry.integrywmsnative.core.interfaces.IScrollableFragment; @@ -115,6 +118,7 @@ public class OrdiniUscitaElencoFragment extends Fragment implements ITitledFragm mBindings.setViewmodel(mViewModel); this.initRecyclerView(); + this.initBarcodeReader(); return mBindings.getRoot(); } @@ -170,6 +174,24 @@ public class OrdiniUscitaElencoFragment extends Fragment implements ITitledFragm mToolbar.setRecyclerView(this.mBindings.venditaMainList); } + private void initBarcodeReader() { + barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() + .setOnScanSuccessfull(onScanSuccessful) + .setOnScanFailed(ex -> UtilityExceptions.defaultException(getActivity(), ex, false))); + + BarcodeManager.enable(); + } + + private final RunnableArgs onScanSuccessful = data -> { + BarcodeManager.disable(); + this.openProgress(); + + this.mViewModel.processBarcodeDTO(data, () -> { + BarcodeManager.enable(); + this.closeProgress(); + }); + }; + private void refreshList(List orderList) { this.mOrdiniInevasiMutableData.clear(); this.mOrdiniInevasiMutableData.addAll(convertDataModelToListModel(orderList)); @@ -235,7 +257,6 @@ public class OrdiniUscitaElencoFragment extends Fragment implements ITitledFragm public void dispatchOrders() { - List selectedOrders = Stream.of(this.mOrdiniInevasiMutableData) .filter(x -> x.getSelectedObservable().get()) .map(OrdiniUscitaElencoListModel::getOriginalModel) @@ -282,6 +303,12 @@ public class OrdiniUscitaElencoFragment extends Fragment implements ITitledFragm BarcodeManager.enable(); } + @Override + public void onOrderFiltered(List filteredOrders) { +// FBToast.infoToast(getActivity(), "Trovati: " + filteredOrders.size() + " ordini", Toast.LENGTH_LONG); + refreshList(filteredOrders); + } + @Override public void onOrdersDispatched(List orders, List sitArts, List alreadyRegisteredMtbColts) { List codMarts = Stream.of(sitArts) diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/OrdiniUscitaElencoModule.java b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/OrdiniUscitaElencoModule.java index 4624045c..1158283f 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/OrdiniUscitaElencoModule.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/OrdiniUscitaElencoModule.java @@ -1,15 +1,26 @@ package it.integry.integrywmsnative.gest.ordini_uscita_elenco; +import javax.inject.Singleton; + import dagger.Module; import dagger.Provides; +import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.OrdiniRESTConsumer; +import it.integry.integrywmsnative.gest.ordini_uscita_elenco.rest.OrdiniUscitaElencoRESTConsumer; @Module(subcomponents = OrdiniUscitaElencoComponent.class) public class OrdiniUscitaElencoModule { + @Singleton @Provides - OrdiniUscitaElencoViewModel providesProdOrdineLavorazioneElencoViewModel(OrdiniRESTConsumer ordiniRESTConsumer) { - return new OrdiniUscitaElencoViewModel(ordiniRESTConsumer); + OrdiniUscitaElencoRESTConsumer providesOrdiniUscitaElencoRESTConsumer() { + return new OrdiniUscitaElencoRESTConsumer(); + } + + @Provides + OrdiniUscitaElencoViewModel providesProdOrdineLavorazioneElencoViewModel(OrdiniRESTConsumer ordiniRESTConsumer, ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer, BarcodeRESTConsumer barcodeRESTConsumer, OrdiniUscitaElencoRESTConsumer ordiniUscitaElencoRESTConsumer) { + return new OrdiniUscitaElencoViewModel(ordiniRESTConsumer, colliMagazzinoRESTConsumer, barcodeRESTConsumer, ordiniUscitaElencoRESTConsumer); } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/OrdiniUscitaElencoViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/OrdiniUscitaElencoViewModel.java index 5d3386c7..8e2ec39d 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/OrdiniUscitaElencoViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/OrdiniUscitaElencoViewModel.java @@ -4,25 +4,42 @@ import androidx.lifecycle.MutableLiveData; import com.annimon.stream.Stream; +import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import javax.inject.Inject; +import it.integry.barcode_base_android_library.model.BarcodeScanDTO; +import it.integry.integrywmsnative.core.exception.InvalidLUGestioneException; import it.integry.integrywmsnative.core.exception.InvalidLUMultiCodMdepException; import it.integry.integrywmsnative.core.exception.InvalidLUMultiGestioneException; +import it.integry.integrywmsnative.core.exception.NoLUFoundException; +import it.integry.integrywmsnative.core.exception.NoOrderFoundException; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.model.DtbOrdt; import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.model.OrdineInevasoDTO; import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; +import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.OrdiniRESTConsumer; import it.integry.integrywmsnative.core.rest.model.OrdineUscitaInevasoDTO; import it.integry.integrywmsnative.core.rest.model.SitArtOrdDTO; +import it.integry.integrywmsnative.core.utility.UtilityBarcode; +import it.integry.integrywmsnative.core.utility.UtilityString; +import it.integry.integrywmsnative.gest.ordini_uscita_elenco.rest.OrdiniUscitaElencoRESTConsumer; public class OrdiniUscitaElencoViewModel { private final MutableLiveData> mOrderList = new MutableLiveData<>(); private final OrdiniRESTConsumer mOrdiniRESTConsumer; + private final ColliMagazzinoRESTConsumer mColliMagazzinoRESTConsumer; + private final BarcodeRESTConsumer mBarcodeRESTConsumer; + private final OrdiniUscitaElencoRESTConsumer mOrdiniUscitaElencoRESTConsumer; + private Listener mListener; private String mCurrentCodMdep; private GestioneEnum mCurrentGestioneOrd; @@ -30,8 +47,11 @@ public class OrdiniUscitaElencoViewModel { private int mCurrentSegnoCol; @Inject - public OrdiniUscitaElencoViewModel(OrdiniRESTConsumer ordiniRESTConsumer) { + public OrdiniUscitaElencoViewModel(OrdiniRESTConsumer ordiniRESTConsumer, ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer, BarcodeRESTConsumer barcodeRESTConsumer, OrdiniUscitaElencoRESTConsumer ordiniUscitaElencoRESTConsumer) { this.mOrdiniRESTConsumer = ordiniRESTConsumer; + this.mColliMagazzinoRESTConsumer = colliMagazzinoRESTConsumer; + this.mBarcodeRESTConsumer = barcodeRESTConsumer; + this.mOrdiniUscitaElencoRESTConsumer = ordiniUscitaElencoRESTConsumer; } @@ -121,6 +141,118 @@ public class OrdiniUscitaElencoViewModel { } + public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) { + + RunnableArgs> onBarcodeScanComplete = orderList -> { + onComplete.run(); + this.sendOnOrderFiltered(orderList); + }; + + if(UtilityBarcode.isBarcodeOrdineV(barcodeScanDTO)) { + this.executeEtichettaOrdineV(barcodeScanDTO.getStringValue(), onBarcodeScanComplete); + } else if(UtilityBarcode.isEtichettaAnonima(barcodeScanDTO)) { + this.executeEtichettaLU(barcodeScanDTO.getStringValue(), onBarcodeScanComplete); + } else if(UtilityBarcode.isEtichetta128(barcodeScanDTO)){ + this.executeEtichettaEan128(barcodeScanDTO, onBarcodeScanComplete); + } else { + onComplete.run(); + } + } + + + + private void executeEtichettaOrdineV(String barcode, RunnableArgs> onComplete) { + String gestione = ""; + + char c = barcode.charAt(0); + if (c == '1') + gestione = "A"; + else if (c == '2') + gestione = "L"; + else if (c == '3') + gestione = "V"; + + int numOrd = Integer.parseInt(UtilityString.mid(barcode, 10)); + + Date date = null; + try { + date = new SimpleDateFormat("ddMMyyyy") + .parse(UtilityString.mid(barcode, 2, 8)); + } catch (ParseException ex) { + this.sendError(ex); + return; + } + + + final String finalGestione = gestione; + final Date finalDate = date; + + List filteredOrders = Stream.of(mOrderList.getValue()) + .filter(x -> x.getNumOrd() == numOrd && x.getGestione().equalsIgnoreCase(finalGestione) && x.getDataOrdD().equals(finalDate)).toList(); + + onComplete.run(filteredOrders); + } + + + private void executeEtichettaLU(String SSCC, RunnableArgs> onComplete) { + this.mColliMagazzinoRESTConsumer.getBySSCC(SSCC, true, false, mtbColt -> { + + if(mtbColt != null && mtbColt.getMtbColr() != null && mtbColt.getMtbColr().size() > 0) { + + if(mtbColt.getGestioneEnum() == GestioneEnum.ACQUISTO || mtbColt.getGestioneEnum() == GestioneEnum.LAVORAZIONE) { + //GET BY COMMESSA COLLO + this.mOrdiniUscitaElencoRESTConsumer.getOrdiniFromCommessaCollo(mCurrentCodMdep, mtbColt, orderList -> { + + if(orderList != null && orderList.size() > 0) { + List numOrds = Stream.of(orderList) + .map(DtbOrdt::getNumOrd) + .toList(); + + List 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 InvalidLUGestioneException(GestioneEnum.VENDITA)); + } + + } else { + this.sendError(new NoLUFoundException()); + } + + }, this::sendError); + } + + + private void executeEtichettaEan128(BarcodeScanDTO barcodeScanDTO, RunnableArgs> 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); + } + public MutableLiveData> getOrderList() { return mOrderList; } @@ -142,6 +274,10 @@ public class OrdiniUscitaElencoViewModel { if (this.mListener != null) mListener.onError(ex); } + private void sendOnOrderFiltered(List filteredOrders) { + if (this.mListener != null) mListener.onOrderFiltered(filteredOrders); + } + private void sendOnOrdersDispatched(List orders, List sitArts, List alreadyRegisteredMtbColts) { if (this.mListener != null) mListener.onOrdersDispatched(orders, sitArts, alreadyRegisteredMtbColts); } @@ -153,6 +289,8 @@ public class OrdiniUscitaElencoViewModel { void onError(Exception ex); + void onOrderFiltered(List filteredOrders); + void onOrdersDispatched(List orders, List sitArts, List alreadyRegisteredMtbColts); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/rest/OrdiniUscitaElencoRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/rest/OrdiniUscitaElencoRESTConsumer.java new file mode 100644 index 00000000..a2968891 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/rest/OrdiniUscitaElencoRESTConsumer.java @@ -0,0 +1,45 @@ +package it.integry.integrywmsnative.gest.ordini_uscita_elenco.rest; + +import java.util.List; + +import javax.inject.Singleton; + +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.model.DtbOrdt; +import it.integry.integrywmsnative.core.model.MtbColt; +import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; +import it.integry.integrywmsnative.core.rest.RESTBuilder; +import it.integry.integrywmsnative.core.rest.consumers._BaseRESTConsumer; +import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + +@Singleton +public class OrdiniUscitaElencoRESTConsumer extends _BaseRESTConsumer { + + public void getOrdiniFromCommessaCollo(String codMdep, MtbColt testataCollo, RunnableArgs> onComplete, RunnableArgs onFailed) { + OrdiniUscitaElencoRESTConsumerService service = RESTBuilder.getService(OrdiniUscitaElencoRESTConsumerService.class); + service.getOrdiniInCommessaCollo( + testataCollo.getDataColloS(), + testataCollo.getNumCollo(), + testataCollo.getSerCollo(), + testataCollo.getGestione(), + GestioneEnum.VENDITA.getText(), + codMdep) + .enqueue(new Callback>>() { + @Override + public void onResponse(Call>> call, Response>> response) { + analyzeAnswer(response, "getOrdiniFromCommessaCollo", (m) -> { + onComplete.run(response.body().getEntity()); + }, onFailed); + } + + @Override + public void onFailure(Call>> call, Throwable t) { + onFailed.run(new Exception(t)); + } + }); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/rest/OrdiniUscitaElencoRESTConsumerService.java b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/rest/OrdiniUscitaElencoRESTConsumerService.java new file mode 100644 index 00000000..664bd79e --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/rest/OrdiniUscitaElencoRESTConsumerService.java @@ -0,0 +1,16 @@ +package it.integry.integrywmsnative.gest.ordini_uscita_elenco.rest; + +import java.util.List; + +import it.integry.integrywmsnative.core.model.DtbOrdt; +import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; +import retrofit2.Call; +import retrofit2.http.GET; +import retrofit2.http.Query; + +public interface OrdiniUscitaElencoRESTConsumerService { + + @GET("getOrdiniInCommCollo") + Call>> getOrdiniInCommessaCollo(@Query("dataCollo") String dataCollo, @Query("numCollo") Integer numCollo, @Query("serCollo") String serCollo, @Query("gestioneCollo") String gestioneCollo, @Query("gestioneOrdine") String gestioneOrdine, @Query("codMdep") String codMdep); + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneActivity.java index d6df5264..798618ad 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneActivity.java @@ -225,6 +225,8 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() .setOnScanSuccessfull(onScanSuccessful) .setOnScanFailed(ex -> UtilityExceptions.defaultException(this, ex, false))); + + BarcodeManager.enable(); } private void initRecyclerView() { diff --git a/dynamic_gramm/src/main/java/it/integry/wms/dynamic_customization/extensions/MenuConfigurationGRAMM.java b/dynamic_gramm/src/main/java/it/integry/wms/dynamic_customization/extensions/MenuConfigurationGRAMM.java index e3afa82b..d68ec9ac 100644 --- a/dynamic_gramm/src/main/java/it/integry/wms/dynamic_customization/extensions/MenuConfigurationGRAMM.java +++ b/dynamic_gramm/src/main/java/it/integry/wms/dynamic_customization/extensions/MenuConfigurationGRAMM.java @@ -6,6 +6,7 @@ import it.integry.integrywmsnative.gest.accettazione.MainAccettazioneFragment; import it.integry.integrywmsnative.gest.ordini_uscita_elenco.OrdiniUscitaElencoFragment; import it.integry.integrywmsnative.gest.picking_libero.PickingLiberoFragment; import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.ProdOrdineProduzioneElencoFragment; +import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.ProdFabbisognoLineeProdFragment; import it.integry.integrywmsnative.gest.rettifica_giacenze.RettificaGiacenzeFragment; import it.integry.integrywmsnative.gest.ultime_consegne_cliente.UltimeConsegneClienteFragment; import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.UltimiArriviFornitoreFragment; @@ -87,6 +88,13 @@ public class MenuConfigurationGRAMM extends BaseMenuConfiguration { .setTitleIcon(it.integry.integrywmsnative.R.drawable.ic_dashboard_prod_picking_libero) .setDrawerIcon(it.integry.integrywmsnative.R.drawable.ic_black_barcode_scanner) .setFragmentFactory(() -> PickingLiberoFragment.newInstance(GestioneEnum.LAVORAZIONE))) + + .addItem(new MenuItem() + .setID(it.integry.integrywmsnative.R.id.nav_prod_posizionamento_da_ord) + .setTitleText(it.integry.integrywmsnative.R.string.versamento_merce_fragment_title) + .setTitleIcon(it.integry.integrywmsnative.R.drawable.ic_dashboard_prod_versamento_merce) + .setDrawerIcon(it.integry.integrywmsnative.R.drawable.ic_black_load_shelf) + .setFragmentFactory(ProdFabbisognoLineeProdFragment::newInstance)) ).addGroup( new MenuGroup() .setGroupText(it.integry.integrywmsnative.R.string.internal_handling)