Implementate EmptyView in Accettazione e Vendita.

Mostrato dialog di "funzione non attiva" quando si prova a recuperare una UL in Vendita.
This commit is contained in:
Giuseppe Scorrano 2018-11-26 10:47:42 +01:00
parent 7182782c25
commit d3a4372b02
27 changed files with 879 additions and 106 deletions

View File

@ -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<MtbColt> callback){
@ -32,6 +40,32 @@ public class ColliMagazzinoRESTConsumer {
}
public static void distribuisciCollo(MtbColt mtbColtToDistribute, Runnable onComplete, RunnableArgs<Exception> 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<ServiceRESTResponse<JsonObject>>() {
@Override
public void onResponse(Call<ServiceRESTResponse<JsonObject>> call, Response<ServiceRESTResponse<JsonObject>> response) {
analyzeAnswer(response, "GetAvailablePrinters", obj -> onComplete.run(), onFailed);
}
@Override
public void onFailure(Call<ServiceRESTResponse<JsonObject>> call, Throwable t) {
onFailed.run(new Exception(t));
}
});
}
public static void deleteRiga(MtbColr mtbColrToDelete, Runnable onComplete, RunnableArgs<Exception> onFailed){
MtbColr newMtbColr = new MtbColr();
@ -79,4 +113,5 @@ public class ColliMagazzinoRESTConsumer {
}

View File

@ -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<ServiceRESTResponse<JsonObject>> distribuisciCollo(@Body DistribuzioneColloDTO distribuzioneCollo);
}

View File

@ -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;
}
}
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -24,7 +24,7 @@ public class ReportManager {
break;
case VENDITA:
onFailed.run(new Exception("Etichetta non definita"));
onComplete.run("EtichettaSpedizione");
break;
}

View File

@ -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();
}
}

View File

@ -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<OrdineAccettazioneDTO> orders = (ArrayList<OrdineAccettazioneDTO>)getIntent().getSerializableExtra("key");
mAccettazioneOrdineInevasoViewModel = new AccettazioneOnOrdineInevasoViewModel(
mAccettazioneOrdineInevasoViewModel = new AccettazioneOnOrdineAccettazioneInevasoViewModel(
this, mArticoliInColloBottomSheetViewModel, orders);
setSupportActionBar(this.bindings.toolbar);

View File

@ -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<List<OrdineAccettazioneDTO.Riga>> mDataset, List<MtbColr> 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<List<OrdineAccettazioneDTO.Riga>> groupedRighe = new ArrayList<>();
for (String descrArtForn : descrArtForns) {

View File

@ -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);

View File

@ -29,10 +29,12 @@ import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.dto.Accettaz
public class MainListOrdineAccettazioneAdapter extends RecyclerView.Adapter<MainListOrdineAccettazioneAdapter.ViewHolder> {
protected Context mContext;
protected List<AccettazioneOrdineInevasoListViewModel> mDataset;
protected ObservableArrayList<AccettazioneOrdineInevasoListViewModel> mObservableDataset;
protected IOnOrdineRowDispatchCallback mOrdineRowDispatch;
private Context mContext;
private List<AccettazioneOrdineInevasoListViewModel> mDataset;
private View mEmptyView;
private ObservableArrayList<AccettazioneOrdineInevasoListViewModel> mObservableDataset;
private IOnOrdineAccettazioneRowDispatchCallback mOrdineRowDispatch;
private static final Pools.SynchronizedPool sPool = new Pools.SynchronizedPool(200);
@ -49,16 +51,18 @@ public class MainListOrdineAccettazioneAdapter extends RecyclerView.Adapter<Main
}
public MainListOrdineAccettazioneAdapter(Context context, ObservableArrayList<AccettazioneOrdineInevasoListViewModel> myDataset) {
public MainListOrdineAccettazioneAdapter(Context context, ObservableArrayList<AccettazioneOrdineInevasoListViewModel> 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<Main
public void onChanged(ObservableList<AccettazioneOrdineInevasoListViewModel> sender) {
refreshNotHiddenElements();
notifyDataSetChanged();
checkIfEmpty();
}
@Override
public void onItemRangeChanged(ObservableList<AccettazioneOrdineInevasoListViewModel> sender, int positionStart, int itemCount) {
refreshNotHiddenElements();
notifyDataSetChanged();
checkIfEmpty();
}
@Override
public void onItemRangeInserted(ObservableList<AccettazioneOrdineInevasoListViewModel> sender, int positionStart, int itemCount) {
refreshNotHiddenElements();
notifyDataSetChanged();
checkIfEmpty();
}
@Override
public void onItemRangeMoved(ObservableList<AccettazioneOrdineInevasoListViewModel> sender, int fromPosition, int toPosition, int itemCount) {
refreshNotHiddenElements();
notifyDataSetChanged();
checkIfEmpty();
}
@Override
public void onItemRangeRemoved(ObservableList<AccettazioneOrdineInevasoListViewModel> sender, int positionStart, int itemCount) {
refreshNotHiddenElements();
notifyDataSetChanged();
checkIfEmpty();
}
private void refreshNotHiddenElements() {
@ -221,4 +230,13 @@ public class MainListOrdineAccettazioneAdapter extends RecyclerView.Adapter<Main
public int getItemCount() {
return mDataset.size();
}
void checkIfEmpty() {
if (mEmptyView != null) {
final boolean emptyViewVisible = getItemCount() == 0;
mEmptyView.setVisibility(emptyViewVisible ? View.VISIBLE : View.GONE);
}
}
}

View File

@ -31,7 +31,7 @@ import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneDTO;
import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.AccettazioneOrdineInevasoActivity;
import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.core.AccettazioneOrdineInevasoHelper;
import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.core.IOnOrdineRowDispatchCallback;
import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.core.IOnOrdineAccettazioneRowDispatchCallback;
import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.core.MainListOrdineAccettazioneAdapter;
import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.dto.AccettazioneOrdineInevasoOrderBy;
import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.rest.OrdineAccettazioneInevasoRESTConsumerService;
@ -45,7 +45,7 @@ import it.integry.integrywmsnative.view.dialogs.input_quantity.QuantityDTO;
import static br.com.zbra.androidlinq.Linq.stream;
public class AccettazioneOnOrdineInevasoViewModel implements IOnColloClosedCallback, IOnOrdineRowDispatchCallback {
public class AccettazioneOnOrdineAccettazioneInevasoViewModel implements IOnColloClosedCallback, IOnOrdineAccettazioneRowDispatchCallback {
public ObservableField<Boolean> 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<OrdineAccettazioneDTO> orders) {
public AccettazioneOnOrdineAccettazioneInevasoViewModel(AccettazioneOrdineInevasoActivity activity, ArticoliInColloBottomSheetViewModel articoliInColloBottomSheetViewModel, List<OrdineAccettazioneDTO> 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<MtbColt>() {
@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<List<String>>() {
@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 ->

View File

@ -204,7 +204,6 @@ public class MainListVenditaAdapter extends RecyclerView.Adapter<MainListVendita
return mDataset.size();
}
public void setFilter(List<OrdineVenditaGroupedInevasoDTO> newDataset) {
mDataset = new ArrayList<>();
mDataset.addAll(newDataset);

View File

@ -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)){

View File

@ -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;
}

View File

@ -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<MainListOrdineVenditaInevasoAdapter.ViewHolder> {
protected Context mContext;
protected List<VenditaOrdineInevasoListViewModel> mDataset;
protected ObservableArrayList<VenditaOrdineInevasoListViewModel> mObservableDataset;
protected IOnOrdineRowDispatchCallback mOrdineRowDispatch;
private Context mContext;
private List<VenditaOrdineInevasoListViewModel> mDataset;
private View mEmptyView;
private ObservableArrayList<VenditaOrdineInevasoListViewModel> mObservableDataset;
private IOnOrdineVenditaRowDispatched mOrdineRowDispatch;
private static final Pools.SynchronizedPool sPool = new Pools.SynchronizedPool(200);
@ -45,16 +48,19 @@ public class MainListOrdineVenditaInevasoAdapter extends RecyclerView.Adapter<Ma
}
}
public MainListOrdineVenditaInevasoAdapter(Context context, ObservableArrayList<VenditaOrdineInevasoListViewModel> myDataset) {
public MainListOrdineVenditaInevasoAdapter(Context context, ObservableArrayList<VenditaOrdineInevasoListViewModel> 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<Ma
public void onChanged(ObservableList<VenditaOrdineInevasoListViewModel> sender) {
refreshNotHiddenElements();
notifyDataSetChanged();
checkIfEmpty();
}
@Override
public void onItemRangeChanged(ObservableList<VenditaOrdineInevasoListViewModel> sender, int positionStart, int itemCount) {
refreshNotHiddenElements();
notifyDataSetChanged();
checkIfEmpty();
}
@Override
public void onItemRangeInserted(ObservableList<VenditaOrdineInevasoListViewModel> sender, int positionStart, int itemCount) {
refreshNotHiddenElements();
notifyDataSetChanged();
checkIfEmpty();
}
@Override
public void onItemRangeMoved(ObservableList<VenditaOrdineInevasoListViewModel> sender, int fromPosition, int toPosition, int itemCount) {
refreshNotHiddenElements();
notifyDataSetChanged();
checkIfEmpty();
}
@Override
public void onItemRangeRemoved(ObservableList<VenditaOrdineInevasoListViewModel> sender, int positionStart, int itemCount) {
refreshNotHiddenElements();
notifyDataSetChanged();
checkIfEmpty();
}
private void refreshNotHiddenElements() {
@ -172,6 +183,10 @@ public class MainListOrdineVenditaInevasoAdapter extends RecyclerView.Adapter<Ma
descrizione.setText(descrizioneString);
descrizione.setTextColor(descrizioneColor);
final TextView subDescrizione = groupModelView.findViewById(R.id.vendita_ordine_inevaso_main_list_group_item_subdescrizione);
if(rowItem.getSubDescrizione() != null) subDescrizione.setText(Html.fromHtml(rowItem.getSubDescrizione()));
subDescrizione.setVisibility(UtilityString.isNullOrEmpty(rowItem.getSubDescrizione()) ? View.GONE : View.VISIBLE);
final TextView qtaEvasa = groupModelView.findViewById(R.id.vendita_ordine_inevaso_main_list_group_item_qta_evasa);
qtaEvasa.setText(UtilityNumber.decimalToString(rowItem.getQtaRiservata()));
@ -218,6 +233,13 @@ public class MainListOrdineVenditaInevasoAdapter extends RecyclerView.Adapter<Ma
}
void checkIfEmpty() {
if (mEmptyView != null) {
final boolean emptyViewVisible = getItemCount() == 0;
mEmptyView.setVisibility(emptyViewVisible ? View.VISIBLE : View.GONE);
}
}
public interface IOnOrdineRowDispatchCallback {
void onOrdineRowDispatch(PickingObjectDTO item);

View File

@ -2,9 +2,12 @@ package it.integry.integrywmsnative.gest.vendita_ordine_inevaso.core;
import android.content.Context;
import android.databinding.ObservableArrayList;
import android.view.View;
import com.annimon.stream.Stream;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
@ -24,8 +27,8 @@ public class VenditaOrdineInevasoHelper {
mContext = context;
}
public MainListOrdineVenditaInevasoAdapter getRightListAdapter() {
return new MainListOrdineVenditaInevasoAdapter(mContext, mListViewModels);
public MainListOrdineVenditaInevasoAdapter getRightListAdapter(View emptyView) {
return new MainListOrdineVenditaInevasoAdapter(mContext, mListViewModels, emptyView);
}
public void updateListModel(List<List<PickingObjectDTO>> mDataset, List<MtbColr> 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<MtbColr> mtbColrs){
BigDecimal currentQtaEvasa = BigDecimal.ZERO;
if(mtbColrs != null) {
List<MtbColr> 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;
}
}

View File

@ -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);
}

View File

@ -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;
}

View File

@ -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<Boolean> isFabVisible = new ObservableField<>();
@ -43,7 +57,11 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback {
private MainListOrdineVenditaInevasoAdapter mAdapter;
private GestioneEnum defaultGestioneOfUL = null;
private List<FiltroOrdineDTO> defaultFiltroOrdine = null;
private List<FiltroOrdineDTO> 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<PickingObjectDTO> pickingList, List<OrdineVenditaGroupedInevasoDTO> orders, List<MtbColt> 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<OrdineVenditaGroupedInevasoDTO.Ordine> 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<GestioneEnum> 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<String> 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<String> 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<Integer> 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<Date> 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<MtbColt>() {
@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<MtbColt>() {
@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<List<String>>() {
@Override
public void onSuccess(List<String> 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<MtbColr> 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<MtbColr> currentMtbColrs = mArticoliInColloBottomSheetViewModel.mtbColt.get().getMtbColr();
List<MtbColr> 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<MtbColt>() {
@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);
}
});
}
}

View File

@ -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());
}

View File

@ -5,7 +5,7 @@
<variable
name="viewmodel"
type="it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.viewmodel.AccettazioneOnOrdineInevasoViewModel"/>
type="it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.viewmodel.AccettazioneOnOrdineAccettazioneInevasoViewModel"/>
</data>
@ -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.support.constraint.ConstraintLayout
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/accettazione_empty_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:alpha="0.3"
tools:context=".gest.lista_bancali.ListaBancaliActivity">
<android.support.constraint.Guideline
android:id="@+id/guideline_empty_top"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.2" />
<android.support.constraint.Guideline
android:id="@+id/guideline_empty_left"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.15" />
<android.support.constraint.Guideline
android:id="@+id/guideline_empty_right"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.85" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center_horizontal"
app:layout_constraintStart_toEndOf="@id/guideline_empty_left"
app:layout_constraintEnd_toStartOf="@id/guideline_empty_right"
app:layout_constraintTop_toTopOf="@id/guideline_empty_top">
<android.support.v7.widget.AppCompatImageView
android:layout_width="72dp"
android:layout_height="wrap_content"
android:src="@drawable/ic_playlist_add_check_24dp"
android:adjustViewBounds="true"/>
<android.support.v7.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:textColor="@android:color/black"
android:textSize="18sp"
android:text="@string/no_item_to_pick_text"/>
</LinearLayout>
</android.support.constraint.ConstraintLayout>
<com.github.clans.fab.FloatingActionMenu
android:id="@+id/accettazione_ordine_inevaso_fab"
android:layout_width="match_parent"

View File

@ -87,7 +87,7 @@
android:gravity="center_horizontal"
android:textColor="@android:color/black"
android:textSize="18sp"
android:text="Nessun bancale creato in precedenza"/>
android:text="@string/no_lu_already_registered_text"/>
</LinearLayout>
</android.support.constraint.ConstraintLayout>

View File

@ -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" />
<android.support.constraint.ConstraintLayout
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/vendita_ordine_inevaso_empty_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:alpha="0.3"
tools:context=".gest.lista_bancali.ListaBancaliActivity">
<android.support.constraint.Guideline
android:id="@+id/guideline_empty_top"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.2" />
<android.support.constraint.Guideline
android:id="@+id/guideline_empty_left"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.15" />
<android.support.constraint.Guideline
android:id="@+id/guideline_empty_right"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.85" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center_horizontal"
app:layout_constraintStart_toEndOf="@id/guideline_empty_left"
app:layout_constraintEnd_toStartOf="@id/guideline_empty_right"
app:layout_constraintTop_toTopOf="@id/guideline_empty_top">
<android.support.v7.widget.AppCompatImageView
android:layout_width="72dp"
android:layout_height="wrap_content"
android:src="@drawable/ic_playlist_add_check_24dp"
android:adjustViewBounds="true"/>
<android.support.v7.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:textColor="@android:color/black"
android:textSize="18sp"
android:text="@string/no_item_to_pick_text"/>
</LinearLayout>
</android.support.constraint.ConstraintLayout>
<com.github.clans.fab.FloatingActionMenu
android:id="@+id/vendita_ordine_inevaso_fab"

View File

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_height="wrap_content"
xmlns:tools="http://schemas.android.com/tools"
android:padding="8dp">
<LinearLayout
@ -94,7 +94,14 @@
android:layout_marginTop="4dp"
android:textSize="16sp"
android:textColor="@android:color/black"
android:text="DESCRIZIONE"/>
tools:text="DESCRIZIONE"/>
<TextView
android:id="@+id/vendita_ordine_inevaso_main_list_group_item_subdescrizione"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="14sp"
tools:text="SUB DESCRIZIONE"/>
</LinearLayout>

View File

@ -114,7 +114,11 @@
<string name="activity_contenuto_bancale_title">Contenuto UL</string>
<string name="activity_vendita_inevaso_title">Spedizione merce</string>
<string name="lu_number_text"><![CDATA[UL n° <b>%d</b> - <b>%s</b>]]></string>
<string name="button_ignore_print">Salta stampa</string>
<string name="no_lu_already_registered_text">Nessuna UL registrata a magazzino</string>
<string name="no_item_to_pick_text">Nessun articolo da prelevare</string>
</resources>

View File

@ -122,6 +122,11 @@
<string name="activity_contenuto_bancale_title">LU Content</string>
<string name="activity_vendita_inevaso_title">Shipping goods</string>
<string name="lu_number_text"><![CDATA[LU n° <b>%d</b> - <b>%s</b>]]></string>
<string name="button_ignore_print">Skip print</string>
<string name="no_lu_already_registered_text">No LU already registered</string>
<string name="no_item_to_pick_text">No items to pick</string>
</resources>