diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7fe4ca31..e87ec309 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -17,7 +17,8 @@ + android:theme="@style/Light" + android:windowSoftInputMode="adjustPan"> diff --git a/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ColliMagazzinoRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ColliMagazzinoRESTConsumer.java index 927cb583..708bf4b0 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ColliMagazzinoRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ColliMagazzinoRESTConsumer.java @@ -32,12 +32,7 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer{ public static void createColloLavorazione(RunnableArgs onComplete, RunnableArgs onFailed) { MtbColt mtbColtToCreate = new MtbColt() - .setGestione("L") - .setDataCollo(new Date()) - .setCodMdep(SettingsManager.i().userSession.depo.getCodMdep()) - .setPreparatoDa(SettingsManager.i().user.fullname) - .setOraInizPrep(new Date()) - .setCodAnag(SettingsManager.iDB().getDefaultCodAnag()); + .setGestione(GestioneEnum.LAVORAZIONE); mtbColtToCreate .setOperation(CommonModelConsts.OPERATION.INSERT); @@ -60,12 +55,7 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer{ public static void createColloFromEtichettaAnonima(BarcodeScanDTO barcodeScanDTO, String gestione, RunnableArgs onComplete, RunnableArgs onFailed) { MtbColt mtbColtToCreate = new MtbColt() - .setGestione(gestione) - .setDataCollo(new Date()) - .setCodMdep(SettingsManager.i().userSession.depo.getCodMdep()) - .setPreparatoDa(SettingsManager.i().user.fullname) - .setOraInizPrep(new Date()) - .setCodAnag(SettingsManager.iDB().getDefaultCodAnag()); + .setGestione(gestione); Integer customNumCollo = UtilityBarcode.getNumColloFromULAnonima(barcodeScanDTO); String customSerCollo = CommonConst.Config.DEFAULT_ANONYMOUS_UL_SERIE; diff --git a/app/src/main/java/it/integry/integrywmsnative/core/model/MtbAartWithFornitore.java b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbAartWithFornitore.java new file mode 100644 index 00000000..e6b06b50 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbAartWithFornitore.java @@ -0,0 +1,15 @@ +package it.integry.integrywmsnative.core.model; + +public class MtbAartWithFornitore extends MtbAart { + + private String codArtFor; + + public String getCodArtFor() { + return codArtFor; + } + + public MtbAartWithFornitore setCodArtFor(String codArtFor) { + this.codArtFor = codArtFor; + return this; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/model/MtbCols.java b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbCols.java new file mode 100644 index 00000000..c4938a62 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbCols.java @@ -0,0 +1,115 @@ +package it.integry.integrywmsnative.core.model; + +import java.util.Date; + +import it.integry.integrywmsnative.core.settings.SettingsManager; + +public class MtbCols extends EntityBase { + + private String dataCollo; + private String gestione; + private Integer idRiga; + private Integer numCollo; + private String serCollo; + private String codMdep; + private String dataMove; + private String modificatoDa; + private String posizione; + private String causale; + + public MtbCols() { + type = "mtb_cols"; + setCodMdep(SettingsManager.i().userSession.depo.getCodMdep()); + setModificatoDa(SettingsManager.i().user.fullname); + } + + public String getDataCollo() { + return dataCollo; + } + + public MtbCols setDataCollo(String dataCollo) { + this.dataCollo = dataCollo; + return this; + } + + public String getGestione() { + return gestione; + } + + public MtbCols setGestione(String gestione) { + this.gestione = gestione; + return this; + } + + public Integer getIdRiga() { + return idRiga; + } + + public MtbCols setIdRiga(Integer idRiga) { + this.idRiga = idRiga; + return this; + } + + public Integer getNumCollo() { + return numCollo; + } + + public MtbCols setNumCollo(Integer numCollo) { + this.numCollo = numCollo; + return this; + } + + public String getSerCollo() { + return serCollo; + } + + public MtbCols setSerCollo(String serCollo) { + this.serCollo = serCollo; + return this; + } + + public String getCodMdep() { + return codMdep; + } + + public MtbCols setCodMdep(String codMdep) { + this.codMdep = codMdep; + return this; + } + + public String getDataMove() { + return dataMove; + } + + public MtbCols setDataMove(String dataMove) { + this.dataMove = dataMove; + return this; + } + + public String getModificatoDa() { + return modificatoDa; + } + + public MtbCols setModificatoDa(String modificatoDa) { + this.modificatoDa = modificatoDa; + return this; + } + + public String getPosizione() { + return posizione; + } + + public MtbCols setPosizione(String posizione) { + this.posizione = posizione; + return this; + } + + public String getCausale() { + return causale; + } + + public MtbCols setCausale(String causale) { + this.causale = causale; + return this; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColt.java b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColt.java index 46f8a81d..c56b02ad 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColt.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColt.java @@ -14,6 +14,7 @@ import java.util.List; import java.util.concurrent.atomic.AtomicReference; import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; +import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.core.utility.UtilityLogger; @@ -56,6 +57,8 @@ public class MtbColt extends EntityBase implements Parcelable { private BigDecimal larghezzaCm; private BigDecimal altezzaCm; + public List mtbCols; + private Boolean disablePrint; protected MtbColt(Parcel in) { @@ -285,6 +288,12 @@ public class MtbColt extends EntityBase implements Parcelable { public MtbColt(){ type = "mtb_colt"; + setDataCollo(new Date()); + setSerCollo("/"); + setCodMdep(SettingsManager.i().userSession.depo.getCodMdep()); + setPreparatoDa(SettingsManager.i().user.fullname); + setOraInizPrep(new Date()); + setCodAnag(SettingsManager.iDB().getDefaultCodAnag()); } @@ -638,8 +647,18 @@ public class MtbColt extends EntityBase implements Parcelable { return this; } + + public List getMtbCols() { + return mtbCols; + } + + public MtbColt setMtbCols(List mtbCols) { + this.mtbCols = mtbCols; + return this; + } + public Boolean getDisablePrint() { - return disablePrint; + return disablePrint == null ? false : disablePrint; } public MtbColt setDisablePrint(Boolean disablePrint) { diff --git a/app/src/main/java/it/integry/integrywmsnative/core/report/ReportManager.java b/app/src/main/java/it/integry/integrywmsnative/core/report/ReportManager.java index 02d5728b..37bdf05f 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/report/ReportManager.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/report/ReportManager.java @@ -20,7 +20,7 @@ public class ReportManager { break; case LAVORAZIONE: - onFailed.run(new Exception("Etichetta non definita")); + onComplete.run("EtichettaInventario"); break; case VENDITA: 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 4d53f838..c378e3ba 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 @@ -12,6 +12,7 @@ public class DBSettingsModel { private boolean enableCheckPartitaMagCheckPickingV; private boolean flagMultiClienteOrdV; private String defaultCodAnag; + private String defaultCausaleRettificaGiacenze; public List getAvailableProfiles() { return availableProfiles; @@ -55,4 +56,13 @@ public class DBSettingsModel { this.defaultCodAnag = defaultCodAnag; return this; } + + public String getDefaultCausaleRettificaGiacenze() { + return defaultCausaleRettificaGiacenze; + } + + public DBSettingsModel setDefaultCausaleRettificaGiacenze(String defaultCausaleRettificaGiacenze) { + this.defaultCausaleRettificaGiacenze = defaultCausaleRettificaGiacenze; + 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 922ea1aa..e4a6a2dc 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 @@ -130,16 +130,23 @@ public class SettingsManager { private static void loadGestSetupValues(Runnable onComplete, RunnableArgs onFailed) { - GestSetupRESTConsumer.getBooleanValue("PICKING", "SETUP", "ENABLE_CHECK_PARTITA_MAG_PICKING_V", valueEnableCheckPartitaMag -> { - dbSettingsModelIstance.setEnableCheckPartitaMagCheckPickingV(valueEnableCheckPartitaMag); + GestSetupRESTConsumer.getValue("PICKING", "SETUP", "DEFAULT_CAUSALE_RETTIFICA_GIACENZE", valueDefaultCausaleRettificaGiacenze -> { + dbSettingsModelIstance.setDefaultCausaleRettificaGiacenze(valueDefaultCausaleRettificaGiacenze.value); - GestSetupRESTConsumer.getBooleanValue("PICKING", "SETUP", "FLAG_MULTI_CLIENTE_ORD_VENDITA", valueFlagMultiClienteOrdVendita -> { + GestSetupRESTConsumer.getBooleanValue("PICKING", "SETUP", "ENABLE_CHECK_PARTITA_MAG_PICKING_V", valueEnableCheckPartitaMag -> { + dbSettingsModelIstance.setEnableCheckPartitaMagCheckPickingV(valueEnableCheckPartitaMag); + + GestSetupRESTConsumer.getBooleanValue("PICKING", "SETUP", "FLAG_MULTI_CLIENTE_ORD_VENDITA", valueFlagMultiClienteOrdVendita -> { dbSettingsModelIstance.setFlagMultiClienteOrdV(valueFlagMultiClienteOrdVendita); - GestSetupRESTConsumer.getValue("PICKING", "SETUP", "COD_ANAG_DEFAULT", valueCodAnagDefault -> { - dbSettingsModelIstance.setDefaultCodAnag(valueCodAnagDefault.value); + GestSetupRESTConsumer.getValue("PICKING", "SETUP", "COD_ANAG_DEFAULT", valueCodAnagDefault -> { + dbSettingsModelIstance.setDefaultCodAnag(valueCodAnagDefault.value); + + if(onComplete != null) onComplete.run(); + }, ex -> { + if(onFailed != null) onFailed.run(ex); + }); - if(onComplete != null) onComplete.run(); }, ex -> { if(onFailed != null) onFailed.run(ex); }); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/viewmodel/AccettazioneOnOrdineAccettazioneInevasoViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/viewmodel/AccettazioneOnOrdineAccettazioneInevasoViewModel.java index af8a0614..98ef153d 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/viewmodel/AccettazioneOnOrdineAccettazioneInevasoViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/viewmodel/AccettazioneOnOrdineAccettazioneInevasoViewModel.java @@ -383,14 +383,10 @@ public class AccettazioneOnOrdineAccettazioneInevasoViewModel implements IOnColl if(defaultPosAccettazioneDTO != null && !UtilityString.isNullOrEmpty(defaultPosAccettazioneDTO.value)) defaultPosAccettazione = defaultPosAccettazioneDTO.value; MtbColt mtbColt = new MtbColt(); - mtbColt .setDataCollo(new Date()) - .setGestione(GestioneEnum.ACQUISTO) - .setCodMdep(SettingsManager.i().userSession.depo.getCodMdep()) + mtbColt .setGestione(GestioneEnum.ACQUISTO) .setPreparatoDa(SettingsManager.i().user.fullname) - .setOraInizPrep(new Date()) .setAnnotazioni(noteString) .setPosizione(defaultPosAccettazione) - .setSerCollo("/") .setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE); if(customNumCollo != null) { diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contenuto_bancale/viewmodel/ContenutoBancaleViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/contenuto_bancale/viewmodel/ContenutoBancaleViewModel.java index c38c7b6b..56ecc53a 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contenuto_bancale/viewmodel/ContenutoBancaleViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contenuto_bancale/viewmodel/ContenutoBancaleViewModel.java @@ -69,9 +69,6 @@ public class ContenutoBancaleViewModel implements IRecyclerItemClicked mAdapter = new ContenutoBancaleListAdapter(mContext, mtbColt.get().getMtbColr(), this); mContext.bindings.contenutoBancaleMainList.setAdapter(mAdapter); - -// mContext.bindings.waterfallToolbar.setRecyclerView(mContext.bindings.contenutoBancaleMainList); - } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/RettificaGiacenzeFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/RettificaGiacenzeFragment.java index 05fadb63..58133970 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/RettificaGiacenzeFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/RettificaGiacenzeFragment.java @@ -12,7 +12,10 @@ import android.view.ViewGroup; import butterknife.ButterKnife; import it.integry.integrywmsnative.MainActivity; 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.interfaces.ITitledFragment; +import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.databinding.DialogScanOrCreateLuBinding; import it.integry.integrywmsnative.databinding.FragmentMainRettificaGiacenzeBinding; import it.integry.integrywmsnative.gest.rettifica_giacenze.core.RettificaGiacenzeHelper; @@ -26,6 +29,8 @@ public class RettificaGiacenzeFragment extends Fragment implements ITitledFragme private RettificaGiacenzeViewModel mRettificaGiacenzeViewModel = null; + private int barcodeScannerIstanceID = -1; + public RettificaGiacenzeFragment() { // Required empty public constructor } @@ -48,7 +53,6 @@ public class RettificaGiacenzeFragment extends Fragment implements ITitledFragme mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_main_rettifica_giacenze, container, false); mRettificaGiacenzeViewModel = new RettificaGiacenzeViewModel(); - mBinding.setView(this); mBinding.setViewmodel(mRettificaGiacenzeViewModel); @@ -62,6 +66,10 @@ public class RettificaGiacenzeFragment extends Fragment implements ITitledFragme mHelper = new RettificaGiacenzeHelper(getActivity()); mRettificaGiacenzeViewModel.init(getActivity(), mBinding, mHelper); + barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() + .setOnScanSuccessfull(mRettificaGiacenzeViewModel.onScanSuccessfull) + .setOnScanFailed(ex -> UtilityExceptions.defaultException(getActivity(), ex, false))); + mHelper.loadListaFornitori(listaFornitori -> { mRettificaGiacenzeViewModel.setupSearchFornitori(listaFornitori); }); @@ -78,25 +86,19 @@ public class RettificaGiacenzeFragment extends Fragment implements ITitledFragme setUIToIntArt(); }); - DialogScanOrCreateLU.makeBase(getActivity(), mtbColt -> { - if(mtbColt == null) { - ((MainActivity)getActivity()).popToMain(); - } else { - mRettificaGiacenzeViewModel.setMtbColt(mtbColt); - } - }).show(); - + mRettificaGiacenzeViewModel.openLU(); } @Override public void onAttach(Context context) { super.onAttach(context); - } @Override public void onDetach() { + mRettificaGiacenzeViewModel.closeLU(false); + BarcodeManager.removeCallback(barcodeScannerIstanceID); super.onDetach(); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/core/RettificaGiacenzeHelper.java b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/core/RettificaGiacenzeHelper.java index b1376d02..a530426b 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/core/RettificaGiacenzeHelper.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/core/RettificaGiacenzeHelper.java @@ -13,6 +13,8 @@ import java.util.List; import it.integry.integrywmsnative.core.REST.consumers.ISimpleOperationCallback; import it.integry.integrywmsnative.core.REST.consumers.SystemRESTConsumer; import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.model.MtbAart; +import it.integry.integrywmsnative.core.model.MtbAartWithFornitore; import it.integry.integrywmsnative.core.utility.UtilityDB; import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.core.utility.UtilityProgress; @@ -50,17 +52,17 @@ public class RettificaGiacenzeHelper { }); } - public void searchArtForn(String codAlis, String codArtForOrDescr, RunnableArgs> onComplete, RunnableArgs onFailed) { - String sql = "SELECT mtb_aart.cod_mart, mtb_aart.descrizione_estesa, mtb_lisa.cod_art_for from mtb_lisa, mtb_aart " + + public void searchArtForn(String codAlis, String codArtForOrDescr, RunnableArgs> onComplete, RunnableArgs onFailed) { + String sql = "SELECT mtb_aart.*, mtb_lisa.cod_art_for from mtb_lisa, mtb_aart " + " WHERE cod_alis = " + UtilityDB.valueToString(codAlis) + " AND mtb_lisa.cod_mart = mtb_aart.cod_mart " + " AND (mtb_aart.descrizione_estesa LIKE '%" + codArtForOrDescr +"%' OR cod_art_for LIKE '%" + codArtForOrDescr + "%') " + " ORDER BY mtb_aart.descrizione_estesa"; - Type typeOfObjectsList = new TypeToken>() {}.getType(); - SystemRESTConsumer.processSql(sql, typeOfObjectsList, new ISimpleOperationCallback>() { + Type typeOfObjectsList = new TypeToken>() {}.getType(); + SystemRESTConsumer.processSql(sql, typeOfObjectsList, new ISimpleOperationCallback>() { @Override - public void onSuccess(ArrayList value) { + public void onSuccess(ArrayList value) { if(onComplete != null) onComplete.run(value); } @@ -70,4 +72,30 @@ public class RettificaGiacenzeHelper { } }); } + + + public void searchArtInt(String codMartOrBarcodeOrDescr, RunnableArgs> onComplete, RunnableArgs onFailed) { + String sql = "SELECT DISTINCT mtb_aart.* " + + "FROM mtb_aart, mvw_barcode " + + "WHERE (case when len(mvw_barcode.cod_barre) > 13 " + + "then mvw_barcode.cod_barre " + + "else Replicate('0', 13 - len(mvw_barcode.cod_barre))+ mvw_barcode.cod_barre end LIKE '%' + case when len('" + codMartOrBarcodeOrDescr + "') > 13 then '" + codMartOrBarcodeOrDescr + "' else Replicate('0', 13 - len('" + codMartOrBarcodeOrDescr + "')) + '" + codMartOrBarcodeOrDescr + "'" + + "end OR mtb_aart.cod_mart = '" + codMartOrBarcodeOrDescr + "' OR mtb_aart.descrizione_estesa LIKE '%" + codMartOrBarcodeOrDescr + "%') AND mtb_aart.cod_mart = mvw_barcode.cod_mart"; + + Type typeOfObjectsList = new TypeToken>() {}.getType(); + SystemRESTConsumer.processSql(sql, typeOfObjectsList, new ISimpleOperationCallback>() { + @Override + public void onSuccess(ArrayList value) { + if(onComplete != null) onComplete.run(value); + } + + @Override + public void onFailed(Exception ex) { + if(onFailed != null) onFailed.run(ex); + } + }); + } + + + } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/core/adapter/RettificaGiacenzeMainListAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/core/adapter/RettificaGiacenzeMainListAdapter.java new file mode 100644 index 00000000..b59eac86 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/core/adapter/RettificaGiacenzeMainListAdapter.java @@ -0,0 +1,122 @@ +package it.integry.integrywmsnative.gest.rettifica_giacenze.core.adapter; + +import android.content.Context; +import android.databinding.DataBindingUtil; +import android.databinding.ObservableArrayList; +import android.databinding.ObservableList; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.interfaces.IRecyclerItemClicked; +import it.integry.integrywmsnative.core.model.MtbColr; +import it.integry.integrywmsnative.databinding.ListaRettificaGiacenzeModelBinding; + +public class RettificaGiacenzeMainListAdapter extends RecyclerView.Adapter { + + protected Context mContext; + protected ObservableArrayList mDataset; + private View mEmptyView; + + private IRecyclerItemClicked mOnItemClickListener; + + public static class ViewHolder extends RecyclerView.ViewHolder { + protected ListaRettificaGiacenzeModelBinding mViewDataBinding; + + + public ViewHolder(ListaRettificaGiacenzeModelBinding v) { + super(v.getRoot()); + mViewDataBinding = v; + } + + public void bind(MtbColr mtbColr) { + mViewDataBinding.setMtbColr(mtbColr); + mViewDataBinding.executePendingBindings(); + } + } + + public RettificaGiacenzeMainListAdapter(Context context, ObservableArrayList myDataset, IRecyclerItemClicked onItemClickListener, View emptView) { + mContext = context; + mDataset = myDataset; + mEmptyView = emptView; + mOnItemClickListener = onItemClickListener; + + myDataset.addOnListChangedCallback(onListChangedCallback); + + checkIfEmpty(); + } + + @Override + public RettificaGiacenzeMainListAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + // create a new view + ListaRettificaGiacenzeModelBinding viewDataBinding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), R.layout.lista_rettifica_giacenze_model, parent, false); + + return new ViewHolder(viewDataBinding); + } + + @Override + public void onBindViewHolder(RettificaGiacenzeMainListAdapter.ViewHolder holder, int position) { + MtbColr item = mDataset.get(position); + holder.bind(item); + + holder.mViewDataBinding.getRoot().setOnClickListener(x -> { + if(mOnItemClickListener != null) { + mOnItemClickListener.onItemClick(item, position); + } + }); + } + + @Override + public void onViewRecycled(RettificaGiacenzeMainListAdapter.ViewHolder holder) { + super.onViewRecycled(holder); + } + + @Override + public int getItemCount() { + return mDataset.size(); + } + + private ObservableList.OnListChangedCallback onListChangedCallback = new ObservableList.OnListChangedCallback>(){ + + @Override + public void onChanged(ObservableList sender) { + notifyDataSetChanged(); + checkIfEmpty(); + } + + @Override + public void onItemRangeChanged(ObservableList sender, int positionStart, int itemCount) { + notifyDataSetChanged(); + checkIfEmpty(); + } + + @Override + public void onItemRangeInserted(ObservableList sender, int positionStart, int itemCount) { + notifyDataSetChanged(); + checkIfEmpty(); + } + + @Override + public void onItemRangeMoved(ObservableList sender, int fromPosition, int toPosition, int itemCount) { + notifyDataSetChanged(); + checkIfEmpty(); + } + + @Override + public void onItemRangeRemoved(ObservableList sender, int positionStart, int itemCount) { + notifyDataSetChanged(); + checkIfEmpty(); + } + }; + + + void checkIfEmpty() { + if (mEmptyView != null) { + final boolean emptyViewVisible = getItemCount() == 0; + mEmptyView.setVisibility(emptyViewVisible ? View.VISIBLE : View.GONE); + } + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/viewmodel/RettificaGiacenzeViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/viewmodel/RettificaGiacenzeViewModel.java index 45d5eb32..d32329c7 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/viewmodel/RettificaGiacenzeViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/viewmodel/RettificaGiacenzeViewModel.java @@ -1,38 +1,81 @@ package it.integry.integrywmsnative.gest.rettifica_giacenze.viewmodel; +import android.app.Activity; import android.app.ProgressDialog; -import android.content.Context; +import android.content.res.Resources; import android.databinding.ObservableArrayList; import android.databinding.ObservableField; +import android.support.annotation.NonNull; +import android.support.design.widget.BottomSheetBehavior; +import android.support.design.widget.TextInputLayout; +import android.support.v4.content.ContextCompat; +import android.support.v7.widget.DividerItemDecoration; +import android.support.v7.widget.LinearLayoutManager; import android.text.SpannableString; -import android.view.KeyEvent; +import android.view.View; import android.view.inputmethod.EditorInfo; -import android.widget.TextView; +import com.annimon.stream.Stream; + +import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; +import it.integry.integrywmsnative.MainActivity; import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.REST.CommonRESTException; +import it.integry.integrywmsnative.core.REST.consumers.ColliMagazzinoRESTConsumer; +import it.integry.integrywmsnative.core.REST.consumers.ISimpleOperationCallback; +import it.integry.integrywmsnative.core.REST.consumers.PrinterRESTConsumer; +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.IRecyclerItemClicked; +import it.integry.integrywmsnative.core.model.CommonModelConsts; +import it.integry.integrywmsnative.core.model.MtbAart; +import it.integry.integrywmsnative.core.model.MtbColr; +import it.integry.integrywmsnative.core.model.MtbCols; import it.integry.integrywmsnative.core.model.MtbColt; +import it.integry.integrywmsnative.core.report.ReportManager; +import it.integry.integrywmsnative.core.settings.SettingsManager; +import it.integry.integrywmsnative.core.utility.UtilityBarcode; import it.integry.integrywmsnative.core.utility.UtilityExceptions; +import it.integry.integrywmsnative.core.utility.UtilityLogger; +import it.integry.integrywmsnative.core.utility.UtilityNumber; import it.integry.integrywmsnative.core.utility.UtilityProgress; import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.databinding.FragmentMainRettificaGiacenzeBinding; import it.integry.integrywmsnative.gest.rettifica_giacenze.core.RettificaGiacenzeHelper; import it.integry.integrywmsnative.gest.rettifica_giacenze.core.adapter.AutoCompleteFornitoreAdapter; +import it.integry.integrywmsnative.gest.rettifica_giacenze.core.adapter.RettificaGiacenzeMainListAdapter; import it.integry.integrywmsnative.gest.rettifica_giacenze.dto.FornitoreDTO; +import it.integry.integrywmsnative.ui.StatusBarAlert; import it.integry.integrywmsnative.view.dialogs.DialogSimpleMessageHelper; +import it.integry.integrywmsnative.view.dialogs.choose_art_from_lista_arts.DialogChooseArtFromListaArt; +import it.integry.integrywmsnative.view.dialogs.input_quantity.DialogInputQuantity; +import it.integry.integrywmsnative.view.dialogs.input_quantity.QuantityDTO; +import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCreateLU; +import it.integry.plugins.barcode_base_library.model.BarcodeScanDTO; +import it.integry.plugins.barcode_base_library.model.BarcodeType; +import kotlin.NotImplementedError; -public class RettificaGiacenzeViewModel { +public class RettificaGiacenzeViewModel implements IRecyclerItemClicked { - private Context mContext; + private Activity mContext; private FragmentMainRettificaGiacenzeBinding mBinding; + private BottomSheetBehavior mBottomSheetBehavior; + private RettificaGiacenzeHelper mHelper; + private RettificaGiacenzeMainListAdapter mAdapter; - private ObservableField mtbColt = new ObservableField<>(); + public ObservableField mtbColt = new ObservableField<>(); + public BindableBoolean isFabVisible = new BindableBoolean(); + public BindableBoolean isMtbColtLoaded = new BindableBoolean(); - public void init(Context context, FragmentMainRettificaGiacenzeBinding binding, RettificaGiacenzeHelper helper) { + + + public void init(Activity context, FragmentMainRettificaGiacenzeBinding binding, RettificaGiacenzeHelper helper) { mContext = context; mBinding = binding; mHelper = helper; @@ -40,8 +83,86 @@ public class RettificaGiacenzeViewModel { public void setMtbColt(MtbColt mtbColt) { this.mtbColt.set(mtbColt); + + isFabVisible.set(mtbColt != null); + isMtbColtLoaded.set(mtbColt != null); + + if(this.mtbColt.get().getMtbColr() == null) this.mtbColt.get().setMtbColr(new ObservableArrayList<>()); + + initRecyclerView(); + initBottomSheetActions(); } + public void resetMtbColt(boolean openNew) { + this.mtbColt.set(null); + isFabVisible.set(false); + isMtbColtLoaded.set(false); + mBinding.rettificaGiacenzeMainList.setAdapter(null); + + if(openNew) openLU(); + } + + + private void initRecyclerView() { + mBinding.rettificaGiacenzeMainList.setNestedScrollingEnabled(false); + + mBinding.rettificaGiacenzeMainList.setHasFixedSize(true); + + mBinding.rettificaGiacenzeMainList.setLayoutManager(new LinearLayoutManager(mContext)); + + DividerItemDecoration itemDecorator = new DividerItemDecoration(mContext, DividerItemDecoration.VERTICAL); + itemDecorator.setDrawable(ContextCompat.getDrawable(mContext, R.drawable.divider)); + mBinding.rettificaGiacenzeMainList.addItemDecoration(itemDecorator); + + mAdapter = new RettificaGiacenzeMainListAdapter(mContext, mtbColt.get().getMtbColr(), this, mBinding.rettificaGiacenzeEmptyView); + mBinding.rettificaGiacenzeMainList.setAdapter(mAdapter); + } + + private void initBottomSheetActions() { + mBinding.bg.setOnClickListener(v -> mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED)); + + mBottomSheetBehavior = BottomSheetBehavior.from(mBinding.bottomSheetActions); + + mBottomSheetBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() { + @Override + public void onStateChanged(@NonNull View bottomSheet, int newState) { + if (newState == BottomSheetBehavior.STATE_COLLAPSED) + mBinding.bg.setVisibility(View.GONE); + } + + @Override + public void onSlide(@NonNull View bottomSheet, float slideOffset) { + mBinding.bg.setVisibility(View.VISIBLE); + mBinding.bg.setAlpha(slideOffset); + } + }); + } + + public RunnableArgs onScanSuccessfull = data -> { + + BarcodeManager.disable(); + + if(data.getType() == BarcodeType.EAN8 || data.getType() == BarcodeType.EAN13 || data.getType() == BarcodeType.UPCA){ + searchArtInt(data.getStringValue()); + } else { + BarcodeManager.enable(); + } + + /* + if(UtilityBarcode.isEtichettaAnonima(data) && !thereIsAnOpenedUL()){ + this.executeEtichettaAnonima(data, progressDialog); + } else if(data.getType() == BarcodeType.EAN128) { + this.executeEtichettaEan128(data, progressDialog); + } else if(UtilityBarcode.isEanPeso(data)){ + this.executeEtichettaEanPeso(data, progressDialog); + } else { + this.loadArticolo(data.getStringValue(), null, progressDialog); + } + */ + + }; + + public void setupSearchFornitori(ArrayList listaFornitori) { AutoCompleteFornitoreAdapter autoCompleteFornitoreAdapter = new AutoCompleteFornitoreAdapter(mContext, listaFornitori); mBinding.autoCompleteFornitori.setAdapter(autoCompleteFornitoreAdapter); @@ -49,8 +170,14 @@ public class RettificaGiacenzeViewModel { mBinding.inputCodArtDescrForn.setOnEditorActionListener((v, actionId, event) -> { if (actionId == EditorInfo.IME_ACTION_DONE) { + resetAllError(); if(UtilityString.isNullOrEmpty(mBinding.autoCompleteFornitori.getText().toString())) { - showNoFornSelected(); + setError(mBinding.autoCompleteFornitoriLayout, mContext.getResources().getText(R.string.error).toString()); + return true; + } + + if(UtilityString.isNullOrEmpty(mBinding.inputCodArtDescrForn.getText().toString())) { + setError(mBinding.layoutCodArtDescrForn, mContext.getResources().getText(R.string.error).toString()); return true; } @@ -61,12 +188,45 @@ public class RettificaGiacenzeViewModel { } return false; }); + + + mBinding.inputCodArtDescrInt.setOnEditorActionListener((v, actionId, event) -> { + if (actionId == EditorInfo.IME_ACTION_DONE) { + resetAllError(); + + if(UtilityString.isNullOrEmpty(mBinding.inputCodArtDescrInt.getText().toString())) { + setError(mBinding.layoutCodArtDescrInt, mContext.getResources().getText(R.string.error).toString()); + return true; + } + + searchArtInt(mBinding.inputCodArtDescrInt.getText().toString()); + return true; + } + return false; + }); } - private void showNoFornSelected() { - DialogSimpleMessageHelper.makeWarningDialog(mContext, - new SpannableString(mContext.getResources().getText(R.string.no_supplier_selected)), - null, null).show(); + + private void setError(TextInputLayout textInputLayout, String message){ + textInputLayout.setErrorEnabled(true); + textInputLayout.setError(message); + } + + private void resetAllError() { + resetError(mBinding.autoCompleteFornitoriLayout); + resetError(mBinding.layoutCodArtDescrForn); + resetError(mBinding.layoutCodArtDescrInt); + } + + private void resetTexts() { + //mBinding.autoCompleteFornitori.setText(""); + mBinding.inputCodArtDescrForn.setText(""); + mBinding.inputCodArtDescrInt.setText(""); +} + + private void resetError(TextInputLayout textInputLayout) { + textInputLayout.setErrorEnabled(false); + textInputLayout.setError(null); } private void searchArtFor(String codAlis, String queryText) { @@ -75,7 +235,342 @@ public class RettificaGiacenzeViewModel { mHelper.searchArtForn(codAlis, queryText, listaArts -> { progressDialog.dismiss(); + + List mtbAarts = Stream.of(listaArts).map(x -> (MtbAart) x).toList(); + + dispatchArtsList(mtbAarts); }, ex -> UtilityExceptions.defaultException(mContext, ex, progressDialog)); } + private void searchArtInt(String queryText) { + final ProgressDialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext); + progressDialog.show(); + + mHelper.searchArtInt(queryText, listaArts -> { + progressDialog.dismiss(); + BarcodeManager.enable(); + dispatchArtsList(listaArts); + }, ex -> { + UtilityExceptions.defaultException(mContext, ex, progressDialog); + BarcodeManager.enable(); + }); + } + + + private void dispatchArtsList(List articoloFornitoreDTOS){ + + if(articoloFornitoreDTOS != null){ + if(articoloFornitoreDTOS.size() == 0) { + showNoArtsFound(); + } else if(articoloFornitoreDTOS.size() == 1) { + dispatchArt(articoloFornitoreDTOS.get(0)); + } else { + DialogChooseArtFromListaArt.makeBase(mContext, articoloFornitoreDTOS, this::dispatchArt).show(); + } + } else { + showNoArtsFound(); + } + } + + private void showNoArtsFound() { + DialogSimpleMessageHelper.makeWarningDialog(mContext, + new SpannableString(mContext.getResources().getText(R.string.no_items_found_message)), + null, null).show(); + } + + + private void dispatchArt(MtbAart mtbAart){ + DialogInputQuantity.DTO qtaDto = new DialogInputQuantity.DTO(); + + qtaDto.setMtbAart(mtbAart); + + qtaDto.setQtaCnf(mtbAart.qtaCnf); + qtaDto.setNumCnf(1); + qtaDto.setQtaTot(mtbAart.qtaCnf); + + qtaDto.setQtaDaEvadere(new BigDecimal(-1)); + + qtaDto.setCanPartitaMagBeChanged(true); + qtaDto.setCanDataScadBeChanged(true); + +/* + if(ean128Model != null){ + if(!UtilityString.isNullOrEmpty(ean128Model.BatchLot)){ + qtaDto.partitaMag = ean128Model.BatchLot; + qtaDto.canPartitaMagBeChanged = false; + } + + let dataScad = ean128Model.BestBefore || ean128Model.Expiry; + if(dataScad != null){ + qtaDto.shouldAskDataScad = true; + qtaDto.dataScad = moment(dataScad, "DD/MM/YYYY HH:mm:ss").format("YYYY-MM-DD"); + qtaDto.canDataScadBeChanged = false; + } + + if(ean128Model.NetWeightKg != null) { + qtaDto.qtaTot = ean128Model.NetWeightKg; + qtaDto.qtaPerCnf = ean128Model.NetWeightKg; + qtaDto.numDiCnf = 1; + } + + if(ean128Model.Count != null){ + qtaDto.qtaTot = ean128Model.Count; + qtaDto.numDiCnf = qtaDto.qtaTot / qtaDto.qtaPerCnf; + } + } +*/ + + DialogInputQuantity.makeBase(mContext, qtaDto, true, (quantityDTO) -> { + onPostDispatch(mtbAart, quantityDTO); + }).show(); + } + + + + private void onPostDispatch(MtbAart mtbAart, QuantityDTO quantityDTO) { + + final ProgressDialog progress = ProgressDialog.show(mContext, mContext.getText(R.string.waiting), + mContext.getText(R.string.loading) + " ...", true); + + final MtbColr mtbColr = new MtbColr() + .setCodMart(mtbAart.codMart) + .setPartitaMag(quantityDTO.batchLot.get()) + .setDataScadPartita(quantityDTO.expireDate) + .setQtaCol(new BigDecimal(quantityDTO.qtaTot.get())) + .setDescrizione(mtbAart.descrizioneEstesa); + + mtbColr.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE); + + MtbColt cloneMtbColt = (MtbColt) mtbColt.get().clone(); + cloneMtbColt.setOperation(CommonModelConsts.OPERATION.NO_OP); + + cloneMtbColt.setMtbColr(new ObservableArrayList()); + cloneMtbColt.getMtbColr().add(mtbColr); + + ColliMagazzinoRESTConsumer.saveCollo(cloneMtbColt, new ISimpleOperationCallback() { + @Override + public void onSuccess(MtbColt value) { + + mtbColr + .setDataCollo(value.getDataColloS()) + .setNumCollo(value.getNumCollo()) + .setGestione(value.getGestione()) + .setSerCollo(value.getSerCollo()) + .setRiga(value.getMtbColr().get(0).getRiga()) + .setUntMis(mtbAart.untMis) + .setMtbAart(mtbAart); + + mtbColt.get().getMtbColr().add(mtbColr); + + new StatusBarAlert.Builder(mContext) + .autoHide(true) + .withDuration(2500) + .showProgress(false) + .withText(R.string.data_saved) + .withAlertColor(R.color.mainGreen) + .build(); + + resetTexts(); + progress.dismiss(); + } + + @Override + public void onFailed(Exception ex) { + UtilityExceptions.defaultException(mContext, ex, progress); + } + }); + + } + + + + + @Override + public void onItemClick(MtbColr item, int position) { + /* + mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED); + + MtbColr clickedItem = mtbColt.get().getMtbColr().get(position); + + mBinding.bottomSheetActionsTitle.setText(clickedItem.getDescrizione()); + mBinding.bottomSheetActionsSubtitle.setText(clickedItem.getCodMart()); + + mBinding.bottomSheetActionsEditBtn.setOnClickListener(v -> onItemEdit(position)); + + mBinding.bottomSheetActionsDeleteBtn.setOnClickListener(v -> onItemDelete(position)); + + mBinding.bottomSheetActionsQuantity.setText(UtilityNumber.decimalToString(clickedItem.getQtaCol()) + " " + clickedItem.getUntMis()); + */ + + + } + + public void openLU() { + DialogScanOrCreateLU.makeBase(mContext, mtbColt -> { + if(mtbColt == null) { + ((MainActivity)mContext).popToMain(); + } else { + setMtbColt(mtbColt); + } + }).show(); + } + + public boolean thereIsAnOpenedUL() { + return mtbColt.get() != null; + } + public boolean thereIsAnyRowInUL() { + return mtbColt.get() != null && + mtbColt.get().getMtbColr() != null && + mtbColt.get().getMtbColr().size() > 0; + } + + public void closeLU(boolean openNewOne) { + + final ProgressDialog progress = ProgressDialog.show(mContext, mContext.getText(R.string.waiting), + mContext.getText(R.string.loading) + " ...", true); + + if(thereIsAnyRowInUL()){ + + if(!UtilityString.isNullOrEmpty(SettingsManager.iDB().getDefaultCausaleRettificaGiacenze())) { + + progress.show(); + saveCausaleRettificaGiacenze(progress, () -> { + if(!mtbColt.get().getDisablePrint()){ + printCollo(progress); + } else { + progress.dismiss(); + resetMtbColt(openNewOne); + } + }); + } else { + if(!mtbColt.get().getDisablePrint()){ + progress.show(); + printCollo(progress); + } else { + resetMtbColt(openNewOne); + } + } + } else { + progress.show(); + ColliMagazzinoRESTConsumer.deleteCollo(mtbColt.get(), () -> { + progress.dismiss(); + resetMtbColt(openNewOne); + }, ex -> UtilityExceptions.defaultException(mContext, ex, progress)); + + } + } + + private void saveCausaleRettificaGiacenze(ProgressDialog progress, Runnable onComplete) { + + final MtbCols mtbCols = new MtbCols() + .setCausale(SettingsManager.iDB().getDefaultCausaleRettificaGiacenze()); + mtbCols.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE); + + MtbColt cloneMtbColt = (MtbColt) mtbColt.get().clone(); + cloneMtbColt.setOperation(CommonModelConsts.OPERATION.NO_OP); + + cloneMtbColt.setMtbCols(new ArrayList<>()); + cloneMtbColt.getMtbCols().add(mtbCols); + + ColliMagazzinoRESTConsumer.saveCollo(cloneMtbColt, new ISimpleOperationCallback() { + @Override + public void onSuccess(MtbColt value) { + onComplete.run(); + } + + @Override + public void onFailed(Exception ex) { + UtilityExceptions.defaultException(mContext, ex, progress); + } + }); + } + + + public void printCollo(ProgressDialog progress) { + + this.showAskPrint(shouldPrint -> { + + if(shouldPrint) { + PrinterRESTConsumer.getAvailablePrinters(SettingsManager.i().userSession.depo.getCodMdep(), new ISimpleOperationCallback>() { + @Override + public void onSuccess(List value) { + + if (value.size() > 0) { + + try { + ReportManager.getRightReportNameByMtbColt(mtbColt.get(), reportName -> { + + PrinterRESTConsumer.printCollo(value.get(0), + mtbColt.get(), + 1, + reportName, + () -> { + progress.dismiss(); + resetMtbColt(true); + + Resources res = mContext.getResources(); + String errorMessage = res.getText(R.string.alert_print_completed_message).toString(); + DialogSimpleMessageHelper.makeSuccessDialog(mContext, res.getText(R.string.completed).toString(), new SpannableString(errorMessage), null, null).show(); + }, ex -> { + UtilityLogger.errorMe(ex); + progress.dismiss(); + String errorMessage = CommonRESTException.tryRecognizeThenGetMessage(ex); + showPrintErrorDialog(errorMessage); + }); + + }, ex -> { + UtilityLogger.errorMe(ex); + progress.dismiss(); + String errorMessage = CommonRESTException.tryRecognizeThenGetMessage(ex); + showPrintErrorDialog(errorMessage); + }); + } catch (Exception ex) { + progress.dismiss(); + UtilityLogger.errorMe(ex); + String errorMessage = CommonRESTException.tryRecognizeThenGetMessage(ex); + showPrintErrorDialog(errorMessage); + } + + } else { + progress.dismiss(); + String errorMessage = "Nessuna stampante configurata"; + showPrintErrorDialog(errorMessage); + } + } + + @Override + public void onFailed(Exception ex) { + progress.dismiss(); + UtilityLogger.errorMe(ex); + String errorMessage = CommonRESTException.tryRecognizeThenGetMessage(ex); + showPrintErrorDialog(errorMessage); + } + }); + } else { + resetMtbColt(true); + } + + }); + } + + + private void showAskPrint(RunnableArgs onComplete) { + DialogSimpleMessageHelper.makeInfoDialog( + mContext, + mContext.getResources().getString(R.string.action_print_ul), + new SpannableString(mContext.getResources().getString(R.string.ask_print_message)), + null, + () -> onComplete.run(true), + () -> onComplete.run(false)).show(); + } + + private void showPrintErrorDialog(String message) { + DialogSimpleMessageHelper.makeErrorDialog( + mContext, + new SpannableString(message), + null, + null, + R.string.button_ignore_print, + () -> resetMtbColt(true)).show(); + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/viewmodel/VenditaOrdineInevasoViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/viewmodel/VenditaOrdineInevasoViewModel.java index 84d893e1..7a85f9ef 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/viewmodel/VenditaOrdineInevasoViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/viewmodel/VenditaOrdineInevasoViewModel.java @@ -584,12 +584,8 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO progress.show(); MtbColt mtbColt = new MtbColt(); - mtbColt .setDataCollo(new Date()) - .setGestione(defaultGestioneOfUL) + mtbColt .setGestione(defaultGestioneOfUL) .setSegno(-1) - .setCodMdep(SettingsManager.i().userSession.depo.getCodMdep()) - .setPreparatoDa(SettingsManager.i().user.fullname) - .setOraInizPrep(new Date()) .setRifOrd(defaultRifOrdOfUL) .setNumOrd(defaultNumOrdOfUL) .setDataOrdD(defaultDataOrdOfUL) diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/DialogSimpleMessageHelper.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/DialogSimpleMessageHelper.java index c11f0e68..132fd247 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/DialogSimpleMessageHelper.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/DialogSimpleMessageHelper.java @@ -138,6 +138,17 @@ public class DialogSimpleMessageHelper { } + public static AlertDialog makeInfoDialog(Context mContext, String titleText, Spanned messageText, HashMap hashmapContent, Runnable onPositiveClick, Runnable onNegativeClick){ + return makeBase(TYPE.INFO, + mContext, + titleText, + messageText, + hashmapContent, + onPositiveClick, + onNegativeClick, -1, null); + } + + public static AlertDialog makeSuccessDialog(Context mContext, String titleText, Spanned messageText, HashMap hashmapContent, Runnable onPositiveClick){ return makeBase(TYPE.SUCCESS, mContext, @@ -174,7 +185,7 @@ public class DialogSimpleMessageHelper { return makeBase(TYPE.ERROR, mContext, - mContext.getText(R.string.error).toString(), + mContext.getText(R.string.ops).toString(), messageText, hashmapContent, onPositiveClick, @@ -185,7 +196,7 @@ public class DialogSimpleMessageHelper { return makeBase(TYPE.ERROR, mContext, - mContext.getText(R.string.error).toString(), + mContext.getText(R.string.ops).toString(), messageText, hashmapContent, onPositiveClick, diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_arts/DialogChooseArtFromListaArt.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_arts/DialogChooseArtFromListaArt.java new file mode 100644 index 00000000..0fb08207 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_arts/DialogChooseArtFromListaArt.java @@ -0,0 +1,74 @@ +package it.integry.integrywmsnative.view.dialogs.choose_art_from_lista_arts; + +import android.content.Context; +import android.databinding.DataBindingUtil; +import android.support.v4.content.ContextCompat; +import android.support.v7.app.AlertDialog; +import android.support.v7.widget.DividerItemDecoration; +import android.support.v7.widget.LinearLayoutManager; +import android.view.LayoutInflater; + +import java.util.List; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.interfaces.IRecyclerItemClicked; +import it.integry.integrywmsnative.core.model.MtbAart; +import it.integry.integrywmsnative.core.model.MtbAartWithFornitore; +import it.integry.integrywmsnative.databinding.DialogChooseArtFromListaArtBinding; + +public class DialogChooseArtFromListaArt { + + + private static Context currentContext; + private static AlertDialog currentAlert; + + private static DialogChooseArtFromListaArtAdapter currentAdapter; + + private static RunnableArgs mOnItemChoosed; + + public static AlertDialog makeBase(final Context context, List listaArts, RunnableArgs onItemChoosed) { + currentContext = context; + mOnItemChoosed = onItemChoosed; + + LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE ); + DialogChooseArtFromListaArtBinding binding = DataBindingUtil.inflate(inflater, R.layout.dialog_choose_art_from_lista_art, null, false); + + + final AlertDialog.Builder alertDialog = new AlertDialog.Builder(context) + .setView(binding.getRoot()) + .setPositiveButton(context.getText(R.string.confirm), null) + .setNegativeButton(context.getText(R.string.abort), null); + + currentAlert = alertDialog.create(); + currentAlert.setCanceledOnTouchOutside(false); + + initRecyclerView(binding, listaArts); + + return currentAlert; + } + + private static void initRecyclerView(DialogChooseArtFromListaArtBinding binding, List dataset) { + binding.dialogChooseArtFromListaArtMainList.setNestedScrollingEnabled(false); + + binding.dialogChooseArtFromListaArtMainList.setHasFixedSize(true); + + binding.dialogChooseArtFromListaArtMainList.setLayoutManager(new LinearLayoutManager(currentContext)); + + DividerItemDecoration itemDecorator = new DividerItemDecoration(currentContext, DividerItemDecoration.VERTICAL); + itemDecorator.setDrawable(ContextCompat.getDrawable(currentContext, R.drawable.divider)); + binding.dialogChooseArtFromListaArtMainList.addItemDecoration(itemDecorator); + + currentAdapter = new DialogChooseArtFromListaArtAdapter(currentContext, dataset, onItemClicked); + binding.dialogChooseArtFromListaArtMainList.setAdapter(currentAdapter); + } + + private static IRecyclerItemClicked onItemClicked = (item, position) -> { + if(mOnItemChoosed != null) { + mOnItemChoosed.run(item); + } + + currentAlert.dismiss(); + }; + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_arts/DialogChooseArtFromListaArtAdapter.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_arts/DialogChooseArtFromListaArtAdapter.java new file mode 100644 index 00000000..ac510075 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_arts/DialogChooseArtFromListaArtAdapter.java @@ -0,0 +1,77 @@ +package it.integry.integrywmsnative.view.dialogs.choose_art_from_lista_arts; + +import android.content.Context; +import android.databinding.DataBindingUtil; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.ViewGroup; + +import java.util.List; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.interfaces.IRecyclerItemClicked; +import it.integry.integrywmsnative.core.model.MtbAart; +import it.integry.integrywmsnative.core.model.MtbAartWithFornitore; +import it.integry.integrywmsnative.databinding.DialogChooseArtFromListaArtItemModelBinding; + +public class DialogChooseArtFromListaArtAdapter extends RecyclerView.Adapter { + + protected Context mContext; + + private List mDataset; + private IRecyclerItemClicked mOnItemClickListener; + + public static class ViewHolder extends RecyclerView.ViewHolder { + protected DialogChooseArtFromListaArtItemModelBinding mViewDataBinding; + + + public ViewHolder(DialogChooseArtFromListaArtItemModelBinding v) { + super(v.getRoot()); + mViewDataBinding = v; + } + + public void bind(MtbAart mtbAart) { + mViewDataBinding.setMtbAart(mtbAart); + mViewDataBinding.executePendingBindings(); + } + } + + public DialogChooseArtFromListaArtAdapter(Context context, List myDataset, IRecyclerItemClicked onItemClickListener) { + mContext = context; + mDataset = myDataset; + mOnItemClickListener = onItemClickListener; + } + + @Override + public DialogChooseArtFromListaArtAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + // create a new view + DialogChooseArtFromListaArtItemModelBinding viewDataBinding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), R.layout.dialog_choose_art_from_lista_art__item_model, parent, false); + + return new ViewHolder(viewDataBinding); + } + + @Override + public void onBindViewHolder(DialogChooseArtFromListaArtAdapter.ViewHolder holder, int position) { + MtbAart item = mDataset.get(position); + holder.bind(item); + + holder.mViewDataBinding.getRoot().setOnClickListener(x -> { + if(mOnItemClickListener != null) { + mOnItemClickListener.onItemClick(item, position); + } + }); + } + + @Override + public void onViewRecycled(DialogChooseArtFromListaArtAdapter.ViewHolder holder) { + super.onViewRecycled(holder); + } + + @Override + public int getItemCount() { + return mDataset.size(); + } + + + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity/DialogInputQuantity.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity/DialogInputQuantity.java index f513d1e4..4b735691 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity/DialogInputQuantity.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity/DialogInputQuantity.java @@ -17,6 +17,7 @@ import android.text.Html; import android.text.SpannableString; import android.util.Log; import android.view.LayoutInflater; +import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.Button; import android.widget.EditText; @@ -199,22 +200,25 @@ public class DialogInputQuantity { private static AlertDialog currentAlert; private static Context currentContext; + private static DialogInputQuantityArticoloBinding currentBinding; + private static MtbAart currentMtbAart; private static QuantityDTO currentQuantityDto; + private static DTO currentDTO; public static AlertDialog makeBase(final Context context, final DTO dto, boolean canOverflowQuantity, final ISingleValueOperationCallback dialogCallback) { currentContext = context; currentMtbAart = dto.getMtbAart(); + currentDTO = dto; LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE ); + currentBinding = DataBindingUtil.inflate(inflater, R.layout.dialog_input_quantity_articolo, null, false); - DialogInputQuantityArticoloBinding contentView = DataBindingUtil.inflate(inflater, R.layout.dialog_input_quantity_articolo, null, false); + final TextInputLayout txlInputBatchLot = currentBinding.inputPartitaMag; - final TextInputLayout txlInputBatchLot = contentView.inputPartitaMag; - - final TextInputLayout txlInputNumDiCnf = contentView.inputNumCnf; - final TextInputLayout txlInputQtaPerCnf = contentView.inputQtaCnf; - final TextInputLayout txlInputQtaTot = contentView.inputQtaTot; + final TextInputLayout txlInputNumDiCnf = currentBinding.inputNumCnf; + final TextInputLayout txlInputQtaPerCnf = currentBinding.inputQtaCnf; + final TextInputLayout txlInputQtaTot = currentBinding.inputQtaTot; txlInputNumDiCnf.getEditText().setSelectAllOnFocus(true); txlInputQtaPerCnf.getEditText().setSelectAllOnFocus(true); @@ -230,11 +234,11 @@ public class DialogInputQuantity { setupQuantityListener(currentQuantityDto, txlInputNumDiCnf, txlInputQtaPerCnf, txlInputQtaTot); - contentView.setViewmodel(dto); - contentView.setQuantityViewModel(currentQuantityDto); + currentBinding.setViewmodel(dto); + currentBinding.setQuantityViewModel(currentQuantityDto); final AlertDialog.Builder alertDialog = new AlertDialog.Builder(context) - .setView(contentView.getRoot()) + .setView(currentBinding.getRoot()) .setPositiveButton(context.getText(R.string.confirm), null) .setNegativeButton(context.getText(R.string.abort), null); @@ -265,7 +269,7 @@ public class DialogInputQuantity { }); - initDatePicker(context, currentQuantityDto, contentView.getRoot().findViewById(R.id.input_data_scad)); + initDatePicker(context, currentQuantityDto, currentBinding.getRoot().findViewById(R.id.input_data_scad)); setupBarcode(context); @@ -278,7 +282,10 @@ public class DialogInputQuantity { if(dto.getMaxQta() != null) quantityDTO.maxQta = dto.getMaxQta().floatValue(); float qtaDaEvadere = dto.qtaDaEvadere != null ? dto.qtaDaEvadere.floatValue() : 0f; - if (qtaDaEvadere < 0) qtaDaEvadere = 0; + if (qtaDaEvadere < 0) { + currentBinding.layoutQtaDaEvadere.setVisibility(View.GONE); + qtaDaEvadere = 0; + } quantityDTO.qtaEvasa.set(dto.qtaEvasa != null ? dto.qtaEvasa.floatValue() : null); if(qtaDaEvadere > 0) quantityDTO.qtaDaEvadere.set(qtaDaEvadere); @@ -592,7 +599,11 @@ public class DialogInputQuantity { private static void onConfirm(Context context, QuantityDTO quantityDTO, ISingleValueOperationCallback dialogCallback){ - if(quantityDTO.shouldAskDataScad.get() && (quantityDTO.batchLot == null || quantityDTO.batchLot.get().trim().length() == 0)){ + if(currentDTO.mtbAart.isFlagTracciabilita() && (quantityDTO.batchLot == null || quantityDTO.batchLot.get().trim().length() == 0)){ + + showBatchLotErrorPrompt(context); + + } else if(quantityDTO.shouldAskDataScad.get() && (quantityDTO.batchLot == null || quantityDTO.batchLot.get().trim().length() == 0)){ showBatchLotErrorPrompt(context); diff --git a/app/src/main/res/layout/dialog_choose_art_from_lista_art.xml b/app/src/main/res/layout/dialog_choose_art_from_lista_art.xml new file mode 100644 index 00000000..beb1be65 --- /dev/null +++ b/app/src/main/res/layout/dialog_choose_art_from_lista_art.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_choose_art_from_lista_art__item_model.xml b/app/src/main/res/layout/dialog_choose_art_from_lista_art__item_model.xml new file mode 100644 index 00000000..1237983f --- /dev/null +++ b/app/src/main/res/layout/dialog_choose_art_from_lista_art__item_model.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_input_quantity_articolo.xml b/app/src/main/res/layout/dialog_input_quantity_articolo.xml index c404f734..c15d2752 100644 --- a/app/src/main/res/layout/dialog_input_quantity_articolo.xml +++ b/app/src/main/res/layout/dialog_input_quantity_articolo.xml @@ -135,6 +135,7 @@ diff --git a/app/src/main/res/layout/fragment_main_rettifica_giacenze.xml b/app/src/main/res/layout/fragment_main_rettifica_giacenze.xml index ebb3e225..c84c51e4 100644 --- a/app/src/main/res/layout/fragment_main_rettifica_giacenze.xml +++ b/app/src/main/res/layout/fragment_main_rettifica_giacenze.xml @@ -6,6 +6,8 @@ + + + android:background="@color/empty_view_bg_gray" + tools:context=".gest.rettifica_giacenze.RettificaGiacenzeFragment" + android:clipToPadding="false"> - + android:layout_height="match_parent"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + android:background="#fff" + android:orientation="vertical" + android:padding="16dp" + android:layout_gravity="bottom" + app:behavior_hideable="true" + app:behavior_peekHeight="0dp" + app:layout_behavior="android.support.design.widget.BottomSheetBehavior"> + android:layout_height="wrap_content" + android:orientation="horizontal" + android:layout_gravity="center_vertical"> + + + + + + + + + + + + + + + app:layout_constraintGuide_percent="0.50" /> - - + android:gravity="center"> - + android:padding="16dp" + android:background="@android:color/white" + android:scaleX="1.5" + android:scaleY="1.5" + android:src="@drawable/ic_edit_24dp" + android:tint="@color/green_600" /> - + - + + + android:orientation="vertical" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="@id/guideline_action" + android:gravity="center"> - + android:padding="16dp" + android:background="@android:color/white" + android:scaleX="1.5" + android:scaleY="1.5" + android:src="@drawable/ic_delete_24dp" + android:tint="@color/red_600" /> + - - + + + - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/app/src/main/res/layout/lista_rettifica_giacenze_model.xml b/app/src/main/res/layout/lista_rettifica_giacenze_model.xml new file mode 100644 index 00000000..2d991294 --- /dev/null +++ b/app/src/main/res/layout/lista_rettifica_giacenze_model.xml @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 848b2699..6627744e 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -13,7 +13,8 @@ Ordini di accettazione Spedizione Rettifica giacenze - Ops + Errore + Ops Attenzione OK Annulla @@ -122,6 +123,7 @@ Nessuna UL registrata a magazzino Nessun articolo da prelevare + Nessun articolo Il barcode scansionato non ha fornito alcun risultato @@ -131,6 +133,7 @@ Filtro avanzato + Seleziona un articolo Fornitore Cod art / Descrizione @@ -139,4 +142,7 @@ Numero ordine Cliente + Nessun articolo trovato + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 79ecb987..854c17e9 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -20,6 +20,7 @@ #bdbdbd + #f5f5f5 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e7d7ed3e..5a958a6d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -22,7 +22,8 @@ Multiple acceptance orders Check out Inventory - Ops + Error + Ops Warning OK Abort @@ -130,6 +131,7 @@ No LU already registered No items to pick + No items The scanned label has already been used The scanned barcode did not produce any results @@ -138,6 +140,7 @@ Remove filter Advanced filter + Choose item Supplier @@ -148,4 +151,7 @@ Orders number Customer + No items found + Do you want print the label? +