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 b6bd2792..c58d016e 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 @@ -1,11 +1,19 @@ package it.integry.integrywmsnative.core.REST.consumers; +import com.google.gson.JsonObject; + +import it.integry.integrywmsnative.core.REST.RESTBuilder; +import it.integry.integrywmsnative.core.REST.model.DistribuzioneColloDTO; +import it.integry.integrywmsnative.core.REST.model.ServiceRESTResponse; import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.model.CommonModelConsts; import it.integry.integrywmsnative.core.model.MtbColr; import it.integry.integrywmsnative.core.model.MtbColt; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; -public class ColliMagazzinoRESTConsumer { +public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer{ public static void saveCollo(MtbColt mtbColtToSave, final ISimpleOperationCallback callback){ @@ -32,6 +40,32 @@ public class ColliMagazzinoRESTConsumer { } + + public static void distribuisciCollo(MtbColt mtbColtToDistribute, Runnable onComplete, RunnableArgs onFailed) { + + DistribuzioneColloDTO distribuzioneColloDTO = new DistribuzioneColloDTO() + .setCriterioDistribuzione(DistribuzioneColloDTO.CriterioDistribuzione.UPDATE) + .setDataCollo(mtbColtToDistribute.getDataColloS()) + .setNumCollo(mtbColtToDistribute.getNumCollo()) + .setGestione(mtbColtToDistribute.getGestione()) + .setSerCollo(mtbColtToDistribute.getSerCollo()); + + ColliMagazzinoRESTConsumerService colliMagazzinoRESTConsumerService = RESTBuilder.getService(ColliMagazzinoRESTConsumerService.class); + colliMagazzinoRESTConsumerService.distribuisciCollo(distribuzioneColloDTO) + .enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + analyzeAnswer(response, "GetAvailablePrinters", obj -> onComplete.run(), onFailed); + } + + @Override + public void onFailure(Call> call, Throwable t) { + onFailed.run(new Exception(t)); + } + }); + + } + public static void deleteRiga(MtbColr mtbColrToDelete, Runnable onComplete, RunnableArgs onFailed){ MtbColr newMtbColr = new MtbColr(); @@ -79,4 +113,5 @@ public class ColliMagazzinoRESTConsumer { + } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ColliMagazzinoRESTConsumerService.java b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ColliMagazzinoRESTConsumerService.java new file mode 100644 index 00000000..d30493f4 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ColliMagazzinoRESTConsumerService.java @@ -0,0 +1,17 @@ +package it.integry.integrywmsnative.core.REST.consumers; + +import com.google.gson.JsonObject; + +import it.integry.integrywmsnative.core.REST.model.DistribuzioneColloDTO; +import it.integry.integrywmsnative.core.REST.model.ServiceRESTResponse; +import retrofit2.Call; +import retrofit2.http.Body; +import retrofit2.http.POST; + +public interface ColliMagazzinoRESTConsumerService { + + + @POST("SM2DistribuzioneRigheCollo") + Call> distribuisciCollo(@Body DistribuzioneColloDTO distribuzioneCollo); + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/REST/model/DistribuzioneColloDTO.java b/app/src/main/java/it/integry/integrywmsnative/core/REST/model/DistribuzioneColloDTO.java new file mode 100644 index 00000000..bb84832d --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/REST/model/DistribuzioneColloDTO.java @@ -0,0 +1,83 @@ +package it.integry.integrywmsnative.core.REST.model; + +public class DistribuzioneColloDTO { + + private String gestione; + private String dataCollo; + private Integer numCollo; + private String serCollo; + private String criterioDistribuzione; + + public String getGestione() { + return gestione; + } + + public DistribuzioneColloDTO setGestione(String gestione) { + this.gestione = gestione; + return this; + } + + public String getDataCollo() { + return dataCollo; + } + + public DistribuzioneColloDTO setDataCollo(String dataCollo) { + this.dataCollo = dataCollo; + return this; + } + + public Integer getNumCollo() { + return numCollo; + } + + public DistribuzioneColloDTO setNumCollo(Integer numCollo) { + this.numCollo = numCollo; + return this; + } + + public String getSerCollo() { + return serCollo; + } + + public DistribuzioneColloDTO setSerCollo(String serCollo) { + this.serCollo = serCollo; + return this; + } + + public String getCriterioDistribuzione() { + return criterioDistribuzione; + } + + public CriterioDistribuzione getCriterioDistribuzioneEnum() { + return CriterioDistribuzione.fromString(criterioDistribuzione); + } + + public DistribuzioneColloDTO setCriterioDistribuzione(String criterioDistribuzione) { + this.criterioDistribuzione = criterioDistribuzione; + return this; + } + + public DistribuzioneColloDTO setCriterioDistribuzione(CriterioDistribuzione criterioDistribuzione) { + this.criterioDistribuzione = criterioDistribuzione != null ? criterioDistribuzione.getText() : null; + return this; + } + + public enum CriterioDistribuzione { + UPDATE("U"); //UPDATE COLLO GIA' ESISTENTE + + private String text; + CriterioDistribuzione(String text) { + this.text = text; + } + public String getText() { + return this.text; + } + + public static CriterioDistribuzione fromString(String text) { + for (CriterioDistribuzione b : CriterioDistribuzione.values()) { + if (b.text.equalsIgnoreCase(text)) return b; + } + return null; + } + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColr.java b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColr.java index d5616ad7..e3befab7 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColr.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColr.java @@ -527,8 +527,10 @@ public class MtbColr extends EntityBase implements Parcelable { } public MtbColr setDataScadPartita(Date dataScadPartita) { - SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); - this.dataScadPartita = sdf.format(dataScadPartita); + if(dataScadPartita != null) { + SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); + this.dataScadPartita = sdf.format(dataScadPartita); + } else this.dataScadPartita = null; 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 418878ac..952e7c70 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 @@ -495,6 +495,14 @@ public class MtbColt extends EntityBase implements Parcelable { return this; } + public MtbColt setDataOrdD(Date dataOrd) { + if(dataOrd != null) { + SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); + this.dataOrd = sdf.format(dataOrd); + } else this.dataOrd = null; + return this; + } + public String getDataDoc() { return dataDoc; } @@ -528,6 +536,12 @@ public class MtbColt extends EntityBase implements Parcelable { return this; } + public MtbColt setOraFinePrep(Date oraFinePrep) { + SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); + this.oraFinePrep = sdf.format(oraFinePrep); + return this; + } + public String getDataDocProvv() { return dataDocProvv; } 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 52d196c6..02d5728b 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 @@ -24,7 +24,7 @@ public class ReportManager { break; case VENDITA: - onFailed.run(new Exception("Etichetta non definita")); + onComplete.run("EtichettaSpedizione"); break; } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityString.java b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityString.java index 0032fbbf..eabd9478 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityString.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityString.java @@ -10,4 +10,8 @@ public class UtilityString { return stringToCheck == null || stringToCheck.trim().length() == 0; } + public static String empty2null(String stringToCheck) { + return (stringToCheck != null && stringToCheck.trim().length() == 0 || stringToCheck == null) ? null : stringToCheck.trim(); + } + } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/AccettazioneOrdineInevasoActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/AccettazioneOrdineInevasoActivity.java index 294bd6f3..b2721294 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/AccettazioneOrdineInevasoActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/AccettazioneOrdineInevasoActivity.java @@ -12,18 +12,17 @@ import java.util.List; import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.core.model.MtbColt; -import it.integry.integrywmsnative.core.utility.UtilityLogger; import it.integry.integrywmsnative.databinding.ActivityAccettazioneOrdineInevasoBinding; import it.integry.integrywmsnative.databinding.FragmentArticoliInColloBottomSheetBinding; import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneDTO; -import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.viewmodel.AccettazioneOnOrdineInevasoViewModel; +import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.viewmodel.AccettazioneOnOrdineAccettazioneInevasoViewModel; import it.integry.integrywmsnative.gest.lista_bancali.ListaBancaliActivity; import it.integry.integrywmsnative.view.bottomsheet.viewmodel.ArticoliInColloBottomSheetViewModel; public class AccettazioneOrdineInevasoActivity extends AppCompatActivity { public ActivityAccettazioneOrdineInevasoBinding bindings; - private AccettazioneOnOrdineInevasoViewModel mAccettazioneOrdineInevasoViewModel; + private AccettazioneOnOrdineAccettazioneInevasoViewModel mAccettazioneOrdineInevasoViewModel; private ArticoliInColloBottomSheetViewModel mArticoliInColloBottomSheetViewModel; private static final int PICK_UL_REQUEST = 1; // The request code @@ -37,7 +36,7 @@ public class AccettazioneOrdineInevasoActivity extends AppCompatActivity { mArticoliInColloBottomSheetViewModel = new ArticoliInColloBottomSheetViewModel(this, bindings); List orders = (ArrayList)getIntent().getSerializableExtra("key"); - mAccettazioneOrdineInevasoViewModel = new AccettazioneOnOrdineInevasoViewModel( + mAccettazioneOrdineInevasoViewModel = new AccettazioneOnOrdineAccettazioneInevasoViewModel( this, mArticoliInColloBottomSheetViewModel, orders); setSupportActionBar(this.bindings.toolbar); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/core/AccettazioneOrdineInevasoHelper.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/core/AccettazioneOrdineInevasoHelper.java index 64519347..781cd3aa 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/core/AccettazioneOrdineInevasoHelper.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/core/AccettazioneOrdineInevasoHelper.java @@ -2,6 +2,7 @@ package it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.core; import android.content.Context; import android.databinding.ObservableArrayList; +import android.view.View; import com.annimon.stream.Stream; import com.orhanobut.logger.Logger; @@ -36,8 +37,8 @@ public class AccettazioneOrdineInevasoHelper { mContext = context; } - public MainListOrdineAccettazioneAdapter getRightListAdapter() { - return new MainListOrdineAccettazioneAdapter(mContext, mListViewModels); + public MainListOrdineAccettazioneAdapter getRightListAdapter(View emptyView) { + return new MainListOrdineAccettazioneAdapter(mContext, mListViewModels, emptyView); } public void updateListModel(AccettazioneOrdineInevasoOrderBy.Enum orderByEnum, List> mDataset, List mtbColrs) throws Exception { @@ -119,7 +120,7 @@ public class AccettazioneOrdineInevasoHelper { if(mDataset.get(i).codJcom.equalsIgnoreCase(CommonConst.Config.COMMESSA_MAG)) mDataset.get(i).descrizioneCommessa = null; } - Collections.sort(descrArtForns, (str1, str2) -> str1.compareToIgnoreCase(str2)); + Collections.sort(descrArtForns, String::compareToIgnoreCase); List> groupedRighe = new ArrayList<>(); for (String descrArtForn : descrArtForns) { diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/core/IOnOrdineRowDispatchCallback.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/core/IOnOrdineAccettazioneRowDispatchCallback.java similarity index 78% rename from app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/core/IOnOrdineRowDispatchCallback.java rename to app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/core/IOnOrdineAccettazioneRowDispatchCallback.java index 0c855737..181f89b6 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/core/IOnOrdineRowDispatchCallback.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/core/IOnOrdineAccettazioneRowDispatchCallback.java @@ -2,7 +2,7 @@ package it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.core; import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneDTO; -public interface IOnOrdineRowDispatchCallback { +public interface IOnOrdineAccettazioneRowDispatchCallback { void onOrdineRowDispatch(OrdineAccettazioneDTO.Riga item); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/core/MainListOrdineAccettazioneAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/core/MainListOrdineAccettazioneAdapter.java index 3af40712..beb2ea84 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/core/MainListOrdineAccettazioneAdapter.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/core/MainListOrdineAccettazioneAdapter.java @@ -29,10 +29,12 @@ import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.dto.Accettaz public class MainListOrdineAccettazioneAdapter extends RecyclerView.Adapter { - protected Context mContext; - protected List mDataset; - protected ObservableArrayList mObservableDataset; - protected IOnOrdineRowDispatchCallback mOrdineRowDispatch; + private Context mContext; + private List mDataset; + private View mEmptyView; + + private ObservableArrayList mObservableDataset; + private IOnOrdineAccettazioneRowDispatchCallback mOrdineRowDispatch; private static final Pools.SynchronizedPool sPool = new Pools.SynchronizedPool(200); @@ -49,16 +51,18 @@ public class MainListOrdineAccettazioneAdapter extends RecyclerView.Adapter
myDataset) { + public MainListOrdineAccettazioneAdapter(Context context, ObservableArrayList myDataset, View emptyView) { mContext = context; mObservableDataset = myDataset; - + mEmptyView = emptyView; mDataset = Stream.of(mObservableDataset).filter(x -> !x.isHidden()).toList(); mObservableDataset.addOnListChangedCallback(onListChangedCallback); + + checkIfEmpty(); } - public void setOnOrdineRowDispatchCallback(IOnOrdineRowDispatchCallback ordineRowDispatch) { + public void setOnOrdineRowDispatchCallback(IOnOrdineAccettazioneRowDispatchCallback ordineRowDispatch) { mOrdineRowDispatch = ordineRowDispatch; } @@ -67,30 +71,35 @@ public class MainListOrdineAccettazioneAdapter extends RecyclerView.Adapter
sender) { refreshNotHiddenElements(); notifyDataSetChanged(); + checkIfEmpty(); } @Override public void onItemRangeChanged(ObservableList sender, int positionStart, int itemCount) { refreshNotHiddenElements(); notifyDataSetChanged(); + checkIfEmpty(); } @Override public void onItemRangeInserted(ObservableList sender, int positionStart, int itemCount) { refreshNotHiddenElements(); notifyDataSetChanged(); + checkIfEmpty(); } @Override public void onItemRangeMoved(ObservableList sender, int fromPosition, int toPosition, int itemCount) { refreshNotHiddenElements(); notifyDataSetChanged(); + checkIfEmpty(); } @Override public void onItemRangeRemoved(ObservableList sender, int positionStart, int itemCount) { refreshNotHiddenElements(); notifyDataSetChanged(); + checkIfEmpty(); } private void refreshNotHiddenElements() { @@ -221,4 +230,13 @@ public class MainListOrdineAccettazioneAdapter extends RecyclerView.Adapter
isFabVisible = new ObservableField<>(); @@ -61,7 +61,7 @@ public class AccettazioneOnOrdineInevasoViewModel implements IOnColloClosedCallb private AccettazioneOrdineInevasoOrderBy.Enum currentOrderBy = AccettazioneOrdineInevasoOrderBy.Enum.COD_ART_FOR; private MainListOrdineAccettazioneAdapter mAdapter; - public AccettazioneOnOrdineInevasoViewModel(AccettazioneOrdineInevasoActivity activity, ArticoliInColloBottomSheetViewModel articoliInColloBottomSheetViewModel, List orders) { + public AccettazioneOnOrdineAccettazioneInevasoViewModel(AccettazioneOrdineInevasoActivity activity, ArticoliInColloBottomSheetViewModel articoliInColloBottomSheetViewModel, List orders) { this.mActivity = activity; this.mArticoliInColloBottomSheetViewModel = articoliInColloBottomSheetViewModel; this.mOrders = orders; @@ -97,7 +97,7 @@ public class AccettazioneOnOrdineInevasoViewModel implements IOnColloClosedCallb mActivity.bindings.accettazioneOrdineMainList.setLayoutManager(new LinearLayoutManager(mActivity)); - mAdapter = helper.getRightListAdapter(); + mAdapter = helper.getRightListAdapter(mActivity.bindings.accettazioneEmptyView); try { helper.updateListModel(AccettazioneOrdineInevasoOrderBy.Enum.COD_ART_FOR, groupedRighe, null); @@ -315,21 +315,43 @@ public class AccettazioneOnOrdineInevasoViewModel implements IOnColloClosedCallb public void onColloClosed() { if(thereIsAnOpenedUL()) { + final ProgressDialog progress = ProgressDialog.show(mActivity, mActivity.getText(R.string.waiting), + mActivity.getText(R.string.loading) + " ...", true); + + progress.show(); + if(thereIsAnyRowInUL()) { - printCollo(); + updateDataFine(progress, () -> printCollo(progress)); } else { - deleteCollo(); + deleteCollo(progress); } } } - private void printCollo() { - final ProgressDialog progress = ProgressDialog.show(mActivity, mActivity.getText(R.string.waiting), - mActivity.getText(R.string.loading) + " ...", true); + private void updateDataFine(ProgressDialog progress, Runnable onComplete) { - progress.show(); + MtbColt cloneMtbColt = (MtbColt) mArticoliInColloBottomSheetViewModel.mtbColt.get().clone(); + cloneMtbColt.setOperation(CommonModelConsts.OPERATION.NO_OP); + cloneMtbColt.setOraFinePrep(new Date()); + + + ColliMagazzinoRESTConsumer.saveCollo(cloneMtbColt, new ISimpleOperationCallback() { + @Override + public void onSuccess(MtbColt value) { + onComplete.run(); + } + + @Override + public void onFailed(Exception ex) { + UtilityExceptions.defaultException(mActivity, ex, progress); + } + }); + + } + + private void printCollo(ProgressDialog progress) { PrinterRESTConsumer.getAvailablePrinters(SettingsManager.i().userSession.depo.getCodMdep(), new ISimpleOperationCallback>() { @Override @@ -386,11 +408,7 @@ public class AccettazioneOnOrdineInevasoViewModel implements IOnColloClosedCallb } - private void deleteCollo() { - final ProgressDialog progress = ProgressDialog.show(mActivity, mActivity.getText(R.string.waiting), - mActivity.getText(R.string.loading) + " ...", true); - - progress.show(); + private void deleteCollo(ProgressDialog progress) { ColliMagazzinoRESTConsumer.deleteCollo(mArticoliInColloBottomSheetViewModel.mtbColt.get(), () -> { mArticoliInColloBottomSheetViewModel.mtbColt.set(null); @@ -415,22 +433,16 @@ public class AccettazioneOnOrdineInevasoViewModel implements IOnColloClosedCallb private void postCloseOperations() { -// for(int i = 0; i < groupedOrdini.size(); i++){ -// if(groupedOrdini.get(i).getQtaDaEvadere().floatValue() <= 0){ -// this.groupedOrdini.remove(i); -// i--; -// } -// } - MtbColt mtbColtToDelete = mArticoliInColloBottomSheetViewModel.mtbColt.get(); + MtbColt mtbColt = mArticoliInColloBottomSheetViewModel.mtbColt.get(); mArticoliInColloBottomSheetViewModel.mtbColt.set(null); isFabVisible.set(true); - if(mtbColtToDelete != null && mtbColtToDelete.getMtbColr() != null) { - for (int i = 0; i < mtbColtToDelete.getMtbColr().size(); i++) { + if(mtbColt != null && mtbColt.getMtbColr() != null) { + for (int i = 0; i < mtbColt.getMtbColr().size(); i++) { - MtbColr currentRow = mtbColtToDelete.getMtbColr().get(i); + MtbColr currentRow = mtbColt.getMtbColr().get(i); Stream.of(this.groupedOrdini) .filter(x -> diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/vendita/core/MainListVenditaAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/core/MainListVenditaAdapter.java index ee85308b..bf38dace 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/vendita/core/MainListVenditaAdapter.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/core/MainListVenditaAdapter.java @@ -204,7 +204,6 @@ public class MainListVenditaAdapter extends RecyclerView.Adapter newDataset) { mDataset = new ArrayList<>(); mDataset.addAll(newDataset); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/vendita/core/VenditaHelper.java b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/core/VenditaHelper.java index f4ad0b32..c49a8ffa 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/vendita/core/VenditaHelper.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/core/VenditaHelper.java @@ -135,7 +135,7 @@ public class VenditaHelper { for(int j = 0; j < currentOrders.size(); j++){ - whereCond += "(mtb_colr.data_ord = " + UtilityDate.formatDate(currentOrders.get(j).getData(), UtilityDate.COMMONS_DATE_FORMATS.YMD_SLASH) + " " + + whereCond += "(mtb_colr.data_ord = '" + UtilityDate.formatDate(currentOrders.get(j).getData(), UtilityDate.COMMONS_DATE_FORMATS.YMD_SLASH) + "' " + "AND mtb_colr.num_ord = " + currentOrders.get(j).getNumero() + ") "; if(i != (orders.size() - 1)){ diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/vendita/dto/PickingObjectDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/dto/PickingObjectDTO.java index e742e99d..daa72106 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/vendita/dto/PickingObjectDTO.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/dto/PickingObjectDTO.java @@ -8,6 +8,10 @@ import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; +import it.integry.integrywmsnative.core.model.MtbAart; +import it.integry.integrywmsnative.core.utility.UtilityDate; +import it.integry.integrywmsnative.core.utility.UtilityLogger; + public class PickingObjectDTO implements Parcelable { private Integer numCollo; @@ -31,6 +35,8 @@ public class PickingObjectDTO implements Parcelable { private String codAlis; private BigDecimal colliPedana; + private MtbAart mtbAart; + private Boolean hidden = null; protected PickingObjectDTO(Parcel in) { @@ -79,6 +85,9 @@ public class PickingObjectDTO implements Parcelable { } else { numCnfCollo = new BigDecimal(in.readFloat()); } + + + mtbAart = (MtbAart) in.readValue(MtbAart.class.getClassLoader()); } @Override @@ -139,6 +148,8 @@ public class PickingObjectDTO implements Parcelable { dest.writeByte((byte) (0x01)); dest.writeFloat(numCnfCollo.floatValue()); } + + dest.writeValue(mtbAart); } @Override @@ -239,6 +250,19 @@ public class PickingObjectDTO implements Parcelable { return sdf.parse(getDataColloS()); } + public String getDataColloHuman() { + Date dataColloD = null; + try { + dataColloD = getDataColloD(); + } catch (ParseException ex){ + UtilityLogger.errorMe(ex); + } + + if(dataColloD != null){ + return UtilityDate.formatDate(dataColloD, UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN); + } else return null; + } + public PickingObjectDTO setDataCollo(String dataCollo) { this.dataCollo = dataCollo; return this; @@ -348,6 +372,15 @@ public class PickingObjectDTO implements Parcelable { return this; } + public MtbAart getMtbAart() { + return mtbAart; + } + + public PickingObjectDTO setMtbAart(MtbAart mtbAart) { + this.mtbAart = mtbAart; + return this; + } + public Boolean isHidden() { return hidden; } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/core/MainListOrdineVenditaInevasoAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/core/MainListOrdineVenditaInevasoAdapter.java index 9e7849f0..d9a413dd 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/core/MainListOrdineVenditaInevasoAdapter.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/core/MainListOrdineVenditaInevasoAdapter.java @@ -6,6 +6,7 @@ import android.databinding.ObservableList; import android.graphics.Color; import android.support.v4.util.Pools; import android.support.v7.widget.RecyclerView; +import android.text.Html; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -22,14 +23,16 @@ import it.integry.integrywmsnative.core.CommonConst; import it.integry.integrywmsnative.core.utility.UtilityNumber; import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.gest.vendita.dto.PickingObjectDTO; +import it.integry.integrywmsnative.gest.vendita_ordine_inevaso.core.interfaces.IOnOrdineVenditaRowDispatched; import it.integry.integrywmsnative.gest.vendita_ordine_inevaso.dto.VenditaOrdineInevasoListViewModel; public class MainListOrdineVenditaInevasoAdapter extends RecyclerView.Adapter { - protected Context mContext; - protected List mDataset; - protected ObservableArrayList mObservableDataset; - protected IOnOrdineRowDispatchCallback mOrdineRowDispatch; + private Context mContext; + private List mDataset; + private View mEmptyView; + private ObservableArrayList mObservableDataset; + private IOnOrdineVenditaRowDispatched mOrdineRowDispatch; private static final Pools.SynchronizedPool sPool = new Pools.SynchronizedPool(200); @@ -45,16 +48,19 @@ public class MainListOrdineVenditaInevasoAdapter extends RecyclerView.Adapter myDataset) { + public MainListOrdineVenditaInevasoAdapter(Context context, ObservableArrayList myDataset, View emptyView) { mContext = context; mObservableDataset = myDataset; + mEmptyView = emptyView; mDataset = Stream.of(mObservableDataset).filter(x -> !x.isHidden()).toList(); mObservableDataset.addOnListChangedCallback(onListChangedCallback); + + checkIfEmpty(); } - public void setOnOrdineRowDispatchCallback(IOnOrdineRowDispatchCallback ordineRowDispatch) { + public void setOnOrdineRowDispatchCallback(IOnOrdineVenditaRowDispatched ordineRowDispatch) { mOrdineRowDispatch = ordineRowDispatch; } @@ -63,30 +69,35 @@ public class MainListOrdineVenditaInevasoAdapter extends RecyclerView.Adapter sender) { refreshNotHiddenElements(); notifyDataSetChanged(); + checkIfEmpty(); } @Override public void onItemRangeChanged(ObservableList sender, int positionStart, int itemCount) { refreshNotHiddenElements(); notifyDataSetChanged(); + checkIfEmpty(); } @Override public void onItemRangeInserted(ObservableList sender, int positionStart, int itemCount) { refreshNotHiddenElements(); notifyDataSetChanged(); + checkIfEmpty(); } @Override public void onItemRangeMoved(ObservableList sender, int fromPosition, int toPosition, int itemCount) { refreshNotHiddenElements(); notifyDataSetChanged(); + checkIfEmpty(); } @Override public void onItemRangeRemoved(ObservableList sender, int positionStart, int itemCount) { refreshNotHiddenElements(); notifyDataSetChanged(); + checkIfEmpty(); } private void refreshNotHiddenElements() { @@ -172,6 +183,10 @@ public class MainListOrdineVenditaInevasoAdapter extends RecyclerView.Adapter> mDataset, List mtbColrs) throws Exception { @@ -56,9 +59,12 @@ public class VenditaOrdineInevasoHelper { for(int i = 0; i < tmpList.size(); i++){ if(tmpList.get(i).isHidden() == null || forceHiddenCheck) { - if (tmpList.get(i).getQtaCollo().floatValue() <= 0) { - tmpList.get(i).setHidden(true); - } else tmpList.get(i).setHidden(false); + PickingObjectDTO tmpItem = tmpList.get(i); + + if ( (tmpItem.getNumCollo() != null && tmpItem.getQtaCollo().floatValue() <= 0) || + (tmpItem.getNumCollo() == null && tmpItem.getQtaOrd().floatValue() <= 0)) { + tmpItem.setHidden(true); + } else tmpItem.setHidden(false); } } @@ -97,7 +103,11 @@ public class VenditaOrdineInevasoHelper { rowModel.setDescrizione(currentItem.getDescrizioneEstesa()); - //TODO: Aggiungere la qta evasa + if(currentItem.getNumCollo() != null) { + rowModel.setSubDescrizione(String.format(mContext.getResources().getText(R.string.lu_number_text).toString(), currentItem.getNumCollo(), currentItem.getDataColloHuman())); + } + + rowModel.setQtaRiservata(getRigaQuantityEvasa(currentItem, mtbColrs)); rowModel.setQtaOrdinata(currentItem.getNumCollo() != null ? currentItem.getQtaCollo() : currentItem.getQtaOrd()); rowModel.setOriginalModel(currentItem); @@ -111,4 +121,24 @@ public class VenditaOrdineInevasoHelper { } + private BigDecimal getRigaQuantityEvasa(PickingObjectDTO item, List mtbColrs){ + BigDecimal currentQtaEvasa = BigDecimal.ZERO; + + if(mtbColrs != null) { + + List filteredMtbColrs = Stream.of(mtbColrs).filter( + x -> x.getCodMart().equalsIgnoreCase(item.getCodMart()) && + ((x.getCodJcom() == null && item.getCodJcom() == null) || (x.getCodJcom() != null && x.getCodJcom().equalsIgnoreCase(item.getCodJcom()))) && + ((x.getPartitaMag() == null && item.getPartitaMag() == null) || (x.getPartitaMag() != null && x.getPartitaMag().equalsIgnoreCase(item.getPartitaMag()))) && + ((x.getNumColloRif() == null && item.getNumCollo() == null) || (x.getNumColloRif() != null && x.getNumColloRif().equals(item.getNumCollo())))).toList(); + + + for (MtbColr mtbColr : filteredMtbColrs) { + currentQtaEvasa = currentQtaEvasa.add(mtbColr.getQtaCol()); + } + } + + return currentQtaEvasa; + } + } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/core/interfaces/IOnOrdineVenditaRowDispatched.java b/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/core/interfaces/IOnOrdineVenditaRowDispatched.java new file mode 100644 index 00000000..d9e77f13 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/core/interfaces/IOnOrdineVenditaRowDispatched.java @@ -0,0 +1,8 @@ +package it.integry.integrywmsnative.gest.vendita_ordine_inevaso.core.interfaces; + +import it.integry.integrywmsnative.gest.vendita.dto.PickingObjectDTO; + +public interface IOnOrdineVenditaRowDispatched { + + void onOrdineRowDispatch(PickingObjectDTO item); +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/dto/VenditaOrdineInevasoListViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/dto/VenditaOrdineInevasoListViewModel.java index 3278bdf7..04a2ac42 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/dto/VenditaOrdineInevasoListViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/dto/VenditaOrdineInevasoListViewModel.java @@ -22,6 +22,7 @@ public class VenditaOrdineInevasoListViewModel { private String badge2; private String descrizione; + private String subDescrizione; private BigDecimal qtaRiservata; private BigDecimal qtaOrdinata; @@ -54,6 +55,15 @@ public class VenditaOrdineInevasoListViewModel { return this; } + public String getSubDescrizione() { + return subDescrizione; + } + + public SubItem setSubDescrizione(String subDescrizione) { + this.subDescrizione = subDescrizione; + return this; + } + public BigDecimal getQtaRiservata() { return qtaRiservata == null ? BigDecimal.ZERO : qtaRiservata; } 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 016860ce..3b7850b4 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 @@ -1,33 +1,47 @@ package it.integry.integrywmsnative.gest.vendita_ordine_inevaso.viewmodel; import android.app.ProgressDialog; +import android.databinding.ObservableArrayList; import android.databinding.ObservableField; import android.support.v7.widget.LinearLayoutManager; +import android.text.SpannableString; import com.annimon.stream.Stream; +import java.math.BigDecimal; import java.util.ArrayList; +import java.util.Date; import java.util.List; import it.integry.integrywmsnative.R; +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.model.CommonModelConsts; import it.integry.integrywmsnative.core.model.FiltroOrdineDTO; import it.integry.integrywmsnative.core.model.MtbColr; import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; +import it.integry.integrywmsnative.core.report.ReportManager; +import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.utility.UtilityExceptions; +import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaGroupedInevasoDTO; import it.integry.integrywmsnative.gest.vendita.dto.PickingObjectDTO; -import it.integry.integrywmsnative.gest.vendita.rest.OrdiniVenditaRESTConsumerService; import it.integry.integrywmsnative.gest.vendita_ordine_inevaso.VenditaOrdineInevasoActivity; import it.integry.integrywmsnative.gest.vendita_ordine_inevaso.core.VenditaOrdineInevasoHelper; import it.integry.integrywmsnative.gest.vendita_ordine_inevaso.core.MainListOrdineVenditaInevasoAdapter; -import it.integry.integrywmsnative.gest.vendita_ordine_inevaso.rest.OrdineVenditaInevasoRESTConsumerService; +import it.integry.integrywmsnative.gest.vendita_ordine_inevaso.core.interfaces.IOnOrdineVenditaRowDispatched; +import it.integry.integrywmsnative.ui.StatusBarAlert; import it.integry.integrywmsnative.view.bottomsheet.interfaces.IOnColloClosedCallback; import it.integry.integrywmsnative.view.bottomsheet.viewmodel.ArticoliInColloBottomSheetViewModel; import it.integry.integrywmsnative.BR; +import it.integry.integrywmsnative.view.dialogs.DialogSimpleMessageHelper; +import it.integry.integrywmsnative.view.dialogs.input_quantity.DialogInputQuantity; +import it.integry.integrywmsnative.view.dialogs.input_quantity.QuantityDTO; -public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback { +public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IOnOrdineVenditaRowDispatched { public ObservableField isFabVisible = new ObservableField<>(); @@ -43,7 +57,11 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback { private MainListOrdineVenditaInevasoAdapter mAdapter; private GestioneEnum defaultGestioneOfUL = null; - private List defaultFiltroOrdine = null; + private List defaultFiltroOrdine = new ArrayList<>(); + private String defaultCodAnagOfUL = null; + private String defaultRifOrdOfUL = null; + private Integer defaultNumOrdOfUL = null; + private Date defaultDataOrdOfUL = null; public VenditaOrdineInevasoViewModel(VenditaOrdineInevasoActivity activity, ArticoliInColloBottomSheetViewModel articoliInColloBottomSheetViewModel, List pickingList, List orders, List colliRegistrati) { this.mActivity = activity; @@ -76,7 +94,7 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback { mActivity.bindings.venditaOrdineMainList.setLayoutManager(new LinearLayoutManager(mActivity)); - mAdapter = mHelper.getRightListAdapter(); + mAdapter = mHelper.getRightListAdapter(mActivity.bindings.venditaOrdineInevasoEmptyView); try { this.mGroupedPickingList = mHelper.getPickingListRaggruppataPerPosizione(mPickingList, true); @@ -85,53 +103,93 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback { UtilityExceptions.defaultException(mActivity, e); } -// mAdapter.setOnOrdineRowDispatchCallback(this); + mAdapter.setOnOrdineRowDispatchCallback(this); mActivity.bindings.venditaOrdineMainList.setAdapter(mAdapter); } private void initDatiPicking() { if(this.mTestateOrdini != null && this.mTestateOrdini.size() > 0){ - boolean shouldBreak = false; + List flatOrderArray = new ArrayList<>(); + + Stream.of(this.mTestateOrdini).forEach(x -> flatOrderArray.addAll(x.ordini)); + //Definizione della gestione collo di default - for(int i = 0; i < this.mTestateOrdini.size(); i++){ + List foundGestioni = Stream.of(flatOrderArray) + .map(OrdineVenditaGroupedInevasoDTO.Ordine::getGestioneEnum) + .withoutNulls() + .distinctBy(x -> x) + .toList(); - for(int j = 0; j < this.mTestateOrdini.get(i).ordini.size(); j++){ - - OrdineVenditaGroupedInevasoDTO.Ordine dto = this.mTestateOrdini.get(i).ordini.get(j); - - if(defaultGestioneOfUL == null) { - defaultGestioneOfUL = dto.getGestioneEnum(); - } - - if(dto.getGestioneEnum() != defaultGestioneOfUL){ - //TODO: scrivere qui la gestione di default che deve avere il collo nel caso in cui ho fatto il pick di ordini L e V insieme - defaultGestioneOfUL = GestioneEnum.LAVORAZIONE; - shouldBreak = true; - break; - } - } - - if(shouldBreak) { - break; - } + if(foundGestioni != null && foundGestioni.size() > 1){ + UtilityExceptions.defaultException(mActivity, new Exception("Impossibile caricare ordini di diverse gestioni")); + mActivity.finish(); + return; + } else if(foundGestioni != null && foundGestioni.size() == 1){ + defaultGestioneOfUL = foundGestioni.get(0); + } else { + defaultGestioneOfUL = GestioneEnum.VENDITA; } + + //Definizione del filtro ordine da applicare a tutti i colli generati - for(int i = 0; i < this.mTestateOrdini.size(); i++){ + Stream.of(flatOrderArray).forEach(x -> { + defaultFiltroOrdine.add(new FiltroOrdineDTO() + .setDataOrd(x.getData()) + .setNumOrd(x.getNumero()) + .setGestioneOrd(x.getGestione())); + }); - if(defaultFiltroOrdine == null) defaultFiltroOrdine = new ArrayList<>(); - for(int j = 0; j < this.mTestateOrdini.get(i).ordini.size(); j++){ - OrdineVenditaGroupedInevasoDTO.Ordine dto = this.mTestateOrdini.get(i).ordini.get(j); - defaultFiltroOrdine.add(new FiltroOrdineDTO() - .setDataOrd(dto.getData()) - .setNumOrd(dto.getNumero()) - .setGestioneOrd(dto.getGestione())); + //Definizione del codAnag + List foundCodAnag = Stream.of(flatOrderArray) + .map(OrdineVenditaGroupedInevasoDTO.Ordine::getCodAnagOrd) + .withoutNulls() + .distinctBy(x -> x) + .toList(); - } + if(foundCodAnag != null && foundCodAnag.size() == 1){ + defaultCodAnagOfUL = foundCodAnag.get(0); } + + + //Definizione del rifOrd + List foundRifOrd = Stream.of(flatOrderArray) + .map(OrdineVenditaGroupedInevasoDTO.Ordine::getRifOrd) + .withoutNulls() + .distinctBy(x -> x) + .toList(); + + if(foundRifOrd != null && foundRifOrd.size() == 1){ + defaultRifOrdOfUL = foundRifOrd.get(0); + } + + + //Definizione del numOrd + List foundNumOrd = Stream.of(flatOrderArray) + .map(OrdineVenditaGroupedInevasoDTO.Ordine::getNumero) + .withoutNulls() + .distinctBy(x -> x) + .toList(); + + if(foundNumOrd != null && foundNumOrd.size() == 1){ + defaultNumOrdOfUL = foundNumOrd.get(0); + } + + + //Definizione del dataOrd + List foundDataOrd = Stream.of(flatOrderArray) + .map(OrdineVenditaGroupedInevasoDTO.Ordine::getData) + .withoutNulls() + .distinctBy(x -> x) + .toList(); + + if(foundDataOrd != null && foundDataOrd.size() == 1){ + defaultDataOrdOfUL = foundDataOrd.get(0); + } + } } @@ -149,6 +207,8 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback { public void recoverUL(MtbColt recoveredMtbColt){ + DialogSimpleMessageHelper.makeInfoDialog(mActivity, "Info", new SpannableString("La funzione di recupero UL non è stata abilitata"), null, null).show(); + for(int i = 0; i < recoveredMtbColt.getMtbColr().size(); i++){ MtbColr currentMtbColr = recoveredMtbColt.getMtbColr().get(i); @@ -174,6 +234,53 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback { } public void createNewUL() { + mActivity.bindings.venditaOrdineInevasoFab.close(true); + + final ProgressDialog progress = ProgressDialog.show(mActivity, mActivity.getText(R.string.waiting), + mActivity.getText(R.string.loading) + " ...", true); + + progress.show(); + + MtbColt mtbColt = new MtbColt(); + mtbColt .setDataCollo(new Date()) + .setGestione(defaultGestioneOfUL) + .setSegno(-1) + .setCodMdep(SettingsManager.i().userSession.depo.getCodMdep()) + .setPreparatoDa(SettingsManager.i().user.fullname) + .setOraInizPrep(new Date()) + .setRifOrd(defaultRifOrdOfUL) + .setNumOrd(defaultNumOrdOfUL) + .setDataOrdD(defaultDataOrdOfUL) + .setCodAnag(defaultCodAnagOfUL) + .setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE); + + mtbColt.generaFiltroOrdineFromDTO(defaultFiltroOrdine); + + ColliMagazzinoRESTConsumer.saveCollo(mtbColt, new ISimpleOperationCallback() { + @Override + public void onSuccess(MtbColt value) { + + value.setMtbColr(new ObservableArrayList<>()); + + setULToCurrentContext(value); + + progress.dismiss(); + + new StatusBarAlert.Builder(mActivity) + .autoHide(true) + .withDuration(2500) + .showProgress(false) + .withText(R.string.data_saved) + .withAlertColor(R.color.mainGreen) + .build(); + + } + + @Override + public void onFailed(Exception ex) { + UtilityExceptions.defaultException(mActivity, ex, progress); + } + }); } @@ -191,22 +298,117 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback { @Override public void onColloClosed() { if(thereIsAnOpenedUL()) { + final ProgressDialog progress = ProgressDialog.show(mActivity, mActivity.getText(R.string.waiting), + mActivity.getText(R.string.loading) + " ...", true); + + progress.show(); if(thereIsAnyRowInUL()) { - printCollo(); + updateDataFine(progress, () -> distribuisciCollo(progress, () -> printCollo(progress))); } else { - deleteCollo(); + deleteCollo(progress); } } } - private void printCollo() { + private void updateDataFine(ProgressDialog progress, Runnable onComplete) { + + MtbColt cloneMtbColt = (MtbColt) mArticoliInColloBottomSheetViewModel.mtbColt.get().clone(); + cloneMtbColt.setOperation(CommonModelConsts.OPERATION.NO_OP); + cloneMtbColt.setOraFinePrep(new Date()); + + + ColliMagazzinoRESTConsumer.saveCollo(cloneMtbColt, new ISimpleOperationCallback() { + @Override + public void onSuccess(MtbColt value) { + onComplete.run(); + } + + @Override + public void onFailed(Exception ex) { + UtilityExceptions.defaultException(mActivity, ex, progress); + } + }); } - private void deleteCollo() { + private void distribuisciCollo(ProgressDialog progress, Runnable onComplete) { + MtbColt cloneMtbColt = (MtbColt) mArticoliInColloBottomSheetViewModel.mtbColt.get().clone(); + + ColliMagazzinoRESTConsumer.distribuisciCollo(cloneMtbColt, onComplete, + ex -> UtilityExceptions.defaultException(mActivity, ex, progress)); + } + + private void printCollo(ProgressDialog progress) { + + + PrinterRESTConsumer.getAvailablePrinters(SettingsManager.i().userSession.depo.getCodMdep(), new ISimpleOperationCallback>() { + @Override + public void onSuccess(List value) { + + if(value.size() > 0) { + try{ + MtbColt currentMtbColt = mArticoliInColloBottomSheetViewModel.mtbColt.get(); + + ReportManager.getRightReportNameByMtbColt(currentMtbColt, reportName -> { + + PrinterRESTConsumer.printCollo( + value.get(0), + currentMtbColt, + 1, reportName, () -> { + + postCloseOperations(); + progress.dismiss(); + + }, ex -> { + + progress.dismiss(); + String errorMessage = ex.getMessage(); + DialogSimpleMessageHelper.makeErrorDialog( + mActivity, + new SpannableString(errorMessage), + null, + null, + R.string.button_ignore_print, + () -> postCloseOperations()).show(); + }); + + }, ex -> UtilityExceptions.defaultException(mActivity, ex, progress) + ); + } catch (Exception ex){ + UtilityExceptions.defaultException(mActivity, ex, progress); + postCloseOperations(); + } + } else { + + mArticoliInColloBottomSheetViewModel.mtbColt.set(null); + isFabVisible.set(true); + + progress.dismiss(); + String errorMessage = "Nessuna stampante configurata"; + DialogSimpleMessageHelper.makeWarningDialog(mActivity, new SpannableString(errorMessage), null, () -> postCloseOperations()).show(); + } + } + + @Override + public void onFailed(Exception ex) { + UtilityExceptions.defaultException(mActivity, ex, progress); + } + }); + } + + private void deleteCollo(ProgressDialog progress) { + + ColliMagazzinoRESTConsumer.deleteCollo(mArticoliInColloBottomSheetViewModel.mtbColt.get(), () -> { + mArticoliInColloBottomSheetViewModel.mtbColt.set(null); + + isFabVisible.set(true); + + progress.dismiss(); + }, ex -> UtilityExceptions.defaultException(mActivity, ex, progress) + ); } public boolean thereIsAnOpenedUL() { @@ -219,4 +421,140 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback { } + private void postCloseOperations() { + + MtbColt mtbColt = mArticoliInColloBottomSheetViewModel.mtbColt.get(); + + this.mColliRegistrati.add(mtbColt); + + mArticoliInColloBottomSheetViewModel.mtbColt.set(null); + isFabVisible.set(true); + + if(mtbColt != null && mtbColt.getMtbColr() != null) { + + List mtbColrs = mtbColt.getMtbColr(); + + for (int i = 0; i < mtbColrs.size(); i++) { + + MtbColr x = mtbColt.getMtbColr().get(i); + + Stream.of(this.mPickingList) + .filter(currentRow -> + x.getCodMart().equalsIgnoreCase(currentRow.getCodMart()) && + ((x.getCodJcom() == null && currentRow.getCodJcom() == null) || (x.getCodJcom() != null && x.getCodJcom().equalsIgnoreCase(currentRow.getCodJcom()))) && + ((x.getPartitaMag() == null && currentRow.getPartitaMag() == null) || (x.getPartitaMag() != null && x.getPartitaMag().equalsIgnoreCase(currentRow.getPartitaMag()))) && + ((x.getNumColloRif() == null && currentRow.getNumCollo() == null) || (x.getNumColloRif() != null && x.getNumColloRif().equals(currentRow.getNumCollo()))) + ) + + .forEach(currentRow -> currentRow.setQtaCollo(currentRow.getQtaCollo().add(x.getQtaCol()))); + + } + } + + refreshOrderBy(true); + + } + + + @Override + public void onOrdineRowDispatch(final PickingObjectDTO item) { + if(mArticoliInColloBottomSheetViewModel.mtbColt.get() != null){ + + List currentMtbColrs = mArticoliInColloBottomSheetViewModel.mtbColt.get().getMtbColr(); + + List filteredMtbColrs = Stream.of(currentMtbColrs).filter( + x -> x.getCodMart().equalsIgnoreCase(item.getCodMart()) && + (x.getPartitaMag() != null && x.getPartitaMag().equalsIgnoreCase(item.getPartitaMag()))) + .toList(); + + float qtaEvasaInMtbColr = 0; + for (MtbColr mtbColr : filteredMtbColrs) { + qtaEvasaInMtbColr += mtbColr.getQtaCol().floatValue(); + } + + float qtaEvasa = qtaEvasaInMtbColr; + + BigDecimal qtaDaEvadere = item.getQtaOrd().subtract(new BigDecimal(qtaEvasa)); + if(qtaDaEvadere.floatValue() < 0) qtaDaEvadere = BigDecimal.ZERO; + + DialogInputQuantity.DTO dto = new DialogInputQuantity.DTO() + .setBatchLot(item.getPartitaMag()) + .setCodArtFor(item.getCodArtFor()) + .setMtbAart(item.getMtbAart()) + .setQtaOrd(item.getQtaOrd()) + .setQtaDaEvadere(qtaDaEvadere) + .setQtaEvasa(new BigDecimal(qtaEvasa)) + .setCanPartitaMagBeChanged(false) + .setMaxQta(item.getQtaOrd()); + + DialogInputQuantity.makeBase(mActivity, dto, true, value -> onOrdineRowDispatched(item, value)).show(); + } + } + + private void onOrdineRowDispatched(PickingObjectDTO item, QuantityDTO quantityDTO){ + final ProgressDialog progress = ProgressDialog.show(mActivity, mActivity.getText(R.string.waiting), + mActivity.getText(R.string.loading) + " ...", true); + + final MtbColr mtbColr = new MtbColr() + .setCodMart(item.getCodMart()) + .setPartitaMag(UtilityString.empty2null(quantityDTO.batchLot.get())) + .setQtaCol(new BigDecimal(quantityDTO.qtaTot.get())) + .setQtaCnf(new BigDecimal(quantityDTO.qtaCnf.get())) + .setNumCnf(new BigDecimal(quantityDTO.numCnf.get())) + .setDescrizione(item.getDescrizioneEstesa()) + .setDatetimeRow(new Date()); + + if(item.getNumCollo() != null) { + mtbColr + .setCodJcom(UtilityString.empty2null(item.getCodJcom())) + .setSerColloRif(UtilityString.empty2null(item.getSerCollo())) + .setNumColloRif(item.getNumCollo()) + .setGestioneRif(UtilityString.empty2null(item.getGestione())) + .setDataColloRif(UtilityString.empty2null(item.getDataColloS())); + } + + + + mtbColr.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE); + + MtbColt cloneMtbColt = (MtbColt) mArticoliInColloBottomSheetViewModel.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(item.getMtbAart().untMis) + .setMtbAart(item.getMtbAart()); + + mArticoliInColloBottomSheetViewModel.mtbColt.get().getMtbColr().add(mtbColr); + refreshOrderBy(false); + + new StatusBarAlert.Builder(mActivity) + .autoHide(true) + .withDuration(2500) + .showProgress(false) + .withText(R.string.data_saved) + .withAlertColor(R.color.mainGreen) + .build(); + + progress.dismiss(); + } + + @Override + public void onFailed(Exception ex) { + UtilityExceptions.defaultException(mActivity, ex, progress); + } + }); + } + } 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 2f746752..5df4ebc7 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 @@ -39,6 +39,7 @@ public class DialogInputQuantity { public BigDecimal qtaDaEvadere; public BigDecimal qtaOrd; public BigDecimal qtaTot; + public BigDecimal qtaCnf; public BigDecimal qtaEvasa; public BigDecimal maxQta; public String codArtFor; @@ -89,6 +90,15 @@ public class DialogInputQuantity { return this; } + public BigDecimal getQtaCnf() { + return qtaCnf; + } + + public DTO setQtaCnf(BigDecimal qtaCnf) { + this.qtaCnf = qtaCnf; + return this; + } + public BigDecimal getQtaEvasa() { return qtaEvasa; } @@ -211,11 +221,17 @@ public class DialogInputQuantity { quantityDTO.batchLot.set(dto.batchLot); if(quantityDTO.qtaCnf.get(false) == null) { - quantityDTO.qtaCnf.set(dto.mtbAart.qtaCnf.floatValue()); + if(dto.getQtaCnf() != null) { + quantityDTO.qtaCnf.set(dto.getQtaCnf().floatValue()); + } else { + quantityDTO.qtaCnf.set(dto.mtbAart.qtaCnf.floatValue()); + } } + if(quantityDTO.qtaTot.get(false) == null) { quantityDTO.qtaTot.set(qtaDaEvadere); } + if(quantityDTO.numCnf.get(false) == null) { quantityDTO.numCnf.set(quantityDTO.qtaTot.get() / quantityDTO.qtaCnf.get()); } diff --git a/app/src/main/res/layout/activity_accettazione_ordine_inevaso.xml b/app/src/main/res/layout/activity_accettazione_ordine_inevaso.xml index bb75afae..a80a0768 100644 --- a/app/src/main/res/layout/activity_accettazione_ordine_inevaso.xml +++ b/app/src/main/res/layout/activity_accettazione_ordine_inevaso.xml @@ -5,7 +5,7 @@ + type="it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.viewmodel.AccettazioneOnOrdineAccettazioneInevasoViewModel"/> @@ -57,8 +57,66 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:scrollbars="vertical" + android:paddingBottom="72dp" app:layout_behavior="@string/appbar_scrolling_view_behavior" /> + + + + + + + + + + + + + + + + + + + + android:text="@string/no_lu_already_registered_text"/> diff --git a/app/src/main/res/layout/activity_vendita_ordine_inevaso.xml b/app/src/main/res/layout/activity_vendita_ordine_inevaso.xml index 57aad72d..9da47c54 100644 --- a/app/src/main/res/layout/activity_vendita_ordine_inevaso.xml +++ b/app/src/main/res/layout/activity_vendita_ordine_inevaso.xml @@ -57,7 +57,65 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:scrollbars="vertical" - app:layout_behavior="@string/appbar_scrolling_view_behavior" /> + app:layout_behavior="@string/appbar_scrolling_view_behavior" + android:paddingBottom="72dp" + android:clipToPadding="false" /> + + + + + + + + + + + + + + + + + + - + tools:text="DESCRIZIONE"/> + + diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 30534b14..a0403d26 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -114,7 +114,11 @@ Contenuto UL Spedizione merce + %d - %s]]> + Salta stampa + Nessuna UL registrata a magazzino + Nessun articolo da prelevare \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 06a275cc..9131beee 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -122,6 +122,11 @@ LU Content Shipping goods + %d - %s]]> + Skip print + No LU already registered + No items to pick +