Refactoring main list accettazione

This commit is contained in:
Giuseppe Scorrano 2021-08-05 18:23:54 +02:00
parent fbcda5eaf6
commit 624a880ad5
16 changed files with 483 additions and 842 deletions

View File

@ -5,6 +5,8 @@ import javax.inject.Singleton;
import dagger.Component; import dagger.Component;
import it.integry.integrywmsnative.core.context.AppContext; import it.integry.integrywmsnative.core.context.AppContext;
import it.integry.integrywmsnative.core.data_store.db.RoomModule; import it.integry.integrywmsnative.core.data_store.db.RoomModule;
import it.integry.integrywmsnative.gest.accettazione.MainAccettazioneComponent;
import it.integry.integrywmsnative.gest.accettazione.MainAccettazioneModule;
import it.integry.integrywmsnative.gest.accettazione_picking.AccettazionePickingComponent; import it.integry.integrywmsnative.gest.accettazione_picking.AccettazionePickingComponent;
import it.integry.integrywmsnative.gest.accettazione_picking.AccettazionePickingModule; import it.integry.integrywmsnative.gest.accettazione_picking.AccettazionePickingModule;
import it.integry.integrywmsnative.gest.main.MainActivityComponent; import it.integry.integrywmsnative.gest.main.MainActivityComponent;
@ -53,10 +55,11 @@ import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCr
// Definition of the Application graph // Definition of the Application graph
@Singleton @Singleton
@Component(modules = { @Component(modules = {
RoomModule.class,
SplashActivityModule.class, SplashActivityModule.class,
MainApplicationModule.class, MainApplicationModule.class,
MainFragmentModule.class, MainFragmentModule.class,
RoomModule.class, MainAccettazioneModule.class,
MainActivityModule.class, MainActivityModule.class,
PVOrdineAcquistoGrigliaModule.class, PVOrdineAcquistoGrigliaModule.class,
PVOrdineAcquistoEditModule.class, PVOrdineAcquistoEditModule.class,
@ -83,6 +86,7 @@ public interface MainApplicationComponent {
SplashActivityComponent.Factory splashActivityComponent(); SplashActivityComponent.Factory splashActivityComponent();
MainActivityComponent.Factory mainActivityComponent(); MainActivityComponent.Factory mainActivityComponent();
MainFragmentComponent.Factory mainFragmentComponent(); MainFragmentComponent.Factory mainFragmentComponent();
MainAccettazioneComponent.Factory mainAccettazioneComponent();
PVOrdineAcquistoGrigliaComponent.Factory pvOrdineAcquistoGrigliaComponent(); PVOrdineAcquistoGrigliaComponent.Factory pvOrdineAcquistoGrigliaComponent();
PVOrdineAcquistoEditComponent.Factory pvOrdineAcquistoEditComponent(); PVOrdineAcquistoEditComponent.Factory pvOrdineAcquistoEditComponent();
PickingLiberoComponent.Factory pickingLiberoComponent(); PickingLiberoComponent.Factory pickingLiberoComponent();

View File

@ -0,0 +1,15 @@
package it.integry.integrywmsnative.gest.accettazione;
import dagger.Subcomponent;
@Subcomponent
public interface MainAccettazioneComponent {
@Subcomponent.Factory
interface Factory {
MainAccettazioneComponent create();
}
void inject(MainAccettazioneFragment mainAccettazioneFragment);
}

View File

@ -1,20 +1,17 @@
package it.integry.integrywmsnative.gest.accettazione; package it.integry.integrywmsnative.gest.accettazione;
import android.app.Dialog;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.text.Html; import android.text.Html;
import android.text.SpannableString;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.Toast;
import androidx.appcompat.widget.AppCompatTextView; import androidx.appcompat.widget.AppCompatTextView;
import androidx.databinding.DataBindingUtil; import androidx.databinding.DataBindingUtil;
import androidx.fragment.app.Fragment; import androidx.databinding.ObservableArrayList;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import com.annimon.stream.Stream; import com.annimon.stream.Stream;
@ -23,44 +20,46 @@ import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import javax.inject.Inject;
import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.data_cache.DataCache; import it.integry.integrywmsnative.core.data_cache.DataCache;
import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.di.BindableBoolean;
import it.integry.integrywmsnative.core.expansion.BaseFragment;
import it.integry.integrywmsnative.core.interfaces.IScrollableFragment; import it.integry.integrywmsnative.core.interfaces.IScrollableFragment;
import it.integry.integrywmsnative.core.interfaces.ISearcableFragment; import it.integry.integrywmsnative.core.interfaces.ISearcableFragment;
import it.integry.integrywmsnative.core.interfaces.ITitledFragment; import it.integry.integrywmsnative.core.interfaces.ITitledFragment;
import it.integry.integrywmsnative.core.rest.CommonRESTException; import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal; import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityProgress;
import it.integry.integrywmsnative.databinding.FragmentMainAccettazioneBinding; import it.integry.integrywmsnative.databinding.FragmentMainAccettazioneBinding;
import it.integry.integrywmsnative.gest.accettazione.core.AccettazioneHelper;
import it.integry.integrywmsnative.gest.accettazione.core.MainListAccettazioneAdapter; import it.integry.integrywmsnative.gest.accettazione.core.MainListAccettazioneAdapter;
import it.integry.integrywmsnative.gest.accettazione.core.MainListAccettazioneClienteListModel;
import it.integry.integrywmsnative.gest.accettazione.core.MainListAccettazioneListModel;
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO; import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO;
import it.integry.integrywmsnative.gest.accettazione.dto.SitArtOrdDTO; import it.integry.integrywmsnative.gest.accettazione.dto.SitArtOrdDTO;
import it.integry.integrywmsnative.gest.accettazione.rest.OrdiniAccettazioneRESTConsumer;
import it.integry.integrywmsnative.gest.accettazione_picking.AccettazionePickingActivity; import it.integry.integrywmsnative.gest.accettazione_picking.AccettazionePickingActivity;
import it.integry.integrywmsnative.ui.ElevatedToolbar; import it.integry.integrywmsnative.ui.ElevatedToolbar;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
public class MainAccettazioneFragment extends Fragment implements ISearcableFragment, ITitledFragment, IScrollableFragment { public class MainAccettazioneFragment extends BaseFragment implements ISearcableFragment, ITitledFragment, IScrollableFragment, MainAccettazioneViewModel.Listener {
public BindableBoolean fabVisible = new BindableBoolean(false);
@Inject
MainAccettazioneViewModel mViewModel;
private final List<Runnable> mOnPreDestroyList = new ArrayList<>(); private final List<Runnable> mOnPreDestroyList = new ArrayList<>();
private ElevatedToolbar mToolbar; private ElevatedToolbar mToolbar;
private FragmentMainAccettazioneBinding mBinding; private FragmentMainAccettazioneBinding mBinding;
private AccettazioneHelper mHelper; private final ObservableArrayList<MainListAccettazioneListModel> mOrdiniInevasiMutableData = new ObservableArrayList<>();
private MainListAccettazioneAdapter mAdapter;
private List<OrdineAccettazioneInevasoDTO> mOriginalOrderList;
private final List<OrdineAccettazioneInevasoDTO> mRenderedOrderList = new ArrayList<>();
private AppCompatTextView mAppBarTitle; private AppCompatTextView mAppBarTitle;
public MainAccettazioneFragment() { public MainAccettazioneFragment() {
// Required empty public constructor // Required empty public constructor
} }
@ -73,8 +72,6 @@ public class MainAccettazioneFragment extends Fragment implements ISearcableFrag
} }
@Override @Override
public void onCreateActionBar(AppCompatTextView titleText, Context context) { public void onCreateActionBar(AppCompatTextView titleText, Context context) {
mAppBarTitle = titleText; mAppBarTitle = titleText;
@ -87,21 +84,32 @@ public class MainAccettazioneFragment extends Fragment implements ISearcableFrag
mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_main_accettazione, container, false); mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_main_accettazione, container, false);
init(); MainApplication.appComponent
.mainAccettazioneComponent()
.create()
.inject(this);
mViewModel.setListener(this);
mBinding.setLifecycleOwner(this);
mBinding.setView(this); mBinding.setView(this);
mBinding.accettazioneMainList.setLayoutManager(new LinearLayoutManager(getActivity()));
mBinding.accettazioneMainFab.hide();
mBinding.accettazioneMainFab.setOnClickListener(v -> { this.initRecyclerView();
this.onAccettazioneMainFabClick();
});
mToolbar.setRecyclerView(mBinding.accettazioneMainList); mToolbar.setRecyclerView(mBinding.accettazioneMainList);
return mBinding.getRoot(); return mBinding.getRoot();
} }
@Override
public void onStart() {
super.onStart();
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
mViewModel.init(codMdep);
}
@Override @Override
public void onDestroy() { public void onDestroy() {
for (Runnable onPreDestroy : mOnPreDestroyList) { for (Runnable onPreDestroy : mOnPreDestroyList) {
@ -111,111 +119,93 @@ public class MainAccettazioneFragment extends Fragment implements ISearcableFrag
} }
private void init() {
final Dialog progress = UtilityProgress.createDefaultProgressDialog(getActivity());
mHelper = new AccettazioneHelper(getActivity());
mHelper.loadOrdini(ordini -> {
if(ordini != null) {
Toast.makeText(getActivity(), "Caricati " + ordini.size() + " ordini", Toast.LENGTH_LONG).show();
mOriginalOrderList = ordini;
}
mBinding.ordiniAccettazioneEmptyView.setVisibility(ordini != null && ordini.size() > 0 ? View.GONE : View.VISIBLE);
refreshRenderedOrdini(ordini);
initRecyclerView();
progress.dismiss();
}, ex -> {
UtilityExceptions.defaultException(getActivity(), ex, progress);
});
}
private void initRecyclerView() { private void initRecyclerView() {
mAdapter = new MainListAccettazioneAdapter(getActivity(), mRenderedOrderList, onSingleSelectionChanged); this.mViewModel.getOrderList().observe(getViewLifecycleOwner(), this::refreshList);
mBinding.accettazioneMainList.setAdapter(mAdapter);
}
private void refreshRenderedOrdini(List<OrdineAccettazioneInevasoDTO> ordini) {
mRenderedOrderList.clear(); MainListAccettazioneAdapter adapter = new MainListAccettazioneAdapter(getActivity(), mOrdiniInevasiMutableData)
if(ordini != null) mRenderedOrderList.addAll(ordini); .setOnGroupItemClicked(x -> {
Stream.of(mOrdiniInevasiMutableData)
.filter(y -> !y.getGroupTitle().equalsIgnoreCase(x) && y.getSelectedObservable().get())
.forEach(y -> y.getSelectedObservable().set(false));
boolean allSelected = Stream.of(mOrdiniInevasiMutableData)
.filter(y -> y.getGroupTitle().equalsIgnoreCase(x))
.allMatch(y -> y.getSelectedObservable().get());
Stream.of(mOrdiniInevasiMutableData)
.filter(y -> y.getGroupTitle().equalsIgnoreCase(x))
.forEach(y -> y.getSelectedObservable().set(!allSelected));
})
.setOnItemChecked(x -> {
Stream.of(mOrdiniInevasiMutableData)
.filter(y -> !y.getGroupTitle().equalsIgnoreCase(x.getGroupTitle()) && y.getSelectedObservable().get())
.forEach(y -> y.getSelectedObservable().set(false));
fabVisible.set(Stream.of(mOrdiniInevasiMutableData)
.anyMatch(y -> y.getSelectedObservable().get()));
});
adapter.setEmptyView(this.mBinding.ordiniAccettazioneEmptyView);
this.mBinding.accettazioneMainList.setAdapter(adapter);
this.mBinding.accettazioneMainList.setLayoutManager(new LinearLayoutManager(getActivity()));
if (mToolbar != null)
mToolbar.setRecyclerView(this.mBinding.accettazioneMainList);
} }
private void refreshList(List<OrdineAccettazioneInevasoDTO> filteredList) {
private final RunnableArgs<OrdineAccettazioneInevasoDTO> onSingleSelectionChanged = dto -> { List<OrdineAccettazioneInevasoDTO> tmpList = null;
List<OrdineAccettazioneInevasoDTO> selectedOrders = mHelper.getSelectedOrders(mOriginalOrderList);
if(dto.isSelected()) { if (filteredList != null) {
Stream.of(selectedOrders) tmpList = filteredList;
.filter(x -> !x.getCodAnagOrd().equalsIgnoreCase(dto.getCodAnagOrd())) } else {
.forEach(x -> x.setSelected(false)); tmpList = mViewModel.getOrderList().getValue();
} }
if(selectedOrders != null && selectedOrders.size() > 0) { this.mOrdiniInevasiMutableData.clear();
mBinding.accettazioneMainFab.show(); this.mOrdiniInevasiMutableData.addAll(convertDataModelToListModel(tmpList));
} }
else {
mBinding.accettazioneMainFab.hide();
}
};
private void onAccettazioneMainFabClick() { private List<MainListAccettazioneListModel> convertDataModelToListModel(List<OrdineAccettazioneInevasoDTO> dataList) {
List<OrdineAccettazioneInevasoDTO> selectedOrders = mHelper.getSelectedOrders(mOriginalOrderList); return Stream.of(dataList)
.distinctBy(OrdineAccettazioneInevasoDTO::getBarcode)
.sortBy(x -> x.getRagSocOrd() + (x.getDataConsD() != null ? UtilityDate.formatDate(x.getDataConsD(), UtilityDate.COMMONS_DATE_FORMATS.YMD_SLASH) : ""))
.map(x -> {
MainListAccettazioneListModel listModel = new MainListAccettazioneListModel();
final Dialog progress = UtilityProgress.createDefaultProgressDialog(getActivity()); listModel.setOriginalModel(x);
OrdiniAccettazioneRESTConsumer.retrievePickingListNewStatic(selectedOrders, sitArtOrds -> { listModel.setGroupTitle(x.getRagSocOrd());
progress.dismiss();
listModel.setDescription(String.format(getString(R.string.ord_acq_testata), x.getNumero().toString(), UtilityDate.formatDate(x.getDataD(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)));
long artsCounter = Stream.of(sitArtOrds) List<MainListAccettazioneClienteListModel> clienti = Stream.of(dataList)
.filter(x -> UtilityBigDecimal.greaterThan(x.getQtaDaEvadere(), BigDecimal.ZERO)) .filter(y -> y.getBarcode().equals(x.getBarcode()))
.map(SitArtOrdDTO::getCodMart) .map(y -> new MainListAccettazioneClienteListModel()
.distinct() .setPrimaryText(y.getRifOrd())
.count(); .setRightText(UtilityDate.formatDate(y.getDataConsD(), UtilityDate.COMMONS_DATE_FORMATS.DMY_SLASH)))
.toList();
long ordsCounter = Stream.of(sitArtOrds)
.distinctBy(x -> x.getDataOrd() + " " + x.getNumOrd() + " " + x.getGestione()) listModel.setClientiListModel(clienti);
.count();
return listModel;
})
DialogSimpleMessageView.makeInfoDialog(getText(R.string.orders).toString(), .toList();
Html.fromHtml(String.format(getActivity().getResources().getQuantityString(R.plurals.loaded_orders_message, (int) ordsCounter), ordsCounter) }
+ "<br /><br />" +
"<b>" + artsCounter + "</b> " + getActivity().getResources().getQuantityString(R.plurals.available_articles, (int) artsCounter)), public void dispatchOrders() {
null, List<OrdineAccettazioneInevasoDTO> selectedOrders = Stream.of(this.mOrdiniInevasiMutableData)
() -> { .filter(x -> x.getSelectedObservable().get())
.map(MainListAccettazioneListModel::getOriginalModel)
String cacheSitArtItemID = DataCache.addItem(sitArtOrds); .toList();
String cacheOrdersItemID = DataCache.addItem(selectedOrders);
Intent myIntent = new Intent(getActivity(), AccettazionePickingActivity.class);
myIntent.putExtra("keyOrders", cacheOrdersItemID);
myIntent.putExtra("keySitArts", cacheSitArtItemID);
getActivity().startActivity(myIntent);
}).show(getActivity().getSupportFragmentManager(), "tag");
}, ex -> {
progress.dismiss();
String errorMessage = CommonRESTException.tryRecognizeThenGetMessage(ex);
if(errorMessage == null) errorMessage = ex.getMessage() + "\n" + ex.getCause().getCause().getMessage();
DialogSimpleMessageView
.makeErrorDialog(new SpannableString(errorMessage), null, null)
.show(getActivity().getSupportFragmentManager(), "tag");
});
this.mViewModel.loadPicking(selectedOrders);
} }
@ -236,11 +226,22 @@ public class MainAccettazioneFragment extends Fragment implements ISearcableFrag
@Override @Override
public boolean onQueryTextChange(String newText) { public boolean onQueryTextChange(String newText) {
final List<OrdineAccettazioneInevasoDTO> filtermodelist = mHelper.getFilteredOrdersByFornitore(mOriginalOrderList, newText); List<OrdineAccettazioneInevasoDTO> filteredOrders = new ArrayList<>();
mAdapter.updateItems(filtermodelist); List<OrdineAccettazioneInevasoDTO> originalList = this.mViewModel.getOrderList().getValue();
return true;
if(originalList == null || originalList.isEmpty()) return false;
for(int i = 0; i < originalList.size(); i++){
if(originalList.get(i).getRagSocOrd().toLowerCase().contains(newText.toLowerCase())){
filteredOrders.add(originalList.get(i));
}
}
refreshList(filteredOrders);
return true;
} }
@Override @Override
public void setScrollToolbar(ElevatedToolbar toolbar) { public void setScrollToolbar(ElevatedToolbar toolbar) {
mToolbar = toolbar; mToolbar = toolbar;
@ -251,4 +252,35 @@ public class MainAccettazioneFragment extends Fragment implements ISearcableFrag
public void addOnPreDestroy(Runnable onPreDestroy) { public void addOnPreDestroy(Runnable onPreDestroy) {
this.mOnPreDestroyList.add(onPreDestroy); this.mOnPreDestroyList.add(onPreDestroy);
} }
@Override
public void onOrdersDispatched(List<OrdineAccettazioneInevasoDTO> orders, List<SitArtOrdDTO> sitArts) {
long artsCounter = Stream.of(sitArts)
.filter(x -> UtilityBigDecimal.greaterThan(x.getQtaDaEvadere(), BigDecimal.ZERO))
.map(SitArtOrdDTO::getCodMart)
.distinct()
.count();
long ordsCounter = Stream.of(sitArts)
.distinctBy(x -> x.getDataOrd() + " " + x.getNumOrd() + " " + x.getGestione())
.count();
DialogSimpleMessageView.makeInfoDialog(getText(R.string.orders).toString(),
Html.fromHtml(String.format(getActivity().getResources().getQuantityString(R.plurals.loaded_orders_message, (int) ordsCounter), ordsCounter)
+ "<br /><br />" +
"<b>" + artsCounter + "</b> " + getActivity().getResources().getQuantityString(R.plurals.available_articles, (int) artsCounter)),
null,
() -> {
String cacheSitArtItemID = DataCache.addItem(sitArts);
String cacheOrdersItemID = DataCache.addItem(orders);
Intent myIntent = new Intent(getActivity(), AccettazionePickingActivity.class);
myIntent.putExtra("keyOrders", cacheOrdersItemID);
myIntent.putExtra("keySitArts", cacheSitArtItemID);
getActivity().startActivity(myIntent);
}).show(getActivity().getSupportFragmentManager(), "tag");
}
} }

View File

@ -0,0 +1,20 @@
package it.integry.integrywmsnative.gest.accettazione;
import dagger.Module;
import dagger.Provides;
import it.integry.integrywmsnative.gest.accettazione.rest.OrdiniAccettazioneRESTConsumer;
@Module(subcomponents = {MainAccettazioneComponent.class})
public class MainAccettazioneModule {
@Provides
OrdiniAccettazioneRESTConsumer providesOrdiniAccettazioneRESTConsumer() {
return new OrdiniAccettazioneRESTConsumer();
}
@Provides
MainAccettazioneViewModel providesMainAccettazioneViewModel(OrdiniAccettazioneRESTConsumer ordiniAccettazioneRESTConsumer) {
return new MainAccettazioneViewModel(ordiniAccettazioneRESTConsumer);
}
}

View File

@ -0,0 +1,94 @@
package it.integry.integrywmsnative.gest.accettazione;
import androidx.lifecycle.MutableLiveData;
import java.util.List;
import javax.inject.Inject;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO;
import it.integry.integrywmsnative.gest.accettazione.dto.SitArtOrdDTO;
import it.integry.integrywmsnative.gest.accettazione.rest.OrdiniAccettazioneRESTConsumer;
public class MainAccettazioneViewModel {
private final OrdiniAccettazioneRESTConsumer mOrdiniAccettazioneRESTConsumer;
private final MutableLiveData<List<OrdineAccettazioneInevasoDTO>> mOrderList = new MutableLiveData<>();
private Listener mListener;
private String codMdep;
@Inject
public MainAccettazioneViewModel(OrdiniAccettazioneRESTConsumer ordiniAccettazioneRESTConsumer) {
this.mOrdiniAccettazioneRESTConsumer = ordiniAccettazioneRESTConsumer;
}
public void init(String currentCodMdep) {
this.codMdep = currentCodMdep;
this.sendOnLoadingStarted();
new Thread(() -> {
mOrdiniAccettazioneRESTConsumer.getOrdiniInevasi(codMdep, orderList -> {
this.mOrderList.setValue(orderList);
this.sendOnLoadingEnded();
}, this::sendError);
}).start();
}
public void loadPicking(List<OrdineAccettazioneInevasoDTO> selectedOrders) {
this.sendOnLoadingStarted();
new Thread(() -> {
this.mOrdiniAccettazioneRESTConsumer.retrievePickingListNew(selectedOrders, sitArtOrds -> {
this.sendOnOrdersDispatched(selectedOrders, sitArtOrds);
this.sendOnLoadingEnded();
}, this::sendError);
}).start();
}
public MutableLiveData<List<OrdineAccettazioneInevasoDTO>> getOrderList() {
return mOrderList;
}
public MainAccettazioneViewModel setListener(Listener listener) {
this.mListener = listener;
return this;
}
private void sendOnLoadingStarted() {
if (this.mListener != null) mListener.onLoadingStarted();
}
private void sendOnLoadingEnded() {
if (this.mListener != null) mListener.onLoadingEnded();
}
private void sendError(Exception ex) {
if (this.mListener != null) mListener.onError(ex);
}
private void sendOnOrdersDispatched(List<OrdineAccettazioneInevasoDTO> orders, List<SitArtOrdDTO> sitArts) {
if (this.mListener != null) mListener.onOrdersDispatched(orders, sitArts);
}
public interface Listener extends ILoadingListener {
void onError(Exception ex);
void onOrdersDispatched(List<OrdineAccettazioneInevasoDTO> orders, List<SitArtOrdDTO> sitArts);
}
}

View File

@ -1,87 +0,0 @@
package it.integry.integrywmsnative.gest.accettazione.core;
import android.content.Context;
import com.annimon.stream.Stream;
import java.util.ArrayList;
import java.util.List;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.rest.RESTBuilder;
import it.integry.integrywmsnative.core.rest.model.EsitoType;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO;
import it.integry.integrywmsnative.gest.accettazione.rest.OrdiniAccettazioneRESTConsumerService;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
/**
* Created by GiuseppeS on 06/03/2018.
*/
public class AccettazioneHelper {
private Context mContext;
public AccettazioneHelper(Context context){
mContext = context;
}
public void loadOrdini(RunnableArgs<List<OrdineAccettazioneInevasoDTO>> onComplete, RunnableArgs<Exception> onFailed){
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
OrdiniAccettazioneRESTConsumerService service = RESTBuilder.getService(OrdiniAccettazioneRESTConsumerService.class);
service.listOrdiniInevasi(codMdep, "A").enqueue(new Callback<ServiceRESTResponse<List<OrdineAccettazioneInevasoDTO>>>() {
@Override
public void onResponse(Call<ServiceRESTResponse<List<OrdineAccettazioneInevasoDTO>>> call, Response<ServiceRESTResponse<List<OrdineAccettazioneInevasoDTO>>> response) {
if(response.isSuccessful()) {
if(response.body() != null) {
if(response.body().getEsito() == EsitoType.OK) {
onComplete.run(response.body().getDto());
} else {
onFailed.run(new Exception(response.body().getErrorMessage()));
}
} else {
onFailed.run(new Exception(response.message()));
}
} else {
onFailed.run(new Exception("Status " + response.code() + ": " + response.message()));
}
}
@Override
public void onFailure(Call<ServiceRESTResponse<List<OrdineAccettazioneInevasoDTO>>> call, Throwable t) {
onFailed.run(new Exception(t));
}
});
}
public List<OrdineAccettazioneInevasoDTO> getSelectedOrders(List<OrdineAccettazioneInevasoDTO> ordiniList){
return Stream.of(ordiniList)
.filter(OrdineAccettazioneInevasoDTO::isSelected)
.toList();
}
public List<OrdineAccettazioneInevasoDTO> getFilteredOrdersByFornitore(List<OrdineAccettazioneInevasoDTO> groupedOrdiniInevasi, String textFilter){
List<OrdineAccettazioneInevasoDTO> filteredOrders = new ArrayList<>();
for(int i = 0; i < groupedOrdiniInevasi.size(); i++){
if(groupedOrdiniInevasi.get(i).getRagSocOrd().toLowerCase().contains(textFilter.toLowerCase())){
filteredOrders.add(groupedOrdiniInevasi.get(i));
}
}
return filteredOrders;
}
}

View File

@ -3,36 +3,28 @@ package it.integry.integrywmsnative.gest.accettazione.core;
import android.content.Context; import android.content.Context;
import android.text.Html; import android.text.Html;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import androidx.databinding.DataBindingUtil; import androidx.databinding.DataBindingUtil;
import androidx.databinding.Observable; import androidx.databinding.ObservableArrayList;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.annimon.stream.Stream;
import com.zhukic.sectionedrecyclerview.SectionedRecyclerViewAdapter;
import java.util.List;
import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.di.BindableBoolean; import it.integry.integrywmsnative.core.expansion.OnSingleClickListener;
import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.core.expansion.view.ExtendedSectionedRecyclerView;
import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.databinding.AccettazioneMainListGroupClientiBinding; import it.integry.integrywmsnative.databinding.AccettazioneMainListGroupClientiBinding;
import it.integry.integrywmsnative.databinding.AccettazioneMainListGroupModelBinding; import it.integry.integrywmsnative.databinding.AccettazioneMainListGroupModelBinding;
import it.integry.integrywmsnative.databinding.AccettazioneMainListModelBinding; import it.integry.integrywmsnative.databinding.AccettazioneMainListModelBinding;
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO;
import it.integry.integrywmsnative.ui.fastscroll.SectionTitleProvider;
public class MainListAccettazioneAdapter extends SectionedRecyclerViewAdapter<MainListAccettazioneAdapter.SubheaderHolder, MainListAccettazioneAdapter.SingleItemViewHolder> implements SectionTitleProvider {
public class MainListAccettazioneAdapter extends ExtendedSectionedRecyclerView<MainListAccettazioneListModel, MainListAccettazioneAdapter.SubheaderHolder, MainListAccettazioneAdapter.SingleItemViewHolder> {
private Context mContext; private Context mContext;
private List<OrdineAccettazioneInevasoDTO> mOriginalDataset; private RunnableArgs<String> mOnGroupItemClicked;
private List<OrdineAccettazioneInevasoDTO> mDataset; private RunnableArgs<MainListAccettazioneListModel> mOnItemChecked;
private RunnableArgs<OrdineAccettazioneInevasoDTO> mOnSingleSelectionChanged;
static class SubheaderHolder extends RecyclerView.ViewHolder { static class SubheaderHolder extends RecyclerView.ViewHolder {
@ -55,31 +47,22 @@ public class MainListAccettazioneAdapter extends SectionedRecyclerViewAdapter<Ma
} }
} }
public MainListAccettazioneAdapter(Context context, List<OrdineAccettazioneInevasoDTO> myDataset, RunnableArgs<OrdineAccettazioneInevasoDTO> onSingleSelectionChanged) { public MainListAccettazioneAdapter(Context context, ObservableArrayList<MainListAccettazioneListModel> myDataset) {
super(myDataset);
mContext = context; mContext = context;
mOriginalDataset = myDataset;
mDataset = orderItems(myDataset);
mOnSingleSelectionChanged = onSingleSelectionChanged;
} }
public void updateItems(List<OrdineAccettazioneInevasoDTO> updatedDataset) { public MainListAccettazioneAdapter setOnGroupItemClicked(RunnableArgs<String> onGroupItemClicked) {
mDataset.clear(); this.mOnGroupItemClicked = onGroupItemClicked;
mDataset.addAll(orderItems(updatedDataset)); return this;
notifyDataSetChanged();
notifyDataChanged();
} }
public MainListAccettazioneAdapter setOnItemChecked(RunnableArgs<MainListAccettazioneListModel> onItemChecked) {
private List<OrdineAccettazioneInevasoDTO> orderItems(List<OrdineAccettazioneInevasoDTO> dataset) { this.mOnItemChecked = onItemChecked;
return Stream.of(dataset) return this;
.distinctBy(OrdineAccettazioneInevasoDTO::getBarcode)
.sortBy(x -> x.getRagSocOrd() + (x.getDataConsD() != null ? UtilityDate.formatDate(x.getDataConsD(), UtilityDate.COMMONS_DATE_FORMATS.YMD_SLASH) : ""))
.toList();
} }
@Override @Override
public SubheaderHolder onCreateSubheaderViewHolder(ViewGroup parent, int viewType) { public SubheaderHolder onCreateSubheaderViewHolder(ViewGroup parent, int viewType) {
AccettazioneMainListModelBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.accettazione_main_list_model, parent, false); AccettazioneMainListModelBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.accettazione_main_list_model, parent, false);
@ -95,48 +78,32 @@ public class MainListAccettazioneAdapter extends SectionedRecyclerViewAdapter<Ma
@Override @Override
public void onBindSubheaderViewHolder(SubheaderHolder subheaderHolder, int nextItemPosition) { public void onBindSubheaderViewHolder(SubheaderHolder subheaderHolder, int nextItemPosition) {
subheaderHolder.binding.accettazioneMainListGroupHeader.setText(mDataset.get(nextItemPosition).getRagSocOrd()); subheaderHolder.binding.accettazioneMainListGroupHeader.setText(mDataset.get(nextItemPosition).getGroupTitle());
subheaderHolder.binding.getRoot().setOnClickListener(v -> { subheaderHolder.binding.getRoot().setOnClickListener(new OnSingleClickListener() {
@Override
boolean anySelected = Stream.of(mDataset) public void onSingleClick(View v) {
.filter(x -> x.getCodAnagOrd().equals(mDataset.get(nextItemPosition).getCodAnagOrd())) if(mOnGroupItemClicked != null) mOnGroupItemClicked.run(mDataset.get(nextItemPosition).getGroupTitle());
.anyMatch(OrdineAccettazioneInevasoDTO::isSelected); }
Stream.of(mDataset)
.filter(x -> x.getCodAnagOrd().equals(mDataset.get(nextItemPosition).getCodAnagOrd()))
.forEach(x -> x.setSelected(!anySelected));
}); });
} }
@Override @Override
public void onBindItemViewHolder(SingleItemViewHolder h, int itemPosition) { public void onBindItemViewHolder(SingleItemViewHolder holder, int itemPosition) {
final OrdineAccettazioneInevasoDTO ordine = mDataset.get(itemPosition); final MainListAccettazioneListModel ordine = mDataset.get(itemPosition);
final SingleItemViewHolder holder = h;
holder.binding.accettazioneMainListGroupItemContainerCheckBox.setTag(ordine.getNumero()); ordine.getSelectedObservable().resetOnPropertyChangedCallback();
holder.binding.accettazioneMainListGroupItemContainerCheckBox.setOnCheckedChangeListener(null);
ordine.selected.resetOnPropertyChangedCallback();
String testataOrdString = String.format(mContext.getString(R.string.ord_acq_testata), String.valueOf(ordine.getNumero()), UtilityDate.formatDate(ordine.getDataD(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN));
holder.binding.accettazioneMainListGroupItemContainerTestataOrd.setText(Html.fromHtml(testataOrdString));
holder.binding.accettazioneMainListGroupItemContainerClientiOrd.removeAllViews(); holder.binding.accettazioneMainListGroupItemContainerClientiOrd.removeAllViews();
holder.binding.accettazioneMainListGroupItemContainerTestataOrd.setText(Html.fromHtml(ordine.getDescription()));
List<OrdineAccettazioneInevasoDTO> clienti = Stream.of(mOriginalDataset) for (MainListAccettazioneClienteListModel cliente : ordine.getClientiListModel()) {
.filter(x -> x.getBarcode().equals(ordine.getBarcode()))
.toList();
for (OrdineAccettazioneInevasoDTO cliente : clienti) {
AccettazioneMainListGroupClientiBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.accettazione_main_list_group_clienti, holder.binding.accettazioneMainListGroupItemContainerClientiOrd, false); AccettazioneMainListGroupClientiBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.accettazione_main_list_group_clienti, holder.binding.accettazioneMainListGroupItemContainerClientiOrd, false);
binding.accettazioneMainListGroupClientiComm.setText(cliente.getRifOrd()); binding.accettazioneMainListGroupClientiComm.setText(cliente.getPrimaryText());
if (!UtilityString.isNullOrEmpty(cliente.getDataConsS())) { if (!UtilityString.isNullOrEmpty(cliente.getRightText())) {
binding.accettazioneMainListGroupClientiDatacons.setText(UtilityDate.formatDate(cliente.getDataConsD(), UtilityDate.COMMONS_DATE_FORMATS.DMY_SLASH)); binding.accettazioneMainListGroupClientiDatacons.setText(cliente.getRightText());
} else { } else {
binding.accettazioneMainListGroupClientiDatacons.setText(""); binding.accettazioneMainListGroupClientiDatacons.setText("");
} }
@ -144,37 +111,34 @@ public class MainListAccettazioneAdapter extends SectionedRecyclerViewAdapter<Ma
holder.binding.accettazioneMainListGroupItemContainerClientiOrd.addView(binding.getRoot()); holder.binding.accettazioneMainListGroupItemContainerClientiOrd.addView(binding.getRoot());
} }
holder.binding.setCheckboxValue(ordine.selected); holder.binding.setSelected(ordine.getSelectedObservable());
holder.binding.executePendingBindings();
holder.binding.accettazioneMainListGroupItemContainerCheckBox.jumpDrawablesToCurrentState();
ordine.getSelectedObservable().addOnPropertyChangedCallback(() -> {
if(this.mOnItemChecked != null) this.mOnItemChecked.run(ordine);
});
holder.binding.getRoot().setOnClickListener(v -> { holder.binding.getRoot().setOnClickListener(v -> {
ordine.setSelected(!ordine.isSelected()); ordine.getSelectedObservable().set(!ordine.getSelectedObservable().get());
}); });
holder.binding.accettazioneMainListGroupItemContainerCheckBox.setChecked(ordine.isSelected());
//Bindable to View
ordine.selected.addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() {
@Override
public void onPropertyChanged(Observable sender, int propertyId) {
if(holder.binding.accettazioneMainListGroupItemContainerCheckBox.getTag().equals(ordine.getNumero())) {
holder.binding.accettazioneMainListGroupItemContainerCheckBox.setChecked(((BindableBoolean) sender).get());
}
}
});
//View to Bindable
holder.binding.accettazioneMainListGroupItemContainerCheckBox.setOnCheckedChangeListener((buttonView, isChecked) -> {
ordine.setSelected(isChecked);
mOnSingleSelectionChanged.run(ordine);
});
} }
@Override @Override
public boolean onPlaceSubheaderBetweenItems(int position) { public boolean onPlaceSubheaderBetweenItems(int position) {
return !this.mDataset.get(position).getRagSocOrd().equalsIgnoreCase(this.mDataset.get(position + 1).getRagSocOrd()); if (getItemSize() == 1) return true;
else if (getItemSize() > 1) {
MainListAccettazioneListModel compare1 = this.mDataset.get(position);
MainListAccettazioneListModel compare2 = this.mDataset.get(position + 1);
if (UtilityString.equalsIgnoreCase(compare1.getGroupTitle(), compare2.getGroupTitle())) {
return false;
}
}
return true;
} }
@Override @Override
@ -182,11 +146,4 @@ public class MainListAccettazioneAdapter extends SectionedRecyclerViewAdapter<Ma
return mDataset.size(); return mDataset.size();
} }
@Override
public String getSectionTitle(int position) {
return null;
}
} }

View File

@ -0,0 +1,26 @@
package it.integry.integrywmsnative.gest.accettazione.core;
public class MainListAccettazioneClienteListModel {
private String primaryText;
private String rightText;
public String getPrimaryText() {
return primaryText;
}
public MainListAccettazioneClienteListModel setPrimaryText(String primaryText) {
this.primaryText = primaryText;
return this;
}
public String getRightText() {
return rightText;
}
public MainListAccettazioneClienteListModel setRightText(String rightText) {
this.rightText = rightText;
return this;
}
}

View File

@ -0,0 +1,70 @@
package it.integry.integrywmsnative.gest.accettazione.core;
import java.util.List;
import it.integry.integrywmsnative.core.di.BindableBoolean;
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO;
public class MainListAccettazioneListModel {
private String groupTitle;
private String description;
private boolean hidden;
private BindableBoolean selected = new BindableBoolean();
private OrdineAccettazioneInevasoDTO originalModel;
private List<MainListAccettazioneClienteListModel> clientiListModel;
public String getGroupTitle() {
return groupTitle;
}
public MainListAccettazioneListModel setGroupTitle(String groupTitle) {
this.groupTitle = groupTitle;
return this;
}
public String getDescription() {
return description;
}
public MainListAccettazioneListModel setDescription(String description) {
this.description = description;
return this;
}
public boolean isHidden() {
return hidden;
}
public MainListAccettazioneListModel setHidden(boolean hidden) {
this.hidden = hidden;
return this;
}
public BindableBoolean getSelectedObservable() {
return selected;
}
public OrdineAccettazioneInevasoDTO getOriginalModel() {
return originalModel;
}
public MainListAccettazioneListModel setOriginalModel(OrdineAccettazioneInevasoDTO originalModel) {
this.originalModel = originalModel;
return this;
}
public List<MainListAccettazioneClienteListModel> getClientiListModel() {
return clientiListModel;
}
public MainListAccettazioneListModel setClientiListModel(List<MainListAccettazioneClienteListModel> clientiListModel) {
this.clientiListModel = clientiListModel;
return this;
}
}

View File

@ -1,481 +0,0 @@
package it.integry.integrywmsnative.gest.accettazione.dto;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.Log;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.utility.UtilityDate;
/**
* Created by GiuseppeS on 06/03/2018.
*/
public class OrdineAccettazioneDTO implements Parcelable {
private String ragSoc;
private int numero;
private String data;
private String gestione;
private String codMdep;
private String codAnag;
private String codVdes;
private String termCons;
private ArrayList<Riga> ordini;
private String codAlis;
private String rifOrd;
public static class Riga implements Parcelable {
private Float qtaOrd; //QTA ORDINATA (tutta la qta ordiata)
public Float qtaRiservate; //QTA COLLI (tutta la qta già accantonata nei colli
private Float qtaEvasa; //QTA EVASA ORDINE (qta con documento)
//public Float qtaDaEvadere; //qta_ord - qta_evasa - qta_colli
public int rigaOrd;
public String codJcom;
public String ragSocCom;
public String descrizioneCommessa;
public MtbAart mtbAart;
private PickingObjectDTO[] colliAssociati;
private Boolean hidden = null;
private Boolean tempHidden = null;
private String partitaMag;
private String codArtFor;
public String descrizioneEstesa;
public String codAlis;
public int numOrd;
public String dataOrd;
public String gestioneOrd;
public String dataCons;
public BigDecimal getQtaDaEvadere() {
return this.getQtaOrd().subtract(this.getQtaEvasa()).subtract(this.getQtaRiservate());
}
public BigDecimal getQtaOrd() {
return qtaOrd != null ? new BigDecimal(qtaOrd) : BigDecimal.ZERO;
}
public BigDecimal getQtaRiservate() {
return qtaRiservate != null ? new BigDecimal(qtaRiservate) : BigDecimal.ZERO;
}
public BigDecimal getQtaEvasa() {
return qtaEvasa != null ? new BigDecimal(qtaEvasa) : BigDecimal.ZERO;
}
public int getRigaOrd() {
return rigaOrd;
}
public String getCodJcom() {
return codJcom;
}
public String getRagSocCom() {
return ragSocCom;
}
public String getDescrizioneCommessa() {
return descrizioneCommessa;
}
public MtbAart getMtbAart() {
return mtbAart;
}
public PickingObjectDTO[] getColliAssociati() {
return colliAssociati;
}
public Boolean isHidden() {
return hidden;
}
public Boolean isTempHidden() {
return tempHidden;
}
public String getPartitaMag() {
return partitaMag;
}
public String getCodArtFor() {
return codArtFor;
}
public String getDescrizioneEstesa() {
return descrizioneEstesa;
}
public String getCodAlis() {
return codAlis;
}
public int getNumOrd() {
return numOrd;
}
public String getGestioneOrd() {
return gestioneOrd;
}
public GestioneEnum getGestioneOrdEnum() {
return GestioneEnum.fromString(gestioneOrd);
}
public String getDataCons() {
return dataCons;
}
public String getDataOrdS() {
return this.dataOrd;
}
public Date getDataOrdD() {
return UtilityDate.recognizeDateWithExceptionHandler(getDataOrdS());
}
public Riga setQtaOrd(Float qtaOrd) {
this.qtaOrd = qtaOrd;
return this;
}
public Riga setQtaRiservate(BigDecimal qtaRiservate) {
this.qtaRiservate = qtaRiservate.floatValue();
return this;
}
public Riga setQtaEvasa(Float qtaEvasa) {
this.qtaEvasa = qtaEvasa;
return this;
}
public Riga setRigaOrd(int rigaOrd) {
this.rigaOrd = rigaOrd;
return this;
}
public Riga setCodJcom(String codJcom) {
this.codJcom = codJcom;
return this;
}
public Riga setRagSocCom(String ragSocCom) {
this.ragSocCom = ragSocCom;
return this;
}
public Riga setDescrizioneCommessa(String descrizioneCommessa) {
this.descrizioneCommessa = descrizioneCommessa;
return this;
}
public Riga setMtbAart(MtbAart mtbAart) {
this.mtbAart = mtbAart;
return this;
}
public Riga setHidden(boolean hidden) {
this.hidden = hidden;
return this;
}
public Riga setTempHidden(boolean hidden) {
this.tempHidden = hidden;
return this;
}
public Riga setPartitaMag(String partitaMag) {
this.partitaMag = partitaMag;
return this;
}
public Riga setCodArtFor(String codArtFor) {
this.codArtFor = codArtFor;
return this;
}
public Riga setDescrizioneEstesa(String descrizioneEstesa) {
this.descrizioneEstesa = descrizioneEstesa;
return this;
}
public Riga setCodAlis(String codAlis) {
this.codAlis = codAlis;
return this;
}
public Riga setNumOrd(int numOrd) {
this.numOrd = numOrd;
return this;
}
public Riga setDataOrd(String dataOrd) {
this.dataOrd = dataOrd;
return this;
}
public Riga setGestioneOrd(String gestioneOrd) {
this.gestioneOrd = gestioneOrd;
return this;
}
public Riga setDataCons(String dataCons) {
this.dataCons = dataCons;
return this;
}
public Riga(){}
protected Riga(Parcel in) {
qtaOrd = in.readByte() == 0x00 ? null : in.readFloat();
qtaRiservate = in.readByte() == 0x00 ? null : in.readFloat();
rigaOrd = in.readInt();
codJcom = in.readString();
ragSocCom = in.readString();
descrizioneCommessa = in.readString();
mtbAart = (MtbAart) in.readValue(MtbAart.class.getClassLoader());
hidden = in.readByte() == 0x00 ? null : in.readByte() != 0x00;
partitaMag = in.readString();
codArtFor = in.readString();
descrizioneEstesa = in.readString();
codAlis = in.readString();
numOrd = in.readInt();
dataOrd = in.readString();
gestioneOrd = in.readString();
dataCons = in.readString();
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
if (qtaOrd == null) {
dest.writeByte((byte) (0x00));
} else {
dest.writeByte((byte) (0x01));
dest.writeFloat(qtaOrd);
}
if (qtaRiservate == null) {
dest.writeByte((byte) (0x00));
} else {
dest.writeByte((byte) (0x01));
dest.writeFloat(qtaRiservate);
}
dest.writeInt(rigaOrd);
dest.writeString(codJcom);
dest.writeString(ragSocCom);
dest.writeString(descrizioneCommessa);
dest.writeValue(mtbAart);
if (hidden == null) {
dest.writeByte((byte) (0x00));
} else {
dest.writeByte((byte) (0x01));
dest.writeByte((byte) (hidden ? 0x01 : 0x00));
}
dest.writeString(partitaMag);
dest.writeString(codArtFor);
dest.writeString(descrizioneEstesa);
dest.writeString(codAlis);
dest.writeInt(numOrd);
dest.writeString(dataOrd);
dest.writeString(gestioneOrd);
dest.writeString(dataCons);
}
@SuppressWarnings("unused")
public static final Parcelable.Creator<Riga> CREATOR = new Parcelable.Creator<Riga>() {
@Override
public Riga createFromParcel(Parcel in) {
return new Riga(in);
}
@Override
public Riga[] newArray(int size) {
return new Riga[size];
}
};
}
public static class PickingObjectDTO extends MtbColt{
public boolean hidden = false;
}
public OrdineAccettazioneDTO() {}
protected OrdineAccettazioneDTO(Parcel in) {
ragSoc = in.readString();
numero = in.readInt();
data = in.readString();
gestione = in.readString();
codMdep = in.readString();
codAnag = in.readString();
codVdes = in.readString();
termCons = in.readString();
codAlis = in.readString();
rifOrd = in.readString();
if (in.readByte() == 0x01) {
ordini = new ArrayList<Riga>();
in.readList(ordini, Riga.class.getClassLoader());
} else {
ordini = null;
}
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(ragSoc);
dest.writeInt(numero);
dest.writeString(data);
dest.writeString(gestione);
dest.writeString(codMdep);
dest.writeString(codAnag);
dest.writeString(codVdes);
dest.writeString(termCons);
dest.writeString(codAlis);
dest.writeString(rifOrd);
if (ordini == null) {
dest.writeByte((byte) (0x00));
} else {
dest.writeByte((byte) (0x01));
dest.writeList(ordini);
}
}
@SuppressWarnings("unused")
public static final Parcelable.Creator<OrdineAccettazioneDTO> CREATOR = new Parcelable.Creator<OrdineAccettazioneDTO>() {
@Override
public OrdineAccettazioneDTO createFromParcel(Parcel in) {
return new OrdineAccettazioneDTO(in);
}
@Override
public OrdineAccettazioneDTO[] newArray(int size) {
return new OrdineAccettazioneDTO[size];
}
};
public String getRagSoc() {
return ragSoc;
}
public OrdineAccettazioneDTO setRagSoc(String ragSoc) {
this.ragSoc = ragSoc;
return this;
}
public int getNumero() {
return numero;
}
public OrdineAccettazioneDTO setNumero(int numero) {
this.numero = numero;
return this;
}
public String getData() {
return data;
}
public OrdineAccettazioneDTO setData(String data) {
this.data = data;
return this;
}
public String getGestione() {
return gestione;
}
public OrdineAccettazioneDTO setGestione(String gestione) {
this.gestione = gestione;
return this;
}
public String getCodMdep() {
return codMdep;
}
public OrdineAccettazioneDTO setCodMdep(String codMdep) {
this.codMdep = codMdep;
return this;
}
public String getCodAnag() {
return codAnag;
}
public OrdineAccettazioneDTO setCodAnag(String codAnag) {
this.codAnag = codAnag;
return this;
}
public String getCodVdes() {
return codVdes;
}
public OrdineAccettazioneDTO setCodVdes(String codVdes) {
this.codVdes = codVdes;
return this;
}
public String getTermCons() {
return termCons;
}
public OrdineAccettazioneDTO setTermCons(String termCons) {
this.termCons = termCons;
return this;
}
public ArrayList<Riga> getOrdini() {
return ordini;
}
public OrdineAccettazioneDTO setOrdini(ArrayList<Riga> ordini) {
this.ordini = ordini;
return this;
}
public String getCodAlis() {
return codAlis;
}
public OrdineAccettazioneDTO setCodAlis(String codAlis) {
this.codAlis = codAlis;
return this;
}
public String getRifOrd() {
return rifOrd;
}
public OrdineAccettazioneDTO setRifOrd(String rifOrd) {
this.rifOrd = rifOrd;
return this;
}
}

View File

@ -22,6 +22,22 @@ import retrofit2.Response;
public class OrdiniAccettazioneRESTConsumer extends _BaseRESTConsumer { public class OrdiniAccettazioneRESTConsumer extends _BaseRESTConsumer {
public void getOrdiniInevasi(String codMdep, RunnableArgs<List<OrdineAccettazioneInevasoDTO>> onComplete, RunnableArgs<Exception> onFailed) {
OrdiniAccettazioneRESTConsumerService service = RESTBuilder.getService(OrdiniAccettazioneRESTConsumerService.class);
service.listOrdiniInevasi(codMdep, "A").enqueue(new Callback<>() {
@Override
public void onResponse(Call<ServiceRESTResponse<List<OrdineAccettazioneInevasoDTO>>> call, Response<ServiceRESTResponse<List<OrdineAccettazioneInevasoDTO>>> response) {
analyzeAnswer(response, "getOrdiniInevasi", onComplete, onFailed);
}
@Override
public void onFailure(Call<ServiceRESTResponse<List<OrdineAccettazioneInevasoDTO>>> call, Throwable t) {
onFailed.run(new Exception(t));
}
});
}
public void retrievePickingListNew(List<OrdineAccettazioneInevasoDTO> orders, RunnableArgs<List<SitArtOrdDTO>> onComplete, RunnableArgs<Exception> onFailed) { public void retrievePickingListNew(List<OrdineAccettazioneInevasoDTO> orders, RunnableArgs<List<SitArtOrdDTO>> onComplete, RunnableArgs<Exception> onFailed) {
retrievePickingListNewStatic(orders, onComplete, onFailed); retrievePickingListNewStatic(orders, onComplete, onFailed);
} }

View File

@ -155,7 +155,6 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
OrdiniUscitaElencoAdapter ordiniUscitaElencoAdapter = OrdiniUscitaElencoAdapter ordiniUscitaElencoAdapter =
new OrdiniUscitaElencoAdapter(getActivity(), mOrdiniInevasiMutableData) new OrdiniUscitaElencoAdapter(getActivity(), mOrdiniInevasiMutableData)
.setEmptyView(this.mBindings.ordiniVenditaEmptyView)
.setOnGroupItemClicked(x -> { .setOnGroupItemClicked(x -> {
if (!canSelectMultipleClienti) { if (!canSelectMultipleClienti) {
Stream.of(mOrdiniInevasiMutableData) Stream.of(mOrdiniInevasiMutableData)
@ -182,6 +181,9 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
.anyMatch(y -> y.getSelectedObservable().get())); .anyMatch(y -> y.getSelectedObservable().get()));
}); });
ordiniUscitaElencoAdapter
.setEmptyView(this.mBindings.ordiniVenditaEmptyView);
this.mBindings.venditaMainList.setAdapter(ordiniUscitaElencoAdapter); this.mBindings.venditaMainList.setAdapter(ordiniUscitaElencoAdapter);
this.mBindings.venditaMainList.setLayoutManager(new LinearLayoutManager(getActivity())); this.mBindings.venditaMainList.setLayoutManager(new LinearLayoutManager(getActivity()));

View File

@ -10,28 +10,19 @@ import android.view.ViewGroup;
import androidx.core.content.res.ResourcesCompat; import androidx.core.content.res.ResourcesCompat;
import androidx.databinding.DataBindingUtil; import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableArrayList; import androidx.databinding.ObservableArrayList;
import androidx.databinding.ObservableList;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.zhukic.sectionedrecyclerview.SectionedRecyclerViewAdapter;
import java.util.ArrayList;
import java.util.List;
import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.OnListGeneralChangedCallback;
import it.integry.integrywmsnative.core.expansion.OnSingleClickListener; import it.integry.integrywmsnative.core.expansion.OnSingleClickListener;
import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.expansion.view.ExtendedSectionedRecyclerView;
import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.databinding.FragmentMainOrdiniUscitaListGroupModelBinding; import it.integry.integrywmsnative.databinding.FragmentMainOrdiniUscitaListGroupModelBinding;
import it.integry.integrywmsnative.databinding.FragmentMainOrdiniUscitaListModelBinding; import it.integry.integrywmsnative.databinding.FragmentMainOrdiniUscitaListModelBinding;
public class OrdiniUscitaElencoAdapter extends SectionedRecyclerViewAdapter<OrdiniUscitaElencoAdapter.SubheaderHolder, OrdiniUscitaElencoAdapter.SingleItemViewHolder> { public class OrdiniUscitaElencoAdapter extends ExtendedSectionedRecyclerView<OrdiniUscitaElencoListModel, OrdiniUscitaElencoAdapter.SubheaderHolder, OrdiniUscitaElencoAdapter.SingleItemViewHolder> {
private final Context mContext;
private final List<OrdiniUscitaElencoListModel> mDataset = new ArrayList<>();
private View mEmptyView;
private Context mContext;
private RunnableArgs<String> mOnGroupItemClicked; private RunnableArgs<String> mOnGroupItemClicked;
private RunnableArgs<OrdiniUscitaElencoListModel> mOnItemChecked; private RunnableArgs<OrdiniUscitaElencoListModel> mOnItemChecked;
@ -57,18 +48,8 @@ public class OrdiniUscitaElencoAdapter extends SectionedRecyclerViewAdapter<Ordi
} }
public OrdiniUscitaElencoAdapter(Context context, ObservableArrayList<OrdiniUscitaElencoListModel> mutableDataSet) { public OrdiniUscitaElencoAdapter(Context context, ObservableArrayList<OrdiniUscitaElencoListModel> mutableDataSet) {
this.mContext = context; super(mutableDataSet);
mContext = context;
mutableDataSet.addOnListChangedCallback(new OnListGeneralChangedCallback() {
@Override
public void onChanged(ObservableList sender) {
mDataset.clear();
mDataset.addAll(sender);
notifyDataSetChanged();
notifyDataChanged();
checkIfEmpty();
}
});
} }
public OrdiniUscitaElencoAdapter setOnGroupItemClicked(RunnableArgs<String> onGroupItemClicked) { public OrdiniUscitaElencoAdapter setOnGroupItemClicked(RunnableArgs<String> onGroupItemClicked) {
@ -81,19 +62,6 @@ public class OrdiniUscitaElencoAdapter extends SectionedRecyclerViewAdapter<Ordi
return this; return this;
} }
public OrdiniUscitaElencoAdapter setEmptyView(View emptyView) {
this.mEmptyView = emptyView;
this.checkIfEmpty();
return this;
}
private void checkIfEmpty() {
if (mEmptyView != null) {
final boolean emptyViewVisible = getItemCount() == 0;
mEmptyView.setVisibility(emptyViewVisible ? View.VISIBLE : View.GONE);
}
}
@Override @Override
public OrdiniUscitaElencoAdapter.SubheaderHolder onCreateSubheaderViewHolder(ViewGroup parent, int viewType) { public OrdiniUscitaElencoAdapter.SubheaderHolder onCreateSubheaderViewHolder(ViewGroup parent, int viewType) {

View File

@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<layout> <layout xmlns:app="http://schemas.android.com/apk/res-auto">
<data> <data>
<import type="it.integry.integrywmsnative.R" /> <import type="it.integry.integrywmsnative.R" />
<variable <variable
name="checkboxValue" name="selected"
type="it.integry.integrywmsnative.core.di.BindableBoolean" /> type="it.integry.integrywmsnative.core.di.BindableBoolean" />
@ -17,12 +17,13 @@
android:padding="8dp"> android:padding="8dp">
<CheckBox <androidx.appcompat.widget.AppCompatCheckBox
android:id="@+id/accettazione_main_list_group_item_container_checkBox" android:id="@+id/accettazione_main_list_group_item_container_checkBox"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
tools:layout_editor_absoluteX="0dp" tools:layout_editor_absoluteX="0dp"
tools:layout_editor_absoluteY="1dp" /> tools:layout_editor_absoluteY="1dp"
app:checked="@{selected}" />
<RelativeLayout <RelativeLayout
android:layout_width="match_parent" android:layout_width="match_parent"

View File

@ -1,29 +1,31 @@
<layout <layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"> xmlns:app="http://schemas.android.com/apk/res-auto">
<data> <data>
<import type="androidx.databinding.ObservableList"/>
<variable name="view" type="it.integry.integrywmsnative.gest.accettazione.MainAccettazioneFragment" /> <import type="androidx.databinding.ObservableList" />
<variable
name="view"
type="it.integry.integrywmsnative.gest.accettazione.MainAccettazioneFragment" />
</data> </data>
<FrameLayout <FrameLayout xmlns:fab="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
xmlns:fab="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="@color/full_white" android:background="@color/full_white"
tools:context="it.integry.integrywmsnative.gest.accettazione.MainAccettazioneFragment"> tools:context="it.integry.integrywmsnative.gest.accettazione.MainAccettazioneFragment">
<RelativeLayout <RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/accettazione_main_list"
android:scrollbars="vertical"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"/> android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/accettazione_main_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical" />
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
@ -56,40 +58,42 @@
<LinearLayout <LinearLayout
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center_horizontal" android:gravity="center_horizontal"
app:layout_constraintStart_toEndOf="@id/guideline_empty_left" android:orientation="vertical"
app:layout_constraintEnd_toStartOf="@id/guideline_empty_right" app:layout_constraintEnd_toStartOf="@id/guideline_empty_right"
app:layout_constraintStart_toEndOf="@id/guideline_empty_left"
app:layout_constraintTop_toTopOf="@id/guideline_empty_top"> app:layout_constraintTop_toTopOf="@id/guideline_empty_top">
<androidx.appcompat.widget.AppCompatImageView <androidx.appcompat.widget.AppCompatImageView
android:layout_width="72dp" android:layout_width="72dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:src="@drawable/ic_playlist_add_check_24dp" android:adjustViewBounds="true"
android:adjustViewBounds="true"/> android:src="@drawable/ic_playlist_add_check_24dp" />
<androidx.appcompat.widget.AppCompatTextView <androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:gravity="center_horizontal" android:gravity="center_horizontal"
android:text="@string/no_orders_found_message"
android:textColor="@android:color/black" android:textColor="@android:color/black"
android:textSize="18sp" android:textSize="18sp" />
android:text="@string/no_orders_found_message"/>
</LinearLayout> </LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
</RelativeLayout> </RelativeLayout>
<com.google.android.material.floatingactionbutton.FloatingActionButton <com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/accettazione_main_fab" android:id="@+id/accettazione_main_fab"
style="@style/Widget.MaterialComponents.FloatingActionButton"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="bottom|end" android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin" android:layout_margin="@dimen/fab_margin"
android:onClick="@{() -> view.dispatchOrders()}"
android:tint="@android:color/white" android:tint="@android:color/white"
style="@style/Widget.MaterialComponents.FloatingActionButton" app:srcCompat="@drawable/ic_check_black_24dp"
app:srcCompat="@drawable/ic_check_black_24dp" /> app:visibility="@{view.fabVisible}" />
</FrameLayout> </FrameLayout>
</layout> </layout>

View File

@ -44,7 +44,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@android:color/transparent" android:background="@android:color/transparent"
app:checked="@{selected}"/> app:checked="@{selected}" />
<RelativeLayout <RelativeLayout
android:layout_width="wrap_content" android:layout_width="wrap_content"