Refactoring accettazione ordini produzione

This commit is contained in:
Giuseppe Scorrano 2021-08-06 13:28:56 +02:00
parent 627d3646a6
commit 18b4b08e1b
16 changed files with 625 additions and 452 deletions

View File

@ -23,6 +23,8 @@ import it.integry.integrywmsnative.gest.picking_libero.PickingLiberoComponent;
import it.integry.integrywmsnative.gest.picking_libero.PickingLiberoModule;
import it.integry.integrywmsnative.gest.picking_resi.PickingResiComponent;
import it.integry.integrywmsnative.gest.picking_resi.PickingResiModule;
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.ProdOrdineProduzioneElencoComponent;
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.ProdOrdineProduzioneElencoModule;
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.ProdFabbisognoLineeProdComponent;
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.ProdFabbisognoLineeProdModule;
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.dialog_ask_mag_prossimita.DialogAskMagazzinoProssimitaComponent;
@ -85,7 +87,8 @@ import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCr
VersamentoMerceModule.class,
DialogAskMagazzinoProssimitaModule.class,
DialogChooseBatchLotModule.class,
DialogRowInfoProdFabbisognoLineeProdModule.class
DialogRowInfoProdFabbisognoLineeProdModule.class,
ProdOrdineProduzioneElencoModule.class
})
public interface MainApplicationComponent {
@ -116,6 +119,7 @@ public interface MainApplicationComponent {
DialogRowInfoProdFabbisognoLineeProdComponent.Factory dialogRowInfoProdFabbisognoLineeProdComponent();
ProdRientroMerceComponent.Factory prodRientroMerceComponent();
ProdRientroMerceOrderDetailComponent.Factory prodRientroMerceOrderDetailComponent();
ProdOrdineProduzioneElencoComponent.Factory prodOrdineProduzioneElencoComponent();
void inject(MainApplication mainApplication);

View File

@ -447,10 +447,6 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer {
}
public void getMultipleByTestate(List<MtbColt> testate, boolean onlyResiduo, RunnableArgs<List<MtbColt>> onComplete, RunnableArgs<Exception> onFailed) {
ColliMagazzinoRESTConsumer.getMultipleByTestateStatic(testate, onlyResiduo, onComplete, onFailed);
}
public static void getMultipleByTestateStatic(List<MtbColt> testate, boolean onlyResiduo, RunnableArgs<List<MtbColt>> onComplete, RunnableArgs<Exception> onFailed) {
ArrayList<MtbColt> resultMtbColt = new ArrayList<>();
cyclicGetMultipleByTestate(testate.iterator(), onlyResiduo, resultMtbColt, () -> {
onComplete.run(resultMtbColt);
@ -458,9 +454,9 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer {
}
private static void cyclicGetMultipleByTestate(@NotNull Iterator<MtbColt> sourceMtbColts, boolean onlyResiduo, ArrayList<MtbColt> resultMtbColt, Runnable onComplete, RunnableArgs<Exception> onAbort) {
private void cyclicGetMultipleByTestate(@NotNull Iterator<MtbColt> sourceMtbColts, boolean onlyResiduo, ArrayList<MtbColt> resultMtbColt, Runnable onComplete, RunnableArgs<Exception> onAbort) {
if (sourceMtbColts.hasNext()) {
getByTestataStatic(sourceMtbColts.next(), onlyResiduo, false, mtbColt -> {
getByTestata(sourceMtbColts.next(), onlyResiduo, false, mtbColt -> {
resultMtbColt.add(mtbColt);
cyclicGetMultipleByTestate(sourceMtbColts, onlyResiduo, resultMtbColt, onComplete, onAbort);
}, onAbort);
@ -476,14 +472,10 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer {
.setDataCollo(dataCollo)
.setSerCollo(serCollo);
ColliMagazzinoRESTConsumer.getByTestataStatic(mtbColtToRetrieve, onlyResiduo, throwExcIfNull, onComplete, onFailed);
getByTestata(mtbColtToRetrieve, onlyResiduo, throwExcIfNull, onComplete, onFailed);
}
public void getByTestata(MtbColt testata, boolean onlyResiduo, boolean throwExcIfNull, RunnableArgs<MtbColt> onComplete, RunnableArgs<Exception> onFailed) {
ColliMagazzinoRESTConsumer.getByTestataStatic(testata, onlyResiduo, throwExcIfNull, onComplete, onFailed);
}
public static void getByTestataStatic(MtbColt testata, boolean onlyResiduo, boolean throwExcIfNull, RunnableArgs<MtbColt> onComplete, RunnableArgs<Exception> onFailed) {
testata.setMtbColr(new ObservableArrayList<>());

View File

@ -39,10 +39,6 @@ public class OrdiniAccettazioneRESTConsumer extends _BaseRESTConsumer {
public void retrievePickingListNew(List<OrdineAccettazioneInevasoDTO> orders, RunnableArgs<List<SitArtOrdDTO>> onComplete, RunnableArgs<Exception> onFailed) {
retrievePickingListNewStatic(orders, onComplete, onFailed);
}
public static void retrievePickingListNewStatic(List<OrdineAccettazioneInevasoDTO> orders, RunnableArgs<List<SitArtOrdDTO>> onComplete, RunnableArgs<Exception> onFailed) {
List<GetPickingListAccettazioneDTO> getPickingListDTOs = Stream.of(orders)
.map(x -> new GetPickingListAccettazioneDTO()
.setData(x.getData())
@ -63,7 +59,6 @@ public class OrdiniAccettazioneRESTConsumer extends _BaseRESTConsumer {
onFailed.run(new Exception(t));
}
});
}
}

View File

@ -288,26 +288,6 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
this.mViewModel.loadPicking(selectedOrders);
}
@Override
public void onLoadingStarted() {
BarcodeManager.disable();
this.openProgress();
}
@Override
public void onLoadingEnded() {
this.closeProgress();
BarcodeManager.enable();
}
@Override
public void onError(Exception ex) {
this.closeProgress();
UtilityExceptions.defaultException(getActivity(), ex, mCurrentProgress);
BarcodeManager.enable();
}
@Override
public void onOrderFiltered(List<OrdiniUscitaElencoDTO> filteredOrders) {
refreshList(filteredOrders);

View File

@ -0,0 +1,15 @@
package it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione;
import dagger.Subcomponent;
@Subcomponent
public interface ProdOrdineProduzioneElencoComponent {
@Subcomponent.Factory
interface Factory {
ProdOrdineProduzioneElencoComponent create();
}
void inject(ProdOrdineProduzioneElencoFragment prodOrdineProduzioneElencoFragment);
}

View File

@ -1,19 +1,17 @@
package it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.text.Html;
import android.text.SpannableString;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableArrayList;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
@ -23,22 +21,26 @@ import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R;
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.IFilterableFragment;
import it.integry.integrywmsnative.core.interfaces.IScrollableFragment;
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.UtilityProgress;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.databinding.FragmentProdOrdineProduzioneElencoBinding;
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO;
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.prod_accettazione_ord_produzione.core.OrdineProduzioneHelper;
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.core.OrdineProduzioneListAdapter;
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.ui.MainListProdOrdineProduzioneElencoClienteListModel;
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.ui.MainListProdOrdineProduzioneElencoListModel;
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.ui.OrdineProduzioneListAdapter;
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.dialog.DialogOrdineProduzioneFiltroAvanzato;
import it.integry.integrywmsnative.ui.ElevatedToolbar;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
@ -46,18 +48,19 @@ import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
/**
* A simple {@link Fragment} subclass.
*/
public class ProdOrdineProduzioneElencoFragment extends Fragment implements ITitledFragment, IScrollableFragment, IFilterableFragment {
public class ProdOrdineProduzioneElencoFragment extends BaseFragment implements ProdOrdineProduzioneElencoViewModel.Listener, ITitledFragment, IScrollableFragment, IFilterableFragment {
public BindableBoolean fabVisible = new BindableBoolean(false);
@Inject
ProdOrdineProduzioneElencoViewModel mViewModel;
private final List<Runnable> mOnPreDestroyList = new ArrayList<>();
private ElevatedToolbar mToolbar;
private FragmentProdOrdineProduzioneElencoBinding mBinding;
private OrdineProduzioneHelper mHelper;
private OrdineProduzioneListAdapter mAdapter;
private List<OrdineAccettazioneInevasoDTO> mOriginalOrderList;
private List<OrdineAccettazioneInevasoDTO> mRenderedOrderList = new ArrayList<>();
private final ObservableArrayList<MainListProdOrdineProduzioneElencoListModel> mOrdiniInevasiMutableData = new ObservableArrayList<>();
private AppCompatTextView mAppBarTitle;
@ -87,21 +90,30 @@ public class ProdOrdineProduzioneElencoFragment extends Fragment implements ITit
Bundle savedInstanceState) {
mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_prod_ordine_produzione_elenco, container, false);
MainApplication.appComponent
.prodOrdineProduzioneElencoComponent()
.create()
.inject(this);
mViewModel.setListener(this);
mBinding.setLifecycleOwner(this);
mBinding.setView(this);
mBinding.ordineProduzioneMainList.setLayoutManager(new LinearLayoutManager(getActivity()));
mBinding.ordineProduzioneMainFab.hide();
mBinding.ordineProduzioneMainFab.setOnClickListener(v -> {
this.onAccettazioneMainFabClick();
});
this.initRecyclerView();
mToolbar.setRecyclerView(mBinding.ordineProduzioneMainList);
init();
return mBinding.getRoot();
}
@Override
public void onStart() {
super.onStart();
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
mViewModel.init(codMdep);
}
@Override
public void onDestroy() {
super.onDestroy();
@ -117,88 +129,134 @@ public class ProdOrdineProduzioneElencoFragment extends Fragment implements ITit
mAppBarTitle.setText(context.getText(R.string.prod_ordine_produzione_title_fragment).toString());
}
private void init() {
final Dialog progress = UtilityProgress.createDefaultProgressDialog(getActivity());
mHelper = new OrdineProduzioneHelper(getActivity());
mHelper.loadOrdini(ordini -> {
if (ordini != null) {
Toast.makeText(getActivity(), "Caricati " + ordini.size() + " ordini", Toast.LENGTH_LONG).show();
mOriginalOrderList = ordini;
}
mBinding.ordiniProduzioneEmptyView.setVisibility(ordini != null && ordini.size() > 0 ? View.GONE : View.VISIBLE);
refreshRenderedOrdini(ordini);
initRecyclerView();
progress.dismiss();
}, ex -> {
progress.dismiss();
String errorMessage = CommonRESTException.tryRecognizeThenGetMessage(ex);
if (errorMessage == null) errorMessage = ex.getMessage();
DialogSimpleMessageView
.makeErrorDialog(new SpannableString(errorMessage), null, null)
.show(getActivity().getSupportFragmentManager(), "tag");
}
);
}
@Override
public void setScrollToolbar(ElevatedToolbar toolbar) {
mToolbar = toolbar;
}
private void initRecyclerView() {
mAdapter = new OrdineProduzioneListAdapter(getActivity(), mRenderedOrderList, onSingleSelectionChanged);
mBinding.ordineProduzioneMainList.setAdapter(mAdapter);
this.mViewModel.getOrderList().observe(getViewLifecycleOwner(), this::refreshList);
mBinding.ordineProduzioneMainList.setLayoutManager(new LinearLayoutManager(getActivity()));
OrdineProduzioneListAdapter adapter = new OrdineProduzioneListAdapter(getActivity(), mOrdiniInevasiMutableData)
.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(mBinding.ordiniProduzioneEmptyView);
mBinding.ordineProduzioneMainList.setAdapter(adapter);
mToolbar.setRecyclerView(mBinding.ordineProduzioneMainList);
}
private void refreshRenderedOrdini(List<OrdineAccettazioneInevasoDTO> ordini) {
private void refreshList(List<OrdineAccettazioneInevasoDTO> filteredList) {
mRenderedOrderList.clear();
if (ordini != null) mRenderedOrderList.addAll(ordini);
}
List<OrdineAccettazioneInevasoDTO> tmpList = null;
private void refreshRecyclerView() {
mAdapter.updateItems(mRenderedOrderList);
}
private RunnableArgs<OrdineAccettazioneInevasoDTO> onSingleSelectionChanged = dto -> {
List<OrdineAccettazioneInevasoDTO> selectedOrders = mHelper.getSelectedOrders(mOriginalOrderList);
if (dto.isSelected()) {
Stream.of(selectedOrders)
.filter(x -> !x.getCodAnagOrd().equalsIgnoreCase(dto.getCodAnagOrd()))
.forEach(x -> x.setSelected(false));
}
if (selectedOrders != null && selectedOrders.size() > 0) {
mBinding.ordineProduzioneMainFab.show();
if(filteredList != null) {
tmpList = filteredList;
} else if (mAppliedFilterViewModel != null) {
// mAppliedFilterViewModel.init(mViewModel.getOrderList().getValue());
// mAppliedFilterViewModel.applyAllTests();
// tmpList = mAppliedFilterViewModel.getMutableFilteredOrderList().getValue();
} else {
mBinding.ordineProduzioneMainFab.hide();
tmpList = mViewModel.getOrderList().getValue();
}
this.mOrdiniInevasiMutableData.clear();
this.mOrdiniInevasiMutableData.addAll(convertDataModelToListModel(tmpList));
}
private List<MainListProdOrdineProduzioneElencoListModel> convertDataModelToListModel(List<OrdineAccettazioneInevasoDTO> dataList) {
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 -> {
MainListProdOrdineProduzioneElencoListModel listModel = new MainListProdOrdineProduzioneElencoListModel();
listModel.setOriginalModel(x);
listModel.setGroupTitle(x.getRagSocOrd());
listModel.setDescription(String.format(getString(R.string.ord_acq_testata), x.getNumero().toString(), UtilityDate.formatDate(x.getDataD(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)));
List<MainListProdOrdineProduzioneElencoClienteListModel> clienti = Stream.of(dataList)
.filter(y -> y.getBarcode().equals(x.getBarcode()))
.map(y -> new MainListProdOrdineProduzioneElencoClienteListModel()
.setPrimaryText(y.getRifOrd())
.setRightText(y.getCodJcom()))
.toList();
listModel.setClientiListModel(clienti);
return listModel;
})
.toList();
}
};
private void onAccettazioneMainFabClick() {
List<OrdineAccettazioneInevasoDTO> selectedOrders = mHelper.getSelectedOrders(mOriginalOrderList);
public void dispatchOrders() {
List<OrdineAccettazioneInevasoDTO> selectedOrders = Stream.of(this.mOrdiniInevasiMutableData)
.filter(x -> x.getSelectedObservable().get())
.map(MainListProdOrdineProduzioneElencoListModel::getOriginalModel)
.toList();
final Dialog progress = UtilityProgress.createDefaultProgressDialog(getActivity());
OrdiniAccettazioneRESTConsumer.retrievePickingListNewStatic(selectedOrders, sitArtOrds -> {
progress.dismiss();
this.mViewModel.loadPicking(selectedOrders);
}
long artsCounter = Stream.of(sitArtOrds)
@Override
public void onFilterClick() {
// DialogOrdineProduzioneFiltroAvanzato.make(getActivity(), mOriginalOrderList, mAppliedFilterViewModel, (filteredOrderList, filter) -> {
// mAppliedFilterViewModel = filter;
//
// if (filteredOrderList != null) {
// refreshList(filteredOrderList);
// }
//
// }).show();
}
@Override
public void addOnPreDestroy(Runnable 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(sitArtOrds)
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 />" +
@ -206,8 +264,8 @@ public class ProdOrdineProduzioneElencoFragment extends Fragment implements ITit
null,
() -> {
String cacheSitArtItemID = DataCache.addItem(sitArtOrds);
String cacheOrdersItemID = DataCache.addItem(selectedOrders);
String cacheSitArtItemID = DataCache.addItem(sitArts);
String cacheOrdersItemID = DataCache.addItem(orders);
Intent myIntent = new Intent(getActivity(), AccettazionePickingActivity.class);
myIntent.putExtra("keyOrders", cacheOrdersItemID);
@ -215,46 +273,5 @@ public class ProdOrdineProduzioneElencoFragment extends Fragment implements ITit
getActivity().startActivity(myIntent);
}).show(getActivity().getSupportFragmentManager(), "tag");
},
ex -> {
// Toast.makeText(getActivity(), errorMessage, Toast.LENGTH_LONG).show();
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");
});
}
@Override
public void onFilterClick() {
DialogOrdineProduzioneFiltroAvanzato.make(getActivity(), mOriginalOrderList, mAppliedFilterViewModel, (filteredOrderList, filter) -> {
mAppliedFilterViewModel = filter;
if (filteredOrderList != null) {
refreshOrdini(filteredOrderList);
refreshRecyclerView();
}
}).show();
}
public void refreshOrdini(List<OrdineAccettazioneInevasoDTO> ordini) {
mRenderedOrderList.clear();
mRenderedOrderList.addAll(ordini);
}
@Override
public void addOnPreDestroy(Runnable onPreDestroy) {
this.mOnPreDestroyList.add(onPreDestroy);
}
}

View File

@ -0,0 +1,21 @@
package it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione;
import dagger.Module;
import dagger.Provides;
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.rest.ProdOrdineProduzioneRESTConsumer;
@Module(subcomponents = ProdOrdineProduzioneElencoComponent.class)
public class ProdOrdineProduzioneElencoModule {
@Provides
ProdOrdineProduzioneRESTConsumer providesProdOrdineProduzioneRESTConsumer() {
return new ProdOrdineProduzioneRESTConsumer();
}
@Provides
ProdOrdineProduzioneElencoViewModel providesProdOrdineProduzioneElencoViewModel(ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer, ProdOrdineProduzioneRESTConsumer prodOrdineProduzioneRESTConsumer) {
return new ProdOrdineProduzioneElencoViewModel(colliMagazzinoRESTConsumer, prodOrdineProduzioneRESTConsumer);
}
}

View File

@ -0,0 +1,100 @@
package it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione;
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.core.rest.consumers.ColliMagazzinoRESTConsumer;
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO;
import it.integry.integrywmsnative.gest.accettazione.dto.SitArtOrdDTO;
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.rest.ProdOrdineProduzioneRESTConsumer;
public class ProdOrdineProduzioneElencoViewModel {
private final ColliMagazzinoRESTConsumer mColliMagazzinoRESTConsumer;
private final ProdOrdineProduzioneRESTConsumer mProdOrdineProduzioneRESTConsumer;
private final MutableLiveData<List<OrdineAccettazioneInevasoDTO>> mOrderList = new MutableLiveData<>();
private Listener mListener;
private String codMdep;
@Inject
public ProdOrdineProduzioneElencoViewModel(ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer, ProdOrdineProduzioneRESTConsumer prodOrdineProduzioneRESTConsumer) {
this.mColliMagazzinoRESTConsumer = colliMagazzinoRESTConsumer;
this.mProdOrdineProduzioneRESTConsumer = prodOrdineProduzioneRESTConsumer;
}
public void init(String codMdep) {
this.codMdep = codMdep;
this.sendOnLoadingStarted();
new Thread(() -> {
mProdOrdineProduzioneRESTConsumer.getOrdiniInevasi(codMdep, orderList -> {
this.mOrderList.setValue(orderList);
this.sendOnLoadingEnded();
}, this::sendError);
}).start();
}
public void loadPicking(List<OrdineAccettazioneInevasoDTO> selectedOrders) {
this.sendOnLoadingStarted();
new Thread(() -> {
this.mProdOrdineProduzioneRESTConsumer.retrievePickingListNew(selectedOrders, sitArtOrds -> {
this.sendOnOrdersDispatched(selectedOrders, sitArtOrds);
this.sendOnLoadingEnded();
}, this::sendError);
}).start();
}
public MutableLiveData<List<OrdineAccettazioneInevasoDTO>> getOrderList() {
return mOrderList;
}
public ProdOrdineProduzioneElencoViewModel 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,70 +0,0 @@
package it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.core;
import android.content.Context;
import android.util.Log;
import com.annimon.stream.Stream;
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;
public class OrdineProduzioneHelper {
private Context mContext;
public OrdineProduzioneHelper(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, "P").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 {
Log.e("Accettazione", response.body().getErrorMessage());
onFailed.run(new Exception(response.body().getErrorMessage()));
}
} else {
Log.e("Accettazione", response.message());
onFailed.run(new Exception(response.message()));
}
} else {
Log.e("Accettazione", "Status " + response.code() + ": " + response.message());
onFailed.run(new Exception("Status " + response.code() + ": " + response.message()));
}
}
@Override
public void onFailure(Call<ServiceRESTResponse<List<OrdineAccettazioneInevasoDTO>>> call, Throwable t) {
Log.e("Produzione", t.toString());
onFailed.run(new Exception(t));
}
});
}
public List<OrdineAccettazioneInevasoDTO> getSelectedOrders(List<OrdineAccettazioneInevasoDTO> ordiniList){
return Stream.of(ordiniList)
.filter(OrdineAccettazioneInevasoDTO::isSelected)
.toList();
}
}

View File

@ -1,196 +0,0 @@
package it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.core;
import android.content.Context;
import android.text.Html;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.Observable;
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.core.di.BindableBoolean;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.databinding.FragmentProdOrdineProduzioneListGroupClientiBinding;
import it.integry.integrywmsnative.databinding.FragmentProdOrdineProduzioneListGroupModelBinding;
import it.integry.integrywmsnative.databinding.FragmentProdOrdineProduzioneListModelBinding;
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO;
import it.integry.integrywmsnative.ui.fastscroll.SectionTitleProvider;
public class OrdineProduzioneListAdapter extends SectionedRecyclerViewAdapter<OrdineProduzioneListAdapter.SubheaderHolder, OrdineProduzioneListAdapter.SingleItemViewHolder> implements SectionTitleProvider {
private Context mContext;
private List<OrdineAccettazioneInevasoDTO> mOriginalDataset;
private List<OrdineAccettazioneInevasoDTO> mDataset;
private RunnableArgs<OrdineAccettazioneInevasoDTO> mOnSingleSelectionChanged;
static class SubheaderHolder extends RecyclerView.ViewHolder {
FragmentProdOrdineProduzioneListModelBinding binding;
SubheaderHolder(FragmentProdOrdineProduzioneListModelBinding binding) {
super(binding.getRoot());
this.binding = binding;
}
}
static class SingleItemViewHolder extends RecyclerView.ViewHolder {
FragmentProdOrdineProduzioneListGroupModelBinding binding;
SingleItemViewHolder(FragmentProdOrdineProduzioneListGroupModelBinding binding) {
super(binding.getRoot());
this.binding = binding;
}
}
public OrdineProduzioneListAdapter(Context context, List<OrdineAccettazioneInevasoDTO> myDataset, RunnableArgs<OrdineAccettazioneInevasoDTO> onSingleSelectionChanged) {
mContext = context;
mOriginalDataset = myDataset;
mDataset = orderItems(myDataset);
mOnSingleSelectionChanged = onSingleSelectionChanged;
}
public void updateItems(List<OrdineAccettazioneInevasoDTO> updatedDataset) {
mDataset.clear();
mDataset.addAll(orderItems(updatedDataset));
notifyDataSetChanged();
notifyDataChanged();
}
private List<OrdineAccettazioneInevasoDTO> orderItems(List<OrdineAccettazioneInevasoDTO> dataset) {
return Stream.of(dataset)
.distinctBy(OrdineAccettazioneInevasoDTO::getBarcode)
.sortBy(x -> x.getRagSocOrd() + (x.getDataConsD() != null ? UtilityDate.formatDate(x.getDataConsD(), UtilityDate.COMMONS_DATE_FORMATS.YMD_SLASH) : ""))
.toList();
}
@Override
public SubheaderHolder onCreateSubheaderViewHolder(ViewGroup parent, int viewType) {
FragmentProdOrdineProduzioneListModelBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.fragment_prod_ordine_produzione__list_model, parent, false);
return new SubheaderHolder(binding);
}
@Override
public SingleItemViewHolder onCreateItemViewHolder(ViewGroup parent, int viewType) {
FragmentProdOrdineProduzioneListGroupModelBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.fragment_prod_ordine_produzione__list_group_model, parent, false);
return new SingleItemViewHolder(binding);
}
@Override
public void onBindSubheaderViewHolder(OrdineProduzioneListAdapter.SubheaderHolder subheaderHolder, int nextItemPosition) {
subheaderHolder.binding.ordineProduzioneMainListGroupHeader.setText(mDataset.get(nextItemPosition).getRagSocOrd());
subheaderHolder.binding.getRoot().setOnClickListener(v -> {
boolean anySelected = Stream.of(mDataset)
.filter(x -> x.getCodAnagOrd().equals(mDataset.get(nextItemPosition).getCodAnagOrd()))
.anyMatch(OrdineAccettazioneInevasoDTO::isSelected);
Stream.of(mDataset)
.filter(x -> x.getCodAnagOrd().equals(mDataset.get(nextItemPosition).getCodAnagOrd()))
.forEach(x -> x.setSelected(!anySelected));
});
}
@Override
public void onBindItemViewHolder(OrdineProduzioneListAdapter.SingleItemViewHolder h, int itemPosition) {
final OrdineAccettazioneInevasoDTO ordine = mDataset.get(itemPosition);
final OrdineProduzioneListAdapter.SingleItemViewHolder holder = h;
holder.binding.ordineProduzioneMainListGroupItemContainerCheckBox.setTag(ordine.getNumero());
holder.binding.ordineProduzioneMainListGroupItemContainerCheckBox.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.ordineProduzioneMainListGroupItemContainerTestataOrd.setText(Html.fromHtml(testataOrdString));
holder.binding.ordineProduzioneMainListGroupItemContainerClientiOrd.removeAllViews();
List<OrdineAccettazioneInevasoDTO> clienti = Stream.of(mOriginalDataset)
.filter(x -> x.getBarcode().equals(ordine.getBarcode()))
.toList();
for (OrdineAccettazioneInevasoDTO cliente : clienti) {
FragmentProdOrdineProduzioneListGroupClientiBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.fragment_prod_ordine_produzione__list_group_clienti, holder.binding.ordineProduzioneMainListGroupItemContainerClientiOrd, false);
binding.ordineProduzioneMainListGroupClientiComm.setText(cliente.getRifOrd());
// if (!UtilityString.isNullOrEmpty(cliente.getDataConsS())) {
// binding.ordineProduzioneMainListGroupClientiDatacons.setText(UtilityDate.formatDate(cliente.getDataConsD(), UtilityDate.COMMONS_DATE_FORMATS.DMY_SLASH));
// } else {
// binding.ordineProduzioneMainListGroupClientiDatacons.setText("");
// }
if (!UtilityString.isNullOrEmpty(cliente.getCodJcom())) {
binding.ordineProduzioneMainListGroupClientiDatacons.setText(cliente.getCodJcom());
}
holder.binding.ordineProduzioneMainListGroupItemContainerClientiOrd.addView(binding.getRoot());
}
holder.binding.setCheckboxValue(ordine.selected);
holder.binding.getRoot().setOnClickListener(v -> {
ordine.setSelected(!ordine.isSelected());
});
holder.binding.ordineProduzioneMainListGroupItemContainerCheckBox.setChecked(ordine.isSelected());
//Bindable to View
ordine.selected.addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() {
@Override
public void onPropertyChanged(Observable sender, int propertyId) {
if(holder.binding.ordineProduzioneMainListGroupItemContainerCheckBox.getTag().equals(ordine.getNumero())) {
holder.binding.ordineProduzioneMainListGroupItemContainerCheckBox.setChecked(((BindableBoolean) sender).get());
}
}
});
//View to Bindable
holder.binding.ordineProduzioneMainListGroupItemContainerCheckBox.setOnCheckedChangeListener((buttonView, isChecked) -> {
ordine.setSelected(isChecked);
mOnSingleSelectionChanged.run(ordine);
});
}
@Override
public boolean onPlaceSubheaderBetweenItems(int position) {
return !this.mDataset.get(position).getRagSocOrd().equalsIgnoreCase(this.mDataset.get(position + 1).getRagSocOrd());
}
@Override
public int getItemSize() {
return mDataset.size();
}
@Override
public String getSectionTitle(int position) {
return null;
}
}

View File

@ -0,0 +1,64 @@
package it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.rest;
import com.annimon.stream.Stream;
import java.util.List;
import javax.inject.Singleton;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.rest.RESTBuilder;
import it.integry.integrywmsnative.core.rest.consumers._BaseRESTConsumer;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.core.utility.UtilityLogger;
import it.integry.integrywmsnative.gest.accettazione.dto.GetPickingListAccettazioneDTO;
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO;
import it.integry.integrywmsnative.gest.accettazione.dto.SitArtOrdDTO;
import it.integry.integrywmsnative.gest.accettazione.rest.OrdiniAccettazioneRESTConsumerService;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
@Singleton
public class ProdOrdineProduzioneRESTConsumer extends _BaseRESTConsumer {
public void getOrdiniInevasi(String codMdep, RunnableArgs<List<OrdineAccettazioneInevasoDTO>> onComplete, RunnableArgs<Exception> onFailed) {
OrdiniAccettazioneRESTConsumerService service = RESTBuilder.getService(OrdiniAccettazioneRESTConsumerService.class);
service.listOrdiniInevasi(codMdep, "P").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) {
List<GetPickingListAccettazioneDTO> getPickingListDTOs = Stream.of(orders)
.map(x -> new GetPickingListAccettazioneDTO()
.setData(x.getData())
.setGestione(x.getGestione())
.setNumero(x.getNumero()))
.toList();
OrdiniAccettazioneRESTConsumerService service = RESTBuilder.getService(OrdiniAccettazioneRESTConsumerService.class);
service.getArticoliFromOrdiniAccettazione(getPickingListDTOs).enqueue(new Callback<>() {
@Override
public void onResponse(Call<ServiceRESTResponse<List<SitArtOrdDTO>>> call, Response<ServiceRESTResponse<List<SitArtOrdDTO>>> response) {
analyzeAnswer(response, "retrieveListaArticoliFromOrdiniProduzione", onComplete, onFailed);
}
@Override
public void onFailure(Call<ServiceRESTResponse<List<SitArtOrdDTO>>> call, Throwable t) {
UtilityLogger.errorMe(new Exception(t));
onFailed.run(new Exception(t));
}
});
}
}

View File

@ -0,0 +1,25 @@
package it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.ui;
public class MainListProdOrdineProduzioneElencoClienteListModel {
private String primaryText;
private String rightText;
public String getPrimaryText() {
return primaryText;
}
public MainListProdOrdineProduzioneElencoClienteListModel setPrimaryText(String primaryText) {
this.primaryText = primaryText;
return this;
}
public String getRightText() {
return rightText;
}
public MainListProdOrdineProduzioneElencoClienteListModel setRightText(String rightText) {
this.rightText = rightText;
return this;
}
}

View File

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

View File

@ -0,0 +1,153 @@
package it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.ui;
import android.content.Context;
import android.text.Html;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableArrayList;
import androidx.recyclerview.widget.RecyclerView;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.OnSingleClickListener;
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.databinding.FragmentProdOrdineProduzioneListGroupClientiBinding;
import it.integry.integrywmsnative.databinding.FragmentProdOrdineProduzioneListGroupModelBinding;
import it.integry.integrywmsnative.databinding.FragmentProdOrdineProduzioneListModelBinding;
public class OrdineProduzioneListAdapter extends ExtendedSectionedRecyclerView<MainListProdOrdineProduzioneElencoListModel, OrdineProduzioneListAdapter.SubheaderHolder, OrdineProduzioneListAdapter.SingleItemViewHolder> {
private Context mContext;
private RunnableArgs<String> mOnGroupItemClicked;
private RunnableArgs<MainListProdOrdineProduzioneElencoListModel> mOnItemChecked;
static class SubheaderHolder extends RecyclerView.ViewHolder {
FragmentProdOrdineProduzioneListModelBinding binding;
SubheaderHolder(FragmentProdOrdineProduzioneListModelBinding binding) {
super(binding.getRoot());
this.binding = binding;
}
}
static class SingleItemViewHolder extends RecyclerView.ViewHolder {
FragmentProdOrdineProduzioneListGroupModelBinding binding;
SingleItemViewHolder(FragmentProdOrdineProduzioneListGroupModelBinding binding) {
super(binding.getRoot());
this.binding = binding;
}
}
public OrdineProduzioneListAdapter(Context context, ObservableArrayList<MainListProdOrdineProduzioneElencoListModel> myDataset) {
super(myDataset);
mContext = context;
}
public OrdineProduzioneListAdapter setOnGroupItemClicked(RunnableArgs<String> onGroupItemClicked) {
this.mOnGroupItemClicked = onGroupItemClicked;
return this;
}
public OrdineProduzioneListAdapter setOnItemChecked(RunnableArgs<MainListProdOrdineProduzioneElencoListModel> onItemChecked) {
this.mOnItemChecked = onItemChecked;
return this;
}
@Override
public SubheaderHolder onCreateSubheaderViewHolder(ViewGroup parent, int viewType) {
FragmentProdOrdineProduzioneListModelBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.fragment_prod_ordine_produzione__list_model, parent, false);
return new SubheaderHolder(binding);
}
@Override
public SingleItemViewHolder onCreateItemViewHolder(ViewGroup parent, int viewType) {
FragmentProdOrdineProduzioneListGroupModelBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.fragment_prod_ordine_produzione__list_group_model, parent, false);
return new SingleItemViewHolder(binding);
}
@Override
public void onBindSubheaderViewHolder(OrdineProduzioneListAdapter.SubheaderHolder subheaderHolder, int nextItemPosition) {
subheaderHolder.binding.ordineProduzioneMainListGroupHeader.setText(mDataset.get(nextItemPosition).getGroupTitle());
subheaderHolder.binding.getRoot().setOnClickListener(new OnSingleClickListener() {
@Override
public void onSingleClick(View v) {
if(mOnGroupItemClicked != null) mOnGroupItemClicked.run(mDataset.get(nextItemPosition).getGroupTitle());
}
});
}
@Override
public void onBindItemViewHolder(OrdineProduzioneListAdapter.SingleItemViewHolder holder, int itemPosition) {
final MainListProdOrdineProduzioneElencoListModel ordine = mDataset.get(itemPosition);
ordine.getSelectedObservable().resetOnPropertyChangedCallback();
holder.binding.ordineProduzioneMainListGroupItemContainerClientiOrd.removeAllViews();
holder.binding.ordineProduzioneMainListGroupItemContainerTestataOrd.setText(Html.fromHtml(ordine.getDescription()));
for (MainListProdOrdineProduzioneElencoClienteListModel cliente : ordine.getClientiListModel()) {
FragmentProdOrdineProduzioneListGroupClientiBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.fragment_prod_ordine_produzione__list_group_clienti, holder.binding.ordineProduzioneMainListGroupItemContainerClientiOrd, false);
binding.ordineProduzioneMainListGroupClientiComm.setText(cliente.getPrimaryText());
if (!UtilityString.isNullOrEmpty(cliente.getRightText())) {
binding.ordineProduzioneMainListGroupClientiDatacons.setText(cliente.getRightText());
} else {
binding.ordineProduzioneMainListGroupClientiDatacons.setText("");
}
holder.binding.ordineProduzioneMainListGroupItemContainerClientiOrd.addView(binding.getRoot());
}
holder.binding.setSelected(ordine.getSelectedObservable());
holder.binding.executePendingBindings();
holder.binding.ordineProduzioneMainListGroupItemContainerCheckBox.jumpDrawablesToCurrentState();
ordine.getSelectedObservable().addOnPropertyChangedCallback(() -> {
if(this.mOnItemChecked != null) this.mOnItemChecked.run(ordine);
});
holder.binding.getRoot().setOnClickListener(v -> {
ordine.getSelectedObservable().set(!ordine.getSelectedObservable().get());
});
}
@Override
public boolean onPlaceSubheaderBetweenItems(int position) {
if (getItemSize() == 1) return true;
else if (getItemSize() > 1) {
MainListProdOrdineProduzioneElencoListModel compare1 = this.mDataset.get(position);
MainListProdOrdineProduzioneElencoListModel compare2 = this.mDataset.get(position + 1);
if (UtilityString.equalsIgnoreCase(compare1.getGroupTitle(), compare2.getGroupTitle())) {
return false;
}
}
return true;
}
@Override
public int getItemSize() {
return mDataset.size();
}
}

View File

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

View File

@ -56,25 +56,25 @@
<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"
android:orientation="vertical"
app:layout_constraintEnd_toStartOf="@id/guideline_empty_right"
app:layout_constraintStart_toEndOf="@id/guideline_empty_left"
app:layout_constraintTop_toTopOf="@id/guideline_empty_top">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="72dp"
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
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:text="@string/no_orders_found_message"
android:textColor="@android:color/black"
android:textSize="18sp"
android:text="@string/no_orders_found_message"/>
android:textSize="18sp" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
@ -87,8 +87,10 @@
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin"
android:onClick="@{() -> view.dispatchOrders()}"
android:tint="@android:color/white"
app:srcCompat="@drawable/ic_check_black_24dp" />
app:srcCompat="@drawable/ic_check_black_24dp"
app:visibility="@{view.fabVisible}" />
</FrameLayout>
</layout>